Build your integration
Scans & findings
Request real scans and follow the same creator findings that the CRD team manages in the admin Leaks page.
On this page
Queue a scan
For an eligible creator with an active API schedule, send POST /v1/creators/{id}/scans with an empty JSON object and a unique Idempotency-Key. A new request returns 202 with a scan ID; it has not completed at that point.
Retry an uncertain HTTP response with the same key and payload. A matching retry returns the original scan with 200. If another scan is pending, follow that scan instead of generating new requests.
Follow the scan lifecycle
Poll GET /v1/scans/{id} or use a signed event to trigger a fresh read. The service preserves the engine request identity across retries so an uncertain response does not start a second job.
Do not treat uncertain as success or submit a replacement with a fresh key. Let the service reconcile the original job and contact CRD if progress remains blocked.
| Status | Meaning |
|---|---|
| queued | Accepted and waiting for dispatch. |
| dispatching | The worker is contacting or reconciling the engine. |
| running | The real engine job is being processed. |
| uncertain | The worker must reconcile an interrupted or unavailable engine response. |
| completed | The scan finished; its attributable findings are available. |
| failed | Processing failed; inspect error_code. |
| cancelled | Queued work was cancelled. |
Read the creator’s existing CRD findings
GET /v1/creators/{id}/cases synchronizes that current agency creator’s native CRD leak records. It includes existing findings and findings from native, manual, scheduled, and API scans. API case IDs remain stable, and later admin status changes appear on refresh. A scan can complete with no findings.
A finding with known API scan provenance retains its scan_id and source: api_scan. A native finding without that mapping has scan_id: null and source: crd. Check api_deindex_supported before offering the API deindex action; a false value means the existing admin workflow handles that case. If a later API scan finds the same native leak, its existing case ID is retained and the verified scan mapping can be added.
Use limit up to 100 and after set to the last returned case ID for another page. updated_at is in epoch milliseconds. Native actionable and dead_on_arrival flags can be null until observed. Finding a URL does not itself prove infringement, submission of a notice, or removal.
Understand the engine workflow
The API uses the real CRD scanning and classification pipeline. Eligible findings can enter CRD’s existing reporting workflows, including notices where those workflows are configured. This is not a preview-only operation.
Eligibility and current agency membership are checked for execution and access to results. A disconnected or unconfigured provider fails with an error rather than returning sample cases.
The team keeps using the existing admin Leaks page
An accepted invitation links the creator’s existing CRD profile to the agency. The creator appears under that agency in the normal admin Leaks client list, including before the first finding. Findings from the native scan remain associated with that same creator, so the CRD team continues its usual review and processing workflow.
The API synchronizes those existing leak records for agency-linked creators. New, changed, and deleted records produce case.created, case.updated, and case.deleted events when observed. The worker reconciles in the background; this is an asynchronous view of current state, not a notification of every intermediate database edit. API deindex requests also have a separate endpoint for their processing state.
Request & response example
/v1/creators/{id}/scanscurl --request POST 'https://api.crd.systems/v1/creators/crt_example/scans' \
--header "Authorization: Bearer $CRD_API_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-001' \
--data '{}'{
"id": "scn_example",
"creator_id": "crt_example",
"status": "queued",
"source": "manual",
"created_at": 1790035200000,
"finished_at": null,
"error_code": null,
"crd_job_id": null,
"simulated": false
}Illustrative response. Replace example resource IDs with the IDs returned by your API requests. View endpoint details.