EnemoAi

EnemoAi Data API

Send your business's own figures to EnemoAi, and its answers, its 13-week cash forecast and its early warnings work from your books, not only from the public record. Machine-readable reference: openapi.json (OpenAPI 3.1).

Read-only for EnemoAi. EnemoAi never moves money or acts on an account: it can't pay, transfer, post to your ledger or change anything in your systems. Your data stays inside your business's account, is never used for another business and never used to train AI models. It's kept while your account is open and deleted when you delete it or close the account.

Keys

The account owner or an admin creates a key in EnemoAi: Account → Your business data → Data API keys (EnemoAi asks them to confirm with WorkPair first). Each key:

Authorization: Bearer eai_live_…

Sending data

Every type works the same way: POST /v1/data/{type} with up to 1,000 records, each carrying your own external_id. A record with an ID EnemoAi already has replaces it. The whole batch is checked first; if any record has a problem nothing is stored, and the response lists every problem by position, ID and field.

curl https://api.enemo.ai/v1/data/invoices \
  -H "Authorization: Bearer $ENEMOAI_KEY" \
  -H "Idempotency-Key: ar-sync-2026-11-01" \
  -H "Content-Type: application/json" \
  -d '{"schema_version": 1, "records": [
        {"external_id": "INV-1042", "number": "1042", "customer": "Acme Builders Inc",
         "issue_date": "2026-10-01", "due_date": "2026-10-31",
         "amount": 12000.00, "balance_due": 12000.00, "status": "open"}]}'
{"type": "invoices", "schema_version": 1, "received": 1, "created": 1, "updated": 0}

Data types (schema version 1)

Required fields in bold. Unknown fields are refused, so typos never go unnoticed.

TypeFields
accountsBank, card, loan, credit line or investment accounts. external_id, name, type (bank, card, loan, credit_line, investment, other), balance, balance_as_of, institution, last4 (last 4 digits only), currency, available, credit_limit, interest_rate_pct, rate_type (fixed or floating), maturity_date, payment_amount, payment_due_date, payment_frequency, covenants: a list of {name, metric, threshold, test_date, current_value}; metric is min_cash, min_liquidity, max_utilization, max_leverage, min_dscr, min_current_ratio, min_ebitda or other.
transactionsexternal_id, date, amount (+ in, − out), account_external_id, description, counterparty, category, status (posted, pending), currency.
gl_entriesexternal_id, date, account_code, account_name, debit, credit (one of them), memo, journal_id, currency.
chart_of_accountsexternal_id, code, name, type (asset, liability, equity, income, cogs, expense, other), parent_code.
invoicesReceivables. external_id, customer, issue_date, due_date, amount, balance_due, number, status (draft, open, partial, paid, void, written_off), paid_date, currency.
billsPayables. external_id, supplier, issue_date, due_date, amount, balance_due, number, status, paid_date, category, currency.
payrollTotals by pay period only. external_id, period_start, period_end, pay_date, gross_wages, employer_taxes, benefits, net_pay_total, headcount, contractors_total, department, currency.
salesexternal_id, date, amount, channel, category, product, quantity, customer (businesses only), status (completed, refunded, pending), currency.
inventorySnapshots. external_id, sku, as_of, quantity, name, unit_cost, value, location, reorder_point.
counterpartiesCustomers, suppliers, lenders, landlords, partners: businesses only. external_id, name, role (customer, supplier, lender, landlord, partner, other), entity_type (business, government, nonprofit), state, country, website.
kpisNamed time series. external_id, series, date, value, unit.
documentsContracts, board decks, loan agreements, financial statements, policies: POST /v1/data/documents as multipart/form-data with file, external_id, doc_type, title, date. PDF (up to 100 pages), Word, Excel, text or CSV, up to 20 MB. Kept until you delete them.

What EnemoAi refuses

Errors

422 {"detail": "1 of 2 records have problems; nothing was stored.",
     "errors": [{"index": 1, "external_id": "p2", "field": "employee_name",
                 "message": "Payroll is accepted as totals by period only; …"}]}

401 missing, invalid or revoked key · 403 the key lacks that type's scope, or the account is closed · 409 Idempotency-Key reused with a different body · 413 more than 1,000 records or too large a file · 422 validation · 429 over the key's rate limit.

No code needed

In Account → Your business data, the owner or an admin can import OFX or QFX bank and card statements (the Quicken or QuickBooks download every major U.S. bank offers) or any CSV, matching columns to fields. PDF statements aren't imported: their layouts differ by bank and can't be read reliably, so download the OFX, QFX or CSV version instead. Direct QuickBooks, Xero and bank connections are coming next.

What EnemoAi does with it

Questions: hello@enemo.ai. Security: enemo.ai/security. Legal: enemo.ai/legal.