Developer API

v1 · Pro and Premium

Use this if you want to create, list or update data requests from your own backend — syncing from a support ticketing system, building a custom intake form, or driving your own internal tooling — instead of only the hosted intake page and the dashboard.

Authentication

Generate a key from Settings → Developer API in your dashboard (Pro and Premium only). Send it as a Bearer token on every request:

Authorization: Bearer dsar_live_xxxxxxxxxxxxxxxxxxxxxxxx
The raw key is shown once, at generation time — only its hash is stored. If you lose it, regenerate; the old key stops working immediately. There is one active key per workspace.

Base URL

https://dsar.klairlabs.com/api/v1/dsar
POST/requests

Create a request against your first property, or a specific one via slug (from the Properties tab).

curl -X POST https://dsar.klairlabs.com/api/v1/dsar/requests \
  -H "Authorization: Bearer dsar_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "requesterEmail": "customer@example.com",
    "type": "access",
    "jurisdiction": "gdpr",
    "details": "Synced from our support system, ticket #4821"
  }'
FieldRequiredNotes
requesterEmailYesMust be a valid email
typeNoaccess, deletion, correction, optout, donotshare, or appeal — defaults to access
jurisdictionNogdpr, ccpa, dpdp, or other — defaults to other
detailsNoFree text, up to 2000 characters
slugNoWhich property — defaults to your first
customFieldsConditionalRequired if that property has custom intake fields configured — object of key→value

Returns 201 with {ok, requestId, reference, deadlineMs}. Free-plan monthly limits apply the same as the hosted intake form.

GET/requests

List your requests, most recent first (up to 200). Optional query params: ?status=received, ?slug=<property>.

curl https://dsar.klairlabs.com/api/v1/dsar/requests?status=received \
  -H "Authorization: Bearer dsar_live_..."
GET/requests/{"{id}"}

Fetch a single request by its requestId.

PATCH/requests/{"{id}"}

Update status and/or an internal note.

curl -X PATCH https://dsar.klairlabs.com/api/v1/dsar/requests/req_abc123 \
  -H "Authorization: Bearer dsar_live_..." \
  -H "Content-Type: application/json" \
  -d '{"status": "in_progress", "note": "Verified via support ticket"}'

Valid status values: received, verifying, in_progress, completed, denied.

Errors

Every response is JSON with an ok boolean. On failure, ok:false and an error string explaining what went wrong. HTTP status codes: 401 (missing/invalid key), 400 (bad input), 404 (not found), 200/201 (success).

Rate limits

The API sits behind the same gateway as the rest of DSAR Desk (50 requests/second burst, 25/second sustained, shared across the account). This is not currently split per-key — if you need a higher limit for a real integration, email hello@klairtech.com.