Skip to content

Licences for an operator (paginated)

GET
/v1/operators/{slug}/licenses

Every licence the operator holds, sorted by jurisdiction_code, license_number. Append ?include_history=true to embed the status-change timeline under each licence; omit for the slimmer detail view. Agents that want a cross-jurisdiction compliance view should call this instead of the single-licence endpoint.

slug
required
string
include_history
boolean

When true, each licence includes its status-change history[].

Paginated licences for the operator.

object
operator_slug
required
string
total
required
integer
limit
required
integer
offset
required
integer
licenses
required
Array<object>
object
id
string format: uuid
license_number
string
jurisdiction_code
string
status
string
Allowed values: active suspended revoked expired pending
license_types

Multi-valued type vocabulary, sourced verbatim from the regulator. Stable values per jurisdiction (audited 2026-04-21):

  • UKGCRemote, Non-Remote, Ancillary Remote
  • MGAType 1, Type 2, Type 3, Type 4, B2B, B2C
  • CW (Curaçao) — B2C, B2B
  • KH (Kahnawake) — Interactive Gaming Permit, CSPA
  • AN (Anjouan) — B2C, B2B, White Labeling
  • TGC (Tobique) — B2C, B2B

Add a new value to your client mapping when a regulator publishes one — we don’t reject unknown strings. Multi-jurisdiction operators carry one license row per jurisdiction, so this array is per-licence.

Array<string>
license_type_raw
string
license_category

Cross-jurisdiction harmonised category — derived by @igregulator/normalizer so a multi-regulator query can group by it. UKGC Remote, MGA Type 1/2, CW B2C map to remote; UKGC Non-Remote to non-remote; etc.

string
Allowed values: remote non-remote ancillary permit other
issued_date
string | null format: date
expiry_date
string | null format: date
last_verified_at
string format: date-time
source_url
string format: uri
raw_data

Scraper-specific fields captured verbatim from the upstream register (e.g. UKGC activity categories, CGA company-type flags). Not a stable integration surface. Keys here are added, renamed, or removed without a deprecation window when a scraper is updated — they do not carry the 90-day Sunset guarantee that top-level fields do. Use license_types, license_category, status, issued_date, expiry_date for stable compliance logic; read raw_data only for diagnostic / investigative purposes.

object
key
additional properties
any
as_of

Point-in-time status, present only when ?as_of= was supplied. Answers ONLY within the observation window: we never extrapolate a status before tracking_since (the first time we recorded the licence).

object
as_of
required

The resolved instant (UTC). Bare YYYY-MM-DD inputs resolve to end-of-day.

string format: date-time
knowledge
required

observed: the date is within our window, status is known. before_tracking: the date predates when we started watching — status is null, NOT a guess. no_such_license: we have no history for this licence. no_license_resolved: a fuzzy /v1/check match with no specific licence to time-travel.

string
Allowed values: observed before_tracking no_such_license no_license_resolved
status_as_of
required

Licence status as of the date, or null when not observed.

string | null
established_by
required

The history transition in effect at the date — when this status was last confirmed relative to the query.

object
changed_at
string format: date-time
new_status
string
change_type
string
source_url
string
tracking_since
required

Lower bound of our knowledge — when we first observed this licence.

string | null format: date-time
{
"id": "d29fbc19-3ed3-4043-8a74-e001491feb24",
"license_number": "039028-R-319297-013",
"jurisdiction_code": "UKGC",
"status": "active",
"license_types": [
"Remote"
],
"license_type_raw": "Remote",
"license_category": "remote",
"issued_date": "2014-11-01",
"expiry_date": null,
"last_verified_at": "2026-04-19T03:00:12.480Z",
"source_url": "https://www.gamblingcommission.gov.uk/downloads/business-licence-data.zip",
"raw_data": {
"activities": [
"Bingo",
"Casino"
]
}
}
_meta
One of:

Aggregate provenance envelope for list responses. Describes the freshness window of the returned rows.

object
freshness_range
required
object
oldest
required
string | null format: date-time
newest
required
string | null format: date-time
total_sources
required

Distinct upstream sources represented by this page of rows (roughly: distinct jurisdictions).

integer
{
"freshness_range": {
"oldest": "2026-04-18T03:00:00Z",
"newest": "2026-04-19T03:45:00Z"
},
"total_sources": 1
}

Missing / malformed / revoked API key.

object
error
required

Human-readable error summary.

string
code
required

HTTP-status-level class. Stable enum; branch on details.reason for finer control. Current values: invalid_query, invalid_slug, invalid_license_id, invalid_jurisdiction_code, invalid_pagination, not_found, auth_required, auth_invalid, auth_revoked, payment_required, quota_exceeded, rate_limited, server_error.

string
details
required
object
reason
required

Machine-readable refinement of the top-level code. Stable vocabulary; branch on this in clients. Examples: invalid_input, missing_required_parameter, conflicting_parameters, operator_not_found, license_not_found, jurisdiction_not_found, route_not_found, api_key_missing, malformed_header, api_key_invalid, api_key_revoked, quota_exceeded, internal_error.

string
field

Present only when the error maps to a specific request input field (query param, path param, body key). Omitted for errors that aren’t field-scoped (e.g. rate_limited, auth_revoked).

string
suggestion

Optional human-readable / agent-actionable hint describing how to resolve the error.

string
{
"reason": "api_key_revoked",
"suggestion": "Generate a new API key at https://app.igregulator.io/settings. Revoked keys cannot be restored."
}
{
"error": "API key has been revoked",
"code": "auth_revoked",
"details": {
"reason": "api_key_revoked",
"suggestion": "Generate a new API key at https://app.igregulator.io/settings. Revoked keys cannot be restored."
}
}

No row matched.

object
error
required

Human-readable error summary.

string
code
required

HTTP-status-level class. Stable enum; branch on details.reason for finer control. Current values: invalid_query, invalid_slug, invalid_license_id, invalid_jurisdiction_code, invalid_pagination, not_found, auth_required, auth_invalid, auth_revoked, payment_required, quota_exceeded, rate_limited, server_error.

string
details
required
object
reason
required

Machine-readable refinement of the top-level code. Stable vocabulary; branch on this in clients. Examples: invalid_input, missing_required_parameter, conflicting_parameters, operator_not_found, license_not_found, jurisdiction_not_found, route_not_found, api_key_missing, malformed_header, api_key_invalid, api_key_revoked, quota_exceeded, internal_error.

string
field

Present only when the error maps to a specific request input field (query param, path param, body key). Omitted for errors that aren’t field-scoped (e.g. rate_limited, auth_revoked).

string
suggestion

Optional human-readable / agent-actionable hint describing how to resolve the error.

string
{
"reason": "api_key_revoked",
"suggestion": "Generate a new API key at https://app.igregulator.io/settings. Revoked keys cannot be restored."
}
{
"error": "API key has been revoked",
"code": "auth_revoked",
"details": {
"reason": "api_key_revoked",
"suggestion": "Generate a new API key at https://app.igregulator.io/settings. Revoked keys cannot be restored."
}
}

Unexpected server error.

object
error
required

Human-readable error summary.

string
code
required

HTTP-status-level class. Stable enum; branch on details.reason for finer control. Current values: invalid_query, invalid_slug, invalid_license_id, invalid_jurisdiction_code, invalid_pagination, not_found, auth_required, auth_invalid, auth_revoked, payment_required, quota_exceeded, rate_limited, server_error.

string
details
required
object
reason
required

Machine-readable refinement of the top-level code. Stable vocabulary; branch on this in clients. Examples: invalid_input, missing_required_parameter, conflicting_parameters, operator_not_found, license_not_found, jurisdiction_not_found, route_not_found, api_key_missing, malformed_header, api_key_invalid, api_key_revoked, quota_exceeded, internal_error.

string
field

Present only when the error maps to a specific request input field (query param, path param, body key). Omitted for errors that aren’t field-scoped (e.g. rate_limited, auth_revoked).

string
suggestion

Optional human-readable / agent-actionable hint describing how to resolve the error.

string
{
"reason": "api_key_revoked",
"suggestion": "Generate a new API key at https://app.igregulator.io/settings. Revoked keys cannot be restored."
}
{
"error": "API key has been revoked",
"code": "auth_revoked",
"details": {
"reason": "api_key_revoked",
"suggestion": "Generate a new API key at https://app.igregulator.io/settings. Revoked keys cannot be restored."
}
}