admin-payments

Issue Po Invoice

Issue a pre-payment invoice for a Purchase Order.

When a customer pays by PO, the business needs to send them an invoice BEFORE payment arrives so their AP team can cut the check. This endpoint generates the invoice (status=ISSUED) without touching the payment's status or the project's state. The customer will see the invoice in their dashboard and can forward to AP. When payment later arrives, mark-received flips the same invoice to PAID.

exclude_tax=true renders the invoice tax-free (e.g. tax-exempt org, or tax accidentally added to the quote) without touching the quote.

Optional additional_line_items_post_tax (request body) adds admin-entered post-tax extras (shipping, …) to the invoice — billed beyond the quote, summed into the total after tax, quote untouched.

acknowledge_total_drift=true bypasses the reconciliation gate below. Use it when the recorded settlement genuinely differs from the quote (the normal case for a MANUAL out-of-band payment); leave it false so a stale quote.total_amount can never silently become a bill.

Gates: PO method, payment PENDING, PO number submitted, no invoice already issued, recorded amount reconciles with the quote (400 quote_total_drift otherwise). Requires payments:edit permission.

post/api/v1/admin/payments/{payment_id}/issue-invoice

Path parameters

payment_idstring uuid required

Query parameters

exclude_taxboolean
acknowledge_total_driftboolean

Request body

Response

Successful Response

idstring uuid required
project_idstring uuid required
quote_idstring uuid required
user_idstring uuid required
methodstring required
statusstring required
amountstring required
total_with_taxstring nullable
deposit_amountstring nullable
currencystring required
stripe_payment_intent_idstring nullable
po_numberstring nullable
po_document_r2_keystring nullable
po_document_download_urlstring nullable
shipping_addressstring nullable
notesstring nullable
paid_atstring date-time nullable
created_atstring date-time required
updated_atstring date-time required
project_namestring required
customer_namestring required
customer_emailstring required
customer_billing_addressstring nullable
submitted_by_admin_idstring uuid nullable
submitted_by_labelstring nullable
payment_terms_net_daysinteger nullable
order_placed_at_overridestring date-time nullable
order_placed_atstring date-time nullable

Changes

No recorded changes to this endpoint across all 1 revision of this API.