> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upwell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Can I…?

> The feasibility reference: what the Upwell API supports today, what has caveats, what it does not do, and what is real but undocumented — with evidence for every row.

# Can I…?

Feasibility before code. **✅ Supported** (documented and real) · **⚠️ Supported with caveats**
(read the note) · **❌ Not supported** (today, as documented) · **❓ Undocumented** (the API
surface exists in the OpenAPI spec but no guide covers it — confirm with Upwell before relying
on it). **\[GAP]** marks questions the docs cannot answer yet.

## Accounts payable

| Can I…                                                  |    | Notes                                                                                                                                                        |
| ------------------------------------------------------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| submit carrier invoices via API?                        | ✅  | [Submission guide](/api-guides/carrier-invoice-submission)                                                                                                   |
| attach documents and get them AI-classified?            | ✅  | Presigned flow only — base64 uploads are filed, never classified ([Integration patterns](/integration-patterns))                                             |
| know when an invoice is processed?                      | ✅  | Poll signals + webhooks ([status guide](/api-guides/carrier-invoice-status))                                                                                 |
| see every status the lifecycle can produce?             | ⚠️ | The spec's enum has 16 values; 13 are defined in prose — `AWAITING_BILL`, `CANCELLED`, `REFUNDED` **\[GAP]**                                                 |
| own approve/reject in my system?                        | ✅  | [Approval requests](/api-guides/carrier-invoice-approval) — PATCH `SUCCEEDED`/`FAILED`                                                                       |
| approve an invoice programmatically on the Upwell side? | ❓  | `POST /carrier_invoices/{id}/approve` (+`overrideExceptions`) exists in the spec; no guide covers it                                                         |
| list only *pending* approval requests?                  | ⚠️ | Documented params are limit/offset; a `where` filter is pending transport verification — see [filtering](/developer-guide/what-happens-if#reading-data-back) |
| read the catalog of exception types/tokens?             | ❌  | No catalog exists; the `exceptions` string's token format is inconsistent across pages **\[GAP]**                                                            |
| work exceptions (list/resolve) via API?                 | ❌  | No exceptions resource; lifecycle is UI-documented only ([Exceptions](/concepts/exceptions))                                                                 |
| record carrier payments?                                | ✅  | Payment line items + bulk ([submission guide](/api-guides/carrier-invoice-submission))                                                                       |
| read, correct, or delete carrier payments?              | ❓  | GET/PUT/DELETE exist in the spec; guides document POST only                                                                                                  |
| use bill payments (settlement objects)?                 | ❓  | Full `bill-payments` endpoint family in spec; zero prose                                                                                                     |
| manage bill line items?                                 | ❓  | Endpoints + nested create exist in spec; the bills guide never mentions line items                                                                           |
| pay lumpers/factors (non-carrier payables)?             | ✅  | Vendors + `vendorId` on bills ([syncing guide](/api-guides/syncing-foundation-entities))                                                                     |
| upload & parse POs and vendor invoices?                 | ✅  | [PO & vendor invoices guide](/api-guides/purchase-orders-and-vendor-invoices)                                                                                |
| get an event when a PO/vendor invoice finishes parsing? | ❌  | No trigger exists in the [catalog](/api-guides/webhook-events); poll `GET /documents/{id}`                                                                   |
| retract/delete a submitted carrier invoice?             | ❓  | `DELETE /carrier_invoices/{id}` in spec; no guide, no semantics documented                                                                                   |
| configure auto-approval via API?                        | ❌  | Dashboard settings only ([Approvals](/concepts/approvals)); cadence unpublished **\[GAP]**                                                                   |

## Accounts receivable

| Can I…                                                |    | Notes                                                                                                                                                                      |
| ----------------------------------------------------- | -- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| create invoices with line items in one call?          | ✅  | Nested `invoiceLineItems` ([guide](/api-guides/customer-invoices))                                                                                                         |
| link an invoice to shipments?                         | ✅  | Nested `invoiceShipments` on create (now in the spec) or `POST /invoice_shipments` ([guide](/api-guides/customer-invoices))                                                |
| make Upwell deliver the invoice (email/EDI/portal)?   | ⚠️ | The product does; the API action that triggers delivery is undocumented — confirm per tenant **\[GAP]**                                                                    |
| record customer payments/remittances?                 | ✅  | [Customer payments](/api-guides/customer-payments)                                                                                                                         |
| have payments auto-update invoice balance/status?     | ❌  | Your integration updates the invoice ([guide Tip](/api-guides/customer-invoices))                                                                                          |
| update or unapply a payment line item?                | ❓  | PUT/DELETE exist in spec; guide names GET/POST only                                                                                                                        |
| get events for payments recorded inside Upwell?       | ⚠️ | Triggers exist ([catalog](/api-guides/webhook-events)); payload shapes undocumented **\[GAP]**                                                                             |
| drive reminders/dunning via API?                      | ❌  | No reminders API exists — email reminders are configured in the dashboard ([Payment Reminders](/accounts-receivable/reminders))                                            |
| manage payment plans / disputes / bank feeds via API? | ❌  | No API surface; banking-integration ingestion is Upwell-operated ([Remittances](/accounts-receivable/remittances))                                                         |
| integrate the customer payment portal?                | ❓  | Payments land as ordinary `customer_payments` ([Online Payments](/accounts-receivable/online-payments)); `portalSlug` exists on invoice reads; no portal API is documented |
| track whether a customer opened an invoice?           | ❓  | `VIEWED` exists in the status enum; no page explains who sets it or when                                                                                                   |
| send statements / list bills?                         | ⚠️ | Statements are a product feature ([Receivables](/accounts-receivable/receivables)); no API surface documented                                                              |

## Foundation data & sync

| Can I…                                                  |    | Notes                                                                                                                                                             |
| ------------------------------------------------------- | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| push customers, carriers, shipments, companies, bills?  | ✅  | [Syncing foundation entities](/api-guides/syncing-foundation-entities)                                                                                            |
| bulk-load for the initial sync?                         | ⚠️ | bulk-customers/carriers/bills exist; **no bulk-shipments**; batch failure semantics differ per endpoint                                                           |
| upsert everything by my own IDs?                        | ⚠️ | Works everywhere except **addresses** (no external key — store `addr_` ids); POST duplicate semantics differ per resource                                         |
| get called back when foundation data changes in Upwell? | ❌  | By design — no foundation-entity triggers ([catalog](/api-guides/webhook-events))                                                                                 |
| search/filter server-side?                              | ⚠️ | `POST /search` on 12 resources; addresses/companies have none; GET `?where=` pending verification ([details](/developer-guide/what-happens-if#reading-data-back)) |
| page safely through big collections?                    | ✅  | limit/offset; **default limit is 10** — always pass it explicitly ([API conventions](/api-reference/introduction))                                                |
| model multi-stop routes?                                | ⚠️ | `stops` nested + standalone CRUD; populate free-text `stopType` (it's what's read), draw values from the `type` enum                                              |
| model bill-to hierarchies?                              | ✅  | `billToCustomerId` ([syncing guide](/api-guides/syncing-foundation-entities))                                                                                     |
| merge duplicate customers?                              | ❌  | Internal operation; treat `mergedIntoCustomerId` as read-only ([syncing guide](/api-guides/syncing-foundation-entities))                                          |

## Events & platform

| Can I…                                                   |    | Notes                                                                                                                                                                                                                                 |
| -------------------------------------------------------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| subscribe to carrier-invoice lifecycle events?           | ⚠️ | Per-status triggers only for `APPROVED`/`EXCEPTION`; no `PAID`/`UNDER_REVIEW` triggers ([status guide](/api-guides/carrier-invoice-status))                                                                                           |
| subscribe to carrier-document / invoice-APPROVED events? | ⚠️ | Exist but not self-service — marked † in the [catalog](/api-guides/webhook-events); contact support                                                                                                                                   |
| manage webhook subscriptions via API?                    | ❌  | Dashboard only ([webhooks guide](/api-guides/webhooks))                                                                                                                                                                               |
| verify deliveries cryptographically (HMAC)?              | ❌  | Static header/Basic auth only — no signing or replay protection ([webhooks guide](/api-guides/webhooks))                                                                                                                              |
| inspect or replay past deliveries?                       | ❌  | No surface exists; recover by polling ([webhooks guide](/api-guides/webhooks), Reliability)                                                                                                                                           |
| trust that 4xx responses will be retried?                | ❌  | **They are not — and they're recorded as delivered.** Alert on your own 4xx rate ([webhooks guide](/api-guides/webhooks))                                                                                                             |
| test against a sandbox?                                  | ⚠️ | `staging.api.upwell.com` exists; access is provisioned by Upwell, and keys are environment-specific ([Environments](/authentication#environments))                                                                                    |
| plan around published rate limits?                       | ✅  | None exist today — no `429`/`X-RateLimit-*` ([Error handling](/api-reference/error-codes))                                                                                                                                            |
| serve many Upwell tenants with one credential?           | ❌  | One API key = one organization; no partner credential ([Key scope](/authentication#key-scope))                                                                                                                                        |
| rotate/revoke an API key?                                | ✅  | Create → switch → revoke, in the dashboard; no key-management API ([Authentication](/authentication))                                                                                                                                 |
| generate a client from the OpenAPI spec?                 | ✅  | The spec declares auth, required fields, real enums, nested inserts, and 400/401 responses; one caveat — `where`/`orderBy` filters pending verification ([details](/developer-guide/what-happens-if#errors-limits-and-the-reference)) |
| follow API changes over time?                            | ⚠️ | The [changelog](/changelog) is the channel; entries are docs-only so far, and no deprecation policy is published **\[GAP]**                                                                                                           |

<Note>
  Rows marked ❓ are opportunities as much as risks: the surface exists and is tenant-scoped like
  everything else, but it is undocumented and therefore unwarranted — get written confirmation
  from Upwell before building on one. Full evidence trail for every row lives in the review
  bundle (`doc/HISTORY/2026-08-external-docs-dev-review/feasibility-matrix.md` in the repo).
</Note>
