Choose your integration path
This page routes you from goal to integration path. Each path lists its prerequisites in order, the shortest route to a first successful call, and the checklist that separates a demo from a production integration. It links into the deeper guides rather than repeating them.Statements marked [GAP] are places the documentation cannot answer yet — they are kept
visible deliberately so you don’t discover them in production. If one blocks you, ask
support@upwell.com and we’ll answer it directly (and then document it).
Orient yourself first (10 minutes)
Whatever your path, read these two pages first — everything else assumes them:Core concepts & data model
The dozen objects and the two sides: AR (invoice your customers) and AP (audit what carriers bill you). Five minutes that prevents the classic mis-mappings.
Integration patterns
The cross-cutting mechanics: integer-cents money, the
input wrapper, sourceSystem/sourceSystemId upserts, per-resource retry semantics, addresses, deletes.- Auth — send your API key in the
Authorizationheader; bare orBearer-prefixed both work. Keys are self-serve in the dashboard and scoped to one organization — an integration serving several Upwell customers holds one key per customer, and keys are environment-specific. See Authentication. - Money is integer cents.
$2,847.50→284750. Floats are rejected at runtime (Money & payloads). - Writes are not uniformly retry-safe.
POSTduplicate handling differs per resource — customers hard-fail, carriers silently no-op, carrier invoices dedupe asynchronously. See What happens if I retry a POST? before writing retry code.
Which developer are you?
I'm at a TMS / platform vendor, evaluating a native integration
I'm at a TMS / platform vendor, evaluating a native integration
Read the two orientation pages, then Syncing foundation entities
to size the sync engine, and the webhook event catalog to see
exactly which events Upwell will and won’t push to you (foundation entities: none — your TMS
stays the system of record).The operational facts to plan around:
- Credential model at scale. One API key per customer organization, created inside each customer’s own dashboard — there is no partner-level or cross-tenant credential, and no published partner/certification program today. Engage support@upwell.com (or your Upwell contact) to coordinate a multi-customer rollout. See Key scope.
- Pre-production access. A staging environment exists at
https://staging.api.upwell.com; access is provisioned by Upwell rather than self-serve — see Environments. - Operational guarantees. No SLA or status page is published, and the changelog is where API and platform changes will be announced. If your evaluation needs commitments beyond that, that’s a conversation with Upwell, not a docs page.
I'm at a broker/carrier that uses Upwell — 'get us connected'
I'm at a broker/carrier that uses Upwell — 'get us connected'
Your path is almost always: get an API key → push foundation data → pick the AP or AR flow
below. Follow the developer quickstart top to bottom. API keys are generated
in the Upwell dashboard (Account → API keys) by any org member — if you don’t see the
page, ask your Upwell admin to have it enabled (Authentication).
I only need to consume events (ship data into my system)
I only need to consume events (ship data into my system)
You can be read-only: subscribe to webhooks in the Upwell dashboard (there is no
subscription API) and correlate deliveries back via
GET calls. Start with
Outbound webhooks, then the event catalog
— and read the reliability notes in Path D below, especially the 4xx behavior.I need to know if something is even possible
I need to know if something is even possible
Go straight to Can I…? — a feasibility table for the questions
integrators actually ask, each row with its evidence or an explicit gap.
Path A — AP: submit and track carrier invoices
You have (your own, or your carriers’) and want Upwell to audit, approve, and track them.1
Prerequisites, in dependency order
- API key (Authentication).
- Carriers, then shipments — a shipment needs
customerId/carrierId, a requiredshipmentIdstring of your own, andcarrierProNumber(the strongest invoice-match key). See Syncing foundation entities. - — optional but strongly recommended: without a bill there is no expected amount, so
no amount-mismatch audit. Note
bills.proNumbermust equal the shipment’sshipmentId(it is not the carrier’s PRO — that goes on the shipment ascarrierProNumber).
2
First successful call
POST /api/rest/carrier_invoices with the input wrapper, then attach the invoice PDF via
the presigned flow. Follow Submitting carrier invoices
literally — including its warning that only the presigned upload path runs AI
classification.3
Observe the result
Ingestion is asynchronous. Poll
GET /api/rest/carrier_invoices/{id} for
updatedAt > createdAt, then read exceptions (a comma-joined string, empty = clean) and
shipmentId. Don’t judge exceptions before ingestion — matching findings clear on their
own. Full signal table: Knowing when a carrier invoice is processed.4
Production checklist
- Webhooks and a reconciliation poll — a missed delivery must not strand an invoice (carrier-invoice status guide).
- Retry handling for submits: a retried
POSTcan hand you the id of the row async-dedup will soft-delete — reconcile per Re-submitting. - Error handling against flat string errors (
{"error": "Not-NULL violation…"}), not a structured envelope — see Error handling. - Decide your approval model now: manual / auto-approval / external request — they gate differently on (How approvals work). If your system owns the decision, build the approval-request responder.
- Record settlements with carrier payment line items (submission guide, payments section).
Path B — AR: create customer invoices and record payments
You bill and want Upwell to deliver and manage receivables.1
Prerequisites, in dependency order
- API key.
- Customers — each with a
CUSTOMER_BILLINGaddress (a separate, typed address record; at most one per customer; it drives the invoice bill-to block). See Working with addresses. - Shipments referencing those customers.
2
First successful call
POST /api/rest/invoices — include balance (equal to totalAmount for a new invoice),
line items, and shipment links. Follow Customer invoices.3
Know the two AR ownership questions
- Who triggers delivery? Upwell delivers invoices by email/EDI/portal per customer
configuration, but the API action that causes delivery (writing
status: "SENT"? an approval flag? a queue?) is not documented. [GAP] Confirm the delivery contract for your tenant with Upwell before assuming aPUTsends anything. - Who updates the invoice after a payment? Applying payment line items via the API does
not recalculate the invoice’s
balance/status— your integration updates the invoice afterward, as the customer invoices guide instructs.
4
Production checklist
- Record remittances with customer payments; enforce your own balance/status updates (above).
- Subscribe to
update.invoice.status.SENTand payment/remittance triggers (event catalog); note payload shapes for non-carrier-invoice events are not yet documented. [GAP] - The AR feature pages (reminders, online payments) describe product capabilities — check Can I…? for what has API surface today.
Path C — Documents only: purchase orders & vendor invoices
You have PDFs (POs, vendor invoices, combined stacks) and want Upwell to parse them. No foundation entities required — these upload standalone: presign → PUT bytes → poll the document status (GET /api/rest/documents/{id}), then read the parsed record via the search
endpoints. Follow Purchase orders & vendor invoices.
Two things to plan around: parsing completion has no webhook trigger — polling is the only
mechanism (the event catalog has no purchase-order or
vendor-invoice triggers) — and re-using a sourceSystem/sourceSystemId pair at presign fails
fast with DOCUMENT_ALREADY_UPLOADED (unlike carrier invoices’ async dedup).
Path D — Events-only consumer
Upwell is the system of action; you mirror its events.- Host an HTTPS receiver; subscribe in the dashboard with a custom auth header (Outbound webhooks).
- Branch on the envelope’s
trigger, correlate onresourceId, and refetch the resource via GET rather than trusting payload shapes — they vary by trigger. - Reliability facts for your on-call runbook (full detail in the
webhooks guide):
- Timeout 15 s per delivery;
5xx, timeouts, and network failures retry with exponential backoff (1, 2, 4, … minutes);retryAttempts: Nmeans N retries beyond the first attempt (default 3). - A
4xxfrom your receiver is recorded as delivered and is never retried. If your auth middleware breaks, events are silently lost — alert on your own 4xx rate. - There is no delivery-inspection or replay surface; recover by polling the resource endpoints.
- There is no payload signing (HMAC) — treat your configured header secret like a password.
- Timeout 15 s per delivery;
- Know what never fires: foundation entities (customers, carriers, shipments, addresses, companies) have no triggers — poll if you need to read them back (event catalog).
Before you write retry code, read these two
What happens if…?
The consequence reference: retries, duplicates, deletes, pagination, webhooks misbehaving — what actually happens down each branch.
Can I…?
The feasibility reference: supported, supported-with-caveats, not supported, or undocumented — with evidence for every row.

