Dualentry – Gotchas

Service ID: dualentry

DualEntry is an AI-native ERP platform built from the ground up for finance teams scaling from mid-market to IPO.

⚠️

18 gotchas across 13 resources

These are connector-specific behaviors and limitations to be aware of when integrating.

allbillPaymentsAll

DualEntry scopes bill payments by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

Bills1 gotcha

allbillsAll

DualEntry scopes bills by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

Credit Notes1 gotcha

allcreditNotesAll

DualEntry scopes credit notes by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

Customers1 gotcha

allcustomersAll

DualEntry customers are org-level master data and are not scoped to any company. The x-apideck-company-id header has no effect on customer list or lookup results — all customers belong to the organisation, not to individual subsidiary companies.

Expenses3 gotchas

allexpensesAll

DualEntry scopes expenses by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

addexpensesAdd

DualEntry requires company_id, supplier (vendor_id), account (account_number), and currency (currency_iso_4217_code) when creating a direct expense, even though these fields are optional in the unified schema.

updateexpensesUpdate

DualEntry requires company_id, supplier (vendor_id), account (account_number), and currency (currency_iso_4217_code) when updating a direct expense, even though these fields are optional in the unified schema.

Invoice Items2 gotchas

allinvoiceItemsAll

Invoice items (the product catalog) are tenant-wide in DualEntry and cannot be scoped by company. The x-apideck-company-id header is accepted but has no effect — all items across the tenant are returned regardless of the company ID.

addinvoiceItemsAdd

Creating an item requires code (used as the DualEntry SKU) and an income account (income_account.id). Omitting code returns 400 ... missing sku.

Invoices2 gotchas

allinvoicesAll

DualEntry scopes invoices by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

addinvoicesAdd

Posted invoices (status: posted) require due_date, an invoice-level memo (customer_memo, or reference as a fallback), and a description on every line item. Omitting any of these returns 400 ... Required for posted records. A company must also be resolved — supplied by the connection's Default Company setting, the x-apideck-company-id header, or company_id in the body (any one suffices). Draft invoices (status: draft) have none of these requirements.

alljournalEntriesAll

DualEntry scopes journal entries by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

allledgerAccountsAll

Ledger accounts (the chart of accounts) are tenant-wide in DualEntry and cannot be scoped by company. The x-apideck-company-id header is accepted but has no effect — all accounts across the tenant are returned regardless of the company ID.

Payments2 gotchas

allpaymentsAll

DualEntry scopes payments by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

addpaymentsAdd

Apply a payment to an invoice via allocations[]: each allocations[].id is the target invoice's id (its DualEntry invoice number) and allocations[].amount the amount applied. This is what drives the invoice's derived status (partially_paid / paid). A memo (note) is required. Use status: authorised to post the payment — posted is not an accepted value (allowed: draft, authorised, rejected, paid, voided, deleted). Payments created with status: draft succeed but do not affect the invoice balance or status; only posted (authorised) payments move the balance.

allpurchaseOrdersAll

DualEntry scopes purchase orders by company. Pass the x-apideck-company-id header (or set a Default Company on the connection) to return only records belonging to that company within the tenant. Without it, records across all companies in the tenant are returned.

Suppliers1 gotcha

allsuppliersAll

DualEntry suppliers are org-level master data and are not scoped to any company. The x-apideck-company-id header has no effect on supplier list or lookup results — all suppliers belong to the organisation, not to individual subsidiary companies.

Tax Rates1 gotcha

alltaxRatesAll

DualEntry returns the Product Tax Code catalog (e.g. TAXABLE - System, NON_TAXABLE - System, plus Avalara codes) from /public/v2/product-tax-codes. These are categorical tax codes, not rate-based — effective_tax_rate and total_tax_rate are always 0. Use the returned id and code to reference the tax on invoice-items (sales_details.tax_rate.id).

Read-only catalog: add, update, delete are not exposed in this release. Global system-managed codes are list-only and return 403 on GET /tax-rates/{id}; org-scoped codes (when present) support get-by-id.

The product tax code catalog is tenant-wide and cannot be scoped by company. The x-apideck-company-id header is accepted but has no effect on the returned catalog.