Migrating from API v1 to v3
This guide covers the key changes between API v1 and API v3 so you can update your integration efficiently. If you are building a new integration from scratch, skip this page and start with the Welcome to the TaxCloud API guide instead.
What Changed at a Glance
Authentication
v1 passed apiLoginID and apiKey inside every request body:
v3 uses an X-API-KEY header for authentication. The connectionID (which replaces apiLoginID) is part of the URL path:
Migration Steps
- Generate a new API key in the TaxCloud portal under Developer > API.
- Locate your existing
connectionID(your v1 connection works in v3) or create a new Custom API Connection under Integrations > Custom API. - Remove
apiLoginIDandapiKeyfrom all request bodies. - Add the
X-API-KEYheader to every request. - Insert the
connectionIDinto each endpoint URL.
For full setup details, see Setup and Authentication.
Tax Calculation: Lookup to Carts
The v1 Lookup endpoint is replaced by the v3 POST /carts endpoint. The core concept is the same (send items and addresses, receive tax amounts), but the request structure and field names have changed.
v1 Request
v3 Request
Key Differences
v3 Response (excerpt)
Tip: v3 returns the tax rate alongside the amount for each line item. v1 only returned the tax amount.
Order Completion
Both v1 and v3 require you to authorize/capture a tax lookup to create an order. The core workflow is the same; the main change is terminology and endpoint structure. What v1 called AuthorizedWithCapture is now “creating an order from a cart” in v3.
v1: AuthorizedWithCapture
v3: Convert Cart to Order
Key Differences
- Unified endpoint. v1 had three separate endpoints (
Authorized,Captured,AuthorizedWithCapture). v3 consolidates these into a singlePOST /carts/ordersendpoint that handles all three cases. The number of API calls in a given workflow stays the same. - Deferred completion. Set
completed: falseat creation time, thenPATCH /orders/{orderId}with acompletedDatelater. This supports cash-basis accounting, fulfillment-based workflows, and pre-orders. - No
customerIDneeded. Customer data is already captured in the cart.
For the full workflow, see Convert Carts to Orders.
Returns and Refunds
v1 used a single Returned endpoint. v3 introduces a dedicated Refund API and adds standalone credits for adjustments not tied to an existing order.
v1: Returned
For partial returns, you included a cartItems array with the items being returned and adjusted Qty values.
v3: Refund Order
Full return (empty body):
Partial return (specify items):
Key Differences
Note: Standalone credits let you reduce tax liability without referencing an original order. Set
kind: "credit"on the Create Order endpoint. See Standalone Credits.
Exemptions
The approach to exemptions has been simplified in v3.
v1
Pass an exemptCert object inside the Lookup request, containing either a CertificateID (for a previously saved certificate) or a full Detail object to create a new certificate inline.
v3
Add an exemption object to the cart or order payload:
Direct attach (recommended):
Auto-match:
Key Differences
- v3 does not support creating certificates inline during tax calculation. Create certificates separately using the Create Exemption Certificate endpoint, then reference them by ID.
- Auto-match (
isExempt: true) searches bycustomerID,connectionID, and destination state. If no match is found, the order is flagged Exempt—No certificate and requires manual resolution before filing. - Direct attach by
exemptionIdis the recommended approach for production integrations.
For details, see Managing Tax Exemptions.
Error Handling
v1 returned HTTP 200 for every response, using a ResponseType field to indicate success or failure. v3 uses standard HTTP status codes.
Migration Steps
- Replace any logic that checks
ResponseType === 3with standard HTTP status code checks. - Parse error details from the JSON response body instead of the
Messagesarray. - Implement retry logic with exponential backoff for
500errors. See Handling Errors for a sample pattern.
Address Format
Address fields have been renamed and simplified.
Note: v3 still requires two-character state abbreviations. Do not pass full state names.
Note: The plus-4 extension is optional. If you only have the 5-digit ZIP, pass it as-is (e.g.,
"zip": "98104"). TaxCloud will still calculate tax correctly.
Testing and Environments
The testing and environment model is largely the same between v1 and v3. The main difference is that v3 uses a connectionID instead of apiLoginID to identify the environment.
Create a dedicated test connection for development and QA. When you go live, switch to your production connectionID. Archive the test connection afterward to prevent accidental use.
For details, see Testing and Going Live.
New in v3
These capabilities are new or significantly improved in v3:
- Order Upload flow. A significantly improved version of the v1
AddTransactionscapability. Submit pre-existing or historical orders directly, bypassing the cart step. See Order Upload Overview. - Deferred order completion. v1 supported a two-step flow via separate
AuthorizedandCapturedendpoints. v3 streamlines this into a single endpoint: create the order withcompleted: false, then finalize later with acompletedDatevia PATCH. - Standalone credits. Issue tax credits not tied to a specific order. See Standalone Credits.
excludeFromFilingflag. Mark orders that should not be included in TaxCloud’s filed returns (e.g., orders already filed elsewhere).- Management API. A separate set of endpoints for account and connection management.
- Tax rate in responses. Every tax calculation now returns both the rate and the amount per line item.
Migration Checklist
Use this checklist to track your migration progress:
- Generate a new
X-API-KEYand create a testconnectionIDin the TaxCloud portal. - Update your HTTP client to send
X-API-KEYas a header and remove credentials from request bodies. - Replace
Lookupcalls withPOST /carts. - Update address objects to use camelCase fields and the combined
zipformat. - Update line item fields:
ItemIDtoitemId,TICtotic,Qtytoquantity. - Replace
AuthorizedWithCapture(orAuthorized+Captured) withPOST /carts/orders. - Replace
Returnedcalls withPOST /orders/refunds/{orderId}. - Update exemption handling to use the
exemptionobject withexemptionIdorisExempt. - Replace
ResponseTypechecks with HTTP status code handling. - Test the full flow (cart, order, refund) against your test connection.
- Switch to your production
connectionIDand verify end-to-end.
Need Help?
If you run into issues during migration, reach out to the TaxCloud support team or explore the full API Reference.