Skip to content

Accounting · Beta

DualEntry
API integration

Ship Accounting features without building the integration. Full DualEntry API access via Proxy and 230+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Built for specific customer use cases. Issues are resolved quickly.

Talk to us
DualEntry

Use Cases

Why integrate with DualEntry

Common scenarios for SaaS companies building DualEntry integrations for their customers.

01

Sync Corporate Card Spend into a Multi-Entity GL

Spend management platforms can push DirectExpenses, Bills, and VendorPayments into DualEntry, mapped to the correct company_id, GL account, and classification. This lets finance teams close the books without manual re-entry of card and reimbursement data.

02

Automate ASC 606 Revenue Recognition from Billing Events

Subscription billing and CPQ platforms can create Contracts, bulk-upsert Contract Usages, and push Change Orders into DualEntry. This offloads revenue recognition math to the accounting system while keeping the billing platform as the source of truth for pricing.

03

Close the Loop on Procure-to-Pay Approvals

Procurement tools can push Purchase Orders and Bills into DualEntry, subscribe to Webhooks for approval state changes, and then trigger Paper Check printing or record VendorPayments once approved. End users get one procurement workflow that natively drives their ERP.

04

Programmatic Bank Feeds and Reconciliation

Fintech and treasury apps can create Bank Connections, push Account Transactions, invoke bank_match_populate, and act on match suggestions to auto-reconcile. This gives banking platforms a native reconciliation experience inside DualEntry customers' ledgers.

05

Intercompany Journals for Multi-Entity Operators

PropTech, franchise, and holding-company SaaS can post IntercompanyJournalEntries that balance across multiple company_ids in a single call. This eliminates the manual eliminations and offset entries controllers otherwise do at month-end.

What You Can Build

Ship these features with Truto + DualEntry

Concrete product features your team can ship faster by leveraging Truto’s DualEntry integration instead of building from scratch.

01

Two-way Customer, Vendor, and Item Sync

Keep Customers, Vendors, and Items aligned between your app and DualEntry using list, create, update, and partial-update endpoints with webhook-driven change detection.

02

Push-to-Ledger for Invoices, Bills, and Journal Entries

Ship a one-click 'Send to DualEntry' action that creates Invoices, Bills, JournalEntries, or CashSales with attachments, then tracks status via get-by-id and webhooks.

03

Native Revenue Recognition Module

Expose Contracts, Contract Change Orders, and bulk usage upserts in your billing UI so customers configure performance obligations once and let DualEntry recognize revenue automatically.

04

AP Automation with Paper Check Printing

Trigger print_now or print_later paper checks from your AP tool, batch them via print-batches bulk update, and reconcile the resulting VendorPayments back into your platform.

05

Bank Feed + AI-Assisted Reconciliation

Create Bank Connections and push Account Transactions, then call bank_match_populate and surface bank_match_suggestions inside your product so users approve or unmatch entries in-app.

06

Approval-Aware Workflow Triggers

Poll Workflows, Execution States, and Inbox records — or subscribe to webhook topics — to gate downstream actions in your app on DualEntry approval outcomes.

SuperAI

DualEntry AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

list_all_dual_entry_public_healths

Check the health of the DualEntry Public API to verify connectivity and that your API key is working. Returns: status, timestamp.

list_all_dual_entry_public_invoices

List Invoice records in DualEntry with filtering by company, customer, date range, amount, due date, currency, record status, and approval status. Returns: items, count, id, updated_at. Max 100 per page.

create_a_dual_entry_public_invoice

Create a new Invoice record in DualEntry. Defaults to posted status which requires company_id, customer_id, currency_iso_4217_code, exchange_rate, due_date, and at least one item line; set record_status to draft to defer required-field validation. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, customer_name, attachments, payment, term_id, term_name,…. Required: date.

update_a_dual_entry_public_invoice_by_id

Update an existing Invoice record in DualEntry by id (the record number). Validates all required fields and business rules. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, customer_name, attachments, payment, term_id, term_name, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, approval_status, next_approvers,…. Required: id, date.

dual_entry_public_invoices_attach_attachment

Upload file attachments to an existing DualEntry invoice record. Returns the updated invoice including id, number, amount, attachments, and record_status. Required: record_number.

get_single_dual_entry_public_invoice_by_id

Get a single DualEntry invoice by id with all related data. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, customer_name, attachments, payment, term_id, term_name, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, code, items, company_id, company_name,…. Required: id.

dual_entry_public_invoices_partial_update

Partially update an existing DualEntry invoice by id, sending only the fields you want to change — anything omitted stays as-is. Returns the updated invoice object including id, number, amount, company_id, customer_id, items, and attachments. Required: id.

dual_entry_public_invoices_replace_attachments

Replace all attachments on a DualEntry invoice record; existing attachments are marked as deleted and the uploaded files become the new set. Returns the updated invoice object including id, number, amount, and attachments. Required: record_number.

list_all_dual_entry_public_sales_orders

List SalesOrder records in DualEntry with filtering by company, customer, date range, record status, invoiced status, and update timestamp. Returns: items, count, id, updated_at. Max 100 per page.

create_a_dual_entry_public_sales_order

Create a new SalesOrder record in DualEntry. A create request defaults to record_status: posted; set record_status: draft to skip required-field and line validation. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, invoiced_status, attachments, term_id, term_name, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number,…. Required: memo, date, company_id, customer_id, currency_iso_4217_code, exchange_rate, items.

update_a_dual_entry_public_sales_order_by_id

Update an existing SalesOrder record in DualEntry by id. Validates all required fields and business rules. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, invoiced_status, attachments, term_id, term_name, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, items, company_id, company_name, company_currency,…. Required: id, memo, date, company_id, customer_id, currency_iso_4217_code, exchange_rate, items.

dual_entry_public_sales_orders_attach_attachment

Upload file attachments to a SalesOrder record in DualEntry by record number. Returns the updated sales order including id, number, company_id, customer_id, record_status, items, and attachments. Required: record_number.

get_single_dual_entry_public_sales_order_by_id

Get a specific SalesOrder record in DualEntry by id with all related data. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, invoiced_status, attachments, term_id, term_name, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, items, company_id, company_name, company_currency, customer_id, customer_name,…. Required: id.

list_all_dual_entry_public_bills

List Bill records in DualEntry with filtering by company, vendor, code, number, dates, record status, and approval status. Returns: items, count, id, created_at, updated_at. Max 100 per page.

create_a_dual_entry_public_bill

Create a new Bill record in DualEntry. Posted records require company_id, vendor_id, currency_iso_4217_code, exchange_rate, memo, and at least one items or expenses line; a draft defaults to empty memo, exchange_rate 1.0, and USD. Returns: custom_fields, supply_date, place_of_supply, tax_registration_numbers, tax, attachments, transaction_ids, term_id, term_name, bank_match_status,…. Required: date.

update_a_dual_entry_public_bill_by_id

Update an existing Bill record in DualEntry by id (record number). Validates all required fields and business rules for posted records. Returns: custom_fields, supply_date, place_of_supply, tax_registration_numbers, tax, attachments, transaction_ids, term_id, term_name, bank_match_status, reconciliation_status, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id,…. Required: id, date.

dual_entry_public_bills_attach_attachment

Upload file attachments to a DualEntry bill record by record number. Returns the updated bill including id, number, company_id, vendor_id, currency_iso_4217_code, due_date, record_status, and attachments. Required: record_number.

get_single_dual_entry_public_bill_by_id

Get a single DualEntry bill by id (record number). Returns: custom_fields, supply_date, place_of_supply, tax_registration_numbers, tax, attachments, transaction_ids, term_id, term_name, bank_match_status, reconciliation_status, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, code, date, transaction_date, due_date, company_id, company_name,…. Required: id.

dual_entry_public_bills_partial_update

Partially update an existing DualEntry Bill record by sending only the fields you want to change. Returns the updated bill including id, number, record_status, company_id, vendor_id, due_date, items, and expenses. Subject to period locks, payment-applied restrictions, and approval-workflow rules. Required: id.

list_all_dual_entry_public_journal_entries

List DualEntry journal entries with filtering by company, account, date range, record status, and amount. Returns each record with id, number, code, company_id, date, record_status, items, attachments, created_at, updated_at. Max 100 per page.

create_a_dual_entry_public_journal_entry

Create a journal entry in DualEntry. Defaults to posted status, requiring company_id, currency_iso_4217_code, exchange_rate, memo, and at least one line item. Set record_status to draft to skip validation. Returns: custom_fields, attachments, reversal_items, items, bank_match_status, reconciliation_status, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number,…. Required: date.

update_a_dual_entry_public_journal_entry_by_id

Update an existing DualEntry journal entry by id. Full replacement of all fields and line items; validates required fields and business rules. Returns: custom_fields, attachments, reversal_items, items, bank_match_status, reconciliation_status, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, code, transaction_id, company_id, company_name,…. Required: id, date.

dual_entry_public_journal_entries_attach_attachment

Upload file attachments to a DualEntry journal entry by record number. Returns the updated journal entry with id, number, date, record_status, items, and attachments. Required: record_number.

get_single_dual_entry_public_journal_entry_by_id

Get a single DualEntry journal entry by id, including line items and attachments. Returns: custom_fields, attachments, reversal_items, items, bank_match_status, reconciliation_status, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, code, transaction_id, company_id, company_name, company_currency, memo, date, transaction_date, currency_iso_4217_code,…. Required: id.

list_all_dual_entry_public_purchase_orders

List DualEntry purchase orders with filtering by company, vendor, date range, record status, approval status, billing status, and lifecycle status. Returns: items, count, id, created_at, updated_at. Max 100 per page.

create_a_dual_entry_public_purchase_order

Create a new DualEntry purchase order. Defaults to record_status posted, which requires company_id, vendor_id, currency_iso_4217_code, exchange_rate, and at least one line item; use record_status draft to defer required fields. Returns: attachments, term_id, term_name, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, date, company_id, company_name,…. Required: date, company_id, vendor_id, currency_iso_4217_code, exchange_rate, memo, items.

update_a_dual_entry_public_purchase_order_by_id

Update an existing DualEntry purchase order by id (record number) with full replacement of record data. Validates all required fields and business rules. Returns: attachments, term_id, term_name, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, date, company_id, company_name, company_currency, vendor_id, vendor_name, currency_iso_4217_code, exchange_rate,…. Required: id, date, company_id, vendor_id, currency_iso_4217_code, exchange_rate, memo, items.

dual_entry_public_purchase_orders_attach_attachment

Upload file attachments to an existing DualEntry purchase order by record number. Returns the updated purchase order including id, number, company_id, vendor_id, attachments. Required: record_number.

get_single_dual_entry_public_purchase_order_by_id

Get a single DualEntry purchase order by id (record number) with all related data. Returns: attachments, term_id, term_name, created_by, updated_by, approval_status, next_approvers, rejected_by, internal_id, number, date, company_id, company_name, company_currency, vendor_id, vendor_name, currency_iso_4217_code, exchange_rate, billed_total, due_total, amount, memo, items, record_status,…. Required: id.

list_all_dual_entry_public_customer_prepayments

List CustomerPrepayment records in DualEntry with filtering by company, customer, date range, status, and currency. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_customer_prepayment

Create a new CustomerPrepayment record in DualEntry. A create request defaults to record_status 'posted'; use 'draft' to defer required-field validation. Returns the created prepayment with id, number, record_status, company_id, customer_id, date, amount, exchange_rate, memo, lines, attachments, created_at, updated_at. Required: date, company_id, customer_id, currency_iso_4217_code, exchange_rate, amount, bank_or_undeposited_funds_amount.

update_a_dual_entry_public_customer_prepayment_by_id

Update an existing CustomerPrepayment record in DualEntry by id. Validates all required fields and business rules. Returns the updated prepayment with id, number, record_status, company_id, customer_id, date, currency_iso_4217_code, exchange_rate, memo, amount, lines, attachments, created_at, updated_at. Required: id, date, company_id, customer_id, currency_iso_4217_code, exchange_rate, amount, bank_or_undeposited_funds_amount.

dual_entry_public_customer_prepayments_attach_attachment

Upload file attachments to a CustomerPrepayment record in DualEntry by record number. Returns the updated prepayment with id, number, record_status, company_id, customer_id, date, amount, attachments, created_at, updated_at. Required: record_number.

get_single_dual_entry_public_customer_prepayment_by_id

Get a single CustomerPrepayment record in DualEntry by id. Returns the prepayment with id, number, record_status, company_id, customer_id, date, currency_iso_4217_code, exchange_rate, memo, amount, lines, attachments, created_at, updated_at. Required: id.

dual_entry_public_customer_prepayments_partial_update

Partially update a DualEntry customer prepayment by sending only the fields to change. Returns: transaction_ids, attachments, created_by, updated_by, custom_fields, internal_id, number, company_id, company_name, company_currency, customer_id, customer_name, account_number, memo, check_number, currency_iso_4217_code, date, transaction_date, exchange_rate, undeposited_funds_currency,…. Required: id.

list_all_dual_entry_public_customer_prepayment_applications

List CustomerPrepaymentApplication records in DualEntry with filtering by company, customer, date, currency, and status. Returns each record with id, number, record_status, company_id, customer_id, date, items, attachments, and updated_at. Max 100 per page.

create_a_dual_entry_public_customer_prepayment_application

Create a new CustomerPrepaymentApplication record in DualEntry. Defaults to posted status; use record_status draft to defer validation. Returns: attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, items, company_id, company_name, company_currency, customer_id, customer_name, customer_prepayment_number, customer_credit_number, currency_iso_4217_code,…. Required: date, company_id, currency_iso_4217_code, exchange_rate.

update_a_dual_entry_public_customer_prepayment_application_by_id

Update an existing CustomerPrepaymentApplication record in DualEntry by id. Only draft records can be updated; attempting to update a posted record returns 422. Returns: attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, items, company_id, company_name, company_currency, customer_id, customer_name, customer_prepayment_number, customer_credit_number,…. Required: id, date, company_id, currency_iso_4217_code, exchange_rate.

public_customer_prepayment_applications_attach_attachment

Upload file attachments to a CustomerPrepaymentApplication record in DualEntry. Returns the updated record with id, number, record_status, company_id, customer_id, date, items, and attachments. Required: record_number.

get_public_customer_prepayment_application_by_id

Get a single CustomerPrepaymentApplication record in DualEntry by id. Returns: attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, items, company_id, company_name, company_currency, customer_id, customer_name, customer_prepayment_number, customer_credit_number, currency_iso_4217_code, exchange_rate, memo, date, transaction_date, amount, record_status,…. Required: id.

public_customer_prepayment_applications_partial_update

Partially update a CustomerPrepaymentApplication record in DualEntry, sending only the fields you want to change — omitted fields remain unchanged. Returns the updated record including id, number, customer_id, date, lines, record_status, created_at, and updated_at. Updates are subject to period locks, payment-applied restrictions, and approval-workflow rules. Required: id.

list_all_dual_entry_public_customer_deposits

List CustomerDeposit records in DualEntry with filtering by company, customer, date range, status, and currency. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_customer_deposit

Create a new CustomerDeposit record in DualEntry. A create request defaults to record_status 'posted'; use 'draft' to defer validation. Returns: custom_fields, attachments, created_by, updated_by, internal_id, number, transaction_id, date, transaction_date, company_id, company_name, company_currency, account_id, currency_iso_4217_code, exchange_rate, amount, memo, items, record_status,…. Required: date, company_id, account_number, currency_iso_4217_code, exchange_rate, items.

update_a_dual_entry_public_customer_deposit_by_id

Update an existing CustomerDeposit record in DualEntry by id. Returns: custom_fields, attachments, created_by, updated_by, internal_id, number, transaction_id, date, transaction_date, company_id, company_name, company_currency, account_id, currency_iso_4217_code, exchange_rate, amount, memo, items, record_status, created_at, updated_at, id, customer_id, lines. Required: id, date, company_id, account_number, currency_iso_4217_code, exchange_rate, items.

dual_entry_public_customer_deposits_attach_attachment

Upload file attachments to a CustomerDeposit record in DualEntry. Returns the updated deposit object including id, number, company_id, customer_id, date, record_status, and updated_at. Required: record_number.

get_single_dual_entry_public_customer_deposit_by_id

Get a single CustomerDeposit record from DualEntry by id. Returns: custom_fields, attachments, created_by, updated_by, internal_id, number, transaction_id, date, transaction_date, company_id, company_name, company_currency, account_id, currency_iso_4217_code, exchange_rate, amount, memo, items, record_status, created_at, updated_at, id, customer_id, lines, success, errors. Required: id.

list_all_dual_entry_public_customer_refunds

List CustomerRefund records in DualEntry with filtering by company, customer, date range, currency, and record status. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_customer_refund

Create a new CustomerRefund record in DualEntry. Returns: custom_fields, attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, account_number, items, company_id, company_name, company_currency, customer_id, customer_name, memo, check_number, date, transaction_date, currency_iso_4217_code, exchange_rate, bank_or_credit_card_amount, amount, record_status,…. Required: date, company_id, customer_id, account_number, currency_iso_4217_code, exchange_rate.

update_a_dual_entry_public_customer_refund_by_id

Update an existing CustomerRefund record in DualEntry by id (record number). Returns: custom_fields, attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, account_number, items, company_id, company_name, company_currency, customer_id, customer_name, memo, check_number, date, transaction_date, currency_iso_4217_code, exchange_rate, bank_or_credit_card_amount,…. Required: id, date, company_id, customer_id, account_number, currency_iso_4217_code, exchange_rate.

dual_entry_public_customer_refunds_attach_attachment

Upload file attachments to a DualEntry CustomerRefund record. Returns the updated refund object including id, number, customer_id, date, lines, and attachments. Required: record_number.

get_single_dual_entry_public_customer_refund_by_id

Get a specific DualEntry CustomerRefund record by its record number. Returns the full refund object including id, number, customer_id, date, record_status, lines, and attachments. Required: id.

list_all_dual_entry_public_customer_credits

List CustomerCredit records in DualEntry with filtering, ordering, and pagination. Returns records with id, number, customer_id, date, record_status, and lines. Max 100 records per page.

create_a_dual_entry_public_customer_credit

Create a new CustomerCredit record in DualEntry. Returns the created record including id, number, customer_id, date, record_status, and lines. Defaults to posted status; set record_status to draft to skip required-field validation. Required: date, company_id, currency_iso_4217_code, exchange_rate.

update_a_dual_entry_public_customer_credit_by_id

Update an existing CustomerCredit record in DualEntry with the provided data, validating all required fields and business rules. Returns the updated record including id, number, customer_id, date, record_status, and lines. Required: id, date, company_id, currency_iso_4217_code, exchange_rate.

get_single_dual_entry_public_customer_credit_by_id

Get a specific CustomerCredit record in DualEntry by its record number. Returns the full record including id, number, customer_id, date, record_status, and lines. Required: id.

dual_entry_public_customer_credits_partial_update

Partially update an existing CustomerCredit record in DualEntry by id. Send only the fields you want to change — omitted fields stay unchanged. Returns the updated record including id, number, customer_id, date, and record_status. Required: id.

list_all_dual_entry_public_cash_sales

List CashSale records in DualEntry with filtering and ordering options. Returns each record with id, number, company_id, customer_id, currency_iso_4217_code, exchange_rate, record_status, items, attachments, created_at, and updated_at. Max 100 per page.

create_a_dual_entry_public_cash_sale

Create a new CashSale record in DualEntry. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, attachments, classifications, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, items, company_id, company_name, company_currency, customer_id, customer_name, account_number, amount, memo, check_number, date,…. Required: date, company_id, customer_id, currency_iso_4217_code, exchange_rate, bank_or_undeposited_account_amount.

update_a_dual_entry_public_cash_sale_by_id

Update an existing CashSale record in DualEntry by id. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, attachments, classifications, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, items, company_id, company_name, company_currency, customer_id, customer_name, account_number, amount, memo,…. Required: id, date, company_id, customer_id, currency_iso_4217_code, exchange_rate, bank_or_undeposited_account_amount.

dual_entry_public_cash_sales_attach_attachment

Upload file attachments to a CashSale record in DualEntry. Returns the updated CashSale including id, number, company_id, customer_id, currency_iso_4217_code, items, attachments, and record_status. Required: record_number.

get_single_dual_entry_public_cash_sale_by_id

Get a single CashSale record from DualEntry by id. Returns: bill_to_address, ship_to_address, billing_address, shipping_address, custom_fields, attachments, classifications, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, items, company_id, company_name, company_currency, customer_id, customer_name, account_number, amount, memo,…. Required: id.

list_all_dual_entry_public_customer_payments

List CustomerPayment records in DualEntry with filtering and ordering options. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_customer_payment

Create a new CustomerPayment record in DualEntry. Returns the created payment including id, number, customer_id, date, transaction_currency, record_status, and lines. Defaults to record_status 'posted' when omitted. Required: date, company_id, check_number, currency_iso_4217_code, exchange_rate, memo.

update_a_dual_entry_public_customer_payment_by_id

Update an existing CustomerPayment record in DualEntry by id (record number). Returns the updated payment including id, number, customer_id, date, transaction_currency, record_status, and lines. Required: id, date, company_id, check_number, currency_iso_4217_code, exchange_rate, memo.

get_single_dual_entry_public_customer_payment_by_id

Get a single CustomerPayment record in DualEntry by id (record number). Returns: custom_fields, attachments, classifications, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, account_number, items, company_id, company_name, company_currency, customer_id, customer_name, memo, check_number, date, transaction_date, currency_iso_4217_code,…. Required: id.

dual_entry_public_customer_payments_partial_update

Partially update an existing CustomerPayment record in DualEntry by id (record number). Send only the fields you want to change. Returns the updated payment including id, number, customer_id, date, transaction_currency, record_status, and lines. Required: id.

list_all_dual_entry_public_vendor_payments

List VendorPayment records in DualEntry with filtering by company, vendor, date range, currency, status, and linked bill or vendor credit. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_vendor_payment

Create a new VendorPayment record in DualEntry. Returns the created vendor payment including id, number, company_id, vendor_id, record_status, and updated_at. Required: date, company_id, check_number, account_number, currency_iso_4217_code, exchange_rate, memo.

update_a_dual_entry_public_vendor_payment_by_id

Update an existing VendorPayment record in DualEntry by id. Returns the updated vendor payment including id, number, company_id, vendor_id, record_status, and updated_at. Required: id, date, company_id, check_number, account_number, currency_iso_4217_code, exchange_rate, memo.

get_single_dual_entry_public_vendor_payment_by_id

Get a single VendorPayment record in DualEntry by id. Returns the vendor payment including id, number, company_id, vendor_id, record_status, and updated_at. Required: id.

list_all_dual_entry_public_vendor_prepayments

List VendorPrepayment records in DualEntry with filtering by company, vendor, date range, currency, record status, and updated-at window, plus ordering options. Returns: items, count. Max 100 records per page.

create_a_dual_entry_public_vendor_prepayment

Create a new VendorPrepayment record in DualEntry. Returns: custom_fields, attachments, bank_match_status, reconciliation_status, internal_id, transaction_ids, number, company_id, company_name, company_currency, vendor_id, vendor_name, account_number, date, transaction_date, check_number, amount, used_amount, remaining_amount, currency_iso_4217_code, exchange_rate,…. Required: date, company_id, vendor_id, check_number, amount, currency_iso_4217_code, exchange_rate, bank_or_undeposited_funds_amount, memo.

update_a_dual_entry_public_vendor_prepayment_by_id

Update an existing vendor prepayment record in DualEntry with the provided data, validating all required fields and business rules. Returns: custom_fields, attachments, bank_match_status, reconciliation_status, internal_id, transaction_ids, number, company_id, company_name, company_currency, vendor_id, vendor_name, account_number, date, transaction_date, check_number, amount, used_amount,…. Required: id, date, company_id, vendor_id, check_number, amount, currency_iso_4217_code, exchange_rate, bank_or_undeposited_funds_amount, memo.

get_single_dual_entry_public_vendor_prepayment_by_id

Get a specific vendor prepayment record in DualEntry by its record number, retrieving all related data. Returns: custom_fields, attachments, bank_match_status, reconciliation_status, internal_id, transaction_ids, number, company_id, company_name, company_currency, vendor_id, vendor_name, account_number, date, transaction_date, check_number, amount, used_amount, remaining_amount,…. Required: id.

list_all_dual_entry_public_vendor_prepayment_applications

List vendor prepayment application records in DualEntry with filtering by company, vendor, bill, currency, status, and date range. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_vendor_prepayment_application

Create a new vendor prepayment application record in DualEntry. Returns: attachments, internal_id, transaction_ids, number, company_id, company_name, company_currency, vendor_id, vendor_name, vendor_prepayment_number, vendor_credit_number, exchange_rate, memo, date, transaction_date, currency_iso_4217_code, amount, items, record_status, created_at, updated_at, id, bill_id, transaction_currency.…. Required: date, company_id, currency_iso_4217_code, exchange_rate, memo, items.

update_a_dual_entry_public_vendor_prepayment_application_by_id

Update an existing vendor prepayment application record in DualEntry by id. Returns: attachments, internal_id, transaction_ids, number, company_id, company_name, company_currency, vendor_id, vendor_name, vendor_prepayment_number, vendor_credit_number, exchange_rate, memo, date, transaction_date, currency_iso_4217_code, amount, items, record_status, created_at, updated_at, id, bill_id,…. Required: id, date, company_id, currency_iso_4217_code, exchange_rate, memo, items.

get_single_dual_entry_public_vendor_prepayment_application_by_id

Get a single vendor prepayment application record in DualEntry by id, including all related data. Returns: attachments, internal_id, transaction_ids, number, company_id, company_name, company_currency, vendor_id, vendor_name, vendor_prepayment_number, vendor_credit_number, exchange_rate, memo, date, transaction_date, currency_iso_4217_code, amount, items, record_status, created_at, updated_at,…. Required: id.

list_all_dual_entry_public_vendor_credits

List VendorCredit records in DualEntry with filtering by company, vendor, date range, currency, status, and linked bill. Returns: items, count, id, created_at, updated_at. Max 100 per page.

create_a_dual_entry_public_vendor_credit

Create a new VendorCredit in DualEntry. Defaults to posted status; use draft to skip required-field checks. Posted records require company_id, vendor_id, currency, exchange_rate, and at least one line. Returns: custom_fields, attachments, supply_date, place_of_supply, tax_registration_numbers, tax, classifications, transaction_ids, created_by, updated_by, internal_id, number, bill_number,…. Required: date, vendor_id, company_id, currency_iso_4217_code, exchange_rate.

update_a_dual_entry_public_vendor_credit_by_id

Update an existing VendorCredit in DualEntry by record number with full replacement validation. Returns: custom_fields, attachments, supply_date, place_of_supply, tax_registration_numbers, tax, classifications, transaction_ids, created_by, updated_by, internal_id, number, bill_number, direct_expense_number, date, transaction_date, company_id, company_name, company_currency, vendor_id,…. Required: id, date, vendor_id, company_id, currency_iso_4217_code, exchange_rate.

get_single_dual_entry_public_vendor_credit_by_id

Get a specific VendorCredit in DualEntry by its record number with all related line items and attachments. Returns: custom_fields, attachments, supply_date, place_of_supply, tax_registration_numbers, tax, classifications, transaction_ids, created_by, updated_by, internal_id, number, bill_number, direct_expense_number, date, transaction_date, company_id, company_name, company_currency, vendor_id,…. Required: id.

list_all_dual_entry_public_vendor_refunds

List DualEntry vendor refund records with filtering, search, and ordering options. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_vendor_refund

Create a new DualEntry vendor refund record. Returns: custom_fields, attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, account_number, items, company_id, company_name, company_currency, vendor_id, vendor_name, memo, check_number, date, transaction_date, currency_iso_4217_code, exchange_rate, bank_or_credit_card_amount, amount, record_status,…. Required: date, company_id, vendor_id, account_number, currency_iso_4217_code, exchange_rate.

update_a_dual_entry_public_vendor_refund_by_id

Update an existing DualEntry vendor refund record by id. Returns: custom_fields, attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, account_number, items, company_id, company_name, company_currency, vendor_id, vendor_name, memo, check_number, date, transaction_date, currency_iso_4217_code, exchange_rate, bank_or_credit_card_amount, amount, record_status,…. Required: id, date, company_id, vendor_id, account_number, currency_iso_4217_code, exchange_rate.

dual_entry_public_vendor_refunds_attach_attachment

Upload file attachments to a DualEntry vendor refund record. Returns the updated vendor refund record including id, number, company_id, vendor_id, record_status, transaction_currency, and updated_at. Required: record_number.

get_single_dual_entry_public_vendor_refund_by_id

Get a single DualEntry vendor refund record by id. Returns: custom_fields, attachments, classifications, transaction_ids, created_by, updated_by, internal_id, number, account_number, items, company_id, company_name, company_currency, vendor_id, vendor_name, memo, check_number, date, transaction_date, currency_iso_4217_code, exchange_rate, bank_or_credit_card_amount, amount, record_status,…. Required: id.

list_all_dual_entry_public_direct_expenses

List DirectExpense records in DualEntry with filtering and ordering options. Returns each record with id, number, company_id, vendor_id, record_status, transaction_currency, attachments, items, created_at, updated_at. Max 100 per page.

create_a_dual_entry_public_direct_expense

Create a new DirectExpense record in DualEntry. A create request defaults to record_status 'posted'; set record_status to 'draft' to defer required-field validation. Returns: custom_fields, attachments, supply_date, place_of_supply, tax_registration_numbers, tax, classifications, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, items,…. Required: date, company_id, vendor_id, account_number, currency_iso_4217_code, bank_or_credit_card_amount.

update_a_dual_entry_public_direct_expense_by_id

Update an existing DirectExpense record in DualEntry by id with full replacement of the provided data. Validates all required fields and business rules. Returns: custom_fields, attachments, supply_date, place_of_supply, tax_registration_numbers, tax, classifications, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, items, company_id,…. Required: id, date, company_id, vendor_id, account_number, currency_iso_4217_code, bank_or_credit_card_amount.

dual_entry_public_direct_expenses_attach_attachment

Upload file attachments to a DualEntry direct expense by record_number. Returns the updated direct expense record including id, number, company_id, vendor_id, record_status, and attachments. Required: record_number.

get_single_dual_entry_public_direct_expense_by_id

Get a specific DualEntry direct expense by id. Returns: custom_fields, attachments, supply_date, place_of_supply, tax_registration_numbers, tax, classifications, transaction_ids, bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, items, company_id, company_name, company_currency, vendor_id, vendor_name, account_number, amount, memo, check_number, date,…. Required: id.

list_all_dual_entry_public_bank_transfers

List BankTransfer records. Returns: items, count.

create_a_dual_entry_public_bank_transfer

Create BankTransfer record. Returns: bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, transaction_id, debit_entry_id. Required: date, company_id, debit_bank_account_number, credit_bank_account_number, amount.

update_a_dual_entry_public_bank_transfer_by_id

Update BankTransfer record. Returns: bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, transaction_id, debit_entry_id. Required: id, date, company_id, debit_bank_account_number, credit_bank_account_number, amount.

get_single_dual_entry_public_bank_transfer_by_id

Get BankTransfer record. Returns: bank_match_status, reconciliation_status, created_by, updated_by, internal_id, number, transaction_id, debit_entry_id. Required: id.

list_all_dual_entry_public_statistical_journals

List DualEntry statistical journal records with filtering by company, account, period, date, and status. Returns: items, count, id, created_at, updated_at. Max 100 per page.

create_a_dual_entry_public_statistical_journal

Create a new DualEntry statistical journal record. Returns the created record including id, number, record_status, items, and attachments. Required: account_id.

update_a_dual_entry_public_statistical_journal_by_id

Update an existing DualEntry statistical journal record by id. Returns the updated record including id, number, record_status, items, and attachments. Required: id, account_id.

dual_entry_public_statistical_journals_attach_attachment

Upload file attachments to a DualEntry statistical journal record. Returns the updated record including id, number, record_status, items, and attachments. Required: record_number.

get_single_dual_entry_public_statistical_journal_by_id

Get a single DualEntry statistical journal record by id. Returns the full record including id, number, record_status, items, and attachments. Required: id.

list_all_dual_entry_recurring_invoices

List recurring invoices in DualEntry with filtering and ordering options. Returns: items, count. Max 100 per page.

create_a_dual_entry_recurring_invoice

Create a new recurring invoice in DualEntry. Returns the created recurring invoice including id, number, company_id, recurring_type, and updated_at. Required: rrule, memo, name, date, company_id, status, recurring_type, record_payload.

update_a_dual_entry_recurring_invoice_by_id

Update an existing recurring invoice in DualEntry by id. Returns the updated recurring invoice including id, number, company_id, recurring_type, and updated_at. Required: id, rrule, memo, name, date, company_id, status, recurring_type, record_payload.

delete_a_dual_entry_recurring_invoice_by_id

Delete a recurring invoice in DualEntry by id. Returns: success, errors. Required: id.

get_single_dual_entry_recurring_invoice_by_id

Get a single recurring invoice in DualEntry by id. Returns: created_by, updated_by, internal_id, number, name, memo, date, company_id, company_name, company_currency, status, record_payload, rrule, next_occurrence, last_generated, recurring_type, records, created_at, updated_at, id, event_id, api_version, topic, object_type, object, webhook_uuid. Required: id.

list_all_dual_entry_recurring_bills

List RecurringBill records in DualEntry with filtering by company, recurring type, and update timestamps. Returns: items, count, id, created_at, updated_at. Max 100 per page.

create_a_dual_entry_recurring_bill

Create a new RecurringBill in DualEntry. Defaults to record_status 'posted'; use 'draft' to defer required fields. Returns: created_by, updated_by, internal_id, number, name, memo, date, company_id, company_name, company_currency, status, record_payload, rrule, next_occurrence, last_generated, recurring_type, records, created_at, updated_at, id, vendor_id, currency_iso_4217_code, exchange_rate,…. Required: rrule, memo, name, date, company_id, status, recurring_type, record_payload.

update_a_dual_entry_recurring_bill_by_id

Update an existing RecurringBill in DualEntry by id. Send line item id to update existing lines; omit to create new ones. Returns: created_by, updated_by, internal_id, number, name, memo, date, company_id, company_name, company_currency, status, record_payload, rrule, next_occurrence, last_generated, recurring_type, records, created_at, updated_at, id, vendor_id, currency_iso_4217_code,…. Required: id, rrule, memo, name, date, company_id, status, recurring_type, record_payload.

delete_a_dual_entry_recurring_bill_by_id

Delete a RecurringBill in DualEntry by id. Returns: success, errors. Required: id.

get_single_dual_entry_recurring_bill_by_id

Get a single RecurringBill in DualEntry by id. Returns: created_by, updated_by, internal_id, number, name, memo, date, company_id, company_name, company_currency, status, record_payload, rrule, next_occurrence, last_generated, recurring_type, records, created_at, updated_at, id, vendor_id, currency_iso_4217_code, exchange_rate, due_date, term_id, record_status, items, expenses, attachments,…. Required: id.

list_all_dual_entry_recurring_journal_entries

List RecurringJournalEntry records in DualEntry with filtering by company, number, recurring type, and update timestamps. Returns: items, count, id, created_at, updated_at. Max 100 per page.

create_a_dual_entry_recurring_journal_entry

Create a new RecurringJournalEntry record in DualEntry. Returns the created record including id, number, company_id, memo, record_status, items, and updated_at. Required: rrule, memo, name, date, company_id, status, recurring_type, record_payload.

update_a_dual_entry_recurring_journal_entry_by_id

Update an existing RecurringJournalEntry record in DualEntry by its record number. Returns the updated record including id, number, company_id, memo, record_status, items, and updated_at. Required: id, rrule, memo, name, date, company_id, status, recurring_type, record_payload.

delete_a_dual_entry_recurring_journal_entry_by_id

Delete a RecurringJournalEntry record in DualEntry by its record number. Returns: success, errors. Required: id.

get_single_dual_entry_recurring_journal_entry_by_id

Get a single RecurringJournalEntry record in DualEntry by its record number with all related data. Returns: created_by, updated_by, internal_id, number, name, memo, date, company_id, company_name, company_currency, status, record_payload, rrule, next_occurrence, last_generated, recurring_type, records, created_at, updated_at, id, currency_iso_4217_code, exchange_rate, items, record_status,…. Required: id.

list_all_dual_entry_public_companies

List companies in DualEntry with filtering, search, and ordering capabilities. Returns: items, count. Results are capped at 100 records per page.

get_single_dual_entry_public_company_by_id

Get a single DualEntry company by id with all related data including company access. Returns: created_at, updated_at, vat_registration_numbers, created_by, updated_by, id, name, parent_company_id, currency_iso_4217_code, address, tin, tin_type, is_active, is_elimination, fiscal_year_end_month, event_id, api_version, topic, object_type, object, webhook_uuid. Required: id.

list_all_dual_entry_public_accounts

List chart of accounts in DualEntry with filtering by type, status, company, currency, and date range. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_account

Create a new account in the DualEntry chart of accounts with support for parent-child relationships and company access restrictions. Returns: created_at, updated_at, created_by, updated_by, id, name, number, description, is_active, is_system, company_id, parent_account_id, account_type, currency_iso_4217_code, category_1099, system_ref, is_monetary, financial_account_id. Required: name, number, account_type, currency_iso_4217_code, is_active, parent_account_id.

get_single_dual_entry_public_account_by_id

Get a specific DualEntry account by id. Returns the full account object including id, name, number, account_type, is_active, is_system, description, created_at, updated_at. Required: id.

list_all_dual_entry_public_budgets

List budgets in DualEntry with filtering by budget type, calendar year, company, and record status. Returns: items, count. Max 100 per page.

get_single_dual_entry_public_budget_by_id

Get a single DualEntry budget by id. Returns: id, name, company_id, company_name, budget_type, calendar_year, start_date, end_date, record_status, actuals_offset_in_months, classifications, updated_at, event_id, api_version, topic, object_type, object, webhook_uuid, created_at. Required: id.

list_all_dual_entry_public_contracts

List revenue recognition contracts in DualEntry with filtering by company, customer, status, dates, recognition mode, and more. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_contract

Create a revenue recognition contract in DualEntry with its performance obligations and recognition schedule. Returns: custom_fields, completed_approvals_count, total_approvals_count, integration_remote_records, id, number, company_id, company_name, company_currency, customer_id, customer_name, name, currency_iso_4217_code, memo, date, term_id, default_ar_account_id, contract_template_id,…. Required: status.

update_a_dual_entry_public_contract_by_id

Update an existing revenue recognition contract in DualEntry. Direct edits are rejected when usage or an active contract has milestones; obligation rows superseded by a posted change order or targeted by a draft change order cannot be edited. Returns: custom_fields, completed_approvals_count, total_approvals_count, integration_remote_records, id, number, company_id, company_name,…. Required: id, status.

get_single_dual_entry_public_contract_by_id

Get a single revenue recognition contract in DualEntry by id, including its performance obligations. Returns: custom_fields, completed_approvals_count, total_approvals_count, integration_remote_records, id, number, company_id, company_name, company_currency, customer_id, customer_name, name, currency_iso_4217_code, memo, date, term_id, default_ar_account_id, contract_template_id, start_date,…. Required: id.

dual_entry_public_contracts_partial_update

Partially update specific fields on a revenue recognition contract in DualEntry by sending only the fields you want to change — anything you don't send stays as it is. Direct edits are rejected when usage or an active contract has milestones. Returns: custom_fields, completed_approvals_count, total_approvals_count, integration_remote_records, id, number, company_id, company_name,…. Required: id.

list_all_dual_entry_contract_usages

List all obligation usage records for a DualEntry contract. Returns: id, contract_id, obligation_id, usage_date, quantity, rate, amount, effective_rate, revenue_recognition_id, status, invoice_status, memo, created_at, updated_at, classifications. Required: contract_id.

create_a_dual_entry_usage_bulk_upsert

Upsert usage records in batch for contract obligations in DualEntry. Items with an 'id' field are updated; items without are created, and the operation generates revenue recognitions and invoices. Returns an array of usage record objects including id. Required: contract_id, items.

list_all_dual_entry_contract_change_orders

List change orders for a DualEntry contract with optional filtering by status, date range, and search. Returns: items, count.

create_a_dual_entry_contract_change_order

Create a change order on a DualEntry contract. Incomplete payloads are saved as drafts; complete payloads are validated and applied. Returns: id, number, company_id, company_name, contract_id, contract_name, effective_date, memo, apply_cumulative_catchup, catchup_amount, transaction_id, record_status, is_incomplete, obligation_modifications, obligation_additions, change_summary, created_at,…. Required: contract_id.

update_a_dual_entry_contract_change_order_by_id

Update an existing change order on a DualEntry contract. Incomplete drafts stay drafts; completing required fields applies the change order. Returns: id, number, company_id, company_name, contract_id, contract_name, effective_date, memo, apply_cumulative_catchup, catchup_amount, transaction_id, record_status, is_incomplete, obligation_modifications, obligation_additions, change_summary,…. Required: id, contract_id.

delete_a_dual_entry_contract_change_order_by_id

Archive an existing change order on a DualEntry contract (soft delete). Returns: success, errors. Required: id, contract_id.

get_single_dual_entry_contract_change_order_by_id

Get a single change order by ID for a DualEntry contract, including the obligation change summary. Returns: id, number, company_id, company_name, contract_id, contract_name, effective_date, memo, apply_cumulative_catchup, catchup_amount, transaction_id, record_status, is_incomplete, obligation_modifications, obligation_additions, change_summary, created_at, updated_at, event_id, api_version,…. Required: id, contract_id.

list_all_dual_entry_public_customers

List DualEntry customers with filtering, search, and ordering capabilities. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_customer

Create a new customer in DualEntry with address and tax information. Set is_taxable to false for a tax-exempt customer (defaults to false). Returns the created customer including id, name, email, address, is_taxable, record_status, and updated_at. Required: name, email, address, country, phone, website.

update_a_dual_entry_public_customer_by_id

Update a DualEntry customer by id, sending only the fields you want to change. Returns the updated customer including id, name, email, address, is_taxable, record_status, and updated_at. Required: id.

delete_a_dual_entry_public_customer_by_id

Delete a DualEntry customer by id. Fails if the customer is referenced by other records. Returns: success, errors. Required: id.

get_single_dual_entry_public_customer_by_id

Get a single DualEntry customer by id. Returns the customer object including id, name, email, address, is_taxable, record_status, and updated_at. Required: id.

dual_entry_public_customers_partial_update

Partially update a DualEntry customer by id — send only the fields you want to change; send null to clear a nullable field. Returns: created_at, updated_at, custom_fields, created_by, updated_by, approval_status, next_approvers, rejected_by, id, address, country, name, unique_id, website, email, customer_type, is_active, phone, record_status, is_taxable, default_tax_code, tax_registration_number,…. Required: id.

list_all_dual_entry_public_items

List items (products and services) in DualEntry with filtering by name, item type, account assignments, active status, and update timestamps. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_item

Create a new item (product or service) in DualEntry with description and associated revenue or expense accounts. Returns: created_at, updated_at, created_by, updated_by, id, name, sku, description, item_type, is_active, record_status, product_tax_code_id, expense_account_id, income_account_id, deferral_account_id, asset_account_id, discount_account_id, default_classification_line_ids,…. Required: name, is_active, sku, item_type.

update_a_dual_entry_public_item_by_id

Update an existing item's description and associated accounts in DualEntry. Returns: created_at, updated_at, created_by, updated_by, id, name, sku, description, item_type, is_active, record_status, product_tax_code_id, expense_account_id, income_account_id, deferral_account_id, asset_account_id, discount_account_id, default_classification_line_ids, default_rev_rec_method,…. Required: id, name, is_active, sku, item_type.

delete_a_dual_entry_public_item_by_id

Delete an item in DualEntry so it can no longer be added to invoices or bills. Returns: success, errors. Required: id.

get_single_dual_entry_public_item_by_id

Get a single item by id in DualEntry, including its description and associated accounts. Returns: created_at, updated_at, created_by, updated_by, id, name, sku, description, item_type, is_active, record_status, product_tax_code_id, expense_account_id, income_account_id, deferral_account_id, asset_account_id, discount_account_id, default_classification_line_ids, default_rev_rec_method,…. Required: id.

dual_entry_public_items_partial_update

Partially update a DualEntry item by id. Send only the fields you want to change; send null to clear a nullable field. Returns: created_at, updated_at, created_by, updated_by, id, name, sku, description, item_type, is_active, record_status, product_tax_code_id, expense_account_id, income_account_id, deferral_account_id, asset_account_id, discount_account_id, default_classification_line_ids,…. Required: id.

list_all_dual_entry_public_vendors

List vendors in DualEntry with filtering, search, and ordering capabilities. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_vendor

Create a new vendor in DualEntry with address and payment information. Returns: created_at, updated_at, custom_fields, attachments, term_id, term_name, preferred_payment_method_id, preferred_payment_method_name, created_by, updated_by, approval_status, next_approvers, rejected_by, id, address, vendor_type, company_id, company_name, customer_account_number, name_on_check, bank_account_number,…. Required: is_active, vendor_type, name, email, phone, website.

update_a_dual_entry_public_vendor_by_id

Update a vendor in DualEntry by id, sending only the fields you want to change. Custom fields can be set by field name or id. Returns: created_at, updated_at, custom_fields, attachments, term_id, term_name, preferred_payment_method_id, preferred_payment_method_name, created_by, updated_by, approval_status, next_approvers, rejected_by, id, address, vendor_type, company_id, company_name,…. Required: id.

delete_a_dual_entry_public_vendor_by_id

Delete a vendor in DualEntry by id. Returns: success, errors. Fails if the vendor is referenced by other records. Required: id.

get_single_dual_entry_public_vendor_by_id

Get a single vendor in DualEntry by id with address, attachments, and payment information. Returns: created_at, updated_at, custom_fields, attachments, term_id, term_name, preferred_payment_method_id, preferred_payment_method_name, created_by, updated_by, approval_status, next_approvers, rejected_by, id, address, vendor_type, company_id, company_name, customer_account_number, name_on_check,…. Required: id.

dual_entry_public_vendors_partial_update

Partially update a DualEntry vendor by sending only the fields you want to change; send null to clear a nullable field. Returns the updated vendor including id, name, tin, is_active, and custom_fields. Required: id.

list_all_dual_entry_public_classifications

List classification dimensions in DualEntry, such as departments, locations, or projects. Returns each classification with id, name, is_active, is_required, selections, and updated_at. Max 100 per page.

create_a_dual_entry_public_classification

Create a classification dimension in DualEntry used to tag and analyze transactions across multiple dimensions. Returns the created classification including id, name, is_active, is_required, selections, and updated_at. Required: name, is_active, selections, required_for_records, parent_id.

update_a_dual_entry_public_classification_by_id

Update an existing classification dimension's name and settings in DualEntry. Returns the updated classification including id, name, is_active, is_required, selections, and updated_at. Required: id, name, is_active, selections, required_for_records, parent_id.

delete_a_dual_entry_public_classification_by_id

Delete a classification dimension in DualEntry by id so it can no longer be assigned to transactions. Returns a success response. Required: id.

get_single_dual_entry_public_classification_by_id

Get a single classification dimension in DualEntry by id. Returns: created_at, updated_at, created_by, updated_by, id, selections, required_for_records, parent_id, parent_name, name, is_active, is_required, event_id, api_version, topic, object_type, object, webhook_uuid. Required: id.

dual_entry_public_classifications_partial_update

Partially update a DualEntry classification by id, sending only the fields to change. Returns the updated classification including id, name, is_active, selections, required_for_records, parent_id, and updated_at. Omitting selections or required_for_records preserves existing values; sending [] clears them. Lines in use elsewhere return 422. Required: id.

list_all_dual_entry_public_classifications_lines

List classification lines (selections) in DualEntry that can be assigned to transaction line items. Returns: items, count. Max 100 per page.

list_all_dual_entry_public_custom_fields

List custom field definitions in DualEntry with filtering by field type, record type, active status, company scope, and update timestamps. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_custom_field

Create a new custom field definition in DualEntry. Supply applies_to to bind the field to record types and company_ids (or company_id) to scope it to specific companies. Returns: created_at, updated_at, id, company_id, company_ids, name, description, helper_text, field_type, applies_to, default_value, options, is_active. Required: name, field_type, applies_to.

update_a_dual_entry_public_custom_field_by_id

Update an existing custom field definition in DualEntry by id. applies_to and company_ids are replaced wholesale — send the full desired list. field_type cannot be changed after creation. Returns: created_at, updated_at, id, company_id, company_ids, name, description, helper_text, field_type, applies_to, default_value, options, is_active. Required: id, name, field_type, applies_to.

delete_a_dual_entry_public_custom_field_by_id

Delete a custom field definition in DualEntry by id. Fails with 422 if any record already has a value stored against this field — clear those values first, or archive via is_active=false instead. Returns: success, errors. Required: id.

get_single_dual_entry_public_custom_field_by_id

Get a single custom field definition in DualEntry by id. Returns: created_at, updated_at, id, company_id, company_ids, name, description, helper_text, field_type, applies_to, default_value, options, is_active, success, errors. Required: id.

list_all_dual_entry_public_paper_checks

List paper checks in DualEntry with filtering by status, transaction type, vendor, customer, bank account, and date range. Returns: items, count. Max 100 per page.

delete_a_dual_entry_public_paper_check_by_id

Archive a paper check by id in DualEntry, setting its status to archived and removing it from active workflows. Returns the archived paper check object including id, record_status, transaction_type, created_at. Required: id.

get_single_dual_entry_public_paper_check_by_id

Get a single paper check by id in DualEntry. Returns the full paper check object including id, record_status, transaction_type, company_id, created_at. Required: id.

create_a_dual_entry_paper_checks_print_now

Create and immediately print a paper check for a transaction in DualEntry, generating the PDF and marking the check as printed in a single operation. Returns the created paper check details along with base64-encoded PDF content. Supports direct expenses, vendor payments, vendor prepayments, and customer refunds. Required: transaction_id.

create_a_dual_entry_paper_checks_print_later

Queue paper checks for later batch printing in DualEntry. Returns a list of created paper checks with id, record_status, and created_at, all with record_status set to 'not_printed'. The request body must contain transaction identifiers for the transactions to queue as paper checks. Print queued checks together via the print-batch endpoint. Required: transaction_ids.

dual_entry_paper_checks_print_batches_bulk_update

Batch print multiple queued paper checks in DualEntry, assigning sequential check numbers and returning a merged PDF. Returns: pdf_content, printed_checks, total_printed. All specified checks must have status 'not_printed' and must be queued via POST /print-later/ first. Required: paper_check_ids.

list_all_dual_entry_public_workflows

List approval workflows in DualEntry with filtering by company, record type, and active status. Returns: items, count. Default ordering is by priority descending then id descending. Max 100 per page.

get_single_dual_entry_public_workflow_by_id

Get a DualEntry approval workflow by id, including all steps, conditions, and approvers. Returns: id, record_type, name, is_active, description, version, priority, company_ids, applies_to_all_companies, allow_self_approval, steps, pending_approval_count, roles, company_id, conditions, approvers, event_id, api_version, topic, object_type, object, webhook_uuid, created_at. Required: id.

list_all_dual_entry_workflows_execution_states

List workflow execution states (approval statuses for records) in DualEntry with optional filtering by workflow, status, record type, and initiator. Returns: items, count. Max 100 per page.

get_single_dual_entry_workflows_execution_state_by_id

Get a single workflow execution state by id in DualEntry. Returns: id, workflow_id, workflow_name, record_id, record_type, current_step, current_substep, status, requested_approver_ids, approved_by_ids, rejected_by_id, rejection_reason, initiator_id, created_at, updated_at, event_id, api_version, topic, object_type, object, webhook_uuid. Required: id.

list_all_dual_entry_execution_state_actions

List all approval actions (history) for a specific workflow execution state in DualEntry. Returns an array of action records including id, action_type, approver_id, workflow_execution_state_id, record_type, and created_at. Required: state_id.

list_all_dual_entry_workflows_actions

List approval actions (history) in DualEntry with filtering by workflow execution state, record type, record ID, action type, approver, and date range. Returns: items, count. Max 100 per page.

list_all_dual_entry_workflows_roles

List all active roles available for use in DualEntry approval workflow conditions. Returns: id, name, descriptive_name, success, errors. No parameters required.

list_all_dual_entry_workflow_versions

List version history for a DualEntry workflow including changes, timestamps, and optionally full snapshots. Returns: id, version_number, changed_by, changed_at, changes_summary, snapshot, attributes. Required: workflow_id.

list_all_dual_entry_public_inboxes

Get a summary of pending approvals in the DualEntry inbox for the entire organization. Returns the summary object with counts of pending approvals.

list_all_dual_entry_inbox_transactions

List all DualEntry transactions (invoices, bills, purchase orders, sales orders, journal entries) with workflow approval status for the organization. Returns: items, count. Max 100 per page.

get_single_dual_entry_inbox_transaction_by_id

Get approval details for a specific DualEntry transaction by id. Returns empty dict if the transaction is not in the inbox. Returns: event_id, api_version, topic, object_type, object, webhook_uuid, created_at. Required: id, transaction_type.

list_all_dual_entry_inbox_records

List non-monetary records (customers, vendors) with workflow approval status for the organization in DualEntry. Returns: items, count. Max 100 per page.

get_single_dual_entry_inbox_record_by_id

Get approval details for a specific non-monetary record in DualEntry by id. Returns: event_id, api_version, topic, object_type, object, webhook_uuid, created_at. Returns an empty object if the record is not in the inbox. Required: id, record_type.

list_all_dual_entry_public_fixed_assets

List fixed assets in DualEntry with multi-book depreciation schedules. Returns each fixed asset with id, number, company_id, status, record_status, purchase_date, vendor_id, customer_id, depreciation_schedules, and attachments. Max 100 per page.

create_a_dual_entry_public_fixed_asset

Create a new fixed asset in DualEntry with multi-book depreciation schedules. Returns the created fixed asset including id, number, company_id, status, record_status, purchase_date, depreciation_schedules, and attachments. Required: company_id, name, currency_iso_4217_code, exchange_rate, purchase_date, cost, asset_account_number, expense_account_number, accumulation_account_number, depreciation_schedules.

update_a_dual_entry_public_fixed_asset_by_id

Fully update a DualEntry fixed asset by id, including multi-book depreciation schedules. Returns the updated fixed asset including id, number, company_id, status, record_status, purchase_date, depreciation_schedules, and attachments. Required: id, company_id, name, currency_iso_4217_code, exchange_rate, purchase_date, cost, asset_account_number, expense_account_number, accumulation_account_number, depreciation_schedules.

delete_a_dual_entry_public_fixed_asset_by_id

Archive a DualEntry fixed asset by id (soft delete). This also archives any posted depreciation transactions. Returns: success, errors. Required: id.

get_single_dual_entry_public_fixed_asset_by_id

Get a specific DualEntry fixed asset by id, including its multi-book depreciation schedules. Returns: created_by, updated_by, internal_id, number, company_id, company_name, name, serial_number, currency_iso_4217_code, exchange_rate, purchase_date, memo, cost, status, record_status, asset_account_number, expense_account_number, accumulation_account_number, vendor_id, vendor_name, customer_id,…. Required: id.

dual_entry_public_fixed_assets_partial_update

Partially update a DualEntry fixed asset by id, sending only the fields you want to change. If depreciation_schedules is sent, it replaces all existing schedules. Returns the updated fixed asset including its id, number, status, and depreciation schedules. Required: id.

list_all_dual_entry_schedules

List chronological depreciation, disposal, and revaluation events for a specific fixed asset and depreciation book in DualEntry, optionally narrowed by a date range. Returns an array of depreciation schedule items (PublicDepreciationScheduleItemOut). Required: fixed_asset_number, depreciation_book_id.

list_all_dual_entry_public_webhooks

List registered webhooks in DualEntry. Returns: items, count. The signing secret is never included in list responses. Max 100 per page.

create_a_dual_entry_public_webhook

Register a new webhook endpoint in DualEntry for event notifications. Returns: uuid, url, topics, is_active, disabled_at, disabled_reason, created_at, last_modified_at, secret. The signing secret is returned only on creation. Required: url.

update_a_dual_entry_public_webhook_by_id

Update a DualEntry webhook by id to change its URL, replace subscribed topics, or toggle active state. Re-enabling clears the auto-disable state. Returns: uuid, url, topics, is_active, disabled_at, disabled_reason, created_at, last_modified_at. Required: id.

delete_a_dual_entry_public_webhook_by_id

Delete a DualEntry webhook by UUID. Deletion cascades to its delivery rows. Returns: success, errors. Required: id.

get_single_dual_entry_public_webhook_by_id

Get a specific DualEntry webhook by UUID. Returns: uuid, url, topics, is_active, disabled_at, disabled_reason, created_at, last_modified_at, event_id, api_version, topic, object_type, object, webhook_uuid. Required: id.

dual_entry_public_webhooks_partial_update

Partially update a DualEntry webhook — change the URL, replace subscribed topics, or toggle active state. Returns: uuid, url, topics, is_active, disabled_at, disabled_reason, created_at, last_modified_at, updated_at, event_id, api_version, topic, object_type, object, webhook_uuid. Re-enabling a disabled webhook clears its auto-disable state; events missed while disabled are not…. Required: id.

list_all_dual_entry_webhooks_topics

List all subscribable webhook topics in DualEntry. Returns an array of topic objects, each containing a name following the pattern ./ (e.g., core.invoice/created). No parameters required.

list_all_dual_entry_webhook_deliveries

List webhook delivery attempts (event log) for a specific webhook in DualEntry. Returns: items, count. Required: webhook_uuid.

list_all_dual_entry_public_export_jobs

List DualEntry export jobs for the organization, most recent first. Returns: items, count. Filter by status and customize ordering. Max 100 per page.

create_a_dual_entry_public_export_job

Request a data export in DualEntry, triggering an off-cycle data refresh that starts when capacity allows. Returns: job, deduplicated, id. Always returns 202 Accepted; calling while an export is running returns the in-flight job with deduplicated true. Poll the get endpoint for completion.

get_single_dual_entry_public_export_job_by_id

Get a single DualEntry export job by id to check its status. Returns: id, integration_id, status, error, created_at, started_at, completed_at, event_id, api_version, topic, object_type, object, webhook_uuid. Poll this after requesting an export. Required: id.

list_all_dual_entry_public_exchange_rates

List DualEntry exchange rates for a base currency and one or more quote currencies, optionally filtered by a single effective date or an inclusive date range. Returns: items, count. start_date and end_date must be supplied together; effective_date is used on its own for a single-date lookup. Required: base_currency, transaction_currency.

list_all_dual_entry_public_depreciation_books

List DualEntry depreciation books, optionally filtered by update timestamp. Each organization has at least one book (BOOK, the posting book to GL), with optional tax books like FEDERAL, AMT, or STATE_*. Returns: items, count. Max 100 records per page.

get_single_dual_entry_public_depreciation_book_by_id

Get a single DualEntry depreciation book by its book code. Returns: created_at, updated_at, id, code, name, description, is_active, is_posting, event_id, api_version, topic, object_type, object, webhook_uuid.g., BOOK, FEDERAL, AMT). Required: id.

list_all_dual_entry_public_intercompany_journal_entries

List intercompany journal entries in DualEntry with filtering by company, date range, record status, approval status, and amount bounds. Returns: items, count, id, updated_at. Max 100 per page.

create_a_dual_entry_public_intercompany_journal_entry

Create an intercompany journal entry in DualEntry. Lines must span at least two distinct companies and total debits must equal total credits. Returns: created_at, updated_at, attachments, approval_status, next_approvers, rejected_by, record_number, date, transaction_date, memo, currency_iso_4217_code, exchange_rate, record_status, items, companies, company_ids, id, number, company_id, amount.…. Required: date, currency_iso_4217_code, exchange_rate, items.

update_a_dual_entry_public_intercompany_journal_entry_by_id

Update a DualEntry intercompany journal entry by id. Full replacement — only draft records can be updated; posted records return 422. Lines must span at least two distinct companies and total debits must equal total credits. Returns: created_at, updated_at, attachments, approval_status, next_approvers, rejected_by, record_number, date, transaction_date, memo, currency_iso_4217_code,…. Required: id, date, currency_iso_4217_code, exchange_rate, items.

get_single_dual_entry_public_intercompany_journal_entry_by_id

Get a single DualEntry intercompany journal entry by id (record number). Returns: created_at, updated_at, attachments, approval_status, next_approvers, rejected_by, record_number, date, transaction_date, memo, currency_iso_4217_code, exchange_rate, record_status, items, companies, company_ids, id, number, company_id, amount, event_id, api_version, topic, object_type, object, webhook_uuid.…. Required: id.

list_all_dual_entry_public_vat_rates

List VAT rates in DualEntry, filterable by country_code, rate_type, tax_type, or is_active. Returns: items, count. Use the id as vat_rate_id when creating or updating transaction line items. Max 100 per page.

get_single_dual_entry_public_vat_rate_by_id

Get a single DualEntry VAT rate by id. Returns the full VAT rate details including id, country_code, rate, rate_type, tax_type, valid_from, valid_to, and is_active. Required: id.

list_all_dual_entry_public_gst_tax_rates

List GST tax rates in DualEntry with optional filters by country_code, tax_treatment, is_active, or updated range. Returns each rate with id, country_code, tax_treatment, rate, is_active, updated_at, and component breakdown. Max 100 per page.

get_single_dual_entry_public_gst_tax_rate_by_id

Get a single GST tax rate by id in DualEntry. Returns the full tax rate details including id, country_code, tax_treatment, rate, is_active, updated_at, and component breakdown (e.g., CGST + SGST, GST + PST). Required: id.

list_all_dual_entry_public_product_tax_codes

List DualEntry product tax codes available to the organization, including global tax codes. Returns: items, count. Max 100 per page.

create_a_dual_entry_public_product_tax_code

Create an organization-scoped product tax code in DualEntry. Global product tax codes are system managed and cannot be created via the API. Returns: created_at, updated_at, id, code, description, source, is_active, is_global. Required: code, description.

update_a_dual_entry_public_product_tax_code_by_id

Update an organization-scoped product tax code in DualEntry by id. Global product tax codes are system managed and cannot be updated via the API. Returns: created_at, updated_at, id, code, description, source, is_active, is_global. Required: id.

delete_a_dual_entry_public_product_tax_code_by_id

Delete an organization-scoped DualEntry product tax code by id. Returns: success, errors. Global product tax codes are system managed and cannot be deleted. Required: id.

get_single_dual_entry_public_product_tax_code_by_id

Get a single DualEntry product tax code by id. Returns: created_at, updated_at, id, code, description, source, is_active, is_global, event_id, api_version, topic, object_type, object, webhook_uuid. Global product tax codes are list-only and cannot be retrieved individually. Required: id.

create_a_dual_entry_bank_match_populate

Trigger the DualEntry bank-match suggestion pipeline to run immediately. Suggestions auto-refresh every 5 minutes, so this endpoint is optional but remains for backward compatibility. Returns 202 Accepted immediately with an opaque success body. Poll the status-counts endpoint to watch progress, then use the suggestions endpoint to read results.

list_all_dual_entry_bank_match_suggestions

List DualEntry bank-match suggestions, newest first. Each suggestion pairs a bank-feed row with an accounting transaction — either an existing one (`match`) or one DualEntry would draft if accepted (`create`). Returns: items, count. Max 100 per page.

get_single_dual_entry_bank_match_suggestion_by_id

Get a single DualEntry bank-match suggestion by id. Each suggestion pairs a bank-feed row with an accounting transaction — either an existing one (`match`) or one DualEntry would draft if accepted (`create`). Returns: id, financial_transaction_id, transaction_id, suggestion_type, confidence_score, is_highest_ranked, success, errors. Required: id.

list_all_dual_entry_bank_match_status_counts

Get DualEntry bank-match pipeline progress as per-stage row counts, useful for polling after calling /populate/. Returns: unprocessed, awaiting_setup, deterministic_suggested, awaiting_ai, ai_in_progress, ai_suggested, ai_no_match, no_match, excluded, matched. The pipeline is still running while unprocessed, awaiting_ai, or ai_in_progress is non-zero. Expired bank-feed rows are excluded from the…

list_all_dual_entry_bank_match_bank_transactions

List bank-feed transactions in DualEntry's Bank Match workspace, ordered newest first. Returns rows with id, financial_account_id, date, amount, description, matching_status, is_posted, counterparty, source_id, source_type, and updated_at. Max 100 per page.

get_single_dual_entry_bank_match_bank_transaction_by_id

Get a single bank-feed transaction in DualEntry by id. Returns the bank-feed row including id, financial_account_id, date, amount, description, matching_status, is_posted, counterparty, source_id, source_type, and updated_at. Required: id.

create_a_dual_entry_bank_match_match

Confirm a bank-match in DualEntry by recording that bank-feed row(s) correspond to DualEntry transaction(s) or entry(s). On success each row's matching_status flips to matched and the response returns match_group_id. Pass financial_transaction_ids plus transaction_ids or entry_ids for an M:N match. Amounts must reconcile in a single currency, all rows must share the same sign, and no item may…

create_a_dual_entry_bank_match_unmatch

Undo a bank-match in DualEntry by dissolving the entire match group that a bank-feed row or match_group_id belongs to. Returns: success, errors. Provide exactly one of financial_transaction_id or match_group_id in the request body; safe to call when nothing is currently matched.

list_all_dual_entry_public_bank_connections

List customer API bank connections registered for the calling organization in DualEntry. Returns: items, count. Filter by updated_after and updated_before date ranges.

create_a_dual_entry_public_bank_connection

Register or upsert a customer-built bank connection with optional accounts in DualEntry under source_type=customer_api. Returns: created_at, updated_at, id, connection_source_id, institution_name, status, successfully_aggregated_at, last_sync_at, accounts. Required: connection_source_id, institution_name.

delete_a_dual_entry_public_bank_connection_by_id

Unregister a customer_api bank connection in DualEntry by id. Soft-disables the registration so further pushes and account registration are rejected; history is kept. Returns: success, errors. Required: id.

get_single_dual_entry_public_bank_connection_by_id

Retrieve a single customer_api bank connection in DualEntry by id. Returns: created_at, updated_at, id, connection_source_id, institution_name, status, successfully_aggregated_at, last_sync_at, accounts, event_id, api_version, topic, object_type, object, webhook_uuid. Required: id.

create_a_dual_entry_account_transaction

Batch upsert bank-feed transactions for a registered DualEntry customer_api account identified by financial account id. Returns: success, results. Max batch size is 250 items; one bad item does not roll back the rest of the batch. Required: financial_account_id, transactions.

list_all_dual_entry_bank_connection_accounts

List accounts registered under a DualEntry customer API bank connection. Returns each account with id, account_id, and account_name. Required: connection_id.

create_a_dual_entry_bank_connection_account

Upsert accounts under an existing customer API bank connection in DualEntry. Returns the bank connection object including id and accounts (each with id, account_id, and account_name). Required: connection_id, accounts.

create_a_dual_entry_oauth_authorize

Start the CLI OAuth flow in DualEntry to obtain the authorization URL where the user grants access. Returns the authorization response object containing the URL the user visits to complete the grant step. The request body is required. Required: redirect_uri, code_challenge, code_challenge_method, state.

list_all_dual_entry_oauth_callbacks

Handle the OAuth callback from WorkOS to complete the CLI authorization flow in DualEntry. Returns an empty 204 response on success.

create_a_dual_entry_oauth_token

Exchange an OAuth authorization code for a DualEntry API key in the CLI OAuth flow. Returns a TokenResponse object whose field-level properties are not documented in the discovered source. Required: grant_type, code, code_verifier, redirect_uri.

Why Truto

Why use Truto’s MCP server for DualEntry

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with DualEntry in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s DualEntry account

Use Truto’s frontend SDK to connect your customer’s DualEntry account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call DualEntry

Truto’s Proxy API is a 1-to-1 mapping of the DualEntry API. You call us, we call DualEntry, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate DualEntry’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about DualEntry on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How does authentication to DualEntry work through Truto?

DualEntry uses OAuth. Truto handles the full authorize, callback, and token exchange flow so your end users connect their DualEntry account through a hosted or embedded consent screen, and Truto stores and refreshes tokens on your behalf.

Which DualEntry objects can I read and write today?

You can work with AR objects (Invoices, SalesOrders, CashSales, CustomerPayments, Prepayments, Credits, Refunds, Deposits), AP objects (Bills, PurchaseOrders, VendorPayments, VendorPrepayments, VendorCredits, VendorRefunds, DirectExpenses), GL objects (JournalEntries, IntercompanyJournalEntries, StatisticalJournals, BankTransfers), master data (Customers, Vendors, Items, Accounts, Classifications, CustomFields, Companies), plus Contracts, FixedAssets, Paper Checks, Bank Match, Bank Connections, Workflows, and Webhooks.

Can I attach files like PDFs or receipts to transactions?

Yes. Most transactional objects — Invoices, Bills, SalesOrders, PurchaseOrders, JournalEntries, CashSales, CustomerPrepayments, CustomerDeposits, CustomerRefunds, VendorRefunds, DirectExpenses, StatisticalJournals, and Prepayment Applications — expose an attach_attachment endpoint for uploading supporting documents.

How do I get real-time updates instead of polling?

DualEntry supports Webhooks. Through Truto you can create and manage webhook subscriptions, list available webhook topics, and inspect webhook deliveries, so your app reacts to events like invoice creation or workflow state changes without polling.

Does the integration support multi-entity and multi-currency setups?

Yes. You can list Companies and scope transactions to a specific company_id, post IntercompanyJournalEntries that span multiple entities, and use ExchangeRates plus currency fields on transactions for multi-currency accounting.

Can I extend DualEntry records with custom fields?

Yes. DualEntry exposes a Custom Fields API — you can list, create, update, and delete custom field definitions, and read or write their values on the supported records those fields are attached to.

How are large data pulls and exports handled?

For bulk data movement, DualEntry provides an Export Jobs API. You can create an export job, poll it by id until completion, and then process the results, which is the recommended pattern for historical backfills instead of paginating through list endpoints.

DualEntry

Get DualEntry integrated into your app

Our team understands what it takes to make a DualEntry integration successful. A short, crisp 30 minute call with folks who understand the problem.