Knowing when a carrier invoice is processed
After you submit a carrier invoice, Upwell works on it asynchronously. This page explains how to learn when that work is done.There’s no single “processed” flag. You read the existing fields on the invoice — its
status, its exceptions, and the matched shipmentId — plus the type on each attached document. You can read them by polling the GET endpoints or by receiving webhooks. Most production integrations use webhooks for timeliness and polling as a reconciliation backstop.Two phases of processing
It helps to separate two things:- Ingestion (automatic, seconds after create). Upwell stamps provenance (
source_system = "API"), matches the invoice to a shipment/carrier/bill from your references, and runs the exception audit. Thestatususually staysRECEIVEDthrough this phase — ingestion populatesshipmentId/billId/carrierIdand updatesexceptions, it doesn’t move the status. - Review & approval (later; may involve your rules or a human). The invoice moves toward
APPROVEDor an exception state. This is wherestatuschanges.
The signals
Status values
The generated Vocabulary page lists every enum value the API can produce, including the ones not defined below.Approach 1 — Polling
Read the invoice and its documents on an interval. Wait for ingestion (the row’supdatedAt advances past createdAt), then read the outcome.
Approach 2 — Webhooks
Subscribe once and let Upwell push the changes to you. Configure subscriptions in the Upwell dashboard (see Outbound webhooks for the model, payload shape, and auth).
The webhook event catalog is the source of truth for trigger
strings and dispatch rules (each change fires exactly one trigger — the most specific that
applies).
Which should I use?
Webhooks
Best when you can host an HTTPS endpoint. Near-real-time, no polling load.
Polling
Best when you can’t receive inbound requests, or as a backstop. Read
GET /carrier_invoices/{id} (+ /documents) with backoff.Webhook delivery retries on
5xx and can be delayed under load. A robust integration uses webhooks for timeliness and reconciles with a periodic poll so a missed delivery never leaves an invoice stuck in your system. Both approaches are shown above, and Outbound webhooks covers the delivery and retry behavior in full.
