Introduction
The ParseFlow AI API lets you run the platform's deterministic validation engine and export enginefrom your own code. Send extracted invoice or bank-statement data as JSON; get back a validated quality score or a ready-to-import file. Everything you can do in the app — Excel/CSV/XML export and QuickBooks, Xero, DATEV & 1С mappings — is available here.
Validate
Quality Score + every check
Export
Excel · CSV · XML
Accounting
QuickBooks · Xero · DATEV · 1С
Authentication
All requests require an API key sent as a Bearer token. Get a key in one click, or manage existing keys in your dashboard → API tab. The full key (pf_live_…) is shown only once at creation — store it securely. You can also pass it as X-API-Key.
Authorization: Bearer pf_live_xxxxxxxxxxxxxxxxxxxxKeys are stored as SHA-256 hashes — ParseFlow never stores your plaintext key. Revoke a compromised key instantly from the dashboard.
Pricing & billing
Your balance is shown and topped up in US dollars. API usage draws from the same balance as the app, billed at 2.5× the standard per-page rate to cover automated, high-volume throughput. Previews and validation are free; file exports are billed per page.
Standard rate
$0.02 / page
API rate (2.5×)
$0.050 / page
Add funds to your balance
Bonus pages never expire and are used after your monthly budget.
Price per single PDF page: $0.02 at the standard rate, $0.050 via the API.
Data model
Every request describes a document via type plus its data.
// Invoice
{ "type": "invoice", "data": { /* invoice fields */ } }
// Bank statement
{ "type": "bank_statement", "data": { /* statement fields */ } }
// Mixed (both on one document)
{ "type": "mixed", "invoice": { ... }, "bank_statement": { ... } }{
"supplier_name": "string", "supplier_address": "string",
"customer_name": "string", "customer_address": "string",
"invoice_number": "string", "invoice_date": "YYYY-MM-DD",
"due_date": "YYYY-MM-DD", "vat_number": "string",
"currency": "EUR",
"subtotal": 100.0, "tax_amount": 19.0, "total": 119.0,
"line_items": [
{ "description": "string", "quantity": 1, "unit_price": 0,
"tax_rate": 19, "amount": 0 }
]
}{
"bank_name": "string", "account_holder": "string",
"account_number_masked": "string", "statement_period": "string",
"currency": "EUR", "opening_balance": 0.0, "closing_balance": 0.0,
"transactions": [
{ "date": "YYYY-MM-DD", "description": "string",
"category": "string", "amount": -12.50, "balance": 0.0 }
]
}POST /validate
Runs the deterministic validation engine (12 invoice + 8 bank checks). Returns a 0–100 Quality Score, grade (green/yellow/red), every check and a summary.
curl -X POST https://flowparse.io/api/v1/validate \
-H "Authorization: Bearer pf_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"type": "invoice",
"data": {
"supplier_name": "Acme Ltd",
"invoice_number": "INV-1024",
"invoice_date": "2026-05-01",
"currency": "EUR",
"subtotal": 100.00,
"tax_amount": 19.00,
"total": 119.00,
"line_items": [
{ "description": "Widget", "quantity": 2, "unit_price": 50, "tax_rate": 19, "amount": 100 }
]
}
}'{
"validations": [
{
"documentType": "invoice",
"score": { "value": 98, "grade": "green" },
"summary": { "passed": 11, "warnings": 1, "errors": 0 },
"issues": [ { "severity": "pass", "title": "Totals reconcile", ... } ]
}
]
}POST /export
Generates a file in the requested format. Spreadsheet formats return text (CSV/XML) or base64 (XLSX); accounting formats also include a preview of the mapped columns and rows.
| format | Target | Output |
|---|---|---|
xlsx | Excel | Styled multi-sheet workbook (base64) |
csv | CSV | UTF-8, 1:1 source columns + line items |
xml | XML | Structured invoice / statement XML |
quickbooks | QuickBooks | Import-ready CSV |
xero | Xero | AP/AR invoice + bank import |
datev | DATEVNEW | EXTF Buchungsstapel |
onec | 1СNEW | 1CClientBankExchange / CSV |
curl -X POST https://flowparse.io/api/v1/export \
-H "Authorization: Bearer pf_live_xxx" \
-H "Content-Type: application/json" \
-d '{ "format": "xlsx", "type": "invoice", "data": { ... } }'
# → { "format":"xlsx", "filename":"...", "encoding":"base64", "content":"UEsDBB..." }Accounting exports
Set format to quickbooks, xero, datev or onec. Each returns the import file plus a preview. Pass options to override account codes / tax keys, and onecLanguage for 1С.
curl -X POST https://flowparse.io/api/v1/export \
-H "Authorization: Bearer pf_live_xxx" \
-H "Content-Type: application/json" \
-d '{ "format": "quickbooks", "type": "invoice", "data": { ... } }'1С / accounting preview
Add "preview": true to any accounting export to get back just the mapped table (columns, first rows, total count and mapping notes) without generating the file — ideal for showing a confirmation screen before import.
curl -X POST https://flowparse.io/api/v1/export \
-H "Authorization: Bearer pf_live_xxx" \
-H "Content-Type: application/json" \
-d '{ "format": "onec", "preview": true, "onecLanguage": "ru", "type": "invoice", "data": { ... } }'
# → { "format":"onec", "preview": { "columns":[...], "rows":[...], "totalRows": 1, "notes":[...] } }The preview mirrors the app's in-product preview exactly, so what you show your users is what imports.
Code examples
Node.js
const res = await fetch("https://flowparse.io/api/v1/export", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.PARSEFLOW_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ format: "xero", type: "invoice", data: invoice }),
})
const { content, filename } = await res.json()
require("fs").writeFileSync(filename, content, "utf8")Python
import os, base64, requests
r = requests.post(
"https://flowparse.io/api/v1/export",
headers={"Authorization": f"Bearer {os.environ['PARSEFLOW_API_KEY']}"},
json={"format": "xlsx", "type": "bank_statement", "data": statement},
)
out = r.json()
with open(out["filename"], "wb") as f:
f.write(base64.b64decode(out["content"])) # xlsx is base64Errors
Errors return a JSON body { "error": "message" } with a standard HTTP status.
Bad Request
Malformed body, missing data, or unsupported format.
Unauthorized
Missing, invalid or revoked API key.
Too Many Requests
Page budget exhausted — top up or upgrade.
Server Error
Unexpected error generating the export.
Rate limits
Throughput is governed by your page balance rather than a fixed request cap. If your monthly budget and bonus pages are exhausted, requests that consume pages return 429 until you top up or upgrade. Validation of already-extracted JSON is free.
Ready to build? Generate your first key in one click.
Get API key