Viewcast On Demand Measurement Detail

Read the asset definition plus the resolved SYSTEM measurement detail (attributes and audience block) for a single Displays On Demand asset through GET /v2/viewcast/on-demand/{asset_id}.

GET /v2/viewcast/on-demand/{asset_id} returns the full detail record for a single Displays On Demand asset: the asset definition you created through the asset lifecycle plus the resolved SYSTEM measurement detail (display attributes and the audience block) once a measurement has reached a terminal state.

The endpoint lives under the /v2/viewcast/* path because the handler runs on the Viewcast measurement worker, but it operates on Displays On Demand assets and belongs to this family. The endpoint-by-endpoint reference is auto-built from the OpenAPI spec at the Viewcast API reference.

When to use it

Use this endpoint when you already know the asset_id and want the complete picture in one call:

  • the asset definition (state, classification, anchor, display attributes, publication, subscription window, timestamps), and
  • the measurement detail: the resolved display attributes plus the audience block (OTS, LTS, circulation, spot metrics, share of voice, and related measures).

It complements two endpoints you already know:

Request

curl https://api2.mworks.com/v2/viewcast/on-demand/$ASSET_ID \
  -H "X-API-Key: $MW_API_KEY"

The call takes no query parameters and no request body: everything is addressed by the asset_id path param.

Cost: 1 credit per call (viewcast_on_demand_detail). No purchase charge applies; this is a read, not a measurement.

Authentication and entitlement: an org-scoped API key with the oohdisplays.displays.on_demand_detail feature enabled. Anonymous callers are denied.

Caching: responses carry Cache-Control: private, no-store. The detail reflects the current terminal result on every call; do not cache it client-side.

Response

A successful call returns 200 with the standard v2 envelope:

{
  "data": {
    "asset_id": "vcaJDVDYWSSMHAXVEFYW1DVD2PPFD",
    "org_id": "org_...",
    "state": "final_measured",
    "classification": "Roadside",
    "anchor": { "lat": 33.749, "lon": -84.388 },
    "related_parties": [],
    "display_id": "dsp_...",
    "display": {},
    "publication": "private",
    "subscription_started_at": null,
    "subscription_expires_at": null,
    "row_version": 3,
    "created_at": "2026-09-01T14:22:00Z",
    "updated_at": "2026-09-02T09:15:00Z",
    "measurement": {
      "attributes": {},
      "audience": {
        "traffic": 41000,
        "face_circ": 38500,
        "face_ots": 512000,
        "face_lts": 468000,
        "spot_circ": 40200,
        "spot_ots": 540000,
        "spot_lts": 495000,
        "spot_length": 480,
        "share_of_voice": 0.5,
        "face_share_of_voice": 0.25
      }
    }
  },
  "meta": {
    "request_id": "req_...",
    "credits_used": 1,
    "product": "viewcast",
    "provenance": {}
  }
}

The data block is the asset definition. The nested measurement block carries:

  • attributes: the resolved display descriptor (the allowlisted projection of the measurement's resolved attributes).
  • audience: the audience measures. All fields are optional: a terminal result may carry a subset, and informational outcomes (no_coverage, insufficient_data) can legitimately omit measures.

The audience block uses the same OTS/LTS/circulation derivation as every Displays measurement. See Viewcast Methodology for what the measures mean and Methodology delta for how On Demand differs from the Profiles surface.

Failure modes

StatusMeaning
401Authentication missing, invalid, or not org-scoped.
404Unknown asset_id, not owned by your org, or no terminal measurement result yet. These cases are intentionally indistinguishable (never 403).

A 404 while a measurement is still queued or running is expected: the detail endpoint only serves terminal results. Poll measurements/latest until the run completes, then call this endpoint.

What to read next


Did this page help you?