Cancel a pending GDPR erasure request
curl --request POST \
--url https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "Contact withdrew the erasure request by phone."
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel"
payload = { "reason": "Contact withdrew the erasure request by phone." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Contact withdrew the erasure request by phone.'})
};
fetch('https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Contact withdrew the erasure request by phone.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel"
payload := strings.NewReader("{\n \"reason\": \"Contact withdrew the erasure request by phone.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Contact withdrew the erasure request by phone.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Contact withdrew the erasure request by phone.\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "erasure_01HZX8ERASE",
"contact_id": "contact_01HZX8Y7QJK4M",
"status": "cancelled"
},
"meta": {
"request_id": "req_01HZX9MNOPQR",
"timestamp": "2026-02-02T12:00:00.000Z"
}
}Contacts
Cancel a pending GDPR erasure request
Cancel a still-pending GDPR Article-17 erasure request during its cooling-off period, so the scheduled hard-delete never runs. An optional free-text reason (≤500 chars) is recorded on the audit trail. Returns 404 when the request id does not belong to this contact, and 409 CONFLICT once the request has moved out of pending (executing/completed/already-cancelled).
POST
/
api
/
v1
/
contacts
/
{id}
/
gdpr
/
erasure-request
/
{requestId}
/
cancel
Cancel a pending GDPR erasure request
curl --request POST \
--url https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "Contact withdrew the erasure request by phone."
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel"
payload = { "reason": "Contact withdrew the erasure request by phone." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Contact withdrew the erasure request by phone.'})
};
fetch('https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Contact withdrew the erasure request by phone.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel"
payload := strings.NewReader("{\n \"reason\": \"Contact withdrew the erasure request by phone.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Contact withdrew the erasure request by phone.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/contacts/{id}/gdpr/erasure-request/{requestId}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Contact withdrew the erasure request by phone.\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "erasure_01HZX8ERASE",
"contact_id": "contact_01HZX8Y7QJK4M",
"status": "cancelled"
},
"meta": {
"request_id": "req_01HZX9MNOPQR",
"timestamp": "2026-02-02T12:00:00.000Z"
}
}Authorizations
BearerApiKey
Dashboard JWT token from Clerk
Body
application/json
Optional free-text reason recorded on the audit trail.
Maximum string length:
500⌘I