---
title: DualEntry API Integration on Truto
slug: dualentry
category: Accounting
canonical: "https://truto.one/integrations/detail/dualentry/"
---

# DualEntry API Integration on Truto



**Category:** Accounting  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 236 tools for DualEntry that AI agents can call directly.

- **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 <app>.<Model>/<action> (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.

## How it works

1. **Link your customer's DualEntry account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach DualEntry.** The Proxy API is a 1-to-1 mapping of the DualEntry API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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.
- **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.
- **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.
- **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.
- **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

- **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.
- **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.
- **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.
- **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.
- **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.
- **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.

## FAQs

### 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.

## Related reading

- [Connect DualEntry to Claude: Automate Revenue Rec & Fixed Assets](https://truto.one/blog/connect-dualentry-to-claude-automate-revenue-rec-fixed-assets/) — Learn how to connect DualEntry to Claude using a managed MCP server. Automate revenue recognition, fixed assets, and intercompany journal entries with AI agents.
- [Connect DualEntry to ChatGPT: Manage General Ledger & Multi-Entity](https://truto.one/blog/connect-dualentry-to-chatgpt-manage-general-ledger-multi-entity/) — Learn how to connect DualEntry to ChatGPT using Truto's auto-generated MCP servers. Automate multi-entity journal entries, fixed assets, and AP/AR.
- [Connect DualEntry to AI Agents: Orchestrate AP/AR & Bank Matching](https://truto.one/blog/connect-dualentry-to-ai-agents-orchestrate-ap-ar-bank-matching/) — Learn how to connect DualEntry to AI agents using Truto's tools endpoint. Build autonomous AP/AR and bank reconciliation workflows using standard LLM frameworks.
