Applications
API v1 · stablestatus
Docs / Control plane
Applications
An Application is one of your products. List, create, read. Every send names one, so "which product sent this?" is a filter. Create respects the plan's application cap.
GET /v1/applications · POST /v1/applications · GET /v1/applications/{id}
Authentication
List and show need applications:read. Create needs applications:write.
Keys rule — prefix, shown once, abilities never widen, and no key carries both messages:send and messages:read-content.
The object
idInteger id.
nameDisplay name.
slugalpha_dash, unique on the account. The value a send passes as application.
environmentprod, staging, or dev.
daily_send_limitPer-application daily cap, or null to use the account cap.
default_transport_idTransport used when a send names none, or null.
archived_atWhen the application was archived, or null. A send through an archived application is refused.
created_atWhen the row was created, ISO 8601.
{
"data": {
"id": 2,
"name": "Billing",
"slug": "billing-prod",
"environment": "prod",
"daily_send_limit": null,
"default_transport_id": null,
"archived_at": null,
"created_at": "2026-08-06T08:11:01+00:00"
}
}List
GET /v1/applications returns these objects in data, plus next_cursor.
curl
PHP
Node
Python
Ruby
Create parameters
namestring ≤ 255requiredDisplay name.
slugstring ≤ 64requiredalpha_dash. Unique per account.
environmentenumrequiredprod | staging | dev.
daily_send_limitinteger ≥ 1optionalPer-app daily cap; null inherits account.
Create
201 returns the object above.
curl
PHP
Node
Python
Ruby
Show
One application by id. The body is the same object. Cross-account is 404.
curl
PHP
Node
Python
Ruby
Responses & failures
422slug already on this account
response body
{
"message": "An application with this slug already exists on this account."
}401 / 403 as on every other surface. Cross-account show is 404.