Two jobs: resolve vs search
Company is the customer-facing unit — any operator, supplier, studio, aggregator, platform, or PSP, licensed or grey. The Company API splits two different jobs:
- Resolve (
GET /companies/resolve) — "I know an identifier; give me the authoritative Company profile." Backed by our system of record. Returns the full nested profile: licenses, domains, enumerated payment methods and game providers, and provenance. - Search (
GET /companies/search) — "I have criteria; give me ranked candidates." Returns thin discovery rows (categories + counts), not full profiles. Preview the size and cost first withGET /companies/search/preview.
$ help --topic=company-refEvery Company carries an opaquecompany_ref(e.g.igfc_3uSBTwEXnRo1rfvmRs6fgdMr). It is the only stable follow-up handle: store it and pass it back toresolve. Treat it as a black box — do not parse it, sort by it, or construct new refs from it. It is not an internal database id.
Resolve a Company
Provide exactly one of these, or an opaque company_ref:
company_ref— authoritative and exclusive. Any natural identifiers sent alongside it are treated as assertions; a disagreement returns409 conflicting_lookup_input.license_number(+ optionaljurisdiction) — a bare number matching multiple jurisdictions returns409 ambiguous_license_number(charge 0); resend withjurisdiction.legal_entity— exact legal-entity match.name— exact company/brand name; collisions returnmatches[]candidates (charge 0).
When more than one natural identifier is supplied, precedence is license_number → domain → legal_entity → name; lower inputs are echoed under ignored_inputs. Resolve does not fall through to a lower input when the highest is ambiguous.
GET /companies/resolve
COST 3 credits / profile returned
Resolve a natural identifier or an opaque company_ref to the authoritative Company profile(s). Charged per profile successfully returned.
/api/v1/igaming/companies/resolve
Authorization
Query
Opaque public handle (igfc_…). Authoritative and exclusive.
License number; pair with jurisdiction when a bare number is ambiguous.
mga, ukgc, curacao, anjouan
Exact legal-entity name
Exact company or brand name
Hard cost ceiling. Rejected (402) before any payload if exceeded.
Example response200
{
"success": true,
"data": {
"resolved_by": "company_ref",
"ignored_inputs": {},
"input_company_ref": "igfc_3uSBTwEXnRo1rfvmRs6fgdMr",
"resolved_company_ref": "igfc_3uSBTwEXnRo1rfvmRs6fgdMr",
"ref_status": "active",
"companies": [
{
"company_ref": "igfc_3uSBTwEXnRo1rfvmRs6fgdMr",
"company_name": "Medium Rare N.V.",
"legal_entity": "Medium Rare N.V.",
"segment": "b2c_operator",
"matched_as": [],
"domains": ["stake.com"],
"licenses": [
{ "jurisdiction": "curacao", "license_number": "…", "status": "active",
"license_type": "…", "authorized_domains": ["stake.com"] }
],
"payment_methods": ["Bitcoin", "Visa"],
"payment_categories": ["crypto", "card"],
"game_providers": ["Evolution"],
"affiliate_program": true,
"geo_hints": ["EN"],
"data_completeness": 0.82
}
],
"billing": {
"returned_count": 1,
"credits_per_profile": 3,
"credits_charged": 3,
"billing_reason": "company_profile_delivered",
"idempotent_retry": false,
"cached_data_billable": true
}
}
}
company_ref lifecycle
An active company_ref resolves to exactly one Company. Stale refs are managed-stable: every company_ref-mode response echoes ref_status.
ref_status |
Meaning | Charge |
|---|---|---|
active |
Resolves to one Company | per profile |
redirected |
Merged — resolved_company_ref is the survivor |
per profile |
ambiguous |
Split with no single owner — matches[] carries the new refs (409) |
0 |
retired |
Withdrawn — no profile | 0 |
Search Companies
Preview first to see the result size and cost, then pull paid rows. Search rows are thin discovery candidates — they carry payment/provider categories and counts, never the enumerated value lists, nested licenses, or full domain mappings (those are resolve-only).
GET /companies/search/preview
COST 0 credits / request
Free anti-surprise preview — total match count, allowlisted facet counts, per-page_size cost estimates, and a tiny redacted sample. No paid payload.
/api/v1/igaming/companies/search/preview
Authorization
Query
Free-text query
b2c_operator, b2b_studio, b2b_other
mga, ukgc, curacao, anjouan
GET /companies/search
COST 1 credit / result returned
Paid ranked discovery rows. Charged per row successfully returned (page_size × credits_per_result is the maximum), guarded by max_credits.
/api/v1/igaming/companies/search
Authorization
Query
Rows per page (max 100). You are charged per row returned.
Hard cost ceiling for this pull.
Example response200
{
"success": true,
"data": {
"query": { "q": "crypto curacao" },
"total": 137,
"page": 1,
"page_size": 20,
"hits": [
{
"company_ref": "igfc_7Qz…",
"company_name": "Medium Rare N.V.",
"segment": "b2c_operator",
"primary_domain": "stake.com",
"domains_sample": ["stake.com"],
"domain_count": 1,
"jurisdictions": ["curacao"],
"license_statuses": ["active"],
"license_count": 1,
"payment_categories": ["crypto", "card"],
"payment_method_count": 2,
"game_provider_count": 1,
"affiliate_program_present": true,
"rank": 1
}
],
"billing": {
"returned_count": 20,
"credits_per_result": 1,
"credits_charged": 20,
"page_size": 20,
"billing_reason": "search_rows_delivered"
}
}
}
Billing
Charge-on-success delivery billing: you pay only for paid payload actually returned.
| Operation | Cost |
|---|---|
Search domains (GET /domains) |
0 credits / request |
Get domain profile (GET /domains/:domain) |
0 credits / request |
Enrich domain (POST /enrichments) |
10 credits (0 if cached) |
| Cached enrichment result | 0 credits / request |
Create export (POST /exports) |
Variable (based on result count) |
| All status/poll endpoints | 0 credits / request |
Get account info (GET /account) |
0 credits / request |
| Lobby monitor (on-demand run) | 10 credits / run |
Company search preview (count/facets/cost) (GET /companies/search/preview) |
0 credits / request |
Company search result row (GET /companies/search) |
1 credit / result returned |
Company resolve profile (GET /companies/resolve) |
3 credits / profile returned |
- No charge for: empty results,
not_found, validation/conflict errors, ambiguous disambiguationmatches[], retired refs with no profile, or amax_creditsrejection before delivery. - Paid
GETs are non-cacheable (Cache-Control: no-store). To make a retry safe, send anIdempotency-Keyheader — a retry with the same key and request replays the original charge instead of charging again. companies/resolvehas no free preview; usemax_creditsas its cost control. A rejected request returnsrequired_creditsso you can raise the ceiling.
$ help --topic=domain-inputsdomaininputs toresolve,search, andsearch/previeware not yet available and return501 domain_input_unavailablewhile canonical domain normalization ships. Usecompany_ref,license_number,legal_entity, ornamein the meantime.