Skip to content

Submit a call order (Gesprächsauftrag)

POST
/v1/call-orders
curl https://api.pacepayments.ai/v1/call-orders \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: 7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11' \
--header 'Content-Type: application/json' \
--data '{
"order_type": "zahlungserinnerung",
"subject": {
"reference": "CUST-88213",
"name": {
"family_name": "<Family Name>"
},
"date_of_birth": "2026-08-30",
"locale": "de-DE",
"timezone": "Europe/Berlin"
},
"contacts": [
{
"channel": "phone",
"value": "<Value>",
"priority": 1
}
],
"context": {
"claim": {
"outstanding": {
"value": "129.90",
"currency": "EUR"
},
"original": {
"value": "129.90",
"currency": "EUR"
},
"creditor_name": "Truman Textilien GmbH",
"basis": {
"kind": "<Kind>",
"description": "Jahresabo Textilpflege Premium, abgeschlossen am 12.06.2025",
"concluded_on": "2026-08-30"
},
"titled": false,
"disclosure": {
"sent_at": "2026-08-30"
},
"reference": {
"invoice_date": "2026-08-30"
},
"due_date": "2026-08-30",
"in_default_since": "2026-08-30"
},
"history": [
{
"channel": "<Channel>",
"direction": "outbound",
"occurred_at": "2026-08-30T09:14:22+02:00"
}
]
}
}'
Idempotency-Key
Any of:
string

One unique key per logical request (a UUID is recommended). The response is stored against (tenant, key, method, RESOLVED path) - the same key against a different path returns 409 idempotency_key_conflict. Same key plus same body replays the stored response for 48 hours.

Media typeapplication/json
CallOrderCreate

POST /v1/call-orders. Everything else has sensible defaults.

object
order_type
required
Order Type
string
>= 2 characters <= 64 characters /^[a-z][a-z0-9_]{1,63}$/
client_reference
Any of:
string
>= 1 characters <= 128 characters
subject
required
Subject
object
reference
required
Reference

A stable person key ON YOUR SIDE. It carries the suppression check, sequence deduplication and access/erasure requests - it MUST denote the same person across every order. An empty or reused value silently merges two people into one.

string
>= 1 characters <= 128 characters
name
required
PersonName
object
given_name
Any of:
string
<= 100 characters
family_name
required
Family Name
string
>= 1 characters <= 100 characters
salutation
Any of:
string
<= 30 characters
date_of_birth
Any of:
string format: date
address
Any of:
PostalAddress
object
street
Any of:
string
<= 200 characters
house_number
Any of:
string
<= 20 characters
postal_code
Any of:
string
<= 12 characters
city
Any of:
string
<= 100 characters
country
Any of:
string
/^[A-Z]{2}$/
locale
Any of:
string
/^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/
timezone
Any of:
string
contacts
required
Contacts
Array<object>
>= 1 items <= 10 items
ContactChannel
object
channel
required
Channel

V1 dials phone entries only; anything else is context for the agent (‘we emailed you the link’).

string
value
required
Value
string
>= 3 characters <= 320 characters
type
Any of:
string
priority
Any of:
integer
>= 1
context
required
OrderContext

Everything the agent needs for this conversation.

object
claim
required
Claim
object
outstanding
required
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
original
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
breakdown
Any of:
ClaimBreakdown

Itemisation of the claim.

object
principal
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
interest
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
dunning_fees
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
collection_fees
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
expenses
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
already_paid
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
creditor_name
required
Creditor Name

The CREDITOR on whose behalf you are collecting - not your own name. Named to the debtor on first contact and whenever asked.

string
>= 2 characters <= 200 characters
basis
required
ClaimBasis

Where the claim comes from - the answer to “what is this about?”.

object
kind
required
Kind
string
description
Any of:
string
<= 300 characters
concluded_on
Any of:
string format: date
titled
Titled

True when the claim carries an enforcement title (Mahnbescheid, Vollstreckungsbescheid, judgment). It changes what the agent may say about consequences and it extends the limitation period, so it is NEVER inferred.

boolean
title_reference
Any of:
string
<= 64 characters
disclosure
Any of:
ClaimDisclosure

The written statutory notice you have already sent.

It lets the agent REFER to that notice instead of improvising the disclosure. Whether your calls must carry the disclosure as well is your determination - this field is the record that you have provided it.

object
sent_at
Any of:
string format: date
reference
Any of:
string
<= 64 characters
reference
Any of:
ClaimReference
object
contract_number
Any of:
string
<= 64 characters
invoice_number
Any of:
string
<= 64 characters
invoice_date
Any of:
string format: date
case_number
Any of:
string
<= 64 characters
due_date
Any of:
string format: date
in_default_since
Any of:
string format: date
description
Any of:
string
<= 500 characters
history
History

Earlier touches, newest last. Capped - send what matters, not half your CRM.

Array<object>
<= 50 items
HistoryEntry

An earlier touch, on ANY channel.

The asymmetry with contacts is deliberate: sms, letter and whatsapp are allowed here because they record what YOU have already done. contacts does not know them, because Pace only makes calls. The agent uses the history for tone and continuity (“we have already written to you twice”).

object
channel
required
Channel
string
direction
required
Direction
string
Allowed values: outbound inbound
occurred_at
required
Occurred At
string format: date-time
kind
Any of:
string
<= 64 characters
outcome
Any of:
string
<= 64 characters
summary
Any of:
string
<= 1000 characters
reference
Any of:
string
<= 128 characters
variables
Any of:
object
key
additional properties
any
notes
Any of:
string
<= 2000 characters
scheduling
Any of:
Scheduling
object
window
Any of:
SchedulingWindow
object
not_before
Any of:
string format: date-time
not_after
Any of:
string format: date-time
local_call_times
Any of:
Array<object>
<= 7 items
LocalCallTime

A window in the timezone of the person BEING CALLED, not ours.

object
days
required
Days
Array<string>
>= 1 items <= 7 items
Allowed values: mon tue wed thu fri sat sun
from
required
From

Lokale Wanduhrzeit, 24 h, fuehrende Null.

string
/^([01]\d|2[0-3]):[0-5]\d$/
to
required
To

Lokale Wanduhrzeit, 24 h, fuehrende Null.

string
/^([01]\d|2[0-3]):[0-5]\d$/
max_attempts
Max Attempts
integer
default: 3 >= 1 <= 10
retry
Any of:
RetryPolicy
object
min_gap_hours
Min Gap Hours

Minimum gap between two attempts against the same person.

number
default: 24 >= 1
randomize_within_window
Randomize Within Window

Scatters the redial instant within the permitted window, so the same person is not called at the same minute every day.

boolean
default: true
retry_on
Retry On

Only unreached attempts can trigger a retry. A conversation that actually took place is never a reason to call again.

Array<string>
on_window_violation
On Window Violation

What happens when your window and the permitted window do not intersect: defer moves the order into the permitted window (and the order may end up expired), reject refuses acceptance with a 422.

string
default: defer
Allowed values: defer reject
negotiation
Any of:
Negotiation

The decision corridor. The agent never goes beyond it.

object
installments
Any of:
InstallmentPolicy
object
allowed
Any of:
boolean
max_count
Any of:
integer
>= 2 <= 24
min_installment
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
conclusion_mode
Conclusion Mode

The agent RECORDS THE WISH. It concludes nothing - the binding agreement is one you make afterwards, in writing. There is deliberately no second value.

string
default: record_wish_only
Allowed value: record_wish_only
settlement
Any of:
SettlementPolicy
object
allowed
Any of:
boolean
min_ratio
Any of:
number
<= 1
conclusion_mode
Conclusion Mode
string
default: record_wish_only
Allowed value: record_wish_only
promise_to_pay
Any of:
PromiseToPayPolicy
object
allowed
Any of:
boolean
max_days
Any of:
integer
>= 1 <= 90
payment_rails
Any of:
Array<string>
delivery
Any of:
DeliveryPrefs
object
webhook_endpoint_ids
Any of:
Array<string>
transcript
Transcript

Capped by your tenant retention rule - structured never delivers more than the tenant is allowed to retain.

string
default: structured
Allowed values: none summary_only structured
include_recording_reference
Include Recording Reference
boolean
metadata
Any of:

Your own opaque key-value pairs; mirrored on resources and in every event. CONTRACTUALLY free of personal data - Pace does not inspect the values. Whatever you put here falls outside the deletion and retention machinery that protects the rest of the order.

object
key
additional properties
any
simulate
Any of:
SimulateBlock

SANDBOX ONLY.

Three capabilities: forced outcomes, per-attempt dispositions and artificial delays. The block is typed rather than free-form on purpose - untyped, a typo such as dispostions would surface as a call that behaves wrongly instead of a 422 at submission, and in an environment that exists solely for trying things out that is the wrong direction.

Sent to the LIVE host, a simulate block returns 403 simulate_not_allowed - never a silent ignore. Otherwise you would believe you were testing while a real person was being called.

object
outcome
Any of:
string
dispositions
Any of:
Array<string>
>= 1 items <= 10 items
Allowed values: answered no_answer voicemail failed
delay_seconds
Any of:
integer
<= 600

Order accepted for asynchronous execution.

Media typeapplication/json
CallOrder
object
order_type
required
Order Type
string
client_reference
Any of:
string
subject
required
Subject
object
reference
required
Reference

A stable person key ON YOUR SIDE. It carries the suppression check, sequence deduplication and access/erasure requests - it MUST denote the same person across every order. An empty or reused value silently merges two people into one.

string
>= 1 characters <= 128 characters
name
required
PersonName
object
given_name
Any of:
string
<= 100 characters
family_name
required
Family Name
string
>= 1 characters <= 100 characters
salutation
Any of:
string
<= 30 characters
date_of_birth
Any of:
string format: date
address
Any of:
PostalAddress
object
street
Any of:
string
<= 200 characters
house_number
Any of:
string
<= 20 characters
postal_code
Any of:
string
<= 12 characters
city
Any of:
string
<= 100 characters
country
Any of:
string
/^[A-Z]{2}$/
locale
Any of:
string
/^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/
timezone
Any of:
string
contacts
required
Contacts
Array<object>
ContactChannel
object
channel
required
Channel

V1 dials phone entries only; anything else is context for the agent (‘we emailed you the link’).

string
value
required
Value
string
>= 3 characters <= 320 characters
type
Any of:
string
priority
Any of:
integer
>= 1
context
required
OrderContext

Everything the agent needs for this conversation.

object
claim
required
Claim
object
outstanding
required
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
original
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
breakdown
Any of:
ClaimBreakdown

Itemisation of the claim.

object
principal
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
interest
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
dunning_fees
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
collection_fees
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
expenses
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
already_paid
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
creditor_name
required
Creditor Name

The CREDITOR on whose behalf you are collecting - not your own name. Named to the debtor on first contact and whenever asked.

string
>= 2 characters <= 200 characters
basis
required
ClaimBasis

Where the claim comes from - the answer to “what is this about?”.

object
kind
required
Kind
string
description
Any of:
string
<= 300 characters
concluded_on
Any of:
string format: date
titled
Titled

True when the claim carries an enforcement title (Mahnbescheid, Vollstreckungsbescheid, judgment). It changes what the agent may say about consequences and it extends the limitation period, so it is NEVER inferred.

boolean
title_reference
Any of:
string
<= 64 characters
disclosure
Any of:
ClaimDisclosure

The written statutory notice you have already sent.

It lets the agent REFER to that notice instead of improvising the disclosure. Whether your calls must carry the disclosure as well is your determination - this field is the record that you have provided it.

object
sent_at
Any of:
string format: date
reference
Any of:
string
<= 64 characters
reference
Any of:
ClaimReference
object
contract_number
Any of:
string
<= 64 characters
invoice_number
Any of:
string
<= 64 characters
invoice_date
Any of:
string format: date
case_number
Any of:
string
<= 64 characters
due_date
Any of:
string format: date
in_default_since
Any of:
string format: date
description
Any of:
string
<= 500 characters
history
History

Earlier touches, newest last. Capped - send what matters, not half your CRM.

Array<object>
<= 50 items
HistoryEntry

An earlier touch, on ANY channel.

The asymmetry with contacts is deliberate: sms, letter and whatsapp are allowed here because they record what YOU have already done. contacts does not know them, because Pace only makes calls. The agent uses the history for tone and continuity (“we have already written to you twice”).

object
channel
required
Channel
string
direction
required
Direction
string
Allowed values: outbound inbound
occurred_at
required
Occurred At
string format: date-time
kind
Any of:
string
<= 64 characters
outcome
Any of:
string
<= 64 characters
summary
Any of:
string
<= 1000 characters
reference
Any of:
string
<= 128 characters
variables
Any of:
object
key
additional properties
any
notes
Any of:
string
<= 2000 characters
scheduling
Any of:
Scheduling
object
window
Any of:
SchedulingWindow
object
not_before
Any of:
string format: date-time
not_after
Any of:
string format: date-time
local_call_times
Any of:
Array<object>
<= 7 items
LocalCallTime

A window in the timezone of the person BEING CALLED, not ours.

object
days
required
Days
Array<string>
>= 1 items <= 7 items
Allowed values: mon tue wed thu fri sat sun
from
required
From

Lokale Wanduhrzeit, 24 h, fuehrende Null.

string
/^([01]\d|2[0-3]):[0-5]\d$/
to
required
To

Lokale Wanduhrzeit, 24 h, fuehrende Null.

string
/^([01]\d|2[0-3]):[0-5]\d$/
max_attempts
Max Attempts
integer
default: 3 >= 1 <= 10
retry
Any of:
RetryPolicy
object
min_gap_hours
Min Gap Hours

Minimum gap between two attempts against the same person.

number
default: 24 >= 1
randomize_within_window
Randomize Within Window

Scatters the redial instant within the permitted window, so the same person is not called at the same minute every day.

boolean
default: true
retry_on
Retry On

Only unreached attempts can trigger a retry. A conversation that actually took place is never a reason to call again.

Array<string>
on_window_violation
On Window Violation

What happens when your window and the permitted window do not intersect: defer moves the order into the permitted window (and the order may end up expired), reject refuses acceptance with a 422.

string
default: defer
Allowed values: defer reject
negotiation
Any of:
Negotiation

The decision corridor. The agent never goes beyond it.

object
installments
Any of:
InstallmentPolicy
object
allowed
Any of:
boolean
max_count
Any of:
integer
>= 2 <= 24
min_installment
Any of:
Money
object
value
required
Value

An exact decimal, as a string - no float drift.

string
/^-?\d+(\.\d{1,2})?$/
currency
required
Currency

ISO 4217.

string
/^[A-Z]{3}$/
conclusion_mode
Conclusion Mode

The agent RECORDS THE WISH. It concludes nothing - the binding agreement is one you make afterwards, in writing. There is deliberately no second value.

string
default: record_wish_only
Allowed value: record_wish_only
settlement
Any of:
SettlementPolicy
object
allowed
Any of:
boolean
min_ratio
Any of:
number
<= 1
conclusion_mode
Conclusion Mode
string
default: record_wish_only
Allowed value: record_wish_only
promise_to_pay
Any of:
PromiseToPayPolicy
object
allowed
Any of:
boolean
max_days
Any of:
integer
>= 1 <= 90
payment_rails
Any of:
Array<string>
delivery
Any of:
DeliveryPrefs
object
webhook_endpoint_ids
Any of:
Array<string>
transcript
Transcript

Capped by your tenant retention rule - structured never delivers more than the tenant is allowed to retain.

string
default: structured
Allowed values: none summary_only structured
include_recording_reference
Include Recording Reference
boolean
metadata
Any of:

Your own opaque key-value pairs; mirrored on resources and in every event. CONTRACTUALLY free of personal data - Pace does not inspect the values. Whatever you put here falls outside the deletion and retention machinery that protects the rest of the order.

object
key
additional properties
any
id
required
Id
string
status
required
Status
string
Allowed values: accepted scheduled in_progress completed canceled expired failed
order_type_version
required
Order Type Version

The order-type version that applied at acceptance. Burned in, so the result stays interpretable after a configuration change.

integer
>= 1
enrollment_id
Any of:
string
attempt_count
Attempt Count
integer
0
next_attempt_at
Any of:
string format: date-time
decisive_call_id
Any of:
string
cancel_reason
Any of:
string
result
Any of:
Result

Present on EVERY terminal order - including those with no conversation.

Exactly ONE place a client looks to see how an order turned out. result is absent only while the order is still running.

object
reachability
required
Reachability
string
Allowed values: reached not_reached voicemail_only wrong_party invalid_contact
engagement
required
Engagement
string
Allowed values: none hangup_no_interaction identified_then_hangup declined_conversation partial_conversation conversation
identity
Any of:
Identity
object
verified
Any of:
boolean
method
Any of:
string
attempts
Any of:
integer
termination
required
Termination
object
actor
required
Actor

Always system on orders that never reached a live counterpart - the block is never invented.

string
Allowed values: subject agent system
reason
required
Reason
string
detail
Any of:
string
<= 500 characters
summary_code
required
Summary Code

The canonical summary - one value to branch on.

string
summary_code_raw
Any of:
string
outcomes
Outcomes
Array<object>
ConversationOutcome

One structured outcome. A client MUST ignore types it does not know.

object
type
required
Type
string
data
Any of:
object
key
additional properties
any
summary_text
Any of:
string
<= 2000 characters
compliance
ComplianceBlock
object
ai_disclosure
Any of:
AiDisclosure
object
disclosed
Any of:
boolean
at
Any of:
string format: date-time
recording
Any of:
RecordingState
object
mode
Any of:
string
Allowed values: disabled enabled
consent
Any of:
ConsentRecord
object
granted
Any of:
boolean
at
Any of:
string format: date-time
method
Any of:
string
statutory_disclosure
Any of:
StatutoryDisclosure

What was actually said to the debtor in THIS call.

Kept per call, not per order: the fields mirror the conversation, not the rulebook. An order nobody answered has nothing to report here - and should report nothing.

object
creditor_named
Any of:
boolean
claim_basis_given
Any of:
boolean
cost_basis_given
Any of:
boolean
references_prior_letter
Any of:
boolean
at
Any of:
string format: date-time
contact_window_policy
Any of:
string
calls
Calls

Attempts, oldest first.

Array<object>
Call
object
id
required
Id
string
call_order_id
Any of:
string
attempt
Any of:
integer
>= 1
disposition
required
Disposition
string
Allowed values: answered no_answer busy voicemail failed canceled
direction
required
Direction
string
started_at
Any of:
string format: date-time
answered_at
Any of:
string format: date-time
ended_at
Any of:
string format: date-time
duration_seconds
Any of:
integer
from_number
Any of:
string
agent
Any of:
AgentIdentity
object
id
Any of:
string
kind
Any of:
string
Allowed values: ai human
transcript
Any of:
TranscriptRef
object
available
Any of:
boolean
url
Any of:
string
expires_at
Any of:
string format: date-time
recording
Any of:
RecordingRef
object
available
Any of:
boolean
url
Any of:
string
retention_until
Any of:
string format: date
problem
Any of:
Problem
object
type
required
Type
string
title
required
Title
string
status
required
Status
integer
code
required
Code
string
detail
Any of:
string
instance
Any of:
string
trace_id
Any of:
string
errors
Any of:
Array<object>
FieldError
object
pointer
required
Pointer

RFC 6901 pointer to the offending field in the request body. Errors outside the body carry their source as the first segment (e.g. /query/limit).

string
code
required
Code

Stable field error code (open registry).

string
message
Any of:
string
created_at
required
Created At
string format: date-time
completed_at
Any of:
string format: date-time
Example
{
"subject": {
"reference": "CUST-88213",
"locale": "de-DE",
"timezone": "Europe/Berlin"
},
"contacts": [
{
"channel": "phone"
}
],
"context": {
"claim": {
"outstanding": {
"value": "129.90",
"currency": "EUR"
},
"original": {
"value": "129.90",
"currency": "EUR"
},
"breakdown": {
"principal": {
"value": "129.90",
"currency": "EUR"
},
"interest": {
"value": "129.90",
"currency": "EUR"
},
"dunning_fees": {
"value": "129.90",
"currency": "EUR"
},
"collection_fees": {
"value": "129.90",
"currency": "EUR"
},
"expenses": {
"value": "129.90",
"currency": "EUR"
},
"already_paid": {
"value": "129.90",
"currency": "EUR"
}
},
"creditor_name": "Truman Textilien GmbH",
"basis": {
"description": "Jahresabo Textilpflege Premium, abgeschlossen am 12.06.2025"
},
"titled": false
},
"history": [
{
"direction": "outbound"
}
]
},
"scheduling": {
"local_call_times": [
{
"days": [
"mon"
],
"from": "09:00",
"to": "09:00"
}
],
"max_attempts": 3,
"retry": {
"min_gap_hours": 24,
"randomize_within_window": true
},
"on_window_violation": "defer"
},
"negotiation": {
"installments": {
"min_installment": {
"value": "129.90",
"currency": "EUR"
},
"conclusion_mode": "record_wish_only"
},
"settlement": {
"conclusion_mode": "record_wish_only"
}
},
"delivery": {
"transcript": "none",
"include_recording_reference": false
},
"metadata": {
"campaign": "q3-onboarding",
"cost_center": "77"
},
"id": "ord_01J32K7M2QW9RT",
"status": "accepted",
"attempt_count": 0,
"result": {
"reachability": "reached",
"engagement": "none",
"termination": {
"actor": "subject"
}
},
"compliance": {
"recording": {
"mode": "disabled"
},
"contact_window_policy": "de_uwg7_default"
},
"calls": [
{
"disposition": "answered",
"agent": {
"id": "agt_lea_de_v4",
"kind": "ai"
}
}
]
}

No valid access token. Client action: request a new token from the token endpoint and retry once. Repeated 401 with a fresh token means the client registration is disabled - contact Pace, do not retry in a loop.

Media typeapplication/problem+json
Problem
object
type
required
Type
string
title
required
Title
string
status
required
Status
integer
code
required
Code
string
detail
Any of:
string
instance
Any of:
string
trace_id
Any of:
string
errors
Any of:
Array<object>
FieldError
object
pointer
required
Pointer

RFC 6901 pointer to the offending field in the request body. Errors outside the body carry their source as the first segment (e.g. /query/limit).

string
code
required
Code

Stable field error code (open registry).

string
message
Any of:
string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"code": "example",
"detail": "example",
"instance": "example",
"trace_id": "example",
"errors": [
{
"pointer": "example",
"code": "example",
"message": "example"
}
]
}

Authenticated but not permitted. insufficient_scope names the missing scope in detail; feature_not_enabled means the tenant lacks the feature; ip_not_allowlisted means the source IP is not on the client registration’s allowlist; simulate_not_allowed means a sandbox-only simulate block was sent to the live host. None of these are retryable.

Media typeapplication/problem+json
Problem
object
type
required
Type
string
title
required
Title
string
status
required
Status
integer
code
required
Code
string
detail
Any of:
string
instance
Any of:
string
trace_id
Any of:
string
errors
Any of:
Array<object>
FieldError
object
pointer
required
Pointer

RFC 6901 pointer to the offending field in the request body. Errors outside the body carry their source as the first segment (e.g. /query/limit).

string
code
required
Code

Stable field error code (open registry).

string
message
Any of:
string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"code": "example",
"detail": "example",
"instance": "example",
"trace_id": "example",
"errors": [
{
"pointer": "example",
"code": "example",
"message": "example"
}
]
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}

HTTP rate limit (rate_limited) or execution capacity refusal (quota_exceeded, backlog_full) - two distinct layers. Wait for Retry-After, then retry the identical request with the same Idempotency-Key. backlog_full will not clear in seconds; back off to minutes.

Media typeapplication/problem+json
Problem
object
type
required
Type
string
title
required
Title
string
status
required
Status
integer
code
required
Code
string
detail
Any of:
string
instance
Any of:
string
trace_id
Any of:
string
errors
Any of:
Array<object>
FieldError
object
pointer
required
Pointer

RFC 6901 pointer to the offending field in the request body. Errors outside the body carry their source as the first segment (e.g. /query/limit).

string
code
required
Code

Stable field error code (open registry).

string
message
Any of:
string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"code": "example",
"detail": "example",
"instance": "example",
"trace_id": "example",
"errors": [
{
"pointer": "example",
"code": "example",
"message": "example"
}
]
}
Retry-After
integer

Seconds until the next attempt is permitted.

RateLimit-Limit
integer
RateLimit-Remaining
integer
RateLimit-Reset
integer

Error (RFC 9457). Branch on code, never on title or detail.

Media typeapplication/problem+json
Problem
object
type
required
Type
string
title
required
Title
string
status
required
Status
integer
code
required
Code
string
detail
Any of:
string
instance
Any of:
string
trace_id
Any of:
string
errors
Any of:
Array<object>
FieldError
object
pointer
required
Pointer

RFC 6901 pointer to the offending field in the request body. Errors outside the body carry their source as the first segment (e.g. /query/limit).

string
code
required
Code

Stable field error code (open registry).

string
message
Any of:
string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"code": "example",
"detail": "example",
"instance": "example",
"trace_id": "example",
"errors": [
{
"pointer": "example",
"code": "example",
"message": "example"
}
]
}