List plays

get/v1/plays

Plays in the organisation, newest first. A play is the unit every play count in this API is built from. Each play carries its per-track evidence status and its trust score, band and phase (never the internal score breakdown). The underlying evidence events are at GET /v1/plays/{play_id}/events.

Access

Authentication
Secret key or OAuth access token.
Scope
plays:read
User permission
advertisementViewStats

Query parameters

  • advertisement_idstring
  • campaign_idstring

    Plays of this campaign's advertisements.

  • screen_idstring
  • external_idstring

    The partner's own creative reference (for creatives never uploaded to Vojo).

  • sourcestring

    Narrows an external_id lookup to one partner namespace. Ignored without external_id.

  • bandstring

    Only plays whose current band is at least this (e.g. high returns high and max).

    One of low, medium, high, max

  • phasestring

    preliminary scores can still change as evidence arrives; final scores never change.

    One of preliminary, final

  • fromstring

    Earliest play start (inclusive).

    date-time

  • tostring

    Latest play start (exclusive).

    date-time

  • cursorstring

    Opaque cursor from a previous response's meta.next_cursor. Omit for the first page.

  • limitinteger

    Page size, 1-100. Default 25. A value outside 1-100, or not an integer, is rejected with 400 invalid_request (it is not clamped).

    1 to 100

    Default 25

Headers

  • Vojo-Organisationstring

    The organisation this request acts on (org id). Required for oauth2 callers — a missing header returns 400 organisation_header_required; an org the user cannot access (a membership or an access grant, and granted to this OAuth client) returns 403 organisation_access_denied. Secret keys are bound to one org: the header may be omitted, and if sent it must match the key's org (else 403). Every query is scoped by the resolved org, never by an id in the body.

  • Vojo-Versionstring

    Optional API version pin (a date). Overrides the version pinned on the secret key / organisation for this request. Echoed in the Vojo-Version response header. Within /v1 only additive changes ship, so most callers can omit it.

    date

Response 200

OK

  • dataarray of objectsRequired
    Show 12 fields
    • idstringRequired
    • screen_idstring or nullRequired

      Null when the play happened on a screen not registered in Vojo (e.g. an exchange's own screen).

    • screenobject or nullRequired

      The play's screen with its name, so lists render without a lookup per row; null when screen_id is null.

      Show 2 fields
      • idstringRequired
      • namestringRequired
    • advertisement_idstring or nullRequired
    • advertisementobject or nullRequired

      The play's advertisement (creative) with its name; null when advertisement_id is null.

      Show 2 fields
      • idstringRequired
      • namestringRequired
    • external_play_idstring or nullRequired

      The partner's per-play correlation id, echoed verbatim; never verified.

    • channelstring or nullRequired
    • started_atstringRequired

      Time of the earliest evidence event in the play.

      date-time

    • tracksobjectRequired

      Vojo's two independent evidence sources for this play: passport (the in-creative fingerprint) and harvester (the sensor on the glass). Raw per-track status; never collapsed into a single verified flag.

      Show 2 fields
      • passportstringRequired

        One of absent, present, matched

      • harvesterstringRequired

        One of absent, present, matched

    • verificationobjectRequired

      Same score, band and phase the verification.score webhook sends.

      Show 4 fields
      • scoreinteger or nullRequired

        Final score once phase is final, else the preliminary score; null before any scoring.

        0 to 100

      • bandstring or nullRequired

        Trust band. Clients must tolerate new values.

        One of low, medium, high, max

      • phasestringRequired

        preliminary scores can still change as evidence arrives; final scores never change.

        One of preliminary, final

      • scored_atstring or nullRequired

        date-time

    • created_atstringRequired

      date-time

    • updated_atstring or nullRequired

      date-time

  • metaobjectRequired

    Pagination metadata for cursor-paginated lists.

    Show 2 fields
    • next_cursorstring or nullRequired

      Opaque cursor for the next page. Pass it back as cursor. null when there are no more results.

    • has_morebooleanRequired

      True when another page exists (equivalent to next_cursor != null).

Response headers

  • Vojo-Versionstring

    The API version (date) this response was rendered with — the request's Vojo-Version, else the key/org pin.

  • RateLimitstring

    IETF RateLimit header: remaining quota in the current window, e.g. "default";r=97;t=42.

  • RateLimit-Policystring

    IETF RateLimit-Policy header, e.g. "default";q=100;w=60. Portal OAuth clients get a higher tier.

Errors

Every error is application/problem+json. Branch on its code.

  • 400

    Malformed request: invalid JSON, a bad cursor, a missing Vojo-Organisation for an OAuth caller, or an unknown Vojo-Version.

  • 401

    Missing, invalid, expired or revoked credential.

  • 403

    The caller is authenticated but not allowed: missing scope (insufficient_scope), missing Permissions flag (permission_denied), a client/installer persona on an operator endpoint (operator_access_required), or no access to the requested org (organisation_access_denied).

  • 404

    The resource does not exist, or belongs to another organisation. Cross-org ids always 404, never 403.

  • 429

    Rate limit exceeded for this principal. Back off for Retry-After seconds.

  • 500

    Unexpected server failure.