> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ordergroove.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ordergroove.com/_mcp/server.

# List

GET https://restapi.ordergroove.com/entitlements/

List entitlements associated to merchant's customers. Only relevant for merchants offering digital products.

Reference: https://docs.ordergroove.com/reference/entitlements-service-api/entitlements/list

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: ordergroove-entitlements-service-api
  version: 1.0.0
paths:
  /entitlements/:
    get:
      operationId: list
      summary: List
      description: >-
        List entitlements associated to merchant's customers. Only relevant for
        merchants offering digital products.
      tags:
        - entitlements
      parameters:
        - name: merchant
          in: query
          description: Merchant ID
          required: true
          schema:
            type: string
        - name: merchant_user_id
          in: query
          description: >-
            Customer ID. If the request is made on behalf of a customer, only
            the entitlements tied to the calling customer are returned,
            regardless of the value provided in this field
          required: false
          schema:
            type: string
        - name: resource_public_id
          in: query
          description: Filters entitlements by a single resource public ID.
          required: false
          schema:
            type: string
        - name: resource_public_ids
          in: query
          description: >-
            Filters entitlements to those associated with the specified resource
            public IDs. Provide a comma-separated list of resource public IDs.
            Cannot be used together with `resource_public_id`.
          required: false
          schema:
            type: string
        - name: external_resource_id
          in: query
          description: Merchant resource ID
          required: false
          schema:
            type: string
        - name: live
          in: query
          description: >-
            Filters entitlements by whether their associated resources are
            accessible
          required: false
          schema:
            type: boolean
        - name: resource_name
          in: query
          description: Filters entitlements by resource name (case-insensitive match).
          required: false
          schema:
            type: string
        - name: grantee_external_ids_exact
          in: query
          description: >-
            Filter entitlements by list of exact ids (returns entitlement if and
            only if every grantee passed in is present in the entitlement and no
            other grantees are present)

            example: grantee_external_ids_exact=grantee_a,grantee_b returns
            entitlements with both grantee_a and grantee_b, but not entitlements
            with just grantee_a or entitlements that have grantee_a, grantee_b,
            but also grantee_c
          required: false
          schema:
            type: string
      responses:
        '200':
          description: '200'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Entitlements_list_Response_200'
servers:
  - url: https://restapi.ordergroove.com
    description: https://restapi.ordergroove.com
components:
  schemas:
    EntitlementsGetResponsesContentApplicationJsonSchemaResultsItemsResource:
      type: object
      properties:
        public_id:
          type: string
        merchant:
          type: string
        name:
          type: string
        external_resource_id:
          type: string
        description:
          type: string
        image_url:
          type: string
        created:
          type: string
        last_updated:
          type: string
      title: EntitlementsGetResponsesContentApplicationJsonSchemaResultsItemsResource
    EntitlementsGetResponsesContentApplicationJsonSchemaResultsItemsGranteesItems:
      type: object
      properties: {}
      title: >-
        EntitlementsGetResponsesContentApplicationJsonSchemaResultsItemsGranteesItems
    EntitlementsGetResponsesContentApplicationJsonSchemaResultsItems:
      type: object
      properties:
        merchant:
          type: string
        public_id:
          type: string
        merchant_user_id:
          type: string
        initial_activation_date:
          type: string
        latest_activation_date:
          type: string
        grace_period:
          type: integer
        live:
          type: boolean
        access_type:
          type: string
        expiration:
          type: string
        created:
          type: string
        last_updated:
          type: string
        resource:
          $ref: >-
            #/components/schemas/EntitlementsGetResponsesContentApplicationJsonSchemaResultsItemsResource
        grantees:
          type: array
          items:
            $ref: >-
              #/components/schemas/EntitlementsGetResponsesContentApplicationJsonSchemaResultsItemsGranteesItems
      title: EntitlementsGetResponsesContentApplicationJsonSchemaResultsItems
    Entitlements_list_Response_200:
      type: object
      properties:
        next:
          type: string
          description: >-
            URL to get the next page of results. `null` if there are no more
            pages.
        previous:
          type: string
          description: >-
            URL to get the previous page of results. `null` if there are no
            previous pages.
        results:
          type: array
          items:
            $ref: >-
              #/components/schemas/EntitlementsGetResponsesContentApplicationJsonSchemaResultsItems
          description: >-
            *Note:* This endpoint returns up to 100 entitlements per request by
            default, which differs from other endpoints in this API.
      title: Entitlements_list_Response_200

```

## Examples



**Response**

```json
{
  "next": "https://restapi.ordergroove.com/entitlements/?cursor=cD0yMDI0LTA0LTEwKz",
  "results": [
    {
      "merchant": "339536244b7c11eb8d37ee71e0f3a639",
      "public_id": "4c6dceaa1ddc4361962f9f6b11c0af7a",
      "merchant_user_id": "test_user_id",
      "initial_activation_date": "2024-08-12T20:35:19.04Z",
      "latest_activation_date": "2024-08-12T20:35:19.04Z",
      "live": false,
      "access_type": "time_based",
      "expiration": "2024-09-12T20:35:19.04Z",
      "created": "2024-08-12T20:35:19.04Z",
      "last_updated": "2024-08-12T20:35:19.04Z",
      "resource": {
        "public_id": "ecb42bee71ff11efb72ef29e3ec3bb34",
        "merchant": "339536244b7c11eb8d37ee71e0f3a639",
        "name": "Piano lesson",
        "external_resource_id": "123456",
        "image_url": "http://some.image.com",
        "created": "2020-12-31 23:28:48",
        "last_updated": "2020-12-31 23:28:48"
      },
      "grantees": [
        {
          "external_id": "grantee-001",
          "name": "Grantee Name",
          "created": "2020-12-31 23:28:48",
          "updated": "2020-12-31 23:28:48"
        }
      ]
    }
  ]
}
```

**SDK Code**

```python Result
import requests

url = "https://restapi.ordergroove.com/entitlements/"

querystring = {"merchant":"merchant"}

response = requests.get(url, params=querystring)

print(response.json())
```

```javascript Result
const url = 'https://restapi.ordergroove.com/entitlements/?merchant=merchant';
const options = {method: 'GET'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Result
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://restapi.ordergroove.com/entitlements/?merchant=merchant"

	req, _ := http.NewRequest("GET", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Result
require 'uri'
require 'net/http'

url = URI("https://restapi.ordergroove.com/entitlements/?merchant=merchant")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

```java Result
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://restapi.ordergroove.com/entitlements/?merchant=merchant")
  .asString();
```

```php Result
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://restapi.ordergroove.com/entitlements/?merchant=merchant');

echo $response->getBody();
```

```csharp Result
using RestSharp;

var client = new RestClient("https://restapi.ordergroove.com/entitlements/?merchant=merchant");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

```swift Result
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://restapi.ordergroove.com/entitlements/?merchant=merchant")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```