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.
Base URL
Section titled “Base URL”https://api.pacepayments.aihttps://sandbox.api.pacepayments.aiAll paths carry the /v1 prefix - https://api.pacepayments.ai/v1/call-orders.
Authentication
Section titled “Authentication”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.
Conventions
Section titled “Conventions”Request bodies
Section titled “Request bodies”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.
Idempotency
Section titled “Idempotency”Write operations accept Idempotency-Key. Same key plus same body replays the stored
response for 48 hours. See Idempotency.
Pagination
Section titled “Pagination”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.
Concurrency
Section titled “Concurrency”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.
Rate limits
Section titled “Rate limits”RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset on every response,
not only 429s. On a 429, Retry-After is dependable.
Errors
Section titled “Errors”RFC 9457 application/problem+json on every path, including 404s. Branch on code,
never on title or detail. See Handling errors.
Open registries
Section titled “Open registries”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.
Endpoints
Section titled “Endpoints”Call orders
Section titled “Call orders”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 |
Order types
Section titled “Order types”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 |
Signals
Section titled “Signals”POST /v1/signals |
Emit a business fact |
GET /v1/signals/{signal_id} |
Fetch a signal and what it triggered |
Sequences
Section titled “Sequences”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 |
Enrollments
Section titled “Enrollments”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 |
Suppressions
Section titled “Suppressions”GET /v1/suppressions |
List do-not-call entries |
POST /v1/suppressions |
Add one |
DELETE /v1/suppressions/{suppression_id} |
Remove; in-call objections return 409 |
Webhooks
Section titled “Webhooks”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 |
Events
Section titled “Events”GET /v1/events |
The pollable feed - 30 days |
GET /v1/events/{event_id} |
Fetch one event |
Tenant
Section titled “Tenant”GET /v1/tenant |
Your own configuration, quotas and retention |