ap-portals

Get Invoice

Get swept invoice

One swept invoice with its portal lines, tax groups, payments, typed totals, and the PO it bills against (a query-time PO join, not a stored link). Detail-sweep fields are null on a list-only sweep. For what would be submitted, use submit-preview instead.

get/v2/ap-portals/invoices/{ap_portal_invoice_id}

Request

  • Base URL
    https://api.stuut.ai (the document declares no server; this is the origin it was published from)
  • Auth
    HTTP bearer

Path parameters

ap_portal_invoice_idstring required

Response

Successful Response

idstring required
invoice_numberstring nullable required
canonical_status'not_submitted' | 'submitting' | 'submitted' | 'approved' | 'scheduled' | 'paid' | 'rejected' | 'disputed' | 'on_hold' | 'cancelled' | 'unknown' required

Canonical, MECE invoice status normalized across portals — the dashboard's at-a-glance state. Derived from the raw portal status (preferred) with the coarse SubmissionState as fallback (see stuut.core.ap_portal.normalize). Portal facts only: submit pre-flight results live on the separate submit_gate axis.

state'submitted' | 'approved' | 'rejected' | 'pending' required

Coarse, normalized invoice lifecycle from a sweep/submit.

invoice_statusstring nullable required
routing_statusstring nullable required
customerstring nullable required

Portal buyer identifier.

referencestring nullable required
amountstring nullable required
currencystring nullable required
invoice_datestring date nullable required
po_referencestring nullable required
reject_reason'po_mismatch' | 'missing_required_field' | 'invalid_tax' | 'duplicate_invoice' | 'unknown_customer' | 'invalid_date' | 'transmission_failed' | 'not_stated' | 'other' | 'po_line_mismatch' | 'receipt_pending' | 'disallowed_charge' | 'invoice_data_error' | 'prerequisite_document' | 'wrong_channel' | 'po_closed' required

Closed reject taxonomy — remediation routes by code, not string-match.

Buckets group rejections by what fixes them: missing fields/attachments into MISSING_REQUIRED_FIELD; tax errors and missing tax docs into INVALID_TAX.

reject_reason_textstring nullable required
submit_gate'ok' | 'needs_review' | 'blocked' required

Submit pre-flight gate for one invoice — can we submit it right now? Computed from the field-mapping + PO/order checks (see stuut.core.ap_portal.preview) and persisted so the dashboard can flag "needs a fix before submit" without re-running a preview. A separate axis from APPortalInvoiceStatus (what the portal reports about the invoice).

submit_gate_reasonstring nullable required
payload_idstring nullable required
provider'kehe' | 'taulia' | 'coupa' | 'ariba' | 'meijer' | 'kroger' | 'walgreens' | 'albertsons' | 'target' | 'heb' | 'heb_sidm' | 'c_and_s' | 'walmart' | 'walmart_highradius' | 'cvs' | 'cvs_sap' | 'cvs_image_silo' | 'kroger_supplier_connect' | 'kroger_claimtrax' | 'kroger_verigon' | 'servicetitan' | 'sandbox' | 'generic' required

Supported AP Portal providers.

ap_portal_account_idstring required
invoice_idstring nullable required
synced_atstring date-time required
net_totalstring decimal nullable required
tax_totalstring decimal nullable required
gross_totalstring decimal nullable required
paidboolean required
paid_amountstring decimal nullable required
payment_statusstring nullable required
payment_termstring nullable required
payment_datestring date nullable required
due_datestring date nullable required
status_changed_atstring date-time nullable required

Changes

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