> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oddswire.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Native fixtures

> Native fixtures: request contract, authentication, parameters and response behavior for the Oddswire private pilot.

Restricted source-native REST contract. Requires its explicit native feature, namespace and source review. Kambi retained snapshots preserve original capture times; live mode additionally requires the founder live review and current controls. No general customer availability or canonical player/settlement mapping is implied. A nonempty eligible native data page costs one credit. Empty native fixture pages and native odds pages without eligible records are free; inspect Usage for final settlement. Errors and 304 are free. See [Current availability](https://docs.oddswire.io/availability.md).

`GET /v1/native/fixtures`

Set the required IDs from [native fixture discovery](https://docs.oddswire.io/endpoints.md#native-odds-and-player-props). Examples read IDs and namespace from your environment; use only values returned for your approved scope.

[Authentication](https://docs.oddswire.io/authentication.md) · [Requests, quota and errors](https://docs.oddswire.io/errors.md) · [Coverage and units](https://docs.oddswire.io/data.md).


## OpenAPI

````yaml GET /v1/native/fixtures
openapi: 3.1.2
info:
  description: >-
    Implemented REST v1 contract. Hosted account login and HTTPS API are
    deployed; signup grants no source data or credits. Core data requires
    explicit approved scope. History, streaming, alerts, Terminal and test
    billing have separate availability limits. Read
    https://docs.oddswire.io/availability. Namespaces, decimal strings, native
    identity and missing coverage retain their contract meaning.
  title: Oddswire REST v1 private pilot
  version: 1.0.0
servers:
  - url: https://api.oddswire.io
    description: Hosted HTTPS API; account grants and allocation are required for data.
security: []
externalDocs:
  description: Current feature availability
  url: https://docs.oddswire.io/availability
paths:
  /v1/native/fixtures:
    get:
      summary: listNativeFixtures
      description: >-
        Restricted source-native REST contract. Requires its explicit native
        feature, namespace and source review. Kambi retained snapshots preserve
        original capture times; live mode additionally requires the founder live
        review and current controls. No general customer availability or
        canonical player/settlement mapping is implied. A nonempty eligible
        native data page costs one credit. Empty native fixture pages and native
        odds pages without eligible records are free; inspect Usage for final
        settlement. Errors and 304 are free.
      operationId: listNativeFixtures
      parameters:
        - description: >-
            Native source11 (198Bet, default),12 (1xBit) or13 (20Bet); requires
            its explicit source grant.
          in: query
          name: source_id
          required: false
          schema:
            type: integer
        - description: 'Explicit native-evidence namespace: oddswire_bookmakers.'
          in: query
          name: namespace
          required: true
          schema:
            type: string
        - description: >-
            Additional delay0..3600 from original receive time; default0.
            Freshness90s relative to cutoff; current suspension/kickoff still
            fences delivery.
          in: query
          name: delay_seconds
          required: false
          schema:
            type: integer
        - description: Page size1..100 within current grant.
          in: query
          name: limit
          required: false
          schema:
            default: 25
            maximum: 100
            minimum: 1
            type: integer
        - description: Query/access/evidence-bound cursor; restart after409.
          in: query
          name: cursor
          required: false
          schema:
            type: string
        - description: Optional exact native fixture ID.
          in: query
          name: native_fixture
          required: false
          schema:
            type: string
        - description: legacy (default) or the consistent standard view.
          in: query
          name: view
          required: false
          schema:
            enum:
              - legacy
              - standard
            type: string
        - description: Weak semantic ETag; freshness and access are revalidated before 304.
          in: header
          name: If-None-Match
          required: false
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NativeFixturesPageView'
          description: >-
            Typed native page. A nonempty eligible native data page costs one
            credit. Empty native fixture pages and native odds pages without
            eligible records are free; inspect Usage for final settlement.
            Errors and 304 are free. Read all missing[] entries.
          headers:
            X-Oddswire-Credit-Cost:
              $ref: '#/components/headers/X-Oddswire-Credit-Cost'
            X-Oddswire-Credits-Limit:
              $ref: '#/components/headers/X-Oddswire-Credits-Limit'
            X-Oddswire-Credits-Remaining:
              $ref: '#/components/headers/X-Oddswire-Credits-Remaining'
            X-Oddswire-Credits-Reserved:
              $ref: '#/components/headers/X-Oddswire-Credits-Reserved'
            X-Oddswire-Credits-Reset:
              $ref: '#/components/headers/X-Oddswire-Credits-Reset'
            X-Oddswire-Credits-Used:
              $ref: '#/components/headers/X-Oddswire-Credits-Used'
            X-Oddswire-Metering:
              $ref: '#/components/headers/X-Oddswire-Metering'
            X-Oddswire-Overage:
              $ref: '#/components/headers/X-Oddswire-Overage'
            X-Oddswire-Usage-State:
              $ref: '#/components/headers/X-Oddswire-Usage-State'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '304':
          description: >-
            Semantically unchanged after authentication and eligibility
            validation; always zero credits, including at exhausted quota.
          headers:
            X-Oddswire-Credit-Cost:
              $ref: '#/components/headers/X-Oddswire-Credit-Cost'
            X-Oddswire-Credits-Limit:
              $ref: '#/components/headers/X-Oddswire-Credits-Limit'
            X-Oddswire-Credits-Remaining:
              $ref: '#/components/headers/X-Oddswire-Credits-Remaining'
            X-Oddswire-Credits-Reserved:
              $ref: '#/components/headers/X-Oddswire-Credits-Reserved'
            X-Oddswire-Credits-Reset:
              $ref: '#/components/headers/X-Oddswire-Credits-Reset'
            X-Oddswire-Credits-Used:
              $ref: '#/components/headers/X-Oddswire-Credits-Used'
            X-Oddswire-Metering:
              $ref: '#/components/headers/X-Oddswire-Metering'
            X-Oddswire-Overage:
              $ref: '#/components/headers/X-Oddswire-Overage'
            X-Oddswire-Usage-State:
              $ref: '#/components/headers/X-Oddswire-Usage-State'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '400':
          $ref: '#/components/responses/Problem'
        '401':
          $ref: '#/components/responses/Problem'
        '402':
          $ref: '#/components/responses/Problem'
        '403':
          $ref: '#/components/responses/Problem'
        '404':
          $ref: '#/components/responses/Problem'
        '405':
          $ref: '#/components/responses/Problem'
        '409':
          $ref: '#/components/responses/Problem'
        '414':
          $ref: '#/components/responses/Problem'
        '422':
          $ref: '#/components/responses/Problem'
        '429':
          $ref: '#/components/responses/Problem'
        '500':
          $ref: '#/components/responses/Problem'
        '503':
          $ref: '#/components/responses/Problem'
        '504':
          $ref: '#/components/responses/Problem'
      security:
        - ApiKey: []
      x-codeSamples:
        - lang: cURL
          source: |-
            curl --get --max-time 10 \
              --url "https://api.oddswire.io/v1/native/fixtures" \
              --data-urlencode "source_id=$SOURCE_ID" \
              --data-urlencode "namespace=$ODDSWIRE_NAMESPACE" \
              --header "X-API-Key: $ODDSWIRE_API_KEY"
        - lang: Python
          source: >-
            import os

            from urllib.parse import urlencode

            from urllib.request import Request, build_opener,
            HTTPRedirectHandler


            class NoRedirect(HTTPRedirectHandler):
                def redirect_request(self, req, fp, code, msg, headers, newurl):
                    return None

            query = {"source_id": os.environ["SOURCE_ID"], "namespace":
            os.environ["ODDSWIRE_NAMESPACE"]}

            url = "https://api.oddswire.io/v1/native/fixtures" + ("?" +
            urlencode(query) if query else "")

            request = Request(url, headers={"X-API-Key":
            os.environ["ODDSWIRE_API_KEY"]})

            with build_opener(NoRedirect).open(request, timeout=10) as response:
                print(response.read().decode())
        - lang: TypeScript
          source: |-
            const required = (name: string) => {
              const value = process.env[name];
              if (!value) throw new Error(`Set ${name}`);
              return value;
            };
            const url = new URL("https://api.oddswire.io/v1/native/fixtures");
            url.searchParams.set("source_id", required("SOURCE_ID"));
            url.searchParams.set("namespace", required("ODDSWIRE_NAMESPACE"));
            const response = await fetch(url, {
              headers: {"X-API-Key": required("ODDSWIRE_API_KEY")},
              redirect: "error", signal: AbortSignal.timeout(10_000),
            });
            if (!response.ok) throw new Error(`HTTP ${response.status}`);
            console.log(await response.json());
components:
  schemas:
    NativeFixturesPageView:
      anyOf:
        - $ref: '#/components/schemas/NativeFixturesPage'
        - $ref: '#/components/schemas/DatasetFixturesPage'
    NativeFixturesPage:
      additionalProperties: false
      properties:
        data:
          items:
            $ref: '#/components/schemas/NativeFixture'
          type: array
        meta:
          $ref: '#/components/schemas/Meta'
        missing:
          items:
            $ref: '#/components/schemas/Missing'
          type: array
      required:
        - data
        - missing
        - meta
      type: object
    DatasetFixturesPage:
      additionalProperties: false
      properties:
        data:
          items:
            $ref: '#/components/schemas/DatasetFixture'
          type: array
        meta:
          $ref: '#/components/schemas/Meta'
        missing:
          items:
            $ref: '#/components/schemas/Missing'
          type: array
      required:
        - data
        - missing
        - meta
      type: object
    Problem:
      additionalProperties: false
      properties:
        code:
          type: string
        detail:
          type: string
        invalid_params:
          items:
            $ref: '#/components/schemas/InvalidParam'
          type: array
        missing:
          items:
            $ref: '#/components/schemas/Missing'
          type: array
        request_id:
          type: string
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      required:
        - type
        - title
        - status
        - detail
        - code
        - request_id
        - invalid_params
        - missing
      type: object
    NativeFixture:
      additionalProperties: false
      properties:
        away:
          type: string
        capture_id:
          type: string
        competition:
          type: string
        delay_seconds:
          type: integer
        home:
          type: string
        identity_scope:
          type: string
        kickoff:
          format: date-time
          type: string
        native_away_id:
          type: string
        native_event_id:
          type: string
        native_home_id:
          type: string
        native_sport_id:
          type: integer
        player_prop_count:
          type: integer
        price_count:
          type: integer
        received_at:
          format: date-time
          type: string
        source_id:
          $ref: '#/components/schemas/ID'
      required:
        - source_id
        - native_event_id
        - native_sport_id
        - native_home_id
        - native_away_id
        - home
        - away
        - competition
        - kickoff
        - capture_id
        - received_at
        - delay_seconds
        - price_count
        - player_prop_count
        - identity_scope
      type: object
    Meta:
      additionalProperties: false
      properties:
        consistency:
          type: string
        count:
          type: integer
        dataset:
          type: string
        namespace:
          type: string
        next_cursor:
          type: string
        request_id:
          type: string
        sent_ts:
          format: date-time
          type: string
        snapshot_ts:
          format: date-time
          type: string
        version:
          type: string
      required:
        - version
        - request_id
        - sent_ts
        - snapshot_ts
        - next_cursor
        - count
        - consistency
      type: object
    Missing:
      additionalProperties: false
      properties:
        detail:
          type: string
        family:
          $ref: '#/components/schemas/Family'
        fixture_id:
          $ref: '#/components/schemas/ID'
        quote_key:
          type: string
        reason:
          type: string
        source_id:
          $ref: '#/components/schemas/ID'
      required:
        - reason
        - detail
      type: object
    DatasetFixture:
      additionalProperties: false
      properties:
        competition:
          type: string
        competition_id:
          oneOf:
            - $ref: '#/components/schemas/ID'
            - type: 'null'
        evidence:
          $ref: '#/components/schemas/DatasetEvidence'
        id:
          type: string
        identity_scope:
          type: string
        original:
          type: object
        participants:
          items:
            $ref: '#/components/schemas/DatasetParticipant'
          type: array
        source_id:
          oneOf:
            - $ref: '#/components/schemas/ID'
            - type: 'null'
        sport:
          type: string
        sport_id:
          oneOf:
            - $ref: '#/components/schemas/ID'
            - type: 'null'
        starts_at:
          oneOf:
            - format: date-time
              type: string
            - type: 'null'
        status:
          type: string
      required:
        - competition_id
        - id
        - identity_scope
        - source_id
        - sport_id
        - sport
        - competition
        - starts_at
        - status
        - participants
        - evidence
        - original
      type: object
    InvalidParam:
      additionalProperties: false
      properties:
        name:
          type: string
        reason:
          type: string
      required:
        - name
        - reason
      type: object
    ID:
      maximum: 9007199254740991
      minimum: 1
      type: integer
    Family:
      enum:
        - 1x2
        - total
        - asian_handicap
      type: string
    DatasetEvidence:
      additionalProperties: false
      properties:
        capture_id:
          type: string
        confirmed_at:
          oneOf:
            - format: date-time
              type: string
            - type: 'null'
        delay_seconds:
          type: integer
        fresh_for_live_use:
          type: boolean
        mode:
          type: string
        received_at:
          oneOf:
            - format: date-time
              type: string
            - type: 'null'
        source_at:
          oneOf:
            - format: date-time
              type: string
            - type: 'null'
      required:
        - delay_seconds
        - mode
        - received_at
        - confirmed_at
        - source_at
        - fresh_for_live_use
      type: object
    DatasetParticipant:
      additionalProperties: false
      properties:
        fixture_id:
          type: string
        id:
          oneOf:
            - type: string
            - type: 'null'
        identity_scope:
          type: string
        identity_verified:
          type: boolean
        kind:
          enum:
            - team
            - player
          type: string
        name:
          type: string
        original:
          type: object
        role:
          type: string
        source_id:
          oneOf:
            - $ref: '#/components/schemas/ID'
            - type: 'null'
      required:
        - id
        - name
        - kind
        - role
        - identity_scope
        - source_id
        - fixture_id
        - identity_verified
        - original
      type: object
  headers:
    X-Oddswire-Credit-Cost:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Credits-Limit:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Credits-Remaining:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Credits-Reserved:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Credits-Reset:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Credits-Used:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Metering:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Overage:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Oddswire-Usage-State:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
    X-Request-ID:
      description: >-
        Account-scoped admission snapshot where authenticated: remaining
        excludes holds; used counts settled calls. Cost 1 reserves one credit;
        actual charge settles only after complete local write/flush. Inspect
        free account/usage by request ID for final state. UTC reset is RFC3339;
        overage is off. Unknown credentials disclose no account counters.
      schema:
        type: string
  responses:
    Problem:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: >-
        Structured actionable problem; errors consume zero credits. Quota
        exhaustion/unconfigured returns 402 with counters/reset headers and free
        usage guidance. 429 Retry-After is separate abuse control. No database
        details or credentials.
      headers:
        X-Oddswire-Credit-Cost:
          $ref: '#/components/headers/X-Oddswire-Credit-Cost'
        X-Oddswire-Credits-Limit:
          $ref: '#/components/headers/X-Oddswire-Credits-Limit'
        X-Oddswire-Credits-Remaining:
          $ref: '#/components/headers/X-Oddswire-Credits-Remaining'
        X-Oddswire-Credits-Reserved:
          $ref: '#/components/headers/X-Oddswire-Credits-Reserved'
        X-Oddswire-Credits-Reset:
          $ref: '#/components/headers/X-Oddswire-Credits-Reset'
        X-Oddswire-Credits-Used:
          $ref: '#/components/headers/X-Oddswire-Credits-Used'
        X-Oddswire-Metering:
          $ref: '#/components/headers/X-Oddswire-Metering'
        X-Oddswire-Overage:
          $ref: '#/components/headers/X-Oddswire-Overage'
        X-Oddswire-Usage-State:
          $ref: '#/components/headers/X-Oddswire-Usage-State'
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
  securitySchemes:
    ApiKey:
      in: header
      name: X-API-Key
      type: apiKey

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.