Data sources API

Data sources endpoints in the Brix REST API: 14 operations (GET, POST, PATCH, DELETE, PUT). Each lists its path, auth, required permission and a curl example.

View as Markdown · For AI agents: the full docs index is at /llms.txt

Base URL https://api.brixsignage.com. Send Authorization: Bearer $BRIX_API_KEY unless an operation says Auth: none or Auth: no API key. The Permission line names what the key must hold. See Authentication and scopes, Errors and rate limits and Pagination.

Every 4xx and 5xx response below returns this body:

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/data-sources

Auth: Bearer token. Permission: integration.view.

List the data feeds, such as spreadsheets, APIs, and other connectors, that creatives and apps can connect to. Credentials are encrypted at rest and are never returned. Notes. - Not paginated: every data source you can see comes back in one response (no ?limit/?cursor, unlike the app instance, creative and layout lists).

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

Response 200: Success.

FieldTypeDescription
dataarray of DataSource
data[].idstringData source id.
data[].spaceIdstring
data[].namestring
data[].typestringConnector type (csv, http-json, rest, google-sheets, ical, …). See GET /v1/connectors.
data[].configanyConnector settings with every credential-shaped value (keys, tokens, secrets, passwords) replaced by ••••••••. Send the mask back unchanged to keep the stored value.
data[].cachedDataany | nullThe last successful fetch (JSON), or null before the first sync. Also null when rowsWithheld is true.
data[].rowsWithheldbooleanTrue when this caller may see the source but not its rows: HR, revenue, CRM and analytics sources need integration.edit.
data[].connectedbooleanThe last sync succeeded.
data[].lastSyncedAtstring | null
data[].syncErrorstring | nullWhy the last sync failed; null when it succeeded.
data[].nodeIdstring | null
data[].createdAtstringISO-8601 timestamp (UTC).
data[].updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

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

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

POST /v1/data-sources

Auth: Bearer token. Permission: integration.edit.

Connect a data feed with a name, a connector type, a config, and an optional nodeId. Any credentials included in config are encrypted at rest. Test the configuration first with POST /v1/data-sources/test before creating it. Notes. - Gated by integration.edit, not integration.create.

Request body: application/json

FieldTypeRequiredDescription
namestringyes
typestringyesConnector type from GET /v1/connectors. The value is not checked here: an unknown type fails at the first sync.
configobjectnoConnector settings (JSON). The keys depend on type. Credentials are encrypted at rest and every later read shows them as ••••••••.
nodeIdstring | nullnoHome location; null or absent = workspace root. The key needs the permission there.
curl -X POST "https://api.brixsignage.com/v1/data-sources" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201: Success.

FieldTypeDescription
dataDataSourceA connected data feed. Credentials are never returned.
data.idstringData source id.
data.spaceIdstring
data.namestring
data.typestringConnector type (csv, http-json, rest, google-sheets, ical, …). See GET /v1/connectors.
data.configanyConnector settings with every credential-shaped value (keys, tokens, secrets, passwords) replaced by ••••••••. Send the mask back unchanged to keep the stored value.
data.cachedDataany | nullThe last successful fetch (JSON), or null before the first sync. Also null when rowsWithheld is true.
data.rowsWithheldbooleanTrue when this caller may see the source but not its rows: HR, revenue, CRM and analytics sources need integration.edit.
data.connectedbooleanThe last sync succeeded.
data.lastSyncedAtstring | null
data.syncErrorstring | nullWhy the last sync failed; null when it succeeded.
data.nodeIdstring | null
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

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

Response 422: name or type is missing, or invalid_node: the location is not in this workspace.

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

GET /v1/data-sources/{id}

Auth: Bearer token. Permission: integration.view.

Retrieve one data source, including its connector configuration, the time of its last sync, and its row schema. Secret values are redacted.

ParameterInTypeRequiredDescription
idpathstringyesData source id.
curl "https://api.brixsignage.com/v1/data-sources/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataDataSourceA connected data feed. Credentials are never returned.
data.idstringData source id.
data.spaceIdstring
data.namestring
data.typestringConnector type (csv, http-json, rest, google-sheets, ical, …). See GET /v1/connectors.
data.configanyConnector settings with every credential-shaped value (keys, tokens, secrets, passwords) replaced by ••••••••. Send the mask back unchanged to keep the stored value.
data.cachedDataany | nullThe last successful fetch (JSON), or null before the first sync. Also null when rowsWithheld is true.
data.rowsWithheldbooleanTrue when this caller may see the source but not its rows: HR, revenue, CRM and analytics sources need integration.edit.
data.connectedbooleanThe last sync succeeded.
data.lastSyncedAtstring | null
data.syncErrorstring | nullWhy the last sync failed; null when it succeeded.
data.nodeIdstring | null
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

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

Response 404: No such data source in this workspace.

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

PATCH /v1/data-sources/{id}

Auth: Bearer token. Permission: integration.edit.

Edit a data source's name, connector configuration, or node. Send •••••••• back for a credential to keep the stored value. To point the source at a different address or connector type, enter the credential again.

ParameterInTypeRequiredDescription
idpathstringyesData source id.

Request body: application/json

FieldTypeRequiredDescription
namestringno
typestringnoA change of type needs config with the credentials entered again.
configobjectnoConnector settings (JSON). The keys depend on type. Credentials are encrypted at rest and every later read shows them as ••••••••.
nodeIdstring | nullnoMove it; the key needs integration.edit at the destination too.
curl -X PATCH "https://api.brixsignage.com/v1/data-sources/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200: Success.

FieldTypeDescription
dataDataSourceA connected data feed. Credentials are never returned.
data.idstringData source id.
data.spaceIdstring
data.namestring
data.typestringConnector type (csv, http-json, rest, google-sheets, ical, …). See GET /v1/connectors.
data.configanyConnector settings with every credential-shaped value (keys, tokens, secrets, passwords) replaced by ••••••••. Send the mask back unchanged to keep the stored value.
data.cachedDataany | nullThe last successful fetch (JSON), or null before the first sync. Also null when rowsWithheld is true.
data.rowsWithheldbooleanTrue when this caller may see the source but not its rows: HR, revenue, CRM and analytics sources need integration.edit.
data.connectedbooleanThe last sync succeeded.
data.lastSyncedAtstring | null
data.syncErrorstring | nullWhy the last sync failed; null when it succeeded.
data.nodeIdstring | null
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

Response 403: No integration.edit at the destination location.

Response 404: No such data source in this workspace.

Response 409: conflict: the type or config changed while this request ran. Nothing was saved; read the source again and resend.

Response 422: credential_reentry_required: the change moves a masked credential to a new address or connector type (fields names what moved); or invalid_node: the destination is not in this workspace.

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

DELETE /v1/data-sources/{id}

Auth: Bearer token. Permission: integration.edit.

Delete a data source. It can be restored later with POST /v1/data-sources/:id/restore. Creatives connected to it display their fallback values while it is deleted.

ParameterInTypeRequiredDescription
idpathstringyesData source id.
curl -X DELETE "https://api.brixsignage.com/v1/data-sources/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataobject
data.idstring
data.deletedtrue

Response 401: Missing, expired or revoked bearer token.

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

Response 404: No such data source in this workspace.

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

POST /v1/data-sources/{id}/restore

Auth: Bearer token. Permission: integration.edit.

Restore a deleted data source connector. Apps and creatives connected to it begin receiving fresh data again the next time their content refreshes.

ParameterInTypeRequiredDescription
idpathstringyesData source id.
curl -X POST "https://api.brixsignage.com/v1/data-sources/{id}/restore" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataobject
data.idstring
data.restoredtrue

Response 401: Missing, expired or revoked bearer token.

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

Response 404: No such data source in this workspace.

Response 409: not_deleted: the data source is not in the recycle bin.

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

GET /v1/data-sources/{id}/revel/establishments

Auth: Bearer token.

List the Revel establishments that the saved key can read, and the locations where this data source shows. Each location gives its chosen establishment and, when there is no choice, a suggested one.

ParameterInTypeRequiredDescription
idpathstringyesIdentifier for id.
curl "https://api.brixsignage.com/v1/data-sources/{id}/revel/establishments" \
  -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.

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

PUT /v1/data-sources/{id}/revel/locations

Auth: Bearer token.

Save which Revel establishment each location reads its menu from. Send map as { location id: establishment id }. Each location must be one where this data source shows, and each establishment must be one that Revel lists for the key.

ParameterInTypeRequiredDescription
idpathstringyesIdentifier for id.
curl -X PUT "https://api.brixsignage.com/v1/data-sources/{id}/revel/locations" \
  -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.

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

POST /v1/data-sources/{id}/revel/test

Auth: Bearer token.

Check the Revel key that this data source holds. Send an optional establishmentId to check one establishment. Nothing is changed.

ParameterInTypeRequiredDescription
idpathstringyesIdentifier for id.
curl -X POST "https://api.brixsignage.com/v1/data-sources/{id}/revel/test" \
  -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.

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

POST /v1/data-sources/{id}/sync

Auth: Bearer token. Permission: integration.edit.

Pull fresh data for one data source immediately instead of waiting for its regular schedule. Runs the connector once and caches the result. A connector failure is NOT an HTTP error: the answer is 200 with synced: false and the reason.

ParameterInTypeRequiredDescription
idpathstringyesData source id.
curl -X POST "https://api.brixsignage.com/v1/data-sources/{id}/sync" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataobject | object

Response 401: Missing, expired or revoked bearer token.

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

Response 404: No such data source in this workspace.

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

POST /v1/data-sources/refresh-all

Auth: Bearer token. Permission: integration.edit.

Pull fresh data for every data source in the workspace immediately. This action is rate-limited to 5 requests per minute. Syncs, one after another, every data source the caller may edit. Rate limited to 5 calls a minute.

curl -X POST "https://api.brixsignage.com/v1/data-sources/refresh-all" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataobject
data.totalinteger
data.okinteger
data.failedinteger

Response 401: Missing, expired or revoked bearer token.

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

Response 429: More than 5 calls in a minute.

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

POST /v1/data-sources/revel/test

Auth: Bearer token.

Check a Revel address, API key and API secret before you save them. Send an optional establishmentId to check one establishment. Nothing is saved. The Revel connector must be turned on for the workspace.

curl -X POST "https://api.brixsignage.com/v1/data-sources/revel/test" \
  -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.

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

GET /v1/data-sources/sheets-methods

Auth: Bearer token. Permission: integration.view.

List the ways a Google Sheet can be shared with the platform, and the address to share it with. The response may include publicLink, serviceAccount, and oauth, depending on what the platform supports; a method is listed only if it is actually available. serviceAccount is not a secret; it is the address you enter into Google's Share dialog.

curl "https://api.brixsignage.com/v1/data-sources/sheets-methods" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataobject
data.publicLinktrueA sheet shared as "anyone with the link" always works.
data.serviceAccountstring | nullThe address to share a private sheet with; null when this method is not available.
data.oauthbooleanA private sheet can be picked by signing in with Google.

Response 401: Missing, expired or revoked bearer token.

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

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

POST /v1/data-sources/test

Auth: Bearer token. Permission: integration.edit.

Validate a connector configuration without saving it. Returns { ok: true, preview } on success or { ok: false, error } on failure, so a misconfigured feed can be caught before it is created. Runs the connector once with a config that is not saved. A connector failure is NOT an HTTP error: the answer is 200 with ok: false and the reason. Rate limited to 20 calls a minute.

Request body: application/json

FieldTypeRequiredDescription
typestringyes
configobjectnoConnector settings (JSON). The keys depend on type. Credentials are encrypted at rest and every later read shows them as ••••••••.
curl -X POST "https://api.brixsignage.com/v1/data-sources/test" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200: Success.

FieldTypeDescription
dataobject | object

Response 401: Missing, expired or revoked bearer token.

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

Response 429: More than 20 calls in a minute.

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