Privacy RequestsManage API tokens ↗

Developer documentation · Business

Connect your case workflow

Read and create cases, and update tasks your team has explicitly shared with your integration.

Production base URL: https://app.privacyrequests.co/api/v1

Your first request

1. Create and save a token

As a Business workspace Admin, open Settings → API. Give the service a recognizable name, select cases:read, choose an expiry and create the credential. Copy the token now: the full value is shown only once. Store it in your server's secret store.

2. List cases

These examples use Bash and curl. Enter the token at the hidden prompt so it is not saved in shell history. An empty cases array is a successful response for a new workspace.

export API_BASE='https://app.privacyrequests.co/api/v1'
read -rsp 'API token: ' API_TOKEN; printf '\n'
export API_TOKEN
curl --fail-with-body "$API_BASE/cases" \
  -H "Authorization: Bearer $API_TOKEN"

Cases are returned 50 at a time in ascending ID order. If nextCursor is not null, pass that exact value as after. Continue until it is null.

curl --fail-with-body --get "$API_BASE/cases" \
  -H "Authorization: Bearer $API_TOKEN" \
  --data-urlencode 'after=PASTE_NEXT_CURSOR'

3. Create a case

Use a token with cases:create. Running this example creates a real case, without sending a requester email. Replace the example details with the request you intend to log. receivedAt must be the actual receipt time, in the past. This example uses the previous minute.

read -rsp 'Token with cases:create: ' API_TOKEN; printf '\n'
RECEIVED_AT=$(node -e 'console.log(new Date(Date.now()-60000).toISOString())')
IDEMPOTENCY_KEY=$(node -e 'console.log(crypto.randomUUID())')
curl --fail-with-body "$API_BASE/cases" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  --data "{\"requesterName\":\"Example Requester\",\"requesterEmail\":\"requester@example.com\",\"requestType\":\"access\",\"jurisdiction\":\"Staff review required\",\"originalWording\":\"Please provide my personal data.\",\"receivedAt\":\"$RECEIVED_AT\"}"

The timestamp/key helpers require Node.js. Generate them once per new request. When retrying, keep the same token, key and body: a replay returns HTTP 200 with replayed: true. New cases return HTTP 201 with caseId and reference; different details with the same key return HTTP 409.

4. Grant task access and read tasks

Create a token with tasks:read and tasks:update. In Settings → API, choose Manage tasks for that credential, select the tasks and save. The picker shows the latest 100 tasks on open real cases; existing older grants are preserved. Up to 90 grants are allowed. Scopes alone do not grant access to any task.

read -rsp 'Token with tasks:read and tasks:update: ' API_TOKEN; printf '\n'
curl --fail-with-body "$API_BASE/tasks" \
  -H "Authorization: Bearer $API_TOKEN"

5. Update a granted task

Running this changes the task's real status and notes. Copy its id and exact updated_at from the latest response. On HTTP 409, read again and reconcile the change before retrying.

TASK_ID='PASTE_TASK_ID'
curl --fail-with-body --request PATCH "$API_BASE/tasks/$TASK_ID" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"status":"In Progress","notes":"Started checking the assigned system.","expectedUpdatedAt":"PASTE_UPDATED_AT"}'
unset API_TOKEN

Data Found, Deleted, Corrected and Needs Review outcomes require evidence already uploaded through the app. Tasks on closed, completed or rejected cases cannot be changed. Staff remain responsible for reviewing outcomes.

Access, limits and token lifecycle

Send credentials only in the Authorization header. Never include them in URLs, browser application code, analytics or logs. Use a server-side secret store for integrations.

Swagger API reference

This reference is public. To call the API, choose Authorize and paste your token, then select an operation, Try it out and Execute. Requests use this site's origin. POST and PATCH ask for confirmation before changing real data. Your staff session does not authenticate these calls.

Tokens stay in this page's memory and are cleared on reload; authorization is not saved to browser storage. No external validator or analytics receives your requests. Clear authorization or close this page when finished. Removing authorization reloads the reference to clear request history too.