Reject an erasure request
const url = 'https://api.aerandil.com/v1/erasure-requests/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/reject';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"decision_note":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.aerandil.com/v1/erasure-requests/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/reject \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "decision_note": "example" }'Refuse a pending erasure request — e.g. an Article 17(3) retention carve-out applies — recording who refused and why. The target object is untouched. Requires erasure:approve.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Body
Section titled “Request Body”object
Reviewer’s note; recorded on the request row under the internal.restricted marking.
Examplegenerated
{ "decision_note": "example"}Responses
Section titled “Responses”Decision recorded.
object
Approve only: number of links rows cascade-deleted with the object (in- and out-edges combined). Recorded on the request row for the compliance audit.
Approve only: false when the target was already absent (a retried approve after a partial failure, or an out-of-band deletion) — the decision is still recorded truthfully with links_removed = 0.
Example
{ "status": "approved"}Headers
Section titled “Headers”Always no-store.
No such erasure request for this tenant.
Structured error wrapper. Every non-2xx response from any Aerandil endpoint serialises to this shape; the HTTP status carries the failure class (4xx/5xx), the body adds a stable code for programmatic dispatch plus a human-readable message.
object
object
Stable, programmatic error code (e.g. unauthorized, forbidden, not_found, invalid_body, invalid_url, precondition_failed, no_secondary_key). Clients dispatch on code, not on the message (which may be localised or contextualised in future versions).
Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.
Human-readable explanation of the failure.
Per-error structured detail. The shape varies by code (e.g. forbidden_action carries {"action": "..."}; precondition_failed carries {"current_version": N}).
Examplegenerated
{ "error": { "code": "example", "instance_id": "example", "message": "example", "parameters": "example" }}Request already decided — erasure_request_not_pending.
Structured error wrapper. Every non-2xx response from any Aerandil endpoint serialises to this shape; the HTTP status carries the failure class (4xx/5xx), the body adds a stable code for programmatic dispatch plus a human-readable message.
object
object
Stable, programmatic error code (e.g. unauthorized, forbidden, not_found, invalid_body, invalid_url, precondition_failed, no_secondary_key). Clients dispatch on code, not on the message (which may be localised or contextualised in future versions).
Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.
Human-readable explanation of the failure.
Per-error structured detail. The shape varies by code (e.g. forbidden_action carries {"action": "..."}; precondition_failed carries {"current_version": N}).
Examplegenerated
{ "error": { "code": "example", "instance_id": "example", "message": "example", "parameters": "example" }}