Base URL
All API requests use:
https://api.igamingfinder.com/api/v1/igaming
Authenticate with X-API-Key or Authorization: Bearer header. See Authentication.
The core surface is the Company API: a Company is the customer-facing unit — any operator, supplier, studio, aggregator, platform, or PSP. There are two jobs:
- Resolve (
GET /companies/resolve) — you know an identifier; get the authoritative Company profile. - Search (
GET /companies/search, preview withGET /companies/search/preview) — you have criteria; get ranked candidates.
See the Company API guide for the full model, billing, and company_ref lifecycle.
Alongside it is the Domain verdict API, keyed by a casino domain rather than an operator: GET /domains/resolve ("is this URL legit?" → licensed/blocklisted/mixed/no_record) and GET /domains/search (the set of domains by verdict/geo/time). It answers for blocklist-only domains that have no Company, and pivots into the Company API via company_ref.
GET /signals
Consume qualified Company events by regulatory license regime. V1 requires kind=licensed_market_entry and a market such as ukgc or anjouan. occurred_at comes only from the regulator's authoritative issued_at; import-time first_seen_at never qualifies an entry.
The base row exposes the regulatory Licensee, complete normalized authorized domains, evidence, and quality. It does not infer an operating organization. Omitted firmographics and contacts coverage is not_requested; explicitly requested V1 compositions return HTTP 200 with not_available, reason composition_not_yet_available, and zero optional charge.
Each delivered Signal row costs one credit. Every new request bills delivered rows again; retain next_cursor to poll incrementally. Only an exact replay with the same Idempotency-Key and request parameters avoids a second debit. Use a fresh Idempotency-Key for every cursor page because changing after changes the request identity.
Pagination is cursor-only: page may only be 1; pass the previous next_cursor as after for subsequent pages. Cursors are bound to kind, market, and occurrence-date filters, so reusing one with different row filters returns invalid_cursor. An empty poll preserves the supplied cursor as a resumable position rather than returning null as an EOF sentinel. With after, total is the number of matching rows remaining after that cursor, not the market's lifetime total.
domains[], contacts_limit, and max_age_days are validated request controls reserved for the unavailable V1 compositions. They are echoed in query but trigger no supplier call or optional charge until those compositions become available.
GET /signals
COST 1 credit / Signal returned
Qualified licensed-market-entry Signals by regulatory license regime. Charged per delivered row.
/api/v1/igaming/signals
Authorization
Query
Whole-request cost ceiling.
Example response200
{
"success": true,
"data": {
"query": { "kind": "licensed_market_entry", "market": "anjouan" },
"total": 1,
"signals": [{
"signal_ref": "igfs_example",
"kind": "licensed_market_entry",
"quality": { "coverage": {
"licenses": { "status": "included" },
"authorized_domains": { "status": "included" },
"firmographics": { "status": "not_requested" },
"contacts": { "status": "not_requested" }
}}
}],
"billing": { "credits_charged": 1, "breakdown": [
{ "key": "signal.base", "units": 1, "credits_per_unit": 1, "credits_charged": 1 }
]}
}
}
curl -H "X-API-Key: igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7" \
-H "Idempotency-Key: YOUR_REQUEST_KEY" \
"https://api.igamingfinder.com/api/v1/igaming/signals?kind=licensed_market_entry&market=anjouan&page_size=5&max_credits=5"
Coverage uses exactly licenses, authorized_domains, firmographics, and contacts, with statuses included, available, not_available, or not_requested.
GET /companies/resolve
Resolve a natural identifier or an opaque company_ref to the authoritative Company profile. Returns the full nested profile: licenses, Domains, enumerated payment methods and game providers, and provenance. Charged per profile successfully returned (companies_resolve_profile). Pass include[]=firmographics explicitly for paid, exact-Domain operating-organization data.
Provide exactly one of these, or an opaque company_ref:
company_ref— authoritative and exclusive; anigfc_…handle from a prior response.license_number(+ optionaljurisdiction) — a bare ambiguous number returns409 ambiguous_license_number(charge 0).domain— a casino URL or host; canonicalized to its registrable domain, then resolved to licensee Companies plus the brand owner, each tagged inmatched_as. IP/junk →400 invalid_domain; a valid domain absent from our data →404 not_found.legal_entity— exact legal company name match.name— exact company or brand name; collisions returnmatches[]candidates (charge 0).
When more than one natural identifier is supplied, precedence is license_number → domain → legal_entity → name.
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
Casino URL or host. Canonicalized to its registrable domain, then resolved to licensee + brand-owner Companies. IP/junk → 400 invalid_domain.
Exact legal company name
Exact company or brand name
Closed include catalog. Pass firmographics explicitly for the paid Domain-scoped composition.
Exact eligible Domain selector (igfd_…). Omit to enrich every eligible Domain when firmographics is requested.
Refresh Domain firmographics older than N days; 0 forces refresh.
When true (the server default), return the latest complete success after a transient refresh failure.
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.",
"role": "operator",
"matched_as": [],
"domains": [
{ "domain_ref": "igfd_9mT7…", "domain": "stake.com", "inferred_geo": null }
],
"licenses": [
{ "jurisdiction": "curacao", "license_number": "…", "status": "active",
"license_type": "…", "authorized_domains": [
{ "domain_ref": "igfd_9mT7…", "domain": "stake.com", "inferred_geo": null }
] }
],
"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"
}
}
}
When firmographics is requested, the response field is always a FirmographicsResult[]. A domain_ref selects exactly one related Domain; omitting it intentionally fans out across every eligible Domain. The preflight max_credits check covers the base profiles plus every candidate Domain before acquisition starts. Each available fresh, cached, or stale Domain result uses the configured rate below; unavailable results cost zero optional credits. See Company API: Paid Domain-scoped firmographics for the full response and stale-fallback contract.
Cost: 12 credits / delivered Domain result
curl -H "X-API-Key: igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7" \
"https://api.igamingfinder.com/api/v1/igaming/companies/resolve?name=Stake"
import requests
r = requests.get(
"https://api.igamingfinder.com/api/v1/igaming/companies/resolve",
headers={"X-API-Key": "igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7"},
params={"name": "Stake"},
)
print(r.json())
Errors:
| Status | Meaning |
|---|---|
| 400 | invalid_domain — the domain input is not a valid registrable domain (IP/junk) |
| 404 | not_found — no Company matches the identifier |
| 409 | ambiguous_license_number or conflicting_lookup_input (charge 0) |
GET /companies/search/preview
Free anti-surprise preview — total match count, allowlisted facet counts, per-page_size cost estimates, and a tiny redacted sample. No paid payload, no charge. Run it before companies/search to size the result and cost.
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
operator, aggregator, platform_provider, payment_provider, game_studio, affiliate_software, affiliate_media, other_supplier
mga, ukgc, curacao, anjouan
Registrable domain; applied as an exact filter (canonicalized). IP/junk → 400 invalid_domain.
GET /companies/search
Paid ranked discovery 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). Charged per row successfully returned (companies_search_result); page_size × credits_per_result is the maximum, guarded by max_credits.
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
Registrable domain; applied as an exact filter (canonicalized). IP/junk → 400 invalid_domain.
Rows per page (max 100). You are charged per row returned.
Hard cost ceiling for this pull.
Example response200
{
"success": true,
"data": {
"query": { "payment_category": "crypto", "jurisdiction": "anjouan" },
"total": 33,
"page": 1,
"page_size": 20,
"hits": [
{
"company_ref": "igfc_7Qz…",
"company_name": "Medium Rare N.V.",
"role": "operator",
"primary_domain": { "domain_ref": null, "domain": "stake.com", "inferred_geo": null },
"domains_sample": [
{ "domain_ref": null, "domain": "stake.com", "inferred_geo": null }
],
"domain_count": 1,
"jurisdictions": ["anjouan"],
"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"
}
}
}
Take any company_ref from a search row and pass it back to GET /companies/resolve for the full nested profile.
The playground above shows the common filters; companies/search also accepts license_status, payment_method, affiliate_program, and geo. See Filters for the full set.
GET /companies/:company_ref/people
Return decision-maker contacts for a resolved Company. This is separate from GET /companies/resolve: base Company profiles describe the organization, while people contacts are an optional add-on whose cost scales with contacts returned.
GET /companies/:company_ref/people
COST 9 credits / contact returned
Return decision-maker contacts for a resolved Company. Charged per contact returned.
/api/v1/igaming/companies/:company_ref/people
Authorization
Query
Company ref. The public demo key only accepts this stable demo ref.
Optional role search, e.g. payments, compliance, affiliate, marketing.
Contacts requested. Billing is per contact returned.
Freshness knob (ADR-0050). Serve owned-store cache if younger than N days; 0 forces a fresh pull from the source.
GET /licenses/resolve
Resolve a licence by natural key (jurisdiction + license_number) or by opaque license_ref. Returns the authoritative licence profile plus the issuing Company's company_ref for immediate pivot into GET /companies/resolve.
GET /licenses/resolve
COST 3 credits / profile returned
Resolve a licence by its natural key or license_ref to the authoritative licence profile. Charged per profile successfully returned.
/api/v1/igaming/licenses/resolve
Authorization
Query
Opaque public handle (igfl_…). Authoritative and exclusive.
Licence number; pair with jurisdiction when a bare number is ambiguous.
mga, ukgc, curacao, anjouan
Hard cost ceiling. Rejected before any paid payload if exceeded.
GET /licenses/search/preview
Free anti-surprise preview for licence discovery. Returns total count, allowlisted facets, per-page cost estimates, and a tiny redacted sample. No paid payload.
GET /licenses/search/preview
COST 0 credits / request
Preview License search count, facets, and cost before pulling paid rows.
/api/v1/igaming/licenses/search/preview
Authorization
Query
Full-text query (licence number, company name, jurisdiction, type).
GET /licenses/search
Ranked licence discovery rows. Rows are thin: they carry the license_ref, issuing company_ref, facets, and counts; use GET /licenses/resolve for the authoritative licence profile.
GET /licenses/search
COST 1 credit / result returned
Ranked licence discovery rows. Charged per row returned.
/api/v1/igaming/licenses/search
Authorization
Query
Full-text query (licence number, company name, jurisdiction, type).
Rows per page (capped at 100).
Hard cost ceiling for this pull.
GET /domains/resolve
The trust front door. Give a casino domain, get its verdict — licensed (a regulator's register licences it), blocklisted (a regulator's blocklist flags it as illegal), mixed (both — licensed in one jurisdiction and blocklisted in another), or no_record (we hold no regulator record; not the same as "unlicensed"). Answers for any domain, including blocklist-only domains that have no Company. The base verdict costs 1 credit.
The response carries both per-jurisdiction axes — licensed_by[] (regulators that licence it, with license_number) and blocked_by[] (regulators that blocklist it) — plus, when the domain links to a licensed operator, an opaque company_ref to pivot into GET /companies/resolve.
Operator Launch Profile
Pass include[]=operator_launch_profile to compose fresh registration, DNS, rendered web presence, launch state, legal claims, public website emails, related-domain evidence, quality, coverage, and opaque evidence references around the base verdict. A profile is available only when the domain has one unambiguous regulatory Operator context and observed domain evidence.
Launch status means:
| Status | Meaning |
|---|---|
pre_launch |
Licensed Operator context, resolving DNS, and observed parked-site evidence |
launching |
Bounded web evidence shows launch activity but not enough rendered product evidence for live |
live |
Rendered product evidence was observed |
unknown |
Evidence is insufficient, blocked, or failed; a 403 or geo block never becomes pre_launch |
Registration identity, regulatory Licensee, website owner/operator/billing claims, Brand, and technical clusters are separate source-labelled planes. Shared registrar, DNS, CDN, MX, nameserver, IP, hosting, or redirects never prove ownership; technical relationships return ownership_claimed: false. Public evidence references are stable opaque handles. Raw HTML, screenshots, artifact URLs, and storage paths remain private.
An available profile adds 5 credits to the 1-credit verdict, charged atomically as one 6-credit delivery. If the composition is unavailable, the endpoint still returns HTTP 200 with availability: not_available and an explicit reason, charges only the 1-credit verdict, and omits the optional charge. Set max_credits=6 to reject an unexpectedly larger request before delivery.
max_age_days applies the freshness gate inside resolve (0 forces capture; 7 accepts evidence at most seven days old). When it is combined with raw observation facets, the whole-request max_credits check includes the standard domain-enrichment reservation as well as the delivered verdict/profile, before any acquisition starts. The enrichment reservation keeps its own asynchronous settlement record; the verdict/profile remains one aggregate synchronous delivery. A new non-idempotent request charges delivered data again. Send a fresh Idempotency-Key for each new request; only an exact same-key/same-parameter replay is free. Reusing a key with changed parameters returns 409 idempotency_key_reused.
curl -H "X-API-Key: igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7" \
-H "Idempotency-Key: YOUR_FRESH_REQUEST_KEY" \
"https://api.igamingfinder.com/api/v1/igaming/domains/resolve?domain=ncc.bet&include[]=operator_launch_profile&max_age_days=7&max_credits=6"
GET /domains/resolve
COST 1 credit / verdict returned
Resolve a casino domain to its trust verdict and optionally compose a freshness-gated Operator Launch Profile.
/api/v1/igaming/domains/resolve
Authorization
Query
Casino URL or host (required). Canonicalized to its registrable domain. IP/junk → 400 invalid_domain.
Additive facets or the operator_launch_profile composition.
Maximum evidence age. 0 forces fresh capture.
Whole-request ceiling. Rejected (402) before any payload or charge if exceeded.
Example response200
{
"data": {
"domain": "ncc.bet",
"verdict": "licensed",
"licensed_by": [{ "geo": "anjouan", "license_number": "ALSI-202606035-FI2" }],
"blocked_by": [],
"observations": {
"operator_launch_profile": {
"availability": "available",
"reason": null,
"domain": "ncc.bet",
"regulatory_context": {
"market": "anjouan",
"license_number": "ALSI-202606035-FI2",
"licensee": { "company_ref": "igfc_example", "legal_name": "Luminex Synergy Collective Ltd" },
"authorized_domain": true
},
"launch": { "status": "live", "confidence": "high", "reasons": ["licensed_domain", "product_site_rendered", "legal_pages_present"] },
"quality": { "confidence": "high", "source_count": 3, "warnings": ["operator_differs_from_licensee"] }
}
},
"billing": {
"credits_charged": 6,
"breakdown": [
{ "key": "domain.verdict", "units": 1, "credits_per_unit": 1, "credits_charged": 1 },
{ "key": "domain.operator_launch_profile", "units": 1, "credits_per_unit": 5, "credits_charged": 5 }
]
}
}
}
GET /domains/search
Bulk discovery on the domain axis — the set of domains matching a verdict/geo/time filter (e.g. the whole Poland blocklist for a screening system, or "what got blocklisted since a date"). Rows are thin (verdict + both axes, no company); pivot into GET /domains/resolve for the company_ref. Paginated; charged per row returned (domains_search_result) — an empty page is free.
Filters: verdict (blocklisted / licensed / mixed, required); geo (a regulator for the black axis, a jurisdiction code for the white axis); since / until (blocklist first_seen_at window — the newly-blocklisted feed); dropped_before (blocklist last_seen_at cutoff — the dropped-off feed).
GET /domains/search
COST 1 credit / result returned
The set of domains matching a verdict/geo/time filter, paginated. Charged per row returned; empty page is free.
/api/v1/igaming/domains/search
Authorization
Query
blocklisted | licensed | mixed (required).
Regulator (e.g. poland) for blocklisted/mixed, or a jurisdiction code (e.g. ukgc) for licensed.
ISO time; blocklist first_seen_at >= since (newly-blocklisted feed).
ISO time; blocklist last_seen_at < value (dropped-off feed).
Rows per page (capped at 1000).
Hard cost ceiling for this pull.
Example response200
{
"data": {
"domains": [
{ "domain": "casino-x.pl", "verdict": "blocklisted", "licensed_by": [], "blocked_by": [{ "geo": "poland" }] }
],
"page": 1, "per_page": 100, "total": 25910,
"billing": { "returned_count": 1, "credits_per_result": 1, "credits_charged": 1, "page_size": 100 }
}
}
GET /account
Get your current plan and credit usage.
Cost: 0 credits / request
curl -H "X-API-Key: igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7" \
https://api.igamingfinder.com/api/v1/igaming/account
Response:
{
"success": true,
"data": {
"plan": "starter",
"credits_granted": 2500,
"credits_used": 120,
"credits_reserved": 10,
"available_credits": 2370
}
}
[!NOTE] Credits are an upfront ledger:
credits_grantedaccrues when your plan starts or renews and never expires — there is no monthly reset.credits_granted: nullmeans no quota is enforced (internal accounts). Plan credit allowances are listed on the pricing page.
POST /exports
Create a bulk export of filtered Company/domain data as CSV or JSONL.
Request body:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
filters |
object | no | {} |
Company search/export filters such as jurisdiction, payment category, provider, affiliate presence, geography, and freshness. See Company Filters. |
export_format |
string | no | "csv" |
"csv" or "json" |
fields[] |
string[] | no | all | Specific sections to include |
Cost: Variable (based on result count)
curl -X POST -H "X-API-Key: igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7" \
-H "Content-Type: application/json" \
-d '{"filters": {"jurisdiction": "MGA"}, "export_format": "csv"}' \
https://api.igamingfinder.com/api/v1/igaming/exports
import requests
r = requests.post(
"https://api.igamingfinder.com/api/v1/igaming/exports",
headers={
"X-API-Key": "igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7",
"Content-Type": "application/json",
},
json={
"filters": {"jurisdiction": "MGA"},
"export_format": "csv",
},
)
print(r.json())
Response (202):
{
"success": true,
"message": "Export queued",
"data": {
"export_id": 123,
"poll_url": "/api/v1/igaming/exports/123"
}
}
GET /exports/:id
Poll export status.
Path parameters:
| Name | Type | Required | Description |
|---|---|---|---|
id |
integer | yes | Export ID |
GET /exports/:id
COST 0 credits / request
Poll export status. The demo key uses a stable simulated export id.
/api/v1/igaming/exports/:id
Authorization
Query
Stable demo export id.
Cost: 0 credits / request
curl -H "X-API-Key: igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7" \
https://api.igamingfinder.com/api/v1/igaming/exports/123
Response (completed):
{
"success": true,
"data": {
"id": 123,
"status": "completed",
"format": "csv",
"download_url": "/api/v1/igaming/exports/123/download",
"total_rows": 5000,
"credits_used": 50,
"expires_at": "2026-05-10T10:30:00Z"
}
}
GET /exports/:id/download
Download a completed export file.
GET /exports/:id/download
COST 0 credits / request
Download a completed export file. The demo key returns a tiny deterministic CSV.
/api/v1/igaming/exports/:id/download
Authorization
Query
Stable demo export id.
Cost: 0 credits / request
curl -H "X-API-Key: igf_demo_9457cf242d0c43404fb69b8273d7f4371716682a12c74e3c3274fd8957ebeae7" \
-O https://api.igamingfinder.com/api/v1/igaming/exports/123/download
Returns the file as an attachment with Content-Disposition: attachment.
Errors:
| Status | Meaning |
|---|---|
| 404 | Export not found, still pending, or file expired |