Add a do-not-call entry
curl https://api.pacepayments.ai/v1/suppressions \ --request POST \ --header 'Authorization: Bearer <token>' \ --header 'Idempotency-Key: 7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11' \ --header 'Content-Type: application/json' \ --data '{ "phone": "+493514713160", "subject_reference": "CUST-88213", "scope": "voice"}'requests.post( "https://api.pacepayments.ai/v1/suppressions", headers={ "Authorization": "Bearer <token>", "Idempotency-Key": "7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11", "Content-Type": "application/json" }, json={ "phone": "+493514713160", "subject_reference": "CUST-88213", "scope": "voice" })fetch('https://api.pacepayments.ai/v1/suppressions', { method: 'POST', headers: { Authorization: 'Bearer <token>', 'Idempotency-Key': '7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11', 'Content-Type': 'application/json' }, body: JSON.stringify({ phone: '+493514713160', subject_reference: 'CUST-88213', scope: 'voice' })})using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.pacepayments.ai/v1/suppressions");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "<token>");request.Headers.TryAddWithoutValidation("Idempotency-Key", "7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11");request.Content = new StringContent("""{ "phone": "+493514713160", "subject_reference": "CUST-88213", "scope": "voice"}""",System.Text.Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);$ch = curl_init("https://api.pacepayments.ai/v1/suppressions");
curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer <token>', 'Idempotency-Key: 7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11', 'Content-Type: application/json']);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ 'phone' => '+493514713160', 'subject_reference' => 'CUST-88213', 'scope' => 'voice']));
curl_exec($ch);
curl_close($ch);package main
import ( "fmt" "io" "net/http" "strings")
func main() { requestUrl := "https://api.pacepayments.ai/v1/suppressions"
payload := strings.NewReader(`{ "phone": "+493514713160", "subject_reference": "CUST-88213", "scope": "voice"}`)
req, _ := http.NewRequest("POST", requestUrl, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Idempotency-Key", "7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(mediaType, "{\n \"phone\": \"+493514713160\",\n \"subject_reference\": \"CUST-88213\",\n \"scope\": \"voice\"\n}");Request request = new Request.Builder() .url("https://api.pacepayments.ai/v1/suppressions") .post(body) .addHeader("Authorization", "Bearer <token>") .addHeader("Idempotency-Key", "7f8c9a4e-2b1d-4e5f-9a3c-d10f2b6e8c11") .addHeader("Content-Type", "application/json") .build();
Response response = client.newCall(request).execute();Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
V1 only makes calls, so an entry blocks voice contact. An open registry, so further channels can be added without a break - but only voice is accepted today.
Responses
Section titled “Responses”Successful Response
object
Where the entry came from. in_call_request means the person objected during a call - that entry canNOT be deleted over the API.
Example
{ "id": "sup_01J40M3V"}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.
object
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.
object
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
object
object
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.
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "code": "example", "detail": "example", "instance": "example", "trace_id": "example", "errors": [ { "pointer": "example", "code": "example", "message": "example" } ]}Headers
Section titled “Headers”Seconds until the next attempt is permitted.
default
Section titled “default”Error (RFC 9457). Branch on code, never on title or detail.
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "code": "example", "detail": "example", "instance": "example", "trace_id": "example", "errors": [ { "pointer": "example", "code": "example", "message": "example" } ]}