Skip to main content
Every endpoint follows the same conventions, so you only learn them once.

Response envelope

Every successful response is wrapped in a uniform envelope:
List endpoints add a meta object with pagination:
A 204 No Content response (for example, deleting a campaign) has no body.

Pagination

List endpoints accept:
integer
default:"1"
Page number, starting at 1.
integer
default:"20"
Items per page, between 1 and 100.
The response meta returns page, limit, total, and totalPages. Some list endpoints add extra keys to meta (for example, the campaigns list adds status counts). A few high-volume reads use cursor pagination instead (a cursor plus limit) — noted on those endpoints.

Rate limits

Limits apply at two levels: Workspace responses include headers so you can back off proactively:
When you exceed a limit you receive 429 Too Many Requests with a Retry-After header (seconds). Some expensive endpoints (like segment preview) have tighter per-route limits.

Errors

Errors use a consistent shape:
Common statuses: 400 (validation, non-UUID id, or an unknown field), 401 (bad/expired credentials), 403 (missing permission, or an API key on a session-only route), 404 (not found), 429 (rate limited).

Validation

  • Request bodies are strict: unknown fields are rejected with a 400.
  • All :id path parameters must be UUIDs.
  • Query parameters are typed — send numbers and booleans in the expected form.

Idempotency

Where an operation must not double-fire (for example, sending an inbox message), you provide a clientMessageId (a UUID you generate). Reusing the same value is treated as the same request.

Browse the resources

Endpoints for contacts, segments, campaigns, and more.