AR Payment Records: Third Party → Tai

Push customer remittances applied in your ERP or lockbox into Tai to close the corresponding open invoices. Supports multi-invoice deposits and factoring-advance flows.

What this is for

Your bank's lockbox feed drops a customer's wire into your GL. A cash-applications team in your ERP posts the deposit to a set of invoices. A factoring platform advances funds against a batch of your invoices and applies them. In all three cases, the money hits your accounting system first and Tai still shows the invoices as open. This flow pushes the payment(s) into Tai so the invoices close, aging is accurate, and no AR clerk emails a customer to ask about money that arrived last Tuesday.

Same shape as AP Payment Records inbound, just for the sell side.

Create Invoice Payment record

POST  /PublicApi/Accounting/v2/InvoicePayments

View in API Reference →

Request payload

{
  "payerOrganizationId": 660295,
  "generalLedgerAccountId": 115,
  "checkDate": "2026-09-04T00:00:00Z",
  "checkRef": "WIRE-2026090401",
  "depositReferenceNumber": "DEP-20260904-A",
  "paymentType": "ACH",
  "lineItems": [
    { "invoiceId": 14041027, "amountApplied": 2431.75 }
  ]
}
FieldRequiredNotes
payerOrganizationIdYesTai organizationId of the customer sending the payment.
generalLedgerAccountIdNoTai's ID for the bank/GL account the deposit goes into.
checkDateYesThe date the payment was received.
checkRefNoCheck number, wire ID, or lockbox reference.
depositReferenceNumberNoGroups multiple payments into a single deposit — use when a bank deposit slip covers several remittances.
paymentTypeYesSame enum as Bill Payments — ACH, Check, Cash, CreditCard, EFS, HaulPay, Convoy, Other.
lineItems[].invoiceId + amountAppliedYesOne entry per Tai invoiceId being paid down. Amounts should sum to the total payment.

Response (200) — an empty body on success. The created invoicePaymentId is not returned inline; retrieve it via GET /InvoicePayments?SyncStatus=None (or another status) if you need it for a subsequent sync-status call.

Integration notes

  • Field casing: requests are case-insensitive on parse but responses are camelCase.
  • Lockbox-style batches: when your bank feed delivers one wire that pays 12 invoices, send one POST with 12 lineItems. Don't split it into 12 calls — Tai models this as one payment with 12 applications, and splitting fragments your reporting.
  • Partial payments: amountApplied doesn't have to equal the invoice's remaining balance. Tai will reduce the invoice's outstanding by that amount and keep the invoice open for the remainder.
  • Grouping deposits with depositReferenceNumber: payments sharing this value show up together in Tai's bank-reconciliation reports — useful when one bank deposit slip covers several customer remittances.
  • Payer identification: payerOrganizationId must be Tai's organizationId for that customer. If your ERP uses different keys, either maintain a mapping table or set your ERP's key as the customer's referenceNumber in Tai and look up via GET /CustomersByReference before creating the payment.
  • Factoring advances: if a factoring platform is advancing against invoices before the customer pays, the pattern is the same — the factor is the payerOrganization for that payment, and the settlement (when the customer later pays the factor) doesn't touch Tai.

When something goes wrong

Customer not on file, invoice already fully paid, deposit account missing — post the error on the shipment via Shipment Activity Logs so a Tai user can reconcile it.

Close the loop

PUT  /PublicApi/Accounting/v2/InvoicePayments/Sync

View in API Reference →

Full details: Sync Status Updates.


Did this page help you?