Get Purchase Order Cash Flow Schedule
GET/api/purchase-orders/cash-flow-schedule
Get the purchasing cash-flow schedule — expected vendor payments derived from all open, non-archived purchase orders.
purchase-orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Each expected payment row is built from the best available source, reported as forecast_source:
invoiced— an actual outstanding supplier invoice or landed-cost bill. When an invoice is linked to an inbound shipment on a per-shipment payment term, it is listed as one row per installment it settles (e.g. "40% on Shipment" and "40% net 30 on Receipt"), each on its payment-term due date, withpurchase_invoice_idset andmilestone_labelreadingInvoice <number> · <milestone>. Payments already made on the invoice are taken off its earliest-due installments first.scheduled— the PO's own payment-term deposit schedule (high confidence)inferred— the supplier's default payment-term schedule or default deposit percentage (medium confidence)heuristic— a due date estimated from PO/shipment ETD or ETAunscheduled— no schedule and no usable date; rows with a nulldue_dateare always included regardless of the date window
Goods on a per-shipment term that are not on any inbound shipment yet appear as Unplanned shipment remainder rows dated from the purchase order's ETD / Available ETA; with neither set, their due_date and basis_date are null.
Rows dated from an estimate rather than the event itself (e.g. an invoice installment due 30 days after receipt, while the shipment is still in transit) report is_trigger_reached: false, name the estimate in basis_source_label (e.g. IS-00085 Shipment Available ETA) with its date in basis_date, and carry medium confidence. Every row has is_estimate_passed: true when its date rests on such an estimate (or, for heuristic rows, on an ETA for goods not yet received) and that estimate is already in the past, meaning the forecast cash date is out of date until the ETA/ETD is updated. The summary reports these as estimate_passed_row_count and estimate_passed_exposure_in_tenant_currency.
Outstanding supplier invoices with no due date and no payment schedule, on a purchase order that is no longer open, are combined into a single invoiced row (is_undated_invoice_summary: true, undated_invoice_count, the total in amount_in_tenant_currency, due_date null) rather than listed one by one.
If a milestone already has a linked vendor deposit, the row amount reflects that deposit's remaining open exposure and the deposit's own due date takes precedence. Fully settled milestones are omitted.
The response contains time buckets (by the chosen granularity), per-source sections with full rows, a per-source summary, and overall exposure totals including overdue and due-in-7/30-day figures.
Read-only. Requires the purchase-orders:read token scope.
Request
Responses
- 200
- 401
- 403
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.