Skip to main content

API Reference

Complete reference for all Settler API endpoints. All endpoints require authentication via API key.

🔑 Authentication: Include your API key in the Authorization header:Authorization: Bearer sk_live_...

Base URL

All API requests should be made to:

https://api.settler.dev

Endpoints

POST

/api/v1/jobs

Create a new reconciliation job

const job = await client.jobs.create({
  name: "Shopify-Stripe Reconciliation",
  source: {
    adapter: "shopify",
    config: { apiKey: "..." }
  },
  target: {
    adapter: "stripe",
    config: { apiKey: "..." }
  },
  rules: {
    matching: [
      { field: "order_id", type: "exact" },
      { field: "amount", type: "exact", tolerance: 0.01 }
    ]
  }
});
GET

/api/v1/jobs/:id

Get reconciliation job details

const job = await client.jobs.get(jobId);
console.log(job.status); // 'pending' | 'running' | 'completed' | 'failed'
POST

/api/v1/jobs/:id/run

Run a reconciliation job

const report = await client.jobs.run(jobId);
console.log(report.summary);
POST

/api/v1/receipts/parse

Parse a receipt image or PDF

const receipt = await client.receipts.parse({
  file: "https://example.com/receipt.jpg",
});
console.log(receipt.total, receipt.merchant);
GET

/api/v1/reports/:jobId

Get reconciliation report

const report = await client.reports.get(jobId);
console.log(report.summary);
// {
//   total: 150,
//   matched: 145,
//   unmatched: 3,
//   conflicts: 2,
//   accuracy: 0.987
// }

Response Format

All successful responses follow this format:

{
  "data": {
    // Response data
  },
  "meta": {
    "requestId": "req_123",
    "timestamp": "2025-12-18T12:00:00Z"
  }
}

Error Format

Errors follow this format:

{
  "error": {
    "message": "Error description",
    "code": "ERROR_CODE",
    "status": 400
  }
}

Rate Limits

See Status & Limits for current rate limits.