Build your integration
Paid legal escalation
Request CRD's paid legal-escalation service for a leak and hand off a real payment link. In private rollout.
On this page
Request it for a specific leak
POST /v1/cases/{id}/escalation-requests requires cases:read plus escalations:write, a synchronized leak case (never an impersonation account) belonging to your agency, and a stable Idempotency-Key. A new request returns 202 with status: "queued".
The amount is always computed by CRD from the leak itself, the same pricing the agency dashboard's own Escalations page uses. This operation never accepts or influences a price, and nothing in this integration can mark up what CRD's own checkout charges.
Read the payment link once it's ready
Poll GET /v1/escalation-requests/{id}. Once the worker has dispatched it, status becomes "ready" with a real payment_link: a hosted Stripe Checkout URL. Hand it to whoever is paying, the agency or the creator directly; it works without a CRD login.
The link opens as CRD's own hosted page and cannot be embedded in another site's iframe. If you want your own client to see your own branding around the payment, that has to live in your own product around the link, not inside it.
paid means CRD's own systems recorded the charge
A closed tab or a network blip between “pay” and “come back” must not be read as failure, and a redirect back to your app is not proof of payment either. Poll the resource (or watch escalation.status_changed) and trust only status: "paid".
| status | Meaning |
|---|---|
| queued | Just requested, not yet dispatched. |
| ready | A real Checkout Session exists; payment_link can be shared. |
| paid | CRD's webhook has recorded the charge — never inferred from this request/response cycle or from a redirect. |
| failed | Terminal. Submit a fresh request (a new Idempotency-Key) rather than retrying the same one. |
Request & response example
/v1/cases/{id}/escalation-requestscurl --request POST 'https://api.crd.systems/v1/cases/case_example/escalation-requests' \
--header "Authorization: Bearer $CRD_API_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-001' \
--data '{}'{
"id": "esc_example",
"case_id": "case_example",
"creator_id": "crt_example",
"status": "queued",
"payment_link": null,
"amount_cents": null,
"currency": null,
"simulated": false,
"created_at": 1790035200000,
"updated_at": 1790035200000,
"error_code": null
}Illustrative response. Replace example resource IDs with the IDs returned by your API requests. View endpoint details.