iGaming Tools Providers API

The providers API from iGaming Tools — 8 operation(s) for providers.

Operations 8

GET /api/v1/providers/ List slot providers #
GET /api/v1/providers/{slug}/ Get provider detail #
GET /api/v1/providers/{slug}/demand/ Search demand for this provider #
GET /api/v1/providers/{slug}/jobs/ Job vacancies for this provider #
GET /api/v1/providers/{slug}/news/ News for this brand #
GET /api/v1/providers/{slug}/slots/ Slots for this provider #
GET /api/v1/providers/{slug}/team/ Key team members for this provider #
GET /api/v1/providers/ids/ Reconcile — all public provider slugs #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/igaming-tools-providers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

igaming-tools-providers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: iGaming Tools Providers API
  version: 1.0.0
  description: 'Public REST API for iGaming data: slot providers, slots, news, jobs, sources.'
  termsOfService: https://i-gaming.tools/terms/
  contact:
    name: iGaming Tools support
    email: support@i-gaming.tools
    url: https://i-gaming.tools/docs/
  license:
    name: Terms of Service
    url: https://i-gaming.tools/terms/
servers:
- url: https://i-gaming.tools
tags:
- name: Providers
paths:
  /api/v1/providers/:
    get:
      operationId: providers_list
      description: Cursor-paginated list of public slot providers. Supports ?updated_since for incremental sync and ETag/304. X-Sync-Timestamp response header for next-sync cursor. Use /providers/ids/ for tombstone reconcile.
      summary: List slot providers
      parameters:
      - in: header
        name: If-None-Match
        schema:
          type: string
        description: Opaque ETag value from a previous response to this same endpoint. When it matches the current ETag, the server returns 304 Not Modified with no body instead of re-sending the full payload.
      - in: query
        name: country
        schema:
          type: string
        description: Country (exact, free-text)
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's next/previous link.
        schema:
          type: string
      - in: query
        name: established_after
        schema:
          type: integer
        description: Established in this year or later (inclusive).
      - in: query
        name: established_before
        schema:
          type: integer
        description: Established strictly before this year (EXCLUSIVE — the named year is not included).
      - in: query
        name: has_news
        schema:
          type: boolean
        description: Brands with news only
      - name: ordering
        required: false
        in: query
        description: Which field to use when ordering the results.
        schema:
          type: string
      - name: page_size
        required: false
        in: query
        description: Number of results per page. Default 20, maximum 100 — same limits as the rest of the public API. An operator-configured limit may lower the maximum.
        schema:
          type: integer
      - in: query
        name: search
        schema:
          type: string
        description: Search by name and aliases
      - in: query
        name: updated_since
        schema:
          type: string
          format: date-time
        description: ISO-8601 datetime. Returns only records updated at or after this moment.
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '200':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
            X-Quota-Free-Remaining:
              $ref: '#/components/headers/XQuotaFreeRemaining'
            X-Quota-Paid-Balance:
              $ref: '#/components/headers/XQuotaPaidBalance'
            X-Quota-Resets-At:
              $ref: '#/components/headers/XQuotaResetsAt'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBrandShortList'
              examples:
                ListProviders:
                  value:
                    next: https://i-gaming.tools/api/v1/providers/?cursor=cD00ODY%3D
                    previous: https://i-gaming.tools/api/v1/providers/?cursor=cj0xJnA9NDg3
                    results:
                    - slug: example-provider
                      kind: slot_provider
                      name: Example Provider
                      aliases:
                      - Example
                      hosts_count: 3
                      news_count: 42
                  summary: List providers
          description: Success.
        '304':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Modified — the ETag in If-None-Match matched the current value. No body.
        '401':
          $ref: '#/components/responses/Err401'
        '429':
          $ref: '#/components/responses/Err429'
        '402':
          $ref: '#/components/responses/Err402'
        '400':
          $ref: '#/components/responses/Err400'
  /api/v1/providers/{slug}/:
    get:
      operationId: providers_retrieve
      description: 'Full provider profile: firmographics, assets (logo), company block (hq/offices/licenses/contacts), counts (slots/jobs/news/team/has_demand), HATEOAS links to sub-resources. ETag/304 via If-None-Match.'
      summary: Get provider detail
      parameters:
      - in: header
        name: If-None-Match
        schema:
          type: string
        description: Opaque ETag value from a previous response to this same endpoint. When it matches the current ETag, the server returns 304 Not Modified with no body instead of re-sending the full payload.
      - in: path
        name: slug
        schema:
          type: string
        required: true
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '200':
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-Quota-Free-Remaining:
              $ref: '#/components/headers/XQuotaFreeRemaining'
            X-Quota-Paid-Balance:
              $ref: '#/components/headers/XQuotaPaidBalance'
            X-Quota-Resets-At:
              $ref: '#/components/headers/XQuotaResetsAt'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProviderDetail'
              examples:
                ProviderDetail:
                  value:
                    slug: example-provider
                    kind: slot_provider
                    name: Example Provider
                    aliases:
                    - Example
                    about_html: <p>Example Provider builds video slots.</p>
                    firmographics:
                      country: MT
                      jurisdiction: Malta
                      established: 2015
                      authority_for: ''
                      statutory_authority: ''
                    assets:
                      logo:
                        url: https://cdn.i-gaming.tools/brands/example-provider.png
                        key: brands/example-provider.png
                        version: brands/example-provider.png
                    company:
                      hq:
                        label: Head office
                        city: Sliema
                        country: MT
                      offices:
                      - label: Studio
                        city: Kyiv
                        country: UA
                        sort_order: 1
                      licenses:
                      - authority: MGA
                        license_ref: MGA/B2B/000/0000
                        jurisdiction: Malta
                        status: active
                        sort_order: 0
                      contacts:
                      - kind: email
                        label: Sales
                        value: mailto:sales@example.com
                    counts:
                      slots: 128
                      jobs: 4
                      news: 42
                      team: 11
                      has_demand: true
                    links:
                      slots: /api/v1/providers/example-provider/slots/
                      demand: /api/v1/providers/example-provider/demand/
                      jobs: /api/v1/providers/example-provider/jobs/
                      news: /api/v1/providers/example-provider/news/
                      team: /api/v1/providers/example-provider/team/
                    hosts:
                    - host: example-provider.com
                      display_name: Example Provider
                    verified_at: '2026-07-01T10:00:00Z'
                    updated_at: '2026-08-01T09:30:00Z'
                  summary: Provider detail
          description: Success.
        '304':
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Modified — the ETag in If-None-Match matched the current value. No body.
        '401':
          $ref: '#/components/responses/Err401'
        '429':
          $ref: '#/components/responses/Err429'
        '402':
          $ref: '#/components/responses/Err402'
        '404':
          $ref: '#/components/responses/Err404'
  /api/v1/providers/{slug}/demand/:
    get:
      operationId: providers_demand_retrieve
      description: 'Provider demand snapshot: computed_at, provider-level metrics, top_slots. Empty snapshot → 200 with nulls/empty (not 404). PUBLISHED-ONLY for top_slots. The monthly series is returned as `provider.series_24m` and is fixed at 24 trailing months — this endpoint takes no `?months=` parameter, unlike GET /api/v1/slots/{slug}/demand/ which accepts 1..60 or "all". The window is part of the field name, so widening it would require a new field rather than a new parameter.'
      summary: Search demand for this provider
      parameters:
      - in: header
        name: If-None-Match
        schema:
          type: string
        description: Opaque ETag value from a previous response to this same endpoint. When it matches the current ETag, the server returns 304 Not Modified with no body instead of re-sending the full payload.
      - in: path
        name: slug
        schema:
          type: string
        required: true
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '200':
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-Quota-Free-Remaining:
              $ref: '#/components/headers/XQuotaFreeRemaining'
            X-Quota-Paid-Balance:
              $ref: '#/components/headers/XQuotaPaidBalance'
            X-Quota-Resets-At:
              $ref: '#/components/headers/XQuotaResetsAt'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProviderDemand'
          description: Success.
        '304':
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Modified — the ETag in If-None-Match matched the current value. No body.
        '401':
          $ref: '#/components/responses/Err401'
        '429':
          $ref: '#/components/responses/Err429'
        '402':
          $ref: '#/components/responses/Err402'
        '404':
          $ref: '#/components/responses/Err404'
  /api/v1/providers/{slug}/jobs/:
    get:
      operationId: providers_jobs_list
      description: Brand-scoped cursor-paginated job listings, attributed to this brand. The filters of GET /api/v1/jobs/, including ?include_closed, work here too. Supports ?updated_since and ETag/304.
      summary: Job vacancies for this provider
      parameters:
      - in: header
        name: If-None-Match
        schema:
          type: string
        description: Opaque ETag value from a previous response to this same endpoint. When it matches the current ETag, the server returns 304 Not Modified with no body instead of re-sending the full payload.
      - in: query
        name: city
        schema:
          type: string
        description: City slug
      - in: query
        name: company
        schema:
          type: string
        description: Company slug
      - in: query
        name: country
        schema:
          type: string
        description: Location country ISO-2 (→ location_country)
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's next/previous link.
        schema:
          type: string
      - in: query
        name: employment_type
        schema:
          type: string
          enum:
          - contract
          - freelance
          - full_time
          - internship
          - part_time
        description: Employment type.
      - in: query
        name: igaming_segment
        schema:
          type: string
          enum:
          - affiliate
          - casino
          - esports
          - game_studio
          - lottery
          - payment_provider
          - platform_provider
          - poker
          - regulator
          - sportsbook
        description: iGaming segment.
      - in: query
        name: include_closed
        schema:
          type: boolean
        description: false (default) = ACTIVE only; true = + CLOSED within window
      - in: query
        name: ordering
        schema:
          type: string
          enum:
          - -posted_at
          - posted_at
        description: 'Ordering (whitelist: posted_at, -posted_at; default -posted_at)'
      - name: page_size
        required: false
        in: query
        description: Number of results per page. Default 20, maximum 100 — same limits as the rest of the public API. An operator-configured limit may lower the maximum.
        schema:
          type: integer
      - in: query
        name: posted_after
        schema:
          type: string
          format: date-time
        description: Posted at >= this value (ISO 8601, inclusive).
      - in: query
        name: posted_before
        schema:
          type: string
          format: date-time
        description: Posted at < this value (ISO 8601, EXCLUSIVE — the named moment is not included).
      - in: query
        name: q
        schema:
          type: string
        description: Text search by title (case-insensitive substring)
      - in: query
        name: remote_mode
        schema:
          type: string
          enum:
          - hybrid
          - on_site
          - remote
        description: Remote mode.
      - in: query
        name: seniority
        schema:
          type: string
          enum:
          - c_level
          - head
          - junior
          - lead
          - mid
          - senior
        description: Seniority level.
      - in: query
        name: skills
        schema:
          type: array
          items:
            type: string
        description: Skill slugs (OR semantics; repeatable parameter)
      - in: path
        name: slug
        schema:
          type: string
        required: true
      - in: query
        name: source
        schema:
          type: string
          enum:
          - careers
          - linkedin
        description: Source.
      - in: query
        name: updated_since
        schema:
          type: string
          format: date-time
        description: 'DEPRECATED on brand-scoped endpoints. Here it filters by publication date, not by when the record last changed, so a delta silently omits items edited after publication — an article corrected long after it was published, or a vacancy that has since closed. Use the root listing with ?brand_slug= instead: GET /api/v1/news/?brand_slug=<slug>&updated_since=… or GET /api/v1/jobs/?brand_slug=<slug>&updated_since=…&include_closed=true, both of which filter and order by the last change. This parameter keeps its current behaviour so that traversals already in progress are not invalidated.'
        deprecated: true
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '200':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
            X-Quota-Free-Remaining:
              $ref: '#/components/headers/XQuotaFreeRemaining'
            X-Quota-Paid-Balance:
              $ref: '#/components/headers/XQuotaPaidBalance'
            X-Quota-Resets-At:
              $ref: '#/components/headers/XQuotaResetsAt'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedJobsListList'
          description: Success.
        '304':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Modified — the ETag in If-None-Match matched the current value. No body.
        '401':
          $ref: '#/components/responses/Err401'
        '429':
          $ref: '#/components/responses/Err429'
        '402':
          $ref: '#/components/responses/Err402'
        '400':
          $ref: '#/components/responses/Err400'
        '404':
          $ref: '#/components/responses/Err404'
  /api/v1/providers/{slug}/news/:
    get:
      operationId: providers_news_list
      description: Cursor-paginated news articles attributed to this brand. Supports ?updated_since for incremental sync and ETag/304. X-Sync-Timestamp response header for next-sync cursor.
      summary: News for this brand
      parameters:
      - in: header
        name: If-None-Match
        schema:
          type: string
        description: Opaque ETag value from a previous response to this same endpoint. When it matches the current ETag, the server returns 304 Not Modified with no body instead of re-sending the full payload.
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's next/previous link.
        schema:
          type: string
      - in: query
        name: host
        schema:
          type: string
        description: Host FQDN
      - in: query
        name: language
        schema:
          type: string
        description: Language code (ISO 639-1)
      - name: page_size
        required: false
        in: query
        description: Number of results per page. Default 20, maximum 100 — same limits as the rest of the public API. An operator-configured limit may lower the maximum.
        schema:
          type: integer
      - in: query
        name: published_after
        schema:
          type: string
          format: date-time
        description: Published at >= this value (ISO 8601, inclusive).
      - in: query
        name: published_before
        schema:
          type: string
          format: date-time
        description: Published at < this value (ISO 8601, EXCLUSIVE — the named moment is not included).
      - in: path
        name: slug
        schema:
          type: string
        required: true
      - in: query
        name: updated_since
        schema:
          type: string
          format: date-time
        description: 'DEPRECATED on brand-scoped endpoints. Here it filters by publication date, not by when the record last changed, so a delta silently omits items edited after publication — an article corrected long after it was published, or a vacancy that has since closed. Use the root listing with ?brand_slug= instead: GET /api/v1/news/?brand_slug=<slug>&updated_since=… or GET /api/v1/jobs/?brand_slug=<slug>&updated_since=…&include_closed=true, both of which filter and order by the last change. This parameter keeps its current behaviour so that traversals already in progress are not invalidated.'
        deprecated: true
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '200':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
            X-Quota-Free-Remaining:
              $ref: '#/components/headers/XQuotaFreeRemaining'
            X-Quota-Paid-Balance:
              $ref: '#/components/headers/XQuotaPaidBalance'
            X-Quota-Resets-At:
              $ref: '#/components/headers/XQuotaResetsAt'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedNewsArticleShortList'
          description: Success.
        '304':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Modified — the ETag in If-None-Match matched the current value. No body.
        '401':
          $ref: '#/components/responses/Err401'
        '429':
          $ref: '#/components/responses/Err429'
        '402':
          $ref: '#/components/responses/Err402'
        '400':
          $ref: '#/components/responses/Err400'
        '404':
          $ref: '#/components/responses/Err404'
  /api/v1/providers/{slug}/slots/:
    get:
      operationId: providers_slots_list
      description: Brand-scoped cursor-paginated slot listing. ?provider= is pinned to this brand; the catalogue filters and ?ordering= of GET /api/v1/slots/ work here as they do there. Supports ?updated_since and ETag/304. Items carry volume_12m/trend (per-slot search-demand aggregate).
      summary: Slots for this provider
      parameters:
      - in: header
        name: If-None-Match
        schema:
          type: string
        description: Opaque ETag value from a previous response to this same endpoint. When it matches the current ETag, the server returns 304 Not Modified with no body instead of re-sending the full payload.
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's next/previous link.
        schema:
          type: string
      - in: query
        name: feature
        schema:
          type: string
        description: Feature slug (exact match). A slot may carry several features.
      - in: query
        name: game_category
        schema:
          type: string
          enum:
          - crash
          - instant_win
          - live
          - other
          - scratch
          - table
          - unknown
          - video_slot
        description: Game category, exact match. 400 on any value outside the enum. Also filters GET /api/v1/demand/, where it doubles as a cut axis (?by=game_category).
      - in: query
        name: has_bonus_buy
        schema:
          type: string
        description: '''true'' or ''false''. Any other value returns 400.'
      - in: query
        name: jackpot_type
        schema:
          type: string
          enum:
          - fixed
          - none
          - pooled
          - progressive
          - unknown
        description: Jackpot type (none/fixed/progressive/pooled/unknown)
      - in: query
        name: max_win_max
        schema:
          type: integer
        description: max_win <= this value (multiplier of stake, positive integer). Also filters GET /api/v1/demand/ — same catalogue filter.
      - in: query
        name: max_win_min
        schema:
          type: integer
        description: max_win >= this value (multiplier of stake, positive integer). Also filters GET /api/v1/demand/ — same catalogue filter.
      - in: query
        name: mechanic
        schema:
          type: string
          enum:
          - cluster
          - lines
          - megaways
          - scatter_pays
          - variable_ways
          - ways
        description: Bet mechanic (lines/ways/cluster/megaways/scatter_pays)
      - in: query
        name: ordering
        schema:
          type: string
          enum:
          - -captured_at
          - -release_date
          - captured_at
          - release_date
        description: 'Whitelist: ''-release_date'' (newest first) or ''release_date'' (oldest first). Slots with release_date IS NULL sort to the end for ''-release_date'' and to the start for ''release_date''. ''-captured_at'' (most recently captured from a live demo first) or ''captured_at'' (oldest/never-captured first) — matches the public listing''s default order. Any other value → 400. Ignored when ?updated_since is present (sync order wins). Note on backward paging: cursor position is derived from the sort field alone, so walking back with `previous` through the trailing block of items that share the same sort value (those with no release date, or never captured) can skip entries. Forward paging with `next` is always complete, and neither ?updated_since sync nor the /ids/ reconcile is affected. Walk forward when you need the full set.'
      - name: page_size
        required: false
        in: query
        description: Number of results per page. Default 20, maximum 100 — same limits as the rest of the public API. An operator-configured limit may lower the maximum.
        schema:
          type: integer
      - in: query
        name: provider
        schema:
          type: string
        description: Provider slug (exact match).
      - in: query
        name: released_after
        schema:
          type: string
          format: date
        description: ISO date (YYYY-MM-DD). release_date >= this value. Slots with release_date IS NULL are excluded. 400 on invalid format.
      - in: query
        name: released_before
        schema:
          type: string
          format: date
        description: ISO date (YYYY-MM-DD). release_date <= this value — INCLUSIVE, the named day is part of the range. Note that ?published_before, ?posted_before and ?established_before on other endpoints are EXCLUSIVE. Slots with release_date IS NULL are excluded. 400 on invalid format.
      - in: query
        name: rtp_max
        schema:
          type: number
          format: double
        description: rtp_default <= this value (percent, decimal, e.g. 96.5). Also filters GET /api/v1/demand/ — same catalogue filter.
      - in: query
        name: rtp_min
        schema:
          type: number
          format: double
        description: rtp_default >= this value (percent, decimal, e.g. 96.5). Also filters GET /api/v1/demand/ — same catalogue filter.
      - in: query
        name: search
        schema:
          type: string
        description: Case-insensitive substring search over slot name + aliases. Empty/whitespace-only value is a no-op (does not narrow results). Soft-clipped to 100 characters (not a 400).
      - in: query
        name: series
        schema:
          type: string
        description: Series slug (exact match). A slot belongs to at most one series.
      - in: path
        name: slug
        schema:
          type: string
        required: true
      - in: query
        name: theme
        schema:
          type: string
        description: Theme slug (exact match). A slot may carry several themes.
      - in: query
        name: updated_since
        schema:
          type: string
          format: date-time
        description: ISO-8601 datetime. Returns only records updated at or after this moment.
      - in: query
        name: volatility
        schema:
          type: string
          enum:
          - high
          - low
          - med_high
          - med_low
          - medium
          - very_high
        description: Volatility (low/med_low/medium/med_high/high/very_high)
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '200':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
            X-Quota-Free-Remaining:
              $ref: '#/components/headers/XQuotaFreeRemaining'
            X-Quota-Paid-Balance:
              $ref: '#/components/headers/XQuotaPaidBalance'
            X-Quota-Resets-At:
              $ref: '#/components/headers/XQuotaResetsAt'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedSlotListItemList'
          description: Success.
        '304':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Modified — the ETag in If-None-Match matched the current value. No body.
        '401':
          $ref: '#/components/responses/Err401'
        '429':
          $ref: '#/components/responses/Err429'
        '402':
          $ref: '#/components/responses/Err402'
        '400':
          $ref: '#/components/responses/Err400'
        '404':
          $ref: '#/components/responses/Err404'
  /api/v1/providers/{slug}/team/:
    get:
      operationId: providers_team_list
      description: Key people we publish for this provider. NOT paginated (bounded ≤60). profile_url NOT included (PII). Returns {count, results[]} envelope. ETag/304 supported.
      summary: Key team members for this provider
      parameters:
      - in: header
        name: If-None-Match
        schema:
          type: string
        description: Opaque ETag value from a previous response to this same endpoint. When it matches the current ETag, the server returns 304 Not Modified with no body instead of re-sending the full payload.
      - in: path
        name: slug
        schema:
          type: string
        required: true
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '304':
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Modified — the ETag in If-None-Match matched the current value. No body.
        '200':
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-Quota-Free-Remaining:
              $ref: '#/components/headers/XQuotaFreeRemaining'
            X-Quota-Paid-Balance:
              $ref: '#/components/headers/XQuotaPaidBalance'
            X-Quota-Resets-At:
              $ref: '#/components/headers/XQuotaResetsAt'
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: Total visible team members (≤60).
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        full_name:
                          type: string
                        headline:
                          type: string
                        seniority:
                          type: string
                        is_key:
                          type: boolean
                        location_text:
                          type: string
                        photo:
                          type:
                          - object
                          - 'null'
                          properties:
                            url:
                              type: string
                              format: uri
                            key:
                              type: string
                            version:
                              type: string
          description: Success.
        '401':
          $ref: '#/components/responses/Err401'
        '429':
          $ref: '#/components/responses/Err429'
        '402':
          $ref: '#/components/responses/Err402'
        '404':
          $ref: '#/components/responses/Err404'
  /api/v1/providers/ids/:
    get:
      operationId: providers_ids_list
      description: Cursor-paginated list of ALL public provider slugs for tombstone diff. Results are plain strings, not objects. Decrements quota once per request. X-Sync-Timestamp included in response header.
      summary: Reconcile — all public provider slugs
      parameters:
      - in: query
        name: cursor
        schema:
          type: string
        description: Opaque pagination cursor from a previous response's next/previous link.
      - in: query
        name: page_size
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 20
        description: Number of results per page. Default 20, maximum 100 — same limits as the rest of the public API. An operator-configured limit may lower the maximum.
      tags:
      - Providers
      security:
      - TokenAuth: []
      responses:
        '200':
          headers:
            X-Sync-Timestamp:
              $ref: '#/components/headers/XSyncTimestamp'
            X-Quota-Free-Remaining:
              $ref: '#/components/hea

# --- truncated at 32 KB (58 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/igaming-tools/refs/heads/main/openapi/igaming-tools-providers-api-openapi.yml