Check OCR & Data Extraction API

Extract check number, date, amount, and payee (best-effort) from scanned or photographed checks.

Automatically extract structured data from business and personal checks. Designed for banks, lenders, fintech platforms, and accounting systems.

Quick start (check extraction)

Use the same flow as the Bank Statement OCR API: upload a document (check image or PDF), create a job with enableBankMode: true, wait for completion, then export. Check data is included when the document contains check images.

bash
# 1. Upload a check image or PDF containing checks
curl -X POST "https://www.docuclipper.com/api/v1/protected/document" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "document=@check.pdf"

# 2. Create a bank job (check data is extracted when the document contains check images)
# Use the document ID from step 1. Set enableBankMode: true.
# For check-only documents, set subType: "checkImages" to enable check-image mode.
curl -X POST "https://www.docuclipper.com/api/v1/protected/job" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jobName":"","documents":["DOCUMENT_ID"],"enableBankMode":true,"subType":"checkImages"}'

# 3. Poll GET /protected/job/JOB_ID until status === "Succeeded" (or use webhooks)

# 4. Export with jobType: "FieldsToExcel1", format: "json"
# Check data appears in the export (check images embedded in statements are extracted automatically)

Minimal: upload a check image.

bash
# Upload check image, then create job and export (same flow as Bank Statement OCR)
curl -X POST "https://www.docuclipper.com/api/v1/protected/document" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "document=@check.jpg"

Response shape

json
// Export response (200) includes check transactions when the document contains checks:
// Keyed by documentId → account. In check-only mode, account is typically "checks".
{
  "<documentId>": {
    "<account>": {
      "bankMode": {
        "transactions": [
          {
            "date": "2024-01-15",
            "amount": -1250.00,
            "checkNumber": "1001",
            "memo": ["check: 1001", "memo: ...", "payee: ACME Corp"],
            "sectionType": "checks",
            "accountName": "checks"
          }
        ]
      }
    }
  }
}

Full example (no SDK)

Same flow as Bank Statement OCR: upload → create job (enableBankMode: true) → poll → export. Check data appears in the export when the document contains check images.

javascript
const fs = require('fs');
const BASE = 'https://www.docuclipper.com/api/v1';
const API_KEY = process.env.DOCUCLIPPER_API_KEY;
const auth = (h = {}) => ({ Authorization: `Bearer ${API_KEY}`, ...h });

const form = new FormData();
form.append('document', new Blob([fs.readFileSync('check.pdf')]), 'check.pdf');
const up = await fetch(`${BASE}/protected/document`, { method: 'POST', headers: auth(), body: form });
const docId = (await up.json()).document.id;

const job = await fetch(`${BASE}/protected/job`, {
  method: 'POST', headers: auth({ 'Content-Type': 'application/json' }),
  body: JSON.stringify({ jobName: '', documents: [docId], enableBankMode: true })
});
const jobId = (await job.json()).id;

let status;
while ((status = (await fetch(`${BASE}/protected/job/${jobId}`, { headers: auth() }).then(r => r.json())).status) !== 'Succeeded') {
  if (status === 'Failed') throw new Error('Job failed');
  await new Promise(r => setTimeout(r, 2000));
}

const exp = await fetch(`${BASE}/protected/job/${jobId}/export`, {
  method: 'POST', headers: auth({ 'Content-Type': 'application/json' }),
  body: JSON.stringify({ jobType: 'FieldsToExcel1', flattenTables: true, format: 'json' })
});
const data = await exp.json();
console.log(data);

Use cases

  • Remote deposit capture and check processing
  • Loan and mortgage verification
  • Accounting and bookkeeping automation
  • Fintech and banking back-office workflows