Paginated grants report. The owner organization and Super Admins see the whole fleet; other users only the grants of systems in their hierarchy.
Query parameters
-
Filter by catalog id
-
Filter by the organization owning the system
-
Filter by grant source
Values are
manual,shop, orlegacy-import. -
When "true", only active grants (not revoked, not expired)
Value is
true. -
Only grants expiring before this RFC3339 timestamp
-
Page number
Default value is
1. -
Page size (max 200)
Maximum value is
200. Default value is50.
GET
/entitlements/grants
curl \
--request GET 'https://api.your-domain.com/api/entitlements/grants' \
--header "Authorization: Bearer $ACCESS_TOKEN"
Response examples (200)
{
"code": 200,
"message": "grants retrieved successfully",
"data": {
"grants": [
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"system_id": "550e8400-e29b-41d4-a716-446655440000",
"entitlement": "nsec-blacklist",
"scope": "nethvoice1",
"source": "manual",
"source_ref": "sub_12345",
"valid_from": "2026-07-01T10:00:00Z",
"valid_until": "2027-07-01T10:00:00Z",
"revoked_at": "2026-05-04T09:42:00Z",
"revoked_source": "shop",
"active": true,
"pending_ref": "wc-order-83164",
"pending_since": "2026-07-15T18:00:00Z",
"status": "active",
"created_by": {
"user_id": "53h5zxpwu4vc",
"user_name": "Edoardo Super",
"organization_id": "lbswt1rxdhbz",
"organization_name": "Nethesis Italia",
"channel": "shop"
},
"purchased_by": {
"logto_id": "53h5zxpwu4vc",
"name": "Mario Rossi",
"email": "mario.rossi@example.com",
"organization_id": "akkbs6x2wo82",
"organization_name": "ACME S.r.l.",
"org_role": "reseller",
"user_roles": [
"Admin"
],
"out_of_scope": true
},
"variant": {
"id": 245,
"sku": "ATS-15",
"label": "1-15 device"
},
"renewal_count": 3,
"created_at": "2026-07-01T10:00:00Z",
"updated_at": "2026-07-01T10:00:00Z",
"system_name": "Milan Office Firewall",
"system_key": "NETH-F5D2-5E69-A174-45A9-B1AB-2BB9-03F5-F1B4",
"organization_id": "akkbs6x2wo82",
"organization_name": "ACME S.r.l."
}
],
"total": 42,
"page": 1,
"page_size": 50
}
}
Response examples (400)
{
"code": 400,
"message": "validation failed",
"data": {
"type": "validation_error",
"errors": [
{
"key": "username",
"message": "required",
"value": "string"
}
]
}
}
Response examples (401)
{
"code": 401,
"message": "invalid token",
"data": {}
}
Response examples (403)
{
"code": 403,
"message": "insufficient permissions",
"data": {}
}
Response examples (500)
{
"code": 500,
"message": "internal server error",
"data": {}
}