Skip to content

API reference

Forty-two operations across ten resource groups. Every endpoint page in this section is generated from pace-call-api.v1.yaml, which in turn is generated from the running service - so a field described here is a field the server actually has.

Terminal window
https://api.pacepayments.ai

All paths carry the /v1 prefix - https://api.pacepayments.ai/v1/call-orders.

OAuth2 client credentials. Tokens come from https://auth.pacepayments.ai/oauth2/token, last 30 minutes, and have no refresh tokens.

Authorization: Bearer <access_token>

The tenant is derived from the token. There is no tenant header. See Authentication for the eight scopes and how rotation works.

application/json. Timestamps are RFC 3339 with an explicit UTC offset in both directions - a naive timestamp is rejected rather than assumed to be UTC.

Money is an object with a decimal string value, never a float:

{ "value": "129.90", "currency": "EUR" }

Phone numbers are E.164: +493514713160.

Write operations accept Idempotency-Key. Same key plus same body replays the stored response for 48 hours. See Idempotency.

One envelope on every list:

{
"data": [ ],
"has_more": true,
"next_cursor": "eyJ0IjoxNzI…"
}

Pass next_cursor back as after. limit is capped at 100.

has_more is authoritative - never infer the end of a list from the length of data. next_cursor is opaque: never parse, construct or compare it.

GET on a call order returns an ETag. Send it back as If-Match on the PATCH; a stale value returns 412 precondition_failed. The check is atomic against the stored revision.

RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset on every response, not only 429s. On a 429, Retry-After is dependable.

RFC 9457 application/problem+json on every path, including 404s. Branch on code, never on title or detail. See Handling errors.

Many string fields are marked x-extensible-enum. Values are added without an API version change. Map unknown values to your own fallback and carry on - a client that throws on an unfamiliar summary_code breaks for no reason it can see.

Resource states are the exception: call_order.status and enrollment.status are closed enums, and you can build a state machine on them.

POST /v1/call-orders Submit a call order
GET /v1/call-orders List call orders
GET /v1/call-orders/{order_id} Fetch one, including its result when terminal
PATCH /v1/call-orders/{order_id} Narrow pre-dial edits - scheduling, metadata
POST /v1/call-orders/{order_id}/cancel Cancel, in accepted or scheduled only
GET /v1/calls List dial attempts for one order
GET /v1/calls/{call_id} Fetch one attempt
GET /v1/calls/{call_id}/transcript The structured transcript, until expires_at
GET /v1/calls/{call_id}/recording Returns 404 - recording is off platform-wide
GET /v1/order-types List
POST /v1/order-types Create - starts as a draft
GET /v1/order-types/{key} Fetch
PATCH /v1/order-types/{key} Update; bumps the version on behavioural change
POST /v1/order-types/{key}/archive Archive; existing orders keep their version
POST /v1/signals Emit a business fact
GET /v1/signals/{signal_id} Fetch a signal and what it triggered
GET /v1/sequences List
POST /v1/sequences Create - draft version 1
GET /v1/sequences/{sequence_id} Fetch, including versions
POST /v1/sequences/{sequence_id}/versions Add a draft version
POST /v1/sequences/{sequence_id}/versions/{version}/activate Activate; running enrollments keep theirs
POST /v1/sequences/{sequence_id}/archive No new enrollments; running ones finish
GET /v1/enrollments List
GET /v1/enrollments/{enrollment_id} Fetch - step pointer, created orders, next action
POST /v1/enrollments/{enrollment_id}/pause Pause
POST /v1/enrollments/{enrollment_id}/resume Resume
POST /v1/enrollments/{enrollment_id}/cancel Cancel; pending orders are cancelled too
GET /v1/suppressions List do-not-call entries
POST /v1/suppressions Add one
DELETE /v1/suppressions/{suppression_id} Remove; in-call objections return 409
GET /v1/webhook-endpoints List
POST /v1/webhook-endpoints Register; starts the verification challenge
GET /v1/webhook-endpoints/{endpoint_id} Fetch, including health statistics
PATCH /v1/webhook-endpoints/{endpoint_id} Update url, event types, payload mode, status
DELETE /v1/webhook-endpoints/{endpoint_id} Delete
POST /v1/webhook-endpoints/{endpoint_id}/test Send a ping now
POST /v1/webhook-endpoints/{endpoint_id}/rotate-secret Rotate; 24-hour overlap
POST /v1/webhook-endpoints/{endpoint_id}/replay Re-dispatch from a cursor or time range
GET /v1/webhook-deliveries Delivery log, including dead-lettered
GET /v1/events The pollable feed - 30 days
GET /v1/events/{event_id} Fetch one event
GET /v1/tenant Your own configuration, quotas and retention