Skip to content

Customers API

If you stream for your own customers (you are a partner), each stream names its customer with customer_ref, your own identifier. Booking a stream registers its customer; these endpoints name, list and archive them, and pull their recordings.

This page is generated from the OpenAPI specification; the same text is inMarkdown for tools and AI assistants.

List customers

GET/v1/customers

Your customers, ordered by customer_ref. Archived customers are left out unless you ask for them. Page with cursor until next_cursor is absent.

Query parameters

NameTypeDescription
limitinteger

Page size, 1-200. Default 50; more than 200 is treated as 200.

cursorstring

The previous page’s next_cursor.

include_archivedstring

true to include archived customers.

One of "true", "false", "1", "0".

Response 200

A page of customers.

Fields
NameTypeDescription
customersrequiredarray of object
customers[].customer_refrequiredstring

Your identifier for a customer. 1-128 letters, digits, ., _ or -; not . or ...

customers[].namerequiredstring or null
customers[].metadatarequiredobject

Your own labels, returned as given.

customers[].created_atrequiredstring (date-time)
customers[].updated_atrequiredstring (date-time)
customers[].archived_atrequiredstring (date-time) or null
next_cursorstring

Present when there is another page. Pass it as cursor.

Errors

StatusCodeMeaning
400invalid_limit

limit is not a positive whole number.

400invalid_cursor

cursor is not a next_cursor from a previous page.

400invalid_include_archived

include_archived is not true or false.

Terminal window
curl "https://api.cardinalstreaming.com/v1/customers" \
-H "Authorization: Bearer $CARDINAL_API_KEY"
Response 200
{
"customers": [
{
"customer_ref": "grace-chapel",
"name": "Grace Chapel",
"metadata": {
"crm_id": "C-1042"
},
"created_at": "2026-09-01T14:02:11Z",
"updated_at": "2026-09-12T09:40:00Z",
"archived_at": null
}
]
}

Create a customer

POST/v1/customers

Registers a customer ahead of its first stream, with a name and your own metadata. Booking a stream registers its customer anyway; create one only to name it first.

Request body

NameTypeDescription
customer_refrequiredstring

Your identifier for a customer. 1-128 letters, digits, ., _ or -; not . or ...

namestring

1-200 characters.

metadataobject

Up to 50 keys of 1-40 characters, values up to 500 characters, 4 KB in all.

Response 201

The customer.

Fields
NameTypeDescription
customer_refrequiredstring

Your identifier for a customer. 1-128 letters, digits, ., _ or -; not . or ...

namerequiredstring or null
metadatarequiredobject

Your own labels, returned as given.

created_atrequiredstring (date-time)
updated_atrequiredstring (date-time)
archived_atrequiredstring (date-time) or null

Errors

StatusCodeMeaning
400invalid_body

The body is not a JSON object of the documented fields.

400invalid_customer_ref

customer_ref is missing or not a valid customer reference.

400invalid_name

name is not 1-200 characters without leading or trailing spaces.

400invalid_metadata

metadata has too many keys, a key or value too long, or is over 4 KB.

409customer_exists

A customer with this customer_ref already exists (booking a stream registers one).

Terminal window
curl -X POST "https://api.cardinalstreaming.com/v1/customers" \
-H "Authorization: Bearer $CARDINAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customer_ref": "grace-chapel",
"name": "Grace Chapel",
"metadata": {
"crm_id": "C-1042"
}
}'
Response 201
{
"customer_ref": "grace-chapel",
"name": "Grace Chapel",
"metadata": {
"crm_id": "C-1042"
},
"created_at": "2026-09-01T14:02:11Z",
"updated_at": "2026-09-12T09:40:00Z",
"archived_at": null
}

Read a customer

GET/v1/customers/{customer_ref}

Path parameters

NameTypeDescription
customer_refrequiredstring

Your identifier for the customer.

Response 200

The customer.

Fields
NameTypeDescription
customer_refrequiredstring

Your identifier for a customer. 1-128 letters, digits, ., _ or -; not . or ...

namerequiredstring or null
metadatarequiredobject

Your own labels, returned as given.

created_atrequiredstring (date-time)
updated_atrequiredstring (date-time)
archived_atrequiredstring (date-time) or null

Errors

StatusCodeMeaning
400invalid_customer_ref

The path’s customer reference is not valid.

404not_found

No such customer in your organization.

Terminal window
curl "https://api.cardinalstreaming.com/v1/customers/grace-chapel" \
-H "Authorization: Bearer $CARDINAL_API_KEY"
Response 200
{
"customer_ref": "grace-chapel",
"name": "Grace Chapel",
"metadata": {
"crm_id": "C-1042"
},
"created_at": "2026-09-01T14:02:11Z",
"updated_at": "2026-09-12T09:40:00Z",
"archived_at": null
}

Update or archive a customer

PATCH/v1/customers/{customer_ref}

Every field is optional: absent leaves it, "name": null clears the name, metadata replaces the whole set, and "archived": true archives the customer. An archived customer keeps its history and recordings, but no stream can be booked for it until it is unarchived.

Path parameters

NameTypeDescription
customer_refrequiredstring

Your identifier for the customer.

Request body

NameTypeDescription
namestring or null

A new name, or null to clear it.

metadataobject

Replaces the whole set.

archivedboolean

Response 200

The customer as it now is.

Fields
NameTypeDescription
customer_refrequiredstring

Your identifier for a customer. 1-128 letters, digits, ., _ or -; not . or ...

namerequiredstring or null
metadatarequiredobject

Your own labels, returned as given.

created_atrequiredstring (date-time)
updated_atrequiredstring (date-time)
archived_atrequiredstring (date-time) or null

Errors

StatusCodeMeaning
400invalid_body

The body is not a JSON object of the documented fields.

400invalid_customer_ref

The path’s customer reference is not valid.

400invalid_name

name is not a string of 1-200 characters, or null.

400invalid_metadata

metadata has too many keys, a key or value too long, or is over 4 KB.

404not_found

No such customer in your organization.

Terminal window
curl -X PATCH "https://api.cardinalstreaming.com/v1/customers/grace-chapel" \
-H "Authorization: Bearer $CARDINAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Grace Chapel Downtown",
"archived": false
}'