Welcome to the Upwell API
The Upwell REST API provides programmatic access to the core functionality of the Upwell platform — accounts payable automation, accounts receivable management, and document processing for logistics and freight companies. The endpoint reference in this section is generated directly from Upwell’s live OpenAPI specification, so it always reflects the current request and response shapes. Objects are listed alphabetically — a neutral order that deliberately implies nothing about importance. To see which objects belong together, start with the overview for the side you’re building:Accounts payable
Money out — bills, carrier invoices, approvals, and payments to carriers.
Accounts receivable
Money in — customer invoices, delivery, and applying remittances.
https://api.upwell.com
Base URL (staging): https://staging.api.upwell.com
Path prefix: /api/rest/
OpenAPI specification: app.upwell.com/openapi.json
Download the OpenAPI specification to import the API into Postman or generate a
client for your language. It is the same filtered spec this reference is built
from and is updated with every release.
Start here
Authentication
Get an API key and authenticate your requests.
Integration patterns
Idempotent upserts, integer-cents money, and the two-step document upload.
Submit a carrier invoice
Create a carrier invoice and attach its documents via the API.
Purchase orders & vendor invoices
Upload and manage parsed purchase orders and vendor invoices.
Track processing status
Know when a carrier invoice is received, processed, or flagged.
Outbound webhooks
Subscribe to events and authenticate the deliveries you receive.
Error handling
HTTP status codes, real error shapes, and retry guidance.
API conventions
- RESTful design — standard HTTP methods (
GET,POST,PUT,PATCH,DELETE). - JSON — all requests and responses are JSON.
- Authentication — API-key based, sent in the
Authorizationheader. See the Authentication guide. - Money is integer cents — monetary fields are integers in cents, never floating-point dollars. See Money & payloads.
- Pagination is
limit+offset, and the defaultlimitis 10 — a listGETwith no parameters returns only the first ten records, with nothing marking the response as truncated (a few endpoints default to 100). Always passlimit/offsetexplicitly when syncing or reconciling. Server-side filtering lives on thePOST /<resource>/searchendpoints (Integration patterns). sourceSystem+sourceSystemIdis your external key — the pair that ties an Upwell record back to yours, unique per tenant. It is not a blanket upsert:POSTonce, thenPUTto update, and check the per-resource retry semantics in Idempotency & retries before you build retries. Addresses are the exception — they have no external key at all.- Child records nest under a
datakey, on create only — aPOSTbody can create a record’s children in the same call. The wrapper is{ "data": [ … ] }for a list (a customer’saddresses, an invoice’sinvoiceLineItems) and{ "data": { … } }for a single slot (a shipment’spickupAddress). Each of these fields links to its own schema in the reference below — expand it to see the exact child shape. Update bodies take no nested children:PUTsets scalar columns on the record itself, so a child has to be written with its own endpoint. See Working with addresses for the full pattern.
Authentication
All API requests must include your API key in theAuthorization header — bare, or with a
Bearer prefix (both are accepted). See the
Authentication guide for how to obtain, scope, and rotate keys.
Responses
Successful responses return JSON keyed by the resource the endpoint operates on — for example a single object ({ "carrierInvoice": { ... } }) or a list (some list
endpoints also include an …Aggregate key with count metadata alongside the rows).
A single-resource GET for an id that doesn’t exist returns 200 with a null
resource, not a 404. The exact shape for each endpoint is documented on its
reference page in the sidebar. Errors follow the format described in
Error handling.
Getting started
- Obtain your API key.
- Skim Integration patterns for the conventions above.
- Browse the endpoint reference in the sidebar, or follow a developer guide.
- Handle errors using the Error handling reference.

