Pinnacle Lines API

Pinnacle is an online gaming website that was founded in 1998. Since its inception, Pinnacle has become a medium-sized, fully licensed, online sportsbook.

AsyncAPI Specification

pinnacle-asyncapi.yml Raw ↑
asyncapi: 3.0.0
info:
  title: Pinnacle Lines API - Long-Poll Surface
  version: v1
  description: >-
    Pinnacle does NOT expose a documented public WebSocket (WSS), Server-Sent
    Events (SSE), or webhook surface. Real-time-ish odds/fixtures consumption
    is implemented via HTTP delta polling using a `since` cursor on a handful
    of REST endpoints: callers issue an initial snapshot request, then loop
    on the same endpoint passing the `last` value from the previous response
    back as `since` to receive only incremental changes.


    This AsyncAPI document models that long-poll surface as event-style
    operations over the HTTP binding so the cursored delta pattern can be
    reasoned about as a near-real-time stream. It does not invent any
    transport (no WSS/SSE/webhook channels are declared) and only describes
    the endpoints, parameters, and `last` cursor field that are explicitly
    documented in the Pinnacle Lines API OpenAPI specification at
    https://github.com/pinnacleapi/pinnacleapi-documentation
    (openapi-specification/linesapi-oas.yaml).
  contact:
    name: Pinnacle API
    url: https://github.com/pinnacleapi/pinnacleapi-documentation
    email: api@pinnacle.com
  externalDocs:
    description: Pinnacle API Documentation
    url: https://pinnacleapi.github.io/
  tags:
    - name: LongPoll
    - name: Fixtures
    - name: Odds

servers:
  pinnacle:
    host: api.pinnacle.com
    protocol: https
    description: >-
      Pinnacle REST host. All long-poll operations are HTTP GET requests
      protected with HTTP Basic auth, as documented in the Lines API OpenAPI
      specification.
    security:
      - $ref: '#/components/securitySchemes/basicAuth'

channels:
  fixturesDeltaChannel:
    address: /v1/fixtures
    title: Fixtures Long-Poll
    description: >-
      Returns all non-settled events for the given sport. When called with a
      `since` cursor, returns only fixtures that changed since the previous
      response. Without `since`, responses are intentionally delayed up to 1
      minute by Pinnacle to encourage delta usage.
    bindings:
      http:
        method: GET
    messages:
      fixturesDelta:
        $ref: '#/components/messages/FixturesDelta'

  specialFixturesDeltaChannel:
    address: /v1/fixtures/special
    title: Special Fixtures Long-Poll
    description: >-
      Returns all non-settled specials for the given sport. Supports the
      `since` cursor for delta retrieval; without `since`, responses are
      delayed up to 1 minute.
    bindings:
      http:
        method: GET
    messages:
      specialFixturesDelta:
        $ref: '#/components/messages/SpecialFixturesDelta'

  settledFixturesDeltaChannel:
    address: /v1/fixtures/settled
    title: Settled Fixtures Long-Poll
    description: >-
      Returns fixtures settled in the last 24 hours for the given sport.
      Supports the `since` cursor for delta retrieval.
    bindings:
      http:
        method: GET
    messages:
      settledFixturesDelta:
        $ref: '#/components/messages/SettledFixturesDelta'

  settledSpecialFixturesDeltaChannel:
    address: /v1/fixtures/special/settled
    title: Settled Special Fixtures Long-Poll
    description: >-
      Returns all specials settled in the last 24 hours for the given sport.
      Supports the `since` cursor for delta retrieval.
    bindings:
      http:
        method: GET
    messages:
      settledSpecialFixturesDelta:
        $ref: '#/components/messages/SettledSpecialFixturesDelta'

  straightOddsDeltaChannel:
    address: /v2/odds
    title: Straight Odds Long-Poll
    description: >-
      Returns straight odds for all non-settled events. When called with a
      `since` cursor, returns ONLY periods that changed since the previous
      response (periods with no changes are omitted). Without `since`,
      responses are delayed up to 1 minute by Pinnacle to encourage delta
      usage.
    bindings:
      http:
        method: GET
    messages:
      straightOddsDelta:
        $ref: '#/components/messages/StraightOddsDelta'

  specialOddsDeltaChannel:
    address: /v1/odds/special
    title: Special Odds Long-Poll
    description: >-
      Returns odds for specials for all non-settled events. Supports the
      `since` cursor for delta retrieval; without `since`, responses are
      delayed up to 1 minute.
    bindings:
      http:
        method: GET
    messages:
      specialOddsDelta:
        $ref: '#/components/messages/SpecialOddsDelta'

operations:
  receiveFixturesDelta:
    action: receive
    channel:
      $ref: '#/channels/fixturesDeltaChannel'
    title: Poll Fixtures Delta
    summary: >-
      GET /v1/fixtures with sportId (required) and optional since cursor.
      Persist the response's `last` field and reuse it as the next `since`.
    bindings:
      http:
        method: GET
    messages:
      - $ref: '#/channels/fixturesDeltaChannel/messages/fixturesDelta'

  receiveSpecialFixturesDelta:
    action: receive
    channel:
      $ref: '#/channels/specialFixturesDeltaChannel'
    title: Poll Special Fixtures Delta
    bindings:
      http:
        method: GET
    messages:
      - $ref: '#/channels/specialFixturesDeltaChannel/messages/specialFixturesDelta'

  receiveSettledFixturesDelta:
    action: receive
    channel:
      $ref: '#/channels/settledFixturesDeltaChannel'
    title: Poll Settled Fixtures Delta
    bindings:
      http:
        method: GET
    messages:
      - $ref: '#/channels/settledFixturesDeltaChannel/messages/settledFixturesDelta'

  receiveSettledSpecialFixturesDelta:
    action: receive
    channel:
      $ref: '#/channels/settledSpecialFixturesDeltaChannel'
    title: Poll Settled Special Fixtures Delta
    bindings:
      http:
        method: GET
    messages:
      - $ref: '#/channels/settledSpecialFixturesDeltaChannel/messages/settledSpecialFixturesDelta'

  receiveStraightOddsDelta:
    action: receive
    channel:
      $ref: '#/channels/straightOddsDeltaChannel'
    title: Poll Straight Odds Delta
    summary: >-
      GET /v2/odds with sportId (required) and optional since cursor. With
      since, ONLY changed periods are returned; periods with no changes are
      omitted from the response.
    bindings:
      http:
        method: GET
    messages:
      - $ref: '#/channels/straightOddsDeltaChannel/messages/straightOddsDelta'

  receiveSpecialOddsDelta:
    action: receive
    channel:
      $ref: '#/channels/specialOddsDeltaChannel'
    title: Poll Special Odds Delta
    bindings:
      http:
        method: GET
    messages:
      - $ref: '#/channels/specialOddsDeltaChannel/messages/specialOddsDelta'

components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        Pinnacle uses HTTP Basic authentication. Credentials are issued by
        Pinnacle on a case-by-case basis under the Fair Use Policy.

  parameters:
    sportId:
      description: The sport id to retrieve the fixtures or odds for (required).
    leagueIds:
      description: Comma-separated list of league ids to filter by.
    isLive:
      description: Set to 1 to retrieve ONLY live events/odds.
    since:
      description: >-
        Long-poll cursor. Use the `last` value from the previous response of
        the same endpoint. When omitted, the response is intentionally
        delayed by Pinnacle (up to 1 minute) to encourage delta usage.
    eventIds:
      description: Comma-separated list of event ids to filter by.
    oddsFormat:
      description: >-
        Odds format. One of American, Decimal, HongKong, Indonesian, Malay.
        Default is American.
    toCurrencyCode:
      description: 3-letter currency code for returned limits. Default is USD.

  messages:
    FixturesDelta:
      name: FixturesDelta
      title: Fixtures Delta Response
      summary: >-
        Snapshot or delta of non-settled fixtures for a sport. Includes a
        `last` cursor to feed into the next request's `since` parameter.
      contentType: application/json
      bindings:
        http:
          headers:
            type: object
            properties:
              Content-Type:
                type: string
                const: application/json
      payload:
        $ref: '#/components/schemas/FixturesResponse'

    SpecialFixturesDelta:
      name: SpecialFixturesDelta
      title: Special Fixtures Delta Response
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SpecialsFixturesResponse'

    SettledFixturesDelta:
      name: SettledFixturesDelta
      title: Settled Fixtures Delta Response
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SettledFixturesResponse'

    SettledSpecialFixturesDelta:
      name: SettledSpecialFixturesDelta
      title: Settled Special Fixtures Delta Response
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SettledSpecialFixturesResponse'

    StraightOddsDelta:
      name: StraightOddsDelta
      title: Straight Odds Delta Response
      summary: >-
        Snapshot or delta of straight odds. When the request used a `since`
        cursor, only periods that changed are present; unchanged periods are
        omitted.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/OddsResponse'

    SpecialOddsDelta:
      name: SpecialOddsDelta
      title: Special Odds Delta Response
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SpecialOddsResponse'

  schemas:
    Cursor:
      type: integer
      format: int64
      description: >-
        Pinnacle delta cursor. Returned as `last` on each response and
        echoed back as the `since` query parameter on the next request to
        receive only incremental changes.

    FixturesResponse:
      type: object
      properties:
        sportId:
          type: integer
          format: int32
        last:
          $ref: '#/components/schemas/Cursor'
        league:
          type: array
          description: List of leagues with their fixtures.
          items:
            type: object
            additionalProperties: true

    SpecialsFixturesResponse:
      type: object
      properties:
        sportId:
          type: integer
          format: int32
        last:
          $ref: '#/components/schemas/Cursor'
        leagues:
          type: array
          items:
            type: object
            additionalProperties: true

    SettledFixturesResponse:
      type: object
      properties:
        sportId:
          type: integer
          format: int32
        last:
          $ref: '#/components/schemas/Cursor'
        leagues:
          type: array
          items:
            type: object
            additionalProperties: true

    SettledSpecialFixturesResponse:
      type: object
      properties:
        sportId:
          type: integer
          format: int32
        last:
          $ref: '#/components/schemas/Cursor'
        leagues:
          type: array
          items:
            type: object
            additionalProperties: true

    OddsResponse:
      type: object
      properties:
        sportId:
          type: integer
          format: int32
        last:
          $ref: '#/components/schemas/Cursor'
        leagues:
          type: array
          items:
            type: object
            additionalProperties: true

    SpecialOddsResponse:
      type: object
      properties:
        sportId:
          type: integer
          format: int32
        last:
          $ref: '#/components/schemas/Cursor'
        leagues:
          type: array
          items:
            type: object
            additionalProperties: true