Billing groups API

Billing groups endpoints in the Brix REST API: 6 operations (GET, POST, PATCH, DELETE). 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/billing-groups

Auth: Bearer token. Permission: billing.view.

Returns the workspace's billing groups (who pays for which screens), each with its current count of billable screens. Notes. - Sorted by name; not paginated. Unlike the single read, list rows have no createdAt / updatedAt.

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

Response 200: Success.

FieldTypeDescription
dataarray of object
data[].idstring
data[].namestring
data[].financeContactNamestring | null
data[].financeContactEmailstring | nullWhere this group's invoices go.
data[].chargebeeCustomerIdstring | nullThe billing customer linked by Brix; null until linked.
data[].chargebeeSubscriptionIdstring | nullThe subscription linked by Brix; null until linked.
data[].subscriptionStatusstring | null
data[].paymentTermsDaysinteger | nullNet payment terms in days; null = the workspace default.
data[].screenCountintegerScreens billed to this group.

Response 401: Missing, expired or revoked bearer token.

Response 403: You do not hold the permission for the whole workspace (a grant at one location is not enough).

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

POST /v1/billing-groups

Auth: Bearer token. Permission: billing.edit.

Creates a billing group with a name and finance contact. Connecting it to an account with the billing provider is a separate step; one is never created automatically here. Notes. - The group bills nothing until Brix links it to a billing account.

Request body: application/json

FieldTypeRequiredDescription
namestringyes
financeContactNamestringno
financeContactEmailstringnoStored in lower case.
paymentTermsDaysnumbernoNet terms in days; rounded. Not range-checked on create.
curl -X POST "https://api.brixsignage.com/v1/billing-groups" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201: Success.

FieldTypeDescription
dataBillingGroupA group of screens billed separately (its own invoice and finance contact).
data.idstring
data.namestring
data.financeContactNamestring | null
data.financeContactEmailstring | nullWhere this group's invoices go.
data.chargebeeCustomerIdstring | nullThe billing customer linked by Brix; null until linked.
data.chargebeeSubscriptionIdstring | nullThe subscription linked by Brix; null until linked.
data.subscriptionStatusstring | null
data.paymentTermsDaysinteger | nullNet payment terms in days; null = the workspace default.
data.screenCountintegerScreens billed to this group.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

Response 403: You do not hold the permission for the whole workspace (a grant at one location is not enough).

Response 422: name missing.

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

GET /v1/billing-groups/{id}

Auth: Bearer token. Permission: billing.view.

Returns one billing group by id.

ParameterInTypeRequiredDescription
idpathstringyesBilling group id.
curl "https://api.brixsignage.com/v1/billing-groups/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataBillingGroupA group of screens billed separately (its own invoice and finance contact).
data.idstring
data.namestring
data.financeContactNamestring | null
data.financeContactEmailstring | nullWhere this group's invoices go.
data.chargebeeCustomerIdstring | nullThe billing customer linked by Brix; null until linked.
data.chargebeeSubscriptionIdstring | nullThe subscription linked by Brix; null until linked.
data.subscriptionStatusstring | null
data.paymentTermsDaysinteger | nullNet payment terms in days; null = the workspace default.
data.screenCountintegerScreens billed to this group.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

Response 403: You do not hold the permission for the whole workspace (a grant at one location is not enough).

Response 404: No such group in this workspace.

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

PATCH /v1/billing-groups/{id}

Auth: Bearer token. Permission: billing.edit.

Updates a billing group's name, finance contact, or invoice terms. Notes. - paymentTermsDays is range-checked here (1–365) but not on create.

ParameterInTypeRequiredDescription
idpathstringyesBilling group id.

Request body: application/json

FieldTypeRequiredDescription
namestringno
financeContactNamestring | nullno
financeContactEmailstring | nullno
paymentTermsDaysnumber | nullno1–365, or null to use the workspace default.
curl -X PATCH "https://api.brixsignage.com/v1/billing-groups/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200: Success.

FieldTypeDescription
dataBillingGroupA group of screens billed separately (its own invoice and finance contact).
data.idstring
data.namestring
data.financeContactNamestring | null
data.financeContactEmailstring | nullWhere this group's invoices go.
data.chargebeeCustomerIdstring | nullThe billing customer linked by Brix; null until linked.
data.chargebeeSubscriptionIdstring | nullThe subscription linked by Brix; null until linked.
data.subscriptionStatusstring | null
data.paymentTermsDaysinteger | nullNet payment terms in days; null = the workspace default.
data.screenCountintegerScreens billed to this group.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

Response 403: You do not hold the permission for the whole workspace (a grant at one location is not enough).

Response 404: No such group.

Response 422: Empty name, or paymentTermsDays outside 1–365.

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

DELETE /v1/billing-groups/{id}

Auth: Bearer token. Permission: billing.edit.

Soft-deletes a billing group. Returns 409 if any screens are still billed to it; move or remove those screens first.

ParameterInTypeRequiredDescription
idpathstringyesBilling group id.
curl -X DELETE "https://api.brixsignage.com/v1/billing-groups/{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: You do not hold the permission for the whole workspace (a grant at one location is not enough).

Response 404: No such group.

Response 409: group_in_use: screens still bill to it; move them first (PATCH /v1/screens/:id billingGroupId).

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

POST /v1/billing-groups/{id}/screens

Auth: Bearer token. Permission: billing.edit.

Assigns a batch of screens to a billing group. This updates the destination group, every group the screens are moving from, and the workspace subscription, so screen counts and billing stay in sync.

ParameterInTypeRequiredDescription
idpathstringyesBilling group id.

Request body: application/json

FieldTypeRequiredDescription
screenIdsarray of stringyesUp to 500 are read; more are ignored. Ids that are not live screens are skipped.
curl -X POST "https://api.brixsignage.com/v1/billing-groups/{id}/screens" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200: Success.

FieldTypeDescription
dataobject
data.idstring
data.assignedintegerScreens moved into the group.
data.skippedintegerIds not moved (unknown, or already in the group).
data.screenCountinteger

Response 401: Missing, expired or revoked bearer token.

Response 403: You lack billing.edit at one of the screens' locations (the response names them in screenIds); nothing changes. Also: You do not hold the permission for the whole workspace (a grant at one location is not enough).

Response 404: No such group, or none of the ids is a live screen.

Response 422: screenIds missing or empty.

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