Skip to content
ContentRemovalDeskDocumentation

Build your integration

Scans & findings

Request real scans and follow the same creator findings that the CRD team manages in the admin Leaks page.

REST API · JSONv0.2.0 · Live CRD integration
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.

StatusMeaning
queuedAccepted and waiting for dispatch.
dispatchingThe worker is contacting or reconciling the engine.
runningThe real engine job is being processed.
uncertainThe worker must reconcile an interrupted or unavailable engine response.
completedThe scan finished; its attributable findings are available.
failedProcessing failed; inspect error_code.
cancelledQueued 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

POST/v1/creators/{id}/scans
curl --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 '{}'
Use your secret key in the environment variable.
Example response · 202
{
  "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.