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.
Authentication
List and show need applications:read. Create needs applications:write. Endpoints: GET /v1/applications, POST /v1/applications, GET /v1/applications/{id}.
Create parameters
namestring ≤ 255requiredDisplay name.
slugstring ≤ 64requiredalpha_dash. Unique per account.
environmentenumrequiredprod | staging | dev.
daily_send_limitinteger ≥ 1optionalPer-app daily cap; null inherits account.
Worked example
captured LOCAL
{
"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"
}
}{
"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"
},
{
"id": 1,
"name": "App",
"slug": "app",
"environment": "prod",
"daily_send_limit": null,
"default_transport_id": 1,
"archived_at": null,
"created_at": "2026-08-06T08:11:00+00:00"
}
],
"next_cursor": null
}Show
One application by id. Same object as a list row. Cross-account is 404.
captured LOCAL
{
"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"
}
}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.