AR Payment Records: Tai → Third Party

Sync customer remittances applied to invoices in Tai out to your accounting system via the GET /InvoicePayments?SyncStatus=None batch endpoint. Handles multi-invoice payments and lockbox batches.

What this is for

When a customer pays a Tai invoice — a check posted by the AR clerk, an ACH matched from a lockbox import, a factoring advance applied automatically — the payment reduces the receivable in Tai but not yet in your accounting system. This flow closes that gap: every payment applied inside Tai gets pushed to your GL so the invoice closes on both sides, bank deposits reconcile against real amounts, and the AR clerk isn't chasing customers for money they've already paid.

Payments are batch-only in this scope — there is no payment webhook. Pick a poll cadence that fits how often your team runs collections and bank recs.

Delivery — Batch

GET  /PublicApi/Accounting/v2/InvoicePayments?SyncStatus=None

View in API Reference →

Returns every invoice payment that hasn't yet been confirmed as synced. Each record includes the bank/GL account it was posted against, the check reference or deposit info, and the line-item breakdown across invoices.

Example response — real shape returned by the API

[
  {
    "invoicePaymentId": 2021562,
    "billingOrganization": {
      "organizationId": 40750,
      "name": "Acme Brokerage LLC",
      "address": {
        "streetAddress": "111 Broker Way",
        "streetAddressTwo": "",
        "city": "LONG BEACH",
        "state": "CA",
        "zipCode": "90802",
        "country": "USA"
      },
      "billToAddress": {
        "streetAddress": "111 Broker Way",
        "city": "LONG BEACH",
        "state": "CA",
        "zipCode": "90802",
        "country": "USA"
      },
      "phone": "",
      "referenceNumber": "",
      "modifiedById": 774705,
      "modifiedByName": "Broker Admin",
      "organizationType": "LSP",
      "modifiedDate": "2017-09-27T20:58:13.697+00:00",
      "createdDate": "2017-09-27T20:58:13.697+00:00"
    },
    "payerOrganization": {
      "organizationId": 97418,
      "name": "AJ Global Solutions",
      "address": {
        "streetAddress": "500 Customer Way",
        "city": "Anaheim",
        "state": "CA",
        "zipCode": "92807",
        "country": "USA"
      },
      "billToAddress": {
        "streetAddress": "500 Customer Way",
        "city": "Anaheim",
        "state": "CA",
        "zipCode": "92807",
        "country": "USA"
      },
      "phone": "+17145550122",
      "parentIds": ",30843,40750,",
      "referenceNumber": "AJ-001",
      "notes": "",
      "modifiedById": 718728,
      "modifiedByName": "AR Clerk",
      "organizationType": "Customer",
      "modifiedDate": "2017-12-14T16:19:18.26+00:00",
      "createdDate": "2017-12-14T16:19:18.26+00:00"
    },
    "bankAccount": {
      "generalLedgerAccountId": 59,
      "accountName": "AR Deposit Account",
      "accountCode": "Bank",
      "accountType": "Bank",
      "creditAccount": false
    },
    "checkDate": "2026-09-04T00:00:00+00:00",
    "depositReferenceNumber": "DEP-20260904",
    "paymentType": "Check",
    "externalSync": {
      "date": "2026-09-04T13:00:51.567+00:00",
      "status": "None",
      "referenceNumber": null
    },
    "lineItems": [
      {
        "invoicePaymentLineItemId": 8410008,
        "invoiceId": 9100296,
        "invoiceNumber": "117852293",
        "shipmentId": 117852293,
        "amountApplied": 1200.00
      }
    ]
  }
]

Key fields

FieldTypeNotes
invoicePaymentIdintTai's primary key for the payment.
billingOrganizationobjectYour broker's accounting org receiving the payment.
payerOrganizationobjectThe customer sending the payment. payerOrganization.referenceNumber round-trips your ERP's customer key when set.
bankAccountobjectGL account the deposit posted to — includes generalLedgerAccountId, accountName, accountCode, accountType.
paymentTypeenumCash, Check, CreditCard, ACH, Other, EFS, HaulPay, Convoy.
depositReferenceNumberstringGroups multiple payments that hit the same bank deposit slip.
checkDatedatetimeWhen the payment was received/deposited.
checkRefstringCheck number, wire ID, or lockbox reference (may be absent for cash).
externalSyncobject{status, date, referenceNumber}.
lineItems[]arrayOne entry per invoice being paid down — carries invoiceId, invoiceNumber, shipmentId, amountApplied.

Integration notes

  • Field casing: all responses are camelCase.
  • One payment, many invoices: the lineItems array can hold multiple entries — one customer check paying down five invoices at once. If your target system requires one-payment-per-invoice, split on your side and keep a mapping so the target's five records still point back to the one Tai invoicePaymentId.
  • Cross-referencing customers — two options:
    • Option A — Store the mapping on your side: save Tai's payerOrganization.organizationId alongside your ERP's customer key.
    • Option B (recommended) — Use payerOrganization.referenceNumber: if you set your ERP's customer ID as the referenceNumber on the customer's Organization record in Tai (via the Customer inbound flow), it round-trips inline on every payment payload — no mapping table needed.
  • depositReferenceNumber groups payments: payments sharing this value were all part of the same bank deposit — use to auto-generate a deposit slip or reconcile against a single bank line.
  • Cadence: hourly is a reasonable default. Faster (every 15 min) if your team runs collections in real time; slower (nightly) if payments only need to be current by morning.
  • Voids and reversals: if a payment is voided in Tai after you've already synced it, Tai marks it as such but does not "un-post" the sync. Your integration is responsible for detecting the change (via a periodic re-fetch of records you've already synced) and reversing on the target side.

Close the loop

Every payment record you pull — successful or failed to post downstream — must be confirmed back to Tai so it clears out of SyncStatus=None and isn't re-served on the next batch.

PUT  /PublicApi/Accounting/v2/InvoicePayments/Sync

View in API Reference →

Full details, enum values, and retry semantics: Sync Status Updates.

When something goes wrong

If a payment can't be posted downstream — bank GL account missing on the target, deposit already closed, invoice already fully paid on the other side — post the error text on the shipment so a Tai user can reconcile it. See Shipment Activity Logs.


Did this page help you?