QuickCapture API
QuickCapture is an intent-driven API. The payload describes what happened — the system determines and executes the appropriate action. Record expenses, create invoices, check profit, query receivables — all through one endpoint.
No need to model accounting systems. Just send what happened — in any language.
# Plain text
POST https://books.marathonbooks.app/api/v1/quickcapture
Authorization: Bearer mb_live_...
{
"text": "Send $500 invoice to Mike for landscaping"
}# Structured JSON
POST https://books.marathonbooks.app/api/v1/quickcapture
{
"type": "invoice",
"amount": 500,
"customer": "Mike",
"description": "landscaping"
}Same result
{
"success": true,
"intent": "create_invoice_draft",
"reply": "Invoice INV-0012 created for Mike — $500.00 for landscaping.",
"language": "en",
"link": {
"url": "https://books.marathonbooks.app/i/a1b2c3...",
"label": "View invoice"
}
}# Any language — same result
POST https://books.marathonbooks.app/api/v1/quickcapture
Spanish
{ "text": "Enviar factura de $500 a Mike por jardinería" }Portuguese
{ "text": "Enviar fatura de $500 para Mike por paisagismo" }Same structured output. No translation layer required.
Same endpoint, same result. Plain text for speed, JSON for precision, or both.
Send raw text in any language. Ideal for humans, messages, notes, OCR text, email bodies, ERP comment fields.
{ "text": "Paid Home Depot $120 for supplies" }
{ "text": "Pagué $120 por materiales en Home Depot" }
Send JSON with typed fields. Ideal for ERP integrations, POS systems, invoicing tools, payroll systems.
{ "type": "expense", "amount": 120,
"description": "Supplies", "vendor": "Home Depot" }Send structured fields plus a freeform note. Best of both worlds — precision and context.
{ "type": "expense", "amount": 120,
"vendor": "Home Depot",
"text": "for the Martinez bathroom remodel" }The payload tells the system what to do. No different routes to call.
"Paid $300 for supplies at Home Depot"
"Got paid $1,200 from Martinez LLC"
"Send $500 invoice to Mike for landscaping"
"How much profit this month?"
"Who owes me money?"
"What did I spend on supplies?"
AI figures it out by default. Add these when you want more control.
Skip AI classification — tell the system exactly what to do. Discover available intents via GET /api/v1/quickcapture with your API key.
{ "intent": "capture_expense",
"text": "Paid $120 for supplies" }Require an explicit intent — no AI guessing. For systems that need predictability.
{ "mode": "strict",
"intent": "create_invoice_draft",
"text": "Invoice Mike $500 for landscaping" }Preview what would happen without executing. See the detected intent and params before committing.
{ "dry_run": true,
"text": "John paid me $500" }Returns:
{ "dry_run": true,
"detected_intent": "capture_income",
"params": { "amount": 500, "counterparty_name": "John" },
"would_execute": true }Prevent duplicate processing. Same key = same result, no matter how many times you send it.
{ "idempotency_key": "txn_abc123",
"text": "Paid $120 for supplies" }Generate an API key from your MarathonBooks dashboard under Settings. The key is shown once — save it securely.
curl -X POST https://books.marathonbooks.app/api/v1/quickcapture \
-H "Authorization: Bearer mb_live_..." \
-H "Content-Type: application/json" \
-d '{"text": "Paid $45 for gas"}'Minimum required: { "text": "..." } — everything else is optional. Use strict mode + explicit intent for fully deterministic behavior.
| Field | Type | Description |
|---|---|---|
| text | string | Natural language input |
| type | string | expense, income, invoice, query |
| amount | number | Dollar amount |
| description | string | What it was for |
| vendor | string | Who you paid |
| customer | string | Who paid you / invoice recipient |
| intent | string | Explicit intent (skip AI classification) |
| mode | string | “auto” (default) or “strict” (requires intent) |
| dry_run | boolean | Preview without executing |
| idempotency_key | string | Prevent duplicate processing |
{
"success": true,
"intent": "create_invoice_draft",
"reply": "Invoice INV-0012 created for Mike — $500.00.",
"language": "en",
"link": {
"url": "https://books.marathonbooks.app/i/a1b2c3...",
"label": "View invoice"
}
}{
"success": false,
"error": "Could not determine intent",
"intent": null
}HTTP 422 when intent can't be determined. 401 for invalid API key. 400 for missing input.
Pipe transactions from your point-of-sale directly into your books.
Connect any app to QuickCapture with no-code automations.
Send accounting events from your existing business software.
Forward receipt emails and let QuickCapture extract the data.
Build a "Send to QuickCapture" button for any web page.
Log business activity from your custom dashboards and scripts.
Your users send in their language. No translation layer needed — structured output every time.
One API key. One endpoint. Send what happened — QuickCapture handles the rest.
Start sending business events