DocuClipper logo

Getting started

Get structured data from bank statements, invoices, and tax forms in minutes. New integrations should use the Agent API (/agent/*): PAT auth, direct-to-S3 upload, clean JSON output.

Quick start (5 steps)

  1. Generate a PAT in Account → API. Tokens look like dcp_… and are shown once.
  2. Subscribe to job-completion events (one-time setup) – POST /api/v1/agent/webhooks with { url, events: ["bank_statement.extraction.completed"] }. Store the signing secret returned once; you'll use it to verify each event. Skip this in dev and use polling (step 5), but for production, webhooks are how you avoid hammering /jobs/<id>.
  3. Upload – get a presigned URL via POST /api/v1/agent/documents/upload-url with { filename, mimetype }, then PUT the file bytes directly to the returned URL. Keeps large uploads off our servers.
  4. Create the jobPOST /api/v1/agent/jobs with { documents: [<docId>] } (bank-mode + v2 are defaults).
  5. Receive the result – your webhook fires when the job hits Succeeded; fetch GET /api/v1/agent/jobs/<id>/data to get the structured payload (or /transactions for the flat per-row view). Dev only: if you skipped step 2, poll GET /api/v1/agent/jobs/<id> until status === "Succeeded".

First request (cURL)

bash
curl -X POST "https://www.docuclipper.com/api/v1/agent/documents/upload-url" \
  -H "Authorization: Bearer dcp_..." \
  -H "Content-Type: application/json" \
  -d '{"filename":"statement.pdf","mimetype":"application/pdf"}'

Response: { url: "<presigned PUT URL>", document: { id, s3Key, s3Path } }. PUT the file to url with Content-Type: application/pdf, then use document.id when you POST /agent/jobs.

Already on the legacy /protected/* API?

It's fully supported, keep using POST /protected/document (multipart), POST /protected/job, and POST /protected/job/<id>/export. See Bank Statement OCR API for the legacy flow. The Agent API is the recommended path for new integrations.

Document type APIs

Format conversion APIs

Next steps