Proof API

Proof endpoints in the Brix REST API for digital signage: 6 operations (GET, POST). Each lists its path, auth, required permission and a curl example.

View as Markdown

Base URL https://api.brixsignage.com. Send Authorization: Bearer $BRIX_API_KEY unless an operation says No auth. The permission chip names what the key must hold. See Authentication and scopes, Errors and rate limits and Pagination.

GET/v1/proof

Bearer token playback-log.view

Get proof-of-play totals for a date range, broken down by content item and by screen, including digital-out-of-home verification fields. Use the from and to query parameters to set the date range. Counts what played, where and for how long, over a time window. Only screens the caller can see are counted.

ParameterInTypeRequiredDescription
fromquerystringnoWindow start (ISO-8601). Default: the start of the retention window.
toquerystringnoWindow end (ISO-8601). Default: now.
screenIdquerystringnoOnly this screen.
curl "https://api.brixsignage.com/v1/proof" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataProofOfPlayReport
data.totalsobject
data.totals.playsintegerSuccessful plays (neither skipped nor failed).
data.totals.skippedinteger
data.totals.failedinteger
data.totals.eventsintegerEvery playback-end event: plays + skipped + failed.
data.totals.uniqueContentinteger
data.totals.screensReportinginteger
data.byContentarray of objectPer content, most successful plays first.
data.byContent[].contentIdstring`unknown` when the player did not report one.
data.byContent[].contentNamestringFalls back to the id when no name was reported.
data.byContent[].contentKindstring`media`, `app`, `creative`, …; `media` for days read from the daily rollup.
data.byContent[].screenNamestring | nullSet only when exactly one screen played it.
data.byContent[].playedinteger
data.byContent[].skippedinteger
data.byContent[].failedinteger
data.byContent[].screenCountinteger
data.byContent[].totalDurationSecinteger
data.byContent[].firstAtstringISO-8601 timestamp (UTC).
data.byContent[].lastAtstringISO-8601 timestamp (UTC).
data.screensarray of objectScreens that reported in the window, by name.
data.screens[].idstring
data.screens[].namestring
data.fromstringISO-8601 timestamp (UTC).
data.tostringISO-8601 timestamp (UTC).
data.retentionDaysintegerHow far back raw play events exist; older days come from the daily rollup.
data.truncatedbooleanAlways false: the whole window is counted.
data.fromRollupbooleanPart of the window was read from the daily rollup.

Response 401 Missing, expired or revoked bearer token.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 403 The token lacks the permission this operation needs (see `x-brix-permission`).

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

GET/v1/proof/events

Bearer token playback-log.view

List individual playback events, one per play, for a date range. The number of events returned is capped. For totals rolled up by content item and screen, use GET /v1/proof instead. **Notes.** - rollup sits beside data, outside the usual envelope.

ParameterInTypeRequiredDescription
fromquerystringnoISO-8601 start (default: the start of the report window).
toquerystringnoISO-8601 end (default: now).
screenIdquerystringno
curl "https://api.brixsignage.com/v1/proof/events" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of objectOne row per play, newest first (at most 2000), from screens the caller can see.
data[].idstring
data[].screenIdstring
data[].screenNamestringThe screen id when the screen no longer exists.
data[].contentKindstring`media` when not reported.
data[].contentIdstring`unknown` when not reported.
data[].contentNamestring`Unknown content` when not reported.
data[].startedAtstringISO-8601 timestamp (UTC).
data[].durationSecinteger
data[].result"played" | "skipped" | "failed"
data[].reasonstring | null
rolluparray of objectDaily totals for the part of the range older than the raw-event window; empty when `from` is inside it.
rollup[].daystring`YYYY-MM-DD`.
rollup[].screenIdstring
rollup[].contentIdstring
rollup[].playsinteger
rollup[].totalDurationMsinteger
rollup[].playedinteger
rollup[].skippedinteger
rollup[].failedinteger

Response 401 Missing, expired or revoked bearer token.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 403 The token lacks the permission this operation needs (see `x-brix-permission`).

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

GET/v1/proof/export

Bearer token playback-log.view

Downloads the plays in a date range with the signature and chain status of each play, a summary of counts, a SHA-256 hash of the bundle and a detached server signature. Use from, to and screenId to filter and format=json or format=csv. The newest 5,000 plays are included. Available only to workspaces with digital-out-of-home enabled; other workspaces get 404.

curl "https://api.brixsignage.com/v1/proof/export" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 4XX Client error. 404 rather than 403 for another tenant's resource, so account existence is not leaked.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

GET/v1/proof/keys

Bearer token

Lists the proof-of-play signing keys that one screen has registered. screenId is required. Each key shows its key id, when it was first seen, the key it replaced and when it was revoked. Key material is never returned. Available only to workspaces with digital-out-of-home enabled.

curl "https://api.brixsignage.com/v1/proof/keys" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 4XX Client error. 404 rather than 403 for another tenant's resource, so account existence is not leaked.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

POST/v1/proof/keys/{keyId}/revoke

Bearer token

Marks one of a screen's signing keys as bad. Send the screenId in the body. From that time, plays signed with the key show as revoked, and the next new key from the screen registers as a replacement. Calling it again has no further effect. The change is recorded in the activity log.

ParameterInTypeRequiredDescription
keyIdpathstringyesIdentifier for keyId.
curl -X POST "https://api.brixsignage.com/v1/proof/keys/{keyId}/revoke" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 4XX Client error. 404 rather than 403 for another tenant's resource, so account existence is not leaked.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

POST/v1/proof/verify-bundle

No auth

Checks a downloaded proof-of-play export against the published signing keys: the bundle hash, the server signature, and the device signature and chain of each play. No credential is needed. Requests are rate limited, and a bundle can be at most 8 MB and 5,000 plays.

curl -X POST "https://api.brixsignage.com/v1/proof/verify-bundle"

Response 4XX Client error. 404 rather than 403 for another tenant's resource, so account existence is not leaked.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.