Get Purchase Invoice
GET/api/purchase-invoices/:purchase_invoice
Get a single purchase invoice with full detail including lines, financial lines, payments, and accounting transaction.
purchase-orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
The purchase_order object includes total_invoiced — the discount-netted amount billed across every invoice on the purchase order (not just this one). Subtract it from purchase_order.total for the amount still to be invoiced on the order.
is_provisional is true for committed-spend bills auto-created at PO submission; these are managed automatically and cannot be edited, paid, archived, or deleted.
installment_schedule appears only when the bill's payment term settles its remainder in more than one final-goods-invoice tranche (e.g. 40% at each shipment's dispatch, 40% net 30 on its receipt). Each entry carries the tranche's own due date, amount, settled and outstanding figures; the bill's due_date tracks the earliest tranche still owed and advances automatically as payments settle earlier tranches.
due_date_source is derived (calculated from the payment term), manual (typed, imported or read from the supplier's document) or none. due_date_basis explains where the date came from:
kind—manual;shipment(a linked shipment's event on a per-shipment payment-term line);order(an order-level event or estimate);bill_date(the invoice's own date on a Bill Date line);term(the payment term's own calculation);held(the stored date differs from what the basis resolves to today — a settled bill keeps its deadline, and a derived date is never degraded); ornonelabel— the explanation in wordsshipment_id,shipment_number— the shipment the date is taken from, whenkindisshipmentbasis_field— which date was used, e.g.dispatched,planned_etd,received_at,invoice_date, or a projection source such asshipment_etd/po_etdbasis_date— that date (YYYY-MM-DD)is_forecast— true when the basis date is still an estimate (for example a planned dispatch), so the due date will move once the real date is knownoffset_days— days added to the basis dateneeds_shipment_link— see below
needs_shipment_link (also repeated at the top level of the invoice) is true when the payment term dates invoices per shipment but no shipment is linked to this invoice yet: the due date shown is the order-level fallback and will move once a shipment is linked — see Link Inbound Shipment to Invoice and Auto-Link Inbound Shipments.
Each entry in financial_lines is a cost line (freight, packaging, duties, ...) billed on this invoice. amount is the unit amount and quantity the units billed; extended_amount is the stored line value (quantity × amount × (1 − discount_rate), before tax) and is what the invoice total sums. tax_allocation carries the line's tax separately.
Approval policy:
The response adds approval — the approval-policy summary for this bill's payment: policy_enabled (false when no policy governs bill payments; the other fields are then null/empty), request_id, status, reason, tier_name of the latest approval request, waiting_on (names of users who can act now), can_approve_directly (whether you can approve it now; on a document with no request yet, whether its amount falls within your limit) and blocked_reason. Full timeline: GET /api/approval-requests/for/bill_payment/{id}. Bills add approved_amount / approved_amount_base (the amount a completed payment approval authorized, in bill and base currency) and, on single-bill responses, approved_remaining (how much of it payments have not yet used; null on list rows). This is the payment approval, separate from the bill's own approval_status.
Tax: each bill line carries its own tax_rate_id and tax_allocation (the tax the supplier charged on that line, defaulting to the purchase order line's tax for the quantity billed). tax_total adds the line tax on top of the lines unless purchase_order.is_tax_included is true (prices already include tax), plus any tax on additional cost lines. purchase_order.total_invoiced is the total billed across every bill on the purchase order, tax included.
Request
Responses
- 200
- 401
- 403
- 404
- 429
OK
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.
Not Found
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.