Unified Accounting / ERP API
Knit's Unified Accounting API gives you a single integration to read and write financial data — invoices, payments, expenses, journal entries, and more — across QuickBooks, Xero, NetSuite, Sage Intacct, FreshBooks, and more. Build once — support every accounting and ERP system your customers use.
What Is a Unified Accounting / ERP API?
A unified accounting API is a single, standardized programming interface that lets your product read and write financial data — invoices, payments, expenses, journal entries, and purchase orders — across multiple accounting and ERP platforms without building a separate integration for each one.
Accounting and ERP platforms each have their own APIs with different authentication methods, object models, and rate limits. Knit normalizes these differences so your engineering team integrates once, and Knit handles the translation layer for every accounting system your customers use.
Knit normalizes four things across all providers:
| Layer | What Knit handles |
|---|---|
| Data models | Consistent field names and structures — invoices, payments, and journal entries from QuickBooks, Xero, and NetSuite return the same schema |
| Authentication | OAuth, API keys, and tokens managed per-provider; you pass a single X-Integration-Id header |
| Pagination | Cursor-based pagination works identically regardless of how the provider implements it |
| Error formats | Standardized error responses with provider context where available |
Building AI agents?Knit is MCP-compatible (Model Context Protocol). Your agents can perform authenticated read and write actions across every connected accounting system with zero per-provider logic. Try MCP Hub →
How It Works
1. Your customer connects their accounting system
Knit's pre-built embedded auth UI handles OAuth, API keys, and token management per provider. Your team writes zero auth code.
2. Knit normalizes the data
Invoices, payments, expenses, and journal entries are all mapped to Knit's unified schema — regardless of how each accounting system stores or names them internally.
3. Your product calls one API
Use a single set of endpoints and data models across your entire product. Add a new accounting platform later? No code changes on your side.
4. Stay in sync with real-time webhooks
Native and virtual webhooks fire on record changes — a paid invoice, a new journal entry, an updated purchase order — with a consistent event schema across all providers.
Accounting Data Objects
The following objects are available through the unified schema. All fields are normalized across providers.
Accounts (Chart of Accounts)
The ledger accounts that make up a company's chart of accounts — assets, liabilities, equity, income, and expenses.
id, name, category, type, description, accountNumber, status,
currentBalance, companyId, currency, parentAccountId, createdAt, updatedAttype Includes values like LIABILITY, ASSET, EQUITY, INCOME, EXPENSE. category distinguishes LEDGER_ACCOUNT from BANK_ACCOUNT.
→ Account data model · Create account · Update account · List accounts · Get account
Contacts (Customers & Vendors)
Customer and vendor records — a single Contact object with a contactType field distinguishing the two.
info: { id, name, contactType, status, accountNumber, companyId,
currency, taxNumber, urls[], createdAt, updatedAt }
emails[]: { type, email }
phones[]: { type, phoneNumber }
addresses[]: { addressLine1, addressLine2, city, state, country, zipCode, addressType }contactType is either CUSTOMER or VENDOR.
→ Contact data model · Create contact · Update contact · List contacts · Get contact
Invoices & Bills
Sales invoices and vendor bills — one object, distinguished by type (INVOICE or BILL) — with full line-item and payment detail.
info: { id, invoiceNumber, type, issueDate, dueDate, paidOnDate, totalAmount,
remainingAmount, totalDiscount, totalTax, contactId, companyId,
currency, exchangeRate, status, createdAt, updatedAt }
lineItems[]: { lineItemId, itemId, itemCode, itemName, description, taxRateId,
accountId, taxAmount, totalAmount, quantity, unitRate,
discountAmount, discountPercentage, trackingCategories[] }
addresses[]: { addressLine1, addressLine2, city, state, country, zipCode, addressType }
payments[]: { id, amount, referenceNumber, discount, mode, paymentLinkedTo, invoiceId, invoiceNumber }→ Invoice data model · Create invoice · Update invoice · List invoices · Get invoice · Add invoice attachment
Payments
Payments applied against invoices or bills, including partial payments and payment method detail.
id, amount, referenceNumber, discount, mode, paymentLinkedTo,
invoiceId, invoiceNumber, createdAt, updatedAt→ Payment data model · Create payment · Update payment · List payments · Get payment
Expenses
Employee or vendor expenses with line-item detail and account coding.
info: { id, transactionDate, employeeId, contactId, companyId, totalAmount,
description, currency, exchangeRate, createdAt, updatedAt }
lineItems[]: { id, amount, accountId, description, contactId, taxRateId, trackingCategories[] }→ Expense data model · Create expense · List expenses · Get expense · Add expense attachment
Journal Entries
Manual and system-generated journal entries with debit/credit line items.
info: { id, name, date, status, description, companyId, currency,
exchangeRate, referenceNumber, createdAt, updatedAt }
lineItems[]: { id, accountId, companyId, amount, type, description }lineItems[].type is DEBIT or CREDIT.
→ Journal entry data model · Create journal entry · List journal entries · Get journal entry
Purchase Orders
Purchase orders with vendor, delivery, and line-item detail.
info: { id, purchaseOrderNumber, status, issueDate, deliveryDate, totalAmount,
totalTax, totalDiscount, customerContactId, vendorContactId,
companyId, currency, exchangeRate, addresses[] }
lineItems[]: { lineItemId, itemId, itemCode, itemName, description, taxRateId,
accountId, taxAmount, totalAmount, quantity, unitRate,
discountAmount, discountPercentage, trackingCategories[] }→ Purchase order data model · List purchase orders · Get purchase order
Vendor Credits & Credit Notes
Credits issued by a vendor (Vendor Credits) or issued to a customer (Credit Notes), including allocation against open invoices or bills.
id, contactId, amount, remainingAmount, status, currency, companyId, createdAt, updatedAt→ List vendor credits · Create vendor credit · Update vendor credit · Get vendor credit by ID · Allocate vendor credit to a bill · Deallocate vendor credit · List credit notes · Create credit note · Update credit note · Get credit note by ID · Allocate credit note to an invoice · Deallocate credit note
Credit Card Transactions
Card transactions recorded against a connected account, with full CRUD support.
id, accountId, amount, date, description, status, companyId, createdAt, updatedAt→ Create credit card transaction · Update credit card transaction · List credit card transactions · Get credit card transaction
Company & Employee
The Company object represents the legal entity or organization inside the connected accounting platform — most other objects (accounts, invoices, journal entries) carry a companyId referencing it. The Employee object represents a person inside the accounting system itself (distinct from Knit's HRIS Employee object), used where expenses or payroll journal entries need to link back to an individual.
Company: id, name, currency, country, taxNumber, createdAt, updatedAt
Employee: id, name, employeeNumber, email, phone, status→ Company data model · Get companies info · Employee data model · List employees · Get employee
Items, Tax Rates & Tracking Categories
Supporting reference objects used across invoices, bills, and purchase orders.
Items: id, code, name, description
Tax Rates: id, name, rate, type
Tracking Categories: categoryId, categoryName, parentCategoryId, parentCategoryNameTracking categories let you tag line items with cost centers, regions, or departments — normalized the same way whether the source is QuickBooks classes, Xero tracking categories, or NetSuite segments.
→ Items data model · Get items · Create item · Update item · Delete item · Get tax rates · Get tracking categories · List currencies
Custom fieldsFields outside the unified schema are accessible via custom fields that you could map to the unified model, or the Passthrough API that lets you make direct calls to the underlying accounting system using Knit's auth layer without giving up the unified platform.
API Reference
All accounting endpoints are organized by category. Each endpoint works identically regardless of the underlying platform — pass your API key and the customer's X-Integration-Id, and the response schema is consistent across all providers.
Account APIs
| Endpoint | Description |
|---|---|
| Account data model | Full field reference for the normalized chart-of-accounts object |
| Create account | Add a new ledger or bank account |
| Update account | Update name, type, or status |
| List accounts | Retrieve accounts filtered by type or status |
| Get account | Retrieve a single account by ID |
Contact APIs
| Endpoint | Description |
|---|---|
| Contact data model | Field reference for the normalized customer/vendor object |
| Create contact | Add a new customer or vendor |
| Update contact | Update contact details |
| List contacts | Retrieve contacts filtered by type (CUSTOMER/VENDOR) |
| Get contact | Retrieve a single contact by ID |
Invoice & Bill APIs
| Endpoint | Description |
|---|---|
| Invoice data model | Field reference for the normalized invoice/bill object |
| Create invoice | Issue a new invoice or bill |
| Update invoice | Update amount, due date, or status |
| List invoices | Retrieve invoices filtered by type, status, or contact |
| Get invoice | Retrieve a single invoice by ID |
| Add invoice attachment | Attach a file to an invoice |
Payment APIs
| Endpoint | Description |
|---|---|
| Payment data model | Field reference for the normalized payment object |
| Create payment | Record a payment against an invoice or bill |
| Update payment | Update payment amount or reference |
| List payments | Retrieve payment history |
| Get payment | Retrieve a single payment by ID |
Expense APIs
| Endpoint | Description |
|---|---|
| Expense data model | Field reference for the normalized expense object |
| Create expense | Log a new expense with line items |
| List expenses | Retrieve expenses filtered by date or employee |
| Get expense | Retrieve a single expense by ID |
| Add expense attachment | Attach a receipt or document to an expense |
Journal Entry APIs
| Endpoint | Description |
|---|---|
| Journal entry data model | Field reference for debit/credit line items |
| Create journal entry | Post a manual journal entry with debit/credit lines |
| List journal entries | Retrieve journal entries by date range |
| Get journal entry | Retrieve a single journal entry by ID |
Purchase Order APIs
| Endpoint | Description |
|---|---|
| Purchase order data model | Field reference for the normalized purchase order object |
| List purchase orders | Retrieve purchase orders filtered by status |
| Get purchase order | Retrieve a single purchase order by ID |
Vendor Credit & Credit Note APIs
| Endpoint | Description |
|---|---|
| Create vendor credit | Track an amount owed back from a supplier |
| List vendor credits | Retrieve vendor credits |
| Allocate vendor credit to a bill | Apply a vendor credit against a bill |
| Create credit note | Offset or reduce a customer's outstanding invoice |
| List credit notes | Retrieve credit notes |
| Allocate credit note to an invoice | Apply a credit note against an invoice |
Supported Platforms
Knit connects to 11 accounting and ERP platforms. A single integration gives you access to all of them.
| Category | Platforms |
|---|---|
| Enterprise ERP | NetSuite, Sage Intacct, Microsoft Dynamics Business Central, Oracle Financials |
| Mid-market accounting | QuickBooks, Xero, Sage 200 Standard, Odoo Accounting Online |
| SMB accounting | Zoho Books, FreshBooks, Wave Financial |
Don't see a platform? Use the Connector Builder / Integration Agent to add it yourself in hours, not weeks.
Key Capabilities
Real-Time Sync & Webhooks
Knit supports both native webhooks (forwarded directly from platforms that emit them) and virtual webhooks (Knit polls the source, detects changes, and emits events). Both use the same subscription interface and event schema — your integration code is identical either way.
Supported event types include: record.new, record.modified, record.deleted, invoice.paid, and more.
Zero Data Storage
Knit never stores your customers' financial data at rest. Every API request passes through to the source accounting system in real time. This reduces your GDPR, CCPA, and SOC 2 compliance scope — there are no replicated invoices or journal entries sitting in a third-party system.
Multi-Currency & Multi-Company
Every core object — invoices, payments, journal entries, purchase orders — carries currency and exchangeRate fields, and most objects support linkedCompanyIds for organizations running multiple entities or subsidiaries through one connected accounting platform.
AI Connector Builder / Integration Agent
When a customer's accounting platform isn't in Knit's library, the AI Connector Builder lets your team define a new connector in hours. Specify the platform's API structure and data mapping; Knit's AI generates the connector.
Passthrough API
Need an object outside the unified APIs — a custom NetSuite saved search, a Xero-specific report? Passthrough lets you make direct calls to the underlying accounting system using Knit's authentication layer.
MCP Compatibility
Knit is MCP-compatible, giving AI agents authenticated read/write access to invoices, payments, expenses, and journal entries across every connected accounting system through the same unified layer — no per-provider auth or endpoint logic in your agent code.
Quick Start
Authentication
All requests require two headers:
Authorization: Bearer YOUR_API_KEY
X-Integration-Id: YOUR_CUSTOMER_INTEGRATION_IDThe X-Integration-Id is the unique identifier for a specific customer's connected accounting platform, issued after they complete the Knit auth flow.
Fetch invoices
curl --request GET \
--url 'https://api.getknit.dev/v1.0/accounting.invoice.list?type=INVOICE' \
--header 'accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'X-Knit-Integration-Id: YOUR_CUSTOMER_INTEGRATION_ID'Response — same schema whether the customer uses QuickBooks, Xero, or NetSuite:
{
"success": true,
"data": {
"invoices": [
{
"info": {
"id": "0d93e033-6548-40ea-bdfd-e551b85f5d7e",
"invoiceNumber": "INV-101",
"type": "INVOICE",
"issueDate": "2026-05-20T00:00:00Z",
"dueDate": "2026-05-22T00:00:00Z",
"totalAmount": 1100,
"remainingAmount": 0,
"totalTax": 100,
"contactId": "65a3f750-de4c-463a-85b1-f04a3a37b45a",
"companyId": "ac19c8f9-a901-4db3-bef1-5aaca2a7c15a",
"status": "PAID"
},
"lineItems": [
{
"lineItemId": "3a9701e4-5f9b-4ee7-8474-daa6d5887d6e",
"itemName": "Tshirt",
"accountId": "4200",
"quantity": 10,
"unitRate": 120,
"totalAmount": 1100
}
],
"payments": [
{
"id": "eeedd617-d2c4-4d8c-96f9-69eeeb62b1e6",
"amount": 1100,
"mode": "CASH",
"invoiceId": "0d93e033-6548-40ea-bdfd-e551b85f5d7e"
}
]
}
],
"nextPageToken": "1928hdhdhd&^"
}
}Create a journal entry
curl --request POST \
--url https://api.getknit.dev/v1.0/accounting.journal.create \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'X-Knit-Integration-Id: YOUR_CUSTOMER_INTEGRATION_ID'Record a payment
curl --request POST \
--url https://api.getknit.dev/v1.0/accounting.payment.create \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'X-Knit-Integration-Id: YOUR_CUSTOMER_INTEGRATION_ID'
Rate limitsKnit applies per-provider rate limits based on the underlying accounting platform's constraints and manages it automatically if you've set up a sync. If you hit a limit, the API returns a
429response with aRetry-Afterheader.
Use Cases
Automated Invoice-to-Cash
Sync invoices and payment status in real time to trigger dunning workflows, update customer-facing balance views, or reconcile revenue automatically.
Typical flow: invoice.paid webhook → update remaining balance → close dunning workflow → sync payment record back to source
Multi-Entity Financial Consolidation
Pull chart-of-accounts, journal entries, and invoices across every subsidiary's accounting system into one consolidated reporting layer.
Typical flow: fetch accounts + journal entries per linkedCompanyId → normalize currency via exchangeRate → aggregate into consolidated reporting
Embedded Bookkeeping & Spend Management
Power a bookkeeping or spend-management product that reads and writes expenses, bills, and journal entries directly into a customer's existing accounting system — no data migration required.
Typical flow: fetch chart of accounts → categorize incoming expense → write expense with correct accountId → attach receipt
Procure-to-Pay Automation
Read purchase orders and vendor bills, match them against receipts, and write approved payments back to the source system.
Typical flow: fetch purchase orders by status → match against incoming bill → create payment on approval → update purchase order status
Lending & Underwriting Data Access
Pull invoices, payments, and account balances from a business's connected accounting platform to power real-time credit and risk decisioning.
Typical flow: fetch accounts + invoices + payments → compute cash-flow and AR aging signals → feed underwriting model
AI Bookkeeping Agents
Feed normalized, real-time financial data into LLM pipelines and MCP-compatible AI agents to build bookkeeping copilots that categorize expenses and reconcile accounts autonomously.
Typical flow: sync accounts + expenses + invoices → embed into vector store → ground LLM categorization in live chart of accounts → use MCP write tools to post journal entries
FAQ
What is a unified accounting API?
A unified accounting API is a single, standardized interface that lets your product read and write financial data — invoices, payments, expenses, and journal entries — across multiple accounting and ERP platforms without building a separate integration for each one. You integrate with Knit once; Knit normalizes the data models, authentication, and API differences between providers.
What's the difference between a unified accounting API and a unified ERP API?
In practice the terms overlap heavily — accounting is the core financial layer inside most ERP systems. Knit's unified schema covers the accounting objects (accounts, contacts, invoices, payments, journal entries, purchase orders) that are common to both dedicated accounting platforms like QuickBooks and Xero, and the financial modules of larger ERP systems like NetSuite and Sage Intacct.
How long does it take to integrate?
Most teams go live in 1–3 days with Knit. Building a production-ready 1:1 native integration against a single platform like NetSuite typically takes several weeks — but when you build with Knit, one integration unlocks every connected accounting system, and Knit maintains all connectors as providers update their APIs.
Does Knit store financial data?
No. Knit is a pass-through layer — requests hit the source accounting system in real time and no data is stored at rest. This reduces your GDPR, CCPA, and SOC 2 compliance scope.
How does Knit handle multi-currency?
Every core object carries currency and exchangeRate fields, normalized the same way regardless of how the underlying platform represents currency conversion.
What if a customer's accounting platform isn't on the list?
Using the Connector Builder, we can add a new connector in hours.
Is Knit compatible with AI agents and MCP?
Yes. Knit is MCP-compatible, so agents in MCP-compatible frameworks can perform authenticated accounting read/write actions via Knit with no per-provider logic.
What's the passthrough API?
The passthrough API lets you make direct calls to the underlying accounting system using Knit's authentication layer. Use it for custom objects or fields outside the unified schema.
Next Steps
| 🚀 Get your API key | Start building in minutes |
| 🧾 Invoice data model | Full field reference for the core object |
| 📓 Journal entry data model | Debit/credit line-item field reference |
| 🏦 Account data model | Chart-of-accounts field reference |
| 👤 Contact data model | Customer/vendor field reference |
| 🔗 Supported accounting integrations | Full list of connected platforms |
Updated about 3 hours ago

