# Adobe Commerce: Getting Started Source: https://developer.zamp.com/adobe-commerce-getting-started Automated sales tax compliance for Adobe Commerce (Magento) merchants. Zamp can be installed directly on your Adobe Commerce (formerly known as Magento) store to calculate tax with Zamp's tax engine. Remove the need for manual tax rate configuration and routine maintenance. ## Feature Suite | Feature | Supported? | | ---------------------------------------------------- | --------------------- | | Easy Installation Process | | | Canada Support | | | Zamp Tax Calculations In Adobe Commerce Admin | | | Zamp Tax Calculations on Adobe Commerce Storefront | | | Bundled, Configurable, Virtual, and Grouped Products | | | Order and Credit Memo Posting | | | Refund Posting | | | Customer Exemption Mapping | | | Customer Group Exemption Mapping | | | Live installation Support | | | Sandbox Support | | | Historical Sync | | | Zamp Product Tax Codes | |

Get started

Talk to our team

See how Zamp works with Adobe Commerce and get your account set up.

Book a demo →
# Getting Started Source: https://developer.zamp.com/amazon-getting-started ## Overview Zamp can connect directly to your Amazon Seller Central account. We'll pull in your transactions on a daily basis, for accurate and on-time filing for your Amazon Marketplace transactions. ## Feature Suite | Feature | Supported? | | ------------------------- | --------------------- | | Easy Installation Process | | | Secure Connection | | | Daily Transaction Sync | | | Installation Support | |

Get started

Talk to our team

See how Zamp works with Amazon and get your account set up.

Book a demo →
# Installation Guide Source: https://developer.zamp.com/amazon-installation-guide Connect your Amazon Seller Channel store with a few steps. ## Overview Zamp can connect with your Amazon Seller Channel to pull all of your Amazon transactions on a daily basis. ## Prerequisites | Item | Where to Obtain | | ---------------------------------------------------- | ------------------------------------------------------- | | An Amazon Seller Central account with an admin login | Confirm with your company's administrator | | Selling in the United States | - | | An existing Zamp Account | If this isn't available, reach out to your Zamp contact | ## Installation Steps Your Zamp representative will need to enable the Amazon integration first before you proceed to the next steps. 1. In your Zamp account, open **Integrations.** 2. You should see an **Amazon** row marked as **Pending.** 3. Click **Connect.** Image (13) The customer is granting Zamp read-only access to their Amazon order and settlement data so we can calculate their tax. They can revoke it anytime from Seller Central. 1. Once redirected to Amazon, sign into your Seller Central account. 2. On the **Authorize Zamp Tax** screen, check the consent box. Image (14) 3. Click **Confirm** Image (15) 2 4. If a multi-country seller, select the **United States** as your account or region. 1. Navigate back to your Zamp account, and confirm the Amazon connection shows as **Connected.** # Addresses Source: https://developer.zamp.com/api-reference/addresses Validate addresses before collecting taxes to ensure calculations are based on precise location data. Only US addresses are currently supported. ## Validate an Address ### Request ```text theme={null} POST /addresses ``` Street address Additional address line City name 2-letter state code ZIP code. Format: `#####` or `#####-####` Country code ```json POST /addresses theme={null} curl -X POST https://api.zamp.com/addresses \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ "line1": "120 SW 10TH AVE", "line2": null, "city": "TOPEKA", "state": "KS", "zip": "66612" }' ``` ### Response A lookup is considered successful (status code `200`) when the request meets requirements and there are no system failures. If the address is valid, `validatedAddress` is populated with the validated address and coordinates. **An address is invalid (not found) when `validatedAddress` is `null`.** The original address passed in the request Returns the validated address, or `null` ```json Valid Address theme={null} { "originalAddress": { "line1": "120 SW 10TH AVE", "line2": null, "city": "TOPEKA", "state": "KS", "zip": "66612", "country": "US" }, "validatedAddress": { "coordinates": [-95.67659, 39.046513], "line1": "120 SW 10th Ave", "line2": null, "city": "Topeka", "state": "KS", "zip": "66612-1226", "country": "US" } } ``` ```json Invalid Address theme={null} { "originalAddress": { "line1": "999 NOWHERE RD", "line2": null, "city": "TOPEKA", "state": "KS", "zip": "66612", "country": "US" }, "validatedAddress": null } ``` When the address cannot be matched, the request still returns `200` with `validatedAddress` set to `null`: ```json theme={null} "validatedAddress": null ``` # Calculations Source: https://developer.zamp.com/api-reference/calculations Calculate sales tax in real time for any transaction with the Zamp Calculations API, returning a full jurisdiction-level breakdown. Calculations are core to what the Zamp API provides. Given a transaction object, the Calculation endpoint returns the tax due along with a detailed breakdown of those taxes. After collecting taxes, you should [create the transaction](/api-reference/transactions) to persist it for filing. ## Calculate Tax This endpoint calculates taxes for a given transaction. It's intended to be used at transaction time to determine how much tax to collect. But once you've collected, you'll later want to make sure and [**create the transaction**](https://developer.zamp.com/api/transactions#create-a-transaction) to persist it for filing. ### Request ```json theme={null} POST /calculations ``` The transaction object to calculate taxes for. See the [Transactions](/api-reference/transactions) page for the full schema. ```json POST /calculations theme={null} curl -X POST https://api.zamp.com/calculations \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ "id": "123", "name": "INV-123", "transactedAt": "2023-07-01T00:00:00.000Z", "isResale": false, "discount": 2, "subtotal": 18, "shippingHandling": 5, "total": 23, "shipToAddress": { "line1": "120 SW 10TH AVE", "line2": null, "state": "KS", "city": "TOPEKA", "zip": "66612" }, "lineItems": [ { "id": "LI-123", "amount": 10, "quantity": 2, "discount": 0, "shippingHandling": 0, "productName": "The Ultimate Sampler", "productSku": "SAMPLER-100", "productTaxCode": "R_TPP_FOOD-BEVERAGE_HOME-CONSUMPTION" } ] }' ``` ### Response The response includes the original transaction plus `taxDue` and a `taxes` array with the full jurisdiction breakdown. Tax is itemized per jurisdiction (state, county, city) and split between the taxable base and shipping/handling, so a single line item can produce several `taxes` entries. The `taxDue` values across all entries sum to the top-level `taxDue`. ```json 200 theme={null} { "id": "123", "name": "INV-123", "taxDue": 1.58, "taxes": [ { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.S.20", "jurisdictionName": "KANSAS", "jurisdictionDivision": "STATE", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": null, "taxableAmount": 18, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.04, "taxDue": 0.72, "taxCollected": 0 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.S.20", "jurisdictionName": "KANSAS", "jurisdictionDivision": "STATE", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": "SHIPPING_HANDLING", "taxableAmount": 5, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.04, "taxDue": 0.2, "taxCollected": 0 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.C.177", "jurisdictionName": "SHAWNEE COUNTY", "jurisdictionDivision": "COUNTY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": null, "taxableAmount": 18, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.0135, "taxDue": 0.243, "taxCollected": 0 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.C.177", "jurisdictionName": "SHAWNEE COUNTY", "jurisdictionDivision": "COUNTY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": "SHIPPING_HANDLING", "taxableAmount": 5, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.0135, "taxDue": 0.0675, "taxCollected": 0 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.I.71000", "jurisdictionName": "TOPEKA CITY", "jurisdictionDivision": "CITY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": null, "taxableAmount": 18, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.015, "taxDue": 0.27, "taxCollected": 0 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.I.71000", "jurisdictionName": "TOPEKA CITY", "jurisdictionDivision": "CITY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": "SHIPPING_HANDLING", "taxableAmount": 5, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.015, "taxDue": 0.075, "taxCollected": 0 } ] } ``` ```json 400 Bad Request theme={null} { "code": "BAD_REQUEST", "message": "Input validation failed", "issues": [ { "code": "", "path": [], "message": "" } ] } ``` ### Tax Breakdown Fields | Field | Description | | ---------------------- | --------------------------------------------------- | | `lineItemId` | Associated line item identifier | | `state` | State abbreviation | | `sourcing` | Sourcing method (e.g., `INTER_DESTINATION`) | | `jurisdictionCode` | Unique jurisdiction identifier | | `jurisdictionName` | Jurisdiction display name | | `jurisdictionDivision` | Division type (`STATE`, `COUNTY`, `CITY`) | | `compositeCode` | Composite jurisdiction code | | `compositeName` | Composite jurisdiction name | | `exceptionCode` | Tax exception classification | | `ancillaryType` | Additional type (e.g., `SHIPPING_HANDLING`, `null`) | | `taxableAmount` | Amount subject to taxation | | `nontaxableAmount` | Non-taxable portion | | `excludedAmount` | Excluded amount | | `taxRate` | Applicable tax rate (decimal) | | `taxDue` | Calculated tax obligation | | `taxCollected` | Amount already collected | # Companies Source: https://developer.zamp.com/api-reference/companies Retrieve company information associated with your API key. The Companies endpoint provides information about companies associated with your API key. ## The Company Object | Property | Type | Description | | ----------- | ----------------- | ------------------------------------------------------ | | `id` | string | Unique identifier for the company | | `legalName` | string | Official legal name of the company | | `dbaName` | string (optional) | "Doing business as" name, if different from legal name | ```json theme={null} { "id": "cmb9gajwt00060djycynhgbiv", "legalName": "Zamp Technologies, Inc.", "dbaName": "Zamp Tax" } ``` ## List Companies The unique Zamp identifier for a given company. This parameter is reserved for Zamp partners. Omit this parameter to request your own company's information. ### Request ```text theme={null} GET /companies ``` ```bash GET /companies theme={null} curl -G https://api.zamp.com/companies \ -H "Authorization: Bearer {token}" ``` ### Response ```json 200 theme={null} [ { "id": "cmb9gajwt00060djycynhgbiv", "legalName": "Zamp Technologies, Inc.", "dbaName": "Zamp Tax" } ] ``` # Filings Source: https://developer.zamp.com/api-reference/filings Retrieve a company's sales tax filing history and status through the Zamp Filings API endpoint. The Filings endpoint provides information about a company's tax filing history. ## The Filing Object | Property | Type | Description | | ----------------- | ----------------- | ---------------------------------------------------------- | | `state` | string (2-letter) | State code for the filing | | `period.code` | string | Period code (e.g., `2024-Q3`) | | `period.name` | string | Human-readable period name (e.g., `Q3 2024`) | | `frequency.code` | string | Frequency code (A, M, MDFA, MP, NYA, NYQ, NYQP, Q, QP, SA) | | `frequency.name` | string | Human-readable frequency name | | `dueOn` | date (ISO 8601) | State-specified due date for the filing | | `isCompleted` | boolean | Whether the filing has been completed | | `estimatedTaxDue` | number | Estimated tax amount due for this filing | | `artifacts` | array | Filing artifacts and documents | ### Artifact Properties | Property | Type | Description | | --------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ | | `returnConfirmation` | string | State confirmation number for the return | | `paymentConfirmation` | string (optional) | State confirmation number for the payment | | `amountPaid` | number (optional) | Amount paid with this filing | | `files[].type` | string | Document type: `FILING_OTHER`, `FILING_PAYMENT`, `FILING_RETURN`, `FILING_RETURN_PAYMENT`, `FILING_TEMPLATE` | | `files[].signedUrl` | string | Signed URL to download the file (expires after 1 hour) | ### Example ```json theme={null} { "state": "KS", "period": { "code": "2025-JAN", "name": "January 2025" }, "frequency": { "code": "M", "name": "Monthly" }, "dueOn": "2025-02-25", "isCompleted": true, "estimatedTaxDue": 25.25, "artifacts": [ { "returnConfirmation": "7291-QXMF-8K63", "paymentConfirmation": "7291-QXMF-8K63", "amountPaid": 25.25, "files": [ { "type": "FILING_RETURN", "signedUrl": "" }, { "type": "FILING_PAYMENT", "signedUrl": "" } ] } ] } ``` ## List All Filings The unique Zamp identifier for a given company. Reserved for Zamp partners. Filter filings by 2-letter state code. Filter filings due on or after this date. Filter filings due on or before this date. Filter by completion status. Cursor from previous response for pagination. `null` indicates no more pages. ### Request ```bash GET /filings theme={null} curl https://api.zamp.com/filings \ -H "Authorization: Bearer {token}" \ -d state=KS \ -d minDueOn=2025-02-01 \ -d maxDueOn=2025-02-28 ``` ### Response ```json 200 theme={null} { "prevCursor": null, "nextCursor": null, "data": [ { "state": "KS", "period": { "code": "2025-JAN", "name": "January 2025" }, "frequency": { "code": "M", "name": "Monthly" }, "dueOn": "2025-02-25", "isCompleted": true, "estimatedTaxDue": 25.25, "artifacts": [] } ] } ``` # Sales Tax API Reference Source: https://developer.zamp.com/api-reference/introduction Complete reference for the Zamp sales tax API — authentication, calculations, transactions, address validation, registrations, and filings. The Zamp API provides endpoints for calculating sales tax, managing transactions, validating addresses, and accessing filing and registration data. New to the API? Start with the [sales tax API documentation](/) overview or the [Quickstart](/guides/quickstart). **Base URL:** `https://api.zamp.com` ## Authentication All API endpoints are authenticated using bearer tokens in the `Authorization` header. ```bash theme={null} curl https://api.zamp.com/transactions \ -H "Authorization: Bearer {token}" ``` See the [Authentication guide](/guides/authentication) for details on obtaining a token. ## Conventions Status codes and error response formats. Work with cursor-paginated list responses. The shared shape behind calculations and transactions. ## Available endpoints Validate addresses before collecting taxes Calculate tax due on transactions in real-time Retrieve company information associated with your API key Create, retrieve, update, and delete transactions List all product tax codes supported by Zamp View state tax registrations for your company Access tax filing history and documents # Registrations Source: https://developer.zamp.com/api-reference/registrations Look up a company's state sales tax registrations and nexus status through the Zamp Registrations API endpoint. The registrations endpoint provides information about state registrations for a given company. ## The Registration Object | Property | Type | Description | | ------------------------- | ----------------- | ---------------------------------------- | | `state` | string (2-letter) | State code for the registration | | `registration.taxId` | string | State-assigned tax identification number | | `registration.startedAt` | date (ISO 8601) | Date registration became effective | | `registration.endedAt` | date (optional) | Date registration ended, if applicable | | `location.line1` | string | First line of business address | | `location.line2` | string (optional) | Second line of business address | | `location.city` | string | City name | | `location.state` | string (2-letter) | State code | | `location.zip` | string | ZIP or postal code | | `frequencies[].code` | string | Frequency code | | `frequencies[].startedAt` | date | Date frequency became effective | | `frequencies[].endedAt` | date (optional) | Date frequency ended | ### Frequency Codes `A` (Annual), `M` (Monthly), `MDFA`, `MP`, `NYA`, `NYQ`, `NYQP`, `Q` (Quarterly), `QP`, `SA` (Semi-Annual) ### Example ```json theme={null} { "state": "KS", "registration": { "taxId": "K100234567", "startedAt": "2024-01-01", "endedAt": null }, "location": { "line1": "120 SW 10TH AVE", "line2": null, "city": "TOPEKA", "state": "KS", "zip": "66612" }, "frequencies": [ { "code": "M", "startedAt": "2024-01-01", "endedAt": null } ] } ``` ## List Company Registrations The unique Zamp identifier for a given company. Reserved for Zamp partners. Filter registrations by 2-letter state code. ### Request ```text theme={null} GET /registrations ``` ```bash GET /registrations theme={null} curl -G https://api.zamp.com/registrations \ -H "Authorization: Bearer {token}" \ -d state=KS ``` ### Response ```json 200 theme={null} [ { "state": "KS", "registration": { "taxId": "K100234567", "startedAt": "2024-01-01", "endedAt": null }, "location": { "line1": "120 SW 10TH AVE", "line2": null, "city": "TOPEKA", "state": "KS", "zip": "66612" }, "frequencies": [ { "code": "M", "startedAt": "2024-01-01", "endedAt": null } ] } ] ``` # Tax Codes API Source: https://developer.zamp.com/api-reference/tax-codes Retrieve the Zamp product tax codes used to determine the correct tax treatment for each product or service via the API. Tax codes are used to determine the tax rules applied to a given product or service. ## The Tax Code Object | Property | Type | Description | | ------------- | ------ | --------------------------------------------------- | | `code` | string | The unique Zamp identifier (PTC - product tax code) | | `name` | string | Name of the tax code | | `description` | string | Description of the tax code | ```json Tax Code Object theme={null} { "code": "Z-FBV115", "name": "Flavored and non-carbonated beverage", "description": "Naturally or artificially flavored beverage that is not sweetened and is not carbonated." } ``` ## List Tax Codes Returns all product tax codes supported by Zamp in a single response. This endpoint returns all tax codes at once and does not require pagination. ### Request ```text theme={null} GET /tax-codes ``` ```bash GET /tax-codes theme={null} curl -G https://api.zamp.com/tax-codes \ -H "Authorization: Bearer {token}" ``` ### Response ```json 200 theme={null} [ { "code": "R_DIG", "name": "Digital", "description": "General digital products delivered electronically." } ] ``` For a complete reference of all tax codes by category, see the [Zamp Tax Codes](/guides/zamp-tax-codes) guide. # Transactions Source: https://developer.zamp.com/api-reference/transactions Create, retrieve, update, and delete transactions for tax filing. Persist transactions after taxes have been calculated and the transaction is processed in your system. ## The Transaction Object ### Core Properties Unique identifier for the transaction Friendly identifier (e.g., invoice number) Required for refund transactions; references original transaction `id` Timestamp when transaction occurred. Can be in the past which will use historical rates (from 2023 and on), or the future, which will use the current date's tax rates and rules Indicates whether Zamp will recalculate tax when a transaction is posted to Zamp Marketplace facilitator that collected payment and assumed sales tax responsibility Customer’s entity exemption type: `EDU_PRIVATE`, `EDU_PUBLIC`, `FEDERAL_GOV`, `LOCAL_GOV`, `NON_PROFIT`, `STATE_GOV`, `TRIBAL` Purpose for sale: `BUSINESS_USE`, `PERSONAL_USE`, `RENTAL_USE`, `RESALE` The currency of the transaction. This must match the destination country if Zamp is filing the return Transaction-level discount Total excluding tax and shipping/handling. This is no longer required Transaction-level shipping Transaction-level handling Combined shipping/handling Actual tax collected amount Total including tax and shipping / handling Where transaction physically shipped from Where shipped to or point of sale Line item details Custom key-value pairs (max 50, keys 1-40 chars, values 1-500 chars) ### Address Object Street address Additional address info City name Two-letter state code Format: `#####` or `#####-####` ISO-3166 Alpha-2 code (Default, US) ### Line Item Properties Unique line item identifier Amount per unit Number of units Line-item level discount Line-item level shipping Line-item level handling Combined line-item shipping/handling Product description Product identifier Zamp tax code for product taxability * For point-of-sale orders, set `shipFromAddress` and `shipToAddress` to identical values. * Prefer separate `shipping` and `handling` amounts; use `shippingHandling` only if combined. * Updates/deletions for transactions in closed filing periods are forbidden. * Transactions created with `transactedAt` in closed periods auto-adjust to current time. ### Entity Exemption Types `EDU_PRIVATE`, `EDU_PUBLIC`, `FEDERAL_GOV`, `LOCAL_GOV`, `NON_PROFIT`, `STATE_GOV`, `TRIBAL` ### Marketplace Values `ALIBABA`, `AMAZON`, `APPLE`, `BEST_BUY`, `COSTCO`, `EBAY`, `ETSY`, `EVENTBRITE`, `FLIP`, `GOOGLE`, `GUNBROKER`, `LOWES`, `MACYS`, `META`, `MIRAKL`, `NEWEGG`, `NINTENDO`, `OVERSTOCK`, `POSHMARK`, `REVERB`, `SHOP`, `SONY`, `TARGET_PLUS`, `TIKTOK`, `WALMART`, `WAYFAIR` ### Example The transaction object is the standard request shape across both the `/transactions` and `/calculations` endpoints. ```json theme={null} { "id": "123", "name": "INV-123", "parentId": null, "transactedAt": "2023-07-01T00:00:00.000Z", "marketplace": "AMAZON", "entity": null, "purpose": null, "currency": "USD", "discount": 2, "shipping": 3, "handling": 2, "taxCollected": 2.25, "total": 27.25, "shipFromAddress": { "line1": "2000 W WASHINGTON ST", "line2": null, "city": "PHOENIX", "state": "AZ", "zip": "85009-5207" }, "shipToAddress": { "line1": "120 SW 10TH AVE", "line2": null, "state": "KS", "city": "TOPEKA", "zip": "66612" }, "lineItems": [ { "id": "LI-123", "amount": 10, "quantity": 2, "discount": 0, "shipping": 1.5, "handling": 0.5, "productName": "The Ultimate Sampler", "productSku": "SAMPLER-100", "productTaxCode": "R_TPP_FOOD-BEVERAGE_HOME-CONSUMPTION" } ], "metadata": { "version": "1.0.0" } } ``` *** ## List All Transactions Number of items to return (1-100) Pagination cursor from a previous `nextCursor` Exclude transactions before this timestamp Exclude transactions after this timestamp ### Request ```markdown theme={null} GET /transactions ``` Keep in mind that this endpoint will only return transactions associated with that API key, not all transactions for a company. ```bash GET /transactions theme={null} curl -G https://api.zamp.com/transactions \ -H "Authorization: Bearer {token}" \ -d limit=10 ``` ### Response ```json 200 theme={null} { "nextCursor": "x4WycXedwhQrEFuM", "data": [ { "id": "xgQQXg3hrtjh7AvZ", "taxDue": 2.18, "taxes": [] } ] } ``` *** ## Create a Transaction Creates a new transaction. Uses the same request/response format as the [Calculations](/api-reference/calculations) endpoint. ### Request ```markdown theme={null} POST /transactions ``` ```bash POST /transactions theme={null} curl -X POST https://api.zamp.com/transactions \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ "id": "123", "name": "INV-123", "transactedAt": "2023-07-01T00:00:00.000Z", "isResale": false, "currency": "USD", "discount": 2, "subtotal": 18, "shippingHandling": 5, "taxCollected": 2.25, "total": 25.25, "shipToAddress": { "line1": "120 SW 10TH AVE", "state": "KS", "city": "TOPEKA", "zip": "66612" }, "lineItems": [ { "id": "LI-123", "amount": 10, "quantity": 2, "productName": "The Ultimate Sampler", "productSku": "SAMPLER-100", "productTaxCode": "R_TPP_FOOD-BEVERAGE_HOME-CONSUMPTION" } ], "metadata": { "version": "1.0.0" } }' ``` ### Response Returns the transaction plus `taxDue` and the itemized `taxes` breakdown. When `taxCollected` is provided, it is allocated across each jurisdiction entry. ```json 200 theme={null} { "id": "123", "name": "INV-123", "taxDue": 1.58, "taxes": [ { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.S.20", "jurisdictionName": "KANSAS", "jurisdictionDivision": "STATE", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": null, "taxableAmount": 18, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.04, "taxDue": 0.72, "taxCollected": 1.01 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.S.20", "jurisdictionName": "KANSAS", "jurisdictionDivision": "STATE", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": "SHIPPING_HANDLING", "taxableAmount": 5, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.04, "taxDue": 0.2, "taxCollected": 0.29 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.C.177", "jurisdictionName": "SHAWNEE COUNTY", "jurisdictionDivision": "COUNTY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": null, "taxableAmount": 18, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.0135, "taxDue": 0.243, "taxCollected": 0.35 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.C.177", "jurisdictionName": "SHAWNEE COUNTY", "jurisdictionDivision": "COUNTY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": "SHIPPING_HANDLING", "taxableAmount": 5, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.0135, "taxDue": 0.0675, "taxCollected": 0.1 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.I.71000", "jurisdictionName": "TOPEKA CITY", "jurisdictionDivision": "CITY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": null, "taxableAmount": 18, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.015, "taxDue": 0.27, "taxCollected": 0.39 }, { "lineItemId": "LI-123", "state": "KS", "sourcing": "INTER_DESTINATION", "jurisdictionCode": "KS.I.71000", "jurisdictionName": "TOPEKA CITY", "jurisdictionDivision": "CITY", "compositeCode": "SNTOP", "compositeName": "TOPEKA", "exceptionCode": "FOOD_SUPPLEMENTS", "ancillaryType": "SHIPPING_HANDLING", "taxableAmount": 5, "nontaxableAmount": 0, "excludedAmount": 0, "taxRate": 0.015, "taxDue": 0.075, "taxCollected": 0.11 } ] } ``` *** ## Create a Refund Transaction Creates a refund transaction linked to the original via `parentId`. See the [Handling Refunds](/guides/handling-refunds) guide for details. ### Request ```text theme={null} POST /transactions ``` ```bash POST /transactions theme={null} curl -X POST https://api.zamp.com/transactions \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ "id": "REF-123-01", "name": "REF-INV-123-01", "parentId": "123", "transactedAt": "2024-01-01T00:00:00.000Z", "isResale": false, "currency": "USD", "discount": -2, "subtotal": -18, "shippingHandling": -5, "taxCollected": -2.25, "total": -25.25, "shipToAddress": { "line1": "120 SW 10TH AVE", "state": "KS", "city": "TOPEKA", "zip": "66612" }, "lineItems": [ { "id": "LI-123", "amount": 10, "quantity": -2, "productName": "The Ultimate Sampler", "productSku": "SAMPLER-100", "productTaxCode": "R_TPP_FOOD-BEVERAGE_HOME-CONSUMPTION" } ] }' ``` ### Response A refund reduces previously reported liability, so the negative amounts net against the original transaction. `taxDue` is `0` and `taxes` is empty when the refund fully offsets the original. ```json 200 theme={null} { "id": "REF-123-01", "parentId": "123", "name": "REF-INV-123-01", "transactedAt": "2024-01-01T00:00:00.000Z", "purpose": null, "entity": null, "currency": "USD", "discount": -2, "subtotal": -18, "shippingHandling": -5, "taxCollected": -2.25, "total": -25.25, "shipFromAddress": null, "shipToAddress": { "line1": "120 SW 10TH AVE", "line2": null, "city": "TOPEKA", "state": "KS", "zip": "66612", "country": "US" }, "lineItems": [ { "id": "LI-123", "amount": 10, "quantity": -2, "discount": 0, "shippingHandling": 0, "productName": "The Ultimate Sampler", "productSku": "SAMPLER-100", "productTaxCode": "R_TPP_FOOD-BEVERAGE_HOME-CONSUMPTION" } ], "taxDue": 0, "taxes": [] } ``` *** ## Retrieve a Transaction ```text theme={null} GET /transactions/:id ``` ```bash GET /transactions/:id theme={null} curl https://api.zamp.com/transactions/123 \ -H "Authorization: Bearer {token}" ``` ### Response Returns the transaction object plus `taxDue` and the full itemized `taxes` breakdown (same shape as the [Create a Transaction](#create-a-transaction) response). ```json 200 theme={null} { "id": "123", "name": "INV-123", "taxDue": 1.58, "taxes": [ // itemized per-jurisdiction breakdown — see "Create a Transaction" ] } ``` *** ## Update a Transaction Updates a transaction by replacing the prior version with the same ID. Requires all transaction properties. ```text theme={null} PUT /transactions ``` ```bash PUT /transactions/:id theme={null} curl -X PUT https://api.zamp.com/transactions/123 \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ ... }' ``` *** ## Delete a Transaction Permanently deletes a transaction and all related tax information. ```text theme={null} DELETE /transactions ``` ```bash DELETE /transactions/:id theme={null} curl -X DELETE https://api.zamp.com/transactions/123 \ -H "Authorization: Bearer {token}" ``` # BigCommerce: Getting Started Source: https://developer.zamp.com/big-commerce-getting-started Power your BigCommerce store's tax calculations with Zamp. Zamp has built a fully certified application available for download from the BigCommerce store. Enable the Zamp Tax Engine to calculate taxes for your customers, and post completed orders directly to Zamp. ## Feature Suite | Feature | Supported? | | ------------------------------------- | --------------------- | | Easy Installation Process | | | Canada Support | | | Zamp Tax Calculations During Checkout | | | Transaction Posting | | | Address Validation | | | Zamp Product Tax Codes | | | Refunds Posting | | | Historical Sync | | | Live Installation Support | | | Automatic Updates | |

Get started

Talk to our team

See how Zamp works with BigCommerce and get your account set up.

Book a demo →
# Installation Guide Source: https://developer.zamp.com/bigcommerce-installation-guide Installing Zamp's BigCommerce application is easy. ## Overview A Zamp Onboarding Manager will work with you on getting your BigCommerce storefront configured with the Zamp Tax app, but you're also welcome to walk through these steps yourself, if you'd like. ## Prerequisites | **Item** | **Where to Obtain** | | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **A Zamp Sandbox or Production API Key** | Either the **Integrations** page on [app.zamp.com](http://app.zamp.com), or directly from your Zamp Representative | | **Permissions to Install and Open BigCommerce Applications** | A role with **Launch Applications** and **Install Applications** (These are "high-risk" permissions). See more, [here](https://support.bigcommerce.com/s/article/User-Permissions?language=en_US) | ## Process The Zamp Tax app is in BigCommerce's official Apps & Integrations exchange. You can get it for your BigCommerce store [here](https://www.bigcommerce.com/apps/zamp-tax/). Image 1. Once the app has been set as the Tax Provider, navigate to **Apps -> Zamp Tax**. 2. Upon a fresh install of the app, you will be required to provide your Zamp API token. Without the API token, the Zamp Tax app will not work with BigCommerce. 3. Copy the value and enter it in the provided field. The token will be validated upon save to ensure it is the correct value. 1. First select **Home** from the left navigation panel. 2. Select Settings. 3. Under **Setup**, select **Tax**. 4. **If you already see Zamp Tax under "Configured tax services", proceed to step 6. Otherwise, proceed to step 4.** 5. In the top right, select **Add tax service**. 6. Under **All Tax Services**, locate **Zamp Tax** and select **Install,** then navigate back to **Settings -> Setup -> Tax**. 7. Under **Configured tax services**, select **Enable** for Zamp Tax. 8. Under **Provider targeting**, select **One or more countries** and click **United States**. 9. Further down under **Provider options**, ensure the **Please submit my order data** option is selected, or transactions will not be sent to Zamp. 10. Once saved, Zamp is now your default tax provider. It is worth noting that BigCommerce has safety net options available in cases where it can't communicate with the default tax provider. For example, if your Tax Provider's services were unreachable for sales tax calculations. Chat with your Zamp Onboarding Manager regarding setting general fallback rates for the states where you have Nexus. 1. \*\*Taxable states - \*\*Taxable states should coincide with states configured in your Zamp account. Your Onboarding Manager will be available to help determine which states should be added to this multi-select list. 1. Having a state listed as a **Taxable state** in your configurations means it is one Zamp will produce sales tax calculations for, so long as the customer's shipping address state matches. 2. Any state not listed as a **Taxable state** will not have sales tax calculations occur. These would be states that you aren't required to remit sales tax in. For example, not having a physical presence (nexus) in the state and not having met the economic nexus thresholds. 2. \*\*Enable Zamp calculations - \*\*Setting "Allow Zamp to handle your Tax Calculations?" will have your checkout experience utilize Zamp for sales tax calculations. 1. This toggle gives you the opportunity to decide if you'd like to use Zamp to calculate sales tax for you. 3. \*\*Enable Zamp transaction reporting - \*\*Setting "Send your transaction reports to Zamp?" will have your transactions report to Zamp when a transaction has been paid for or has been marked as "Completed". 1. This toggle gives you the opportunity to decide if you'd like to use Zamp for transaction reporting, which will allow us to file sales tax returns for you. # Business Central: Getting Started Source: https://developer.zamp.com/business-central-getting-started Integrate Zamp into your Business Central, seamlessly. Zamp offers a fully certified Microsoft Marketplace Application to power all of your Sales Tax Calculations within Business Central. Post transactions directly to Zamp, and allow Zamp to take full control over filing responsibilities. ## Feature Suite | Feature | Supported? | | ---------------------------------- | --------------------- | | Easy Installation Process | | | Zamp Tax Calculations | | | Address Validation | | | Transactions Posting to Zamp | | | Native Microsoft Tax Group Support | | | Zamp Product Tax Codes | | | Customer Exemptions | | | Live Installation Support | | | Sandbox Testing | | | Canada Support | |

Get started

Talk to our team

See how Zamp works with Business Central and get your account set up.

Book a demo →
# Installation Guide Source: https://developer.zamp.com/business-central-installation-guide Follow along with your hands-on installation of the Zamp integration in your Business Central account with this guide. # Overview Zamp will assist with every part of the installation on your Business Central account. You can follow along with the steps here, but you will always have a Zamp Integrations Implementation expert on a live call handling the installation. # Prerequisites | Item | Where to Obtain | | --------------------------------------------------------------------- | ------------------------------------------------------------------------------- | | A Microsoft Business Central Account with Extension Management Access | Check with your company's admin | | An extra Business Central Access Seat | Not required, but check with your company's admin | | Your Zamp API Key for Sandbox or Production | The **Integrations** page within your Zamp account, or your Zamp representative | # Installation Process 1. In the Business Central search bar, look for\*\* Microsoft AppSource Apps.\*\* 2. Search for **Zamp**, and click **Acumens Zamp API for D365 BC.** 3. Click **Install** and accept the permissions access request. The installation may take about 5-minutes.  1. Click the  icon at the top-right of Business Central. 2. Under **Role**, update the role to **Acumens e-Tax**.  1. Search for **Zamp APIs** and allow the configuration to load (\~15-seconds). 2. Click **ZAMP01**. 3. Under **API TOKEN**, enter your Sandbox or Production API Key. 1. Search for **Nexus States**. 2. Click **Home**. 3. Click **Sync Zamp Registrations.** 4. Once the sync is complete, you will see the following. I Synch Is Complete 1 The integration allows for the flexibility to post transactions in real-time, or on a cadence. It also allows for every invoice to be uploaded as an individual transaction, or invoices for the same customer to be batched together. 1. Search for **Acumens e-Tax Enterprise Setup**. 2. Scroll down to **Uploads (Auto-File)**. 3. Toggle between **Upload Individual Documents** or **Upload Summarized Documents**. 1. **Upload Individual Documents**: Every invoice is a transaction in Zamp. Not batched. 2. **Upload Summarized Documents:** Invoices for the same customer will be aggregated to be a single transaction in Zamp each time an upload is attempted. 4. Under **Background Uploads**, enable **Upload on Post** to post transactions when invoices are posted (i.e. Real-time). Once the above steps are completed, Zamp is enabled to calculate and post transactions! To ensure all taxability scenarios are handled, see the\*\* **[Microsoft Business Central](https://support.zamp.com/en/collections/19724189-microsoft-business-central) support** \*\*guides to review mapping product tax codes, customer exemptions, and managing multi-channel sales. # Chargebee: Getting Started Source: https://developer.zamp.com/chargebee-getting-started Calculate accurate sales tax on every Chargebee subscription, plan, add-on, and charge with Zamp's Chargebee integration. Quickly and reliably calculate taxes on all of your subscriptions. Including all plans, addons, and charges! ## Feature Suite **Zamp's Chargebee integration offers a robust feature set, with major components such as:** | Feature | Supported? | | :------------------------------------ | :------------------------------ | | Easy Installation Process | | | Canada Support | (Coming Soon) | | New and Existing Subscription Support | | | Tax Calculations on Plans | | | Tax Calculations on Addons | | | Tax Calculations on Charges | | | Itemized Tax Breakdown | | | Customer Exemptions | | | Credit Memo Support | | | Zamp Product Tax Codes | | | Historical Sync | | | Customer Address Validation | | | Sandbox Testing | | | Live Installation Support | |

Get started

Talk to our team

See how Zamp works with Chargebee and get your account set up.

Book a demo →
# Chargebee: Installation Guide Source: https://developer.zamp.com/chargebee-installation-guide Step-by-step guide to installing and configuring the Zamp sales tax integration in your Chargebee account. ## Overview Installing Zamp on your Chargebee account is easy, with a few settings to configure to enable all Zamp tax functionality. ## Prerequisites To install the Zamp integration, you will need access to: | **Item** | **Where to Obtain** | | :--------------------------------------- | :------------------------------------------------------------------------------------------ | | Access to Install Chargebee Applications | Your company's administrator | | A Zamp Sandbox or Production API Key | Either the **Integrations** page on app.zamp.com, or directly from your Zamp Representative | Apps Page # Checkout Champ: Getting Started Source: https://developer.zamp.com/checkout-champ-getting-started Power your Checkout Champ Campaigns with Zamp Tax Calculations. Zamp offers a full Tax integration solution to your customers checking out with Checkout Champ. Install the Zamp plugin in your Checkout Champ instance, and start calculating tax for your campaigns right away. ## Feature Suite | Feature | Supported? | | ------------------------------------------------- | --------------------- | | Easy Installation Process | | | Zamp tax Calculations During Checkout | | | Zamp Tax Calculations for Manual Order Entry | | | Zamp Tax Calculations on Full and Partial Refunds | | | Zamp Product Tax Codes | | | Historical Sync | | | Address Validation | | | Live Installation Support | | | Canada Support | | | Automatic Updates | |

Get started

Talk to our team

See how Zamp works with Checkout Champ and get your account set up.

Book a demo →
# Checkout Champ: Installation Guide Source: https://developer.zamp.com/checkout-champ-installation-guide Follow this guide to install and configure Zamp in your Checkout Champ account. ## Overview To accurately calculate sales tax for all of your Checkout Champ transactions, follow this guide to install and configure the Zamp integration. ## Prerequisites To install the Zamp Plugin, you will need access to: | **Item** | **Where to Obtain** | | ------------------------------------------- | ------------------------------------------------------------------------------- | | Access to the Checkout Champ Admin Tool | Your company's admin | | Your Zamp API Key for Sandbox or Production | The **Integrations** page within your Zamp account, or your Zamp representative | ## Installation Process ### Installing the Zamp Plugin [crm.checkoutchamp.com](http://crm.checkoutchamp.com)  Image Under **Admin**, click **Plugins**, search for **Zamp**, and click **Activate** 1. Under **apiKey**, enter your sandbox key 2. Under **FriendlyName**, enter as **\ - Sandbox** 3. Check **sendTransactions** 4. Check **calculateShippingTax** 5. Hit **Connect** ### Mapping Products To accurately calculate tax for your inventory, it is important to map your items to Zamp’s Product Tax Codes.  Zamp’s tax codes can be found [here](https://developer.zamp.com/api/zamp-tax-codes), but talk to your Zamp Representative if you have any questions. We are here to assist in evaluating the taxability of your inventory.  If you are migrating from another tax service that uses the **Tax Code** input on a product record, complete either option **BEFORE** enabling Zamp for your campaigns: 1. Delete the existing codes from all items (Either individually or in-bulk). 2. Update the mappings to a Zamp Tax Code using the process below. Under **CRM**, click **Products** 1. Within your product, find the **Tax Code** box 2. Enter the applicable Zamp tax code 3. Save with **Update Product** ### Enabling Tax Calculation for Campaigns Zamp will appear under **Tax Service** for any campaigns you create.  * Ensure that you’re selecting **Zamp: \ - Production** for any campaigns Tax Service so Zamp calculates tax and posts transactions on your behalf. * Ensure **Automatic Tax Calculation** is toggled. There is no action required within the **Sales Tax** options within the campaign you are editing. Image # Authentication Source: https://developer.zamp.com/guides/authentication Authenticate Zamp API requests with your API key as a bearer token, and learn where to get trial and production keys. To access Zamp API endpoints, you must authenticate every request with your API key, sent as a bearer token. ## Bearer authentication All API calls require the key in the HTTP `Authorization` header. ```bash theme={null} curl https://api.zamp.com/transactions \ -H "Authorization: Bearer {your-api-key}" ``` Replace `{your-api-key}` with your key. To get one: * Get a [free 30-day trial key](/guides/trial) for testing — no sales call required * Copy your [production key](/guides/production-api-access) from your Zamp account Always keep your API key safe and reset it if you suspect it has been compromised. Once you're authenticated, the [Quickstart](/guides/quickstart) walks through your first calculation. # Canadian Transactions Source: https://developer.zamp.com/guides/canadian-transactions Selling into Canada? Keep in mind the following key distinctions. ## Overview Zamp supports tax calculations and filing for businesses selling into Canada. When utilizing the Zamp Tax Engine for calculations and the the Zamp team for filing, there are a few requirements to ensure transaction data is complete and accurate. ## Endpoints Used ```text theme={null} POST /calculations POST /transactions ``` ## Canadian-Specific Implementation Requirements ### Province Code The `shipToAddress.state` is required for orders shipped to Canada. The supported provinces are below: | Province Name | Province Code | | ------------------------- | ------------- | | Alberta | AB | | British Columbia | BC | | Manitoba | MB | | New Brunswick | NB | | Newfoundland and Labrador | NL | | Northwest Territories | NT | | Nova Scotia | NS | | Nunavut | NU | | Ontario | ON | | Prince Edward Island | PE | | Quebec | QC | | Saskatchewan | SK | | Yukon | YT | This requirement is specific to transactions for Canada. US-based transactions do not require the state. ### Zip Code Canada uses an alpha-numeric format (*A1A 1A1*). A few example postal codes are H3B 2B6 (Montreal), M5V 3A8 (Toronto), V6B 1A1 (Vancouver) ### Country Code All transactions shipped to Canada also require a country code that corresponds to Canada, being *CA.* ### Currency This section is important for return filing. Please reach out to your Zamp representative if there are further questions regarding the currency requirements For transactions shipped to Canada, Zamp expects the currency to be set as `"currency": "CAD"` . Zamp will reject requests for transactions with a mismatched country code and currency type. ```json theme={null} { "code": "BAD_REQUEST", "issues": [ { "code": "custom", "path": [ "currency" ], "message": "Currency should be CAD when shipped to CA", "params": { "reason": "CURRENCY_MISMATCH" } } ], "message": "Input validation failed" } ``` ### Example Requests and Responses ```json Calculation Request theme={null} { "id": "testCanada", "name": "testCanada", "transactedAt": "2026-04-10T00:00:00", "currency": "CAD", // Canadian dollar "total": 100, "entity": null, "purpose": null, "shippingHandling": 0, "taxCollected": 0, "recalculate": true, "discount": 0, "isResale": false, "parentId": null, "subtotal": 100, "shipToAddress": { "line1": "1 Place Ville Marie", "line2": null, "city": "Montreal", "state": "QC", // Province Code "zip": "H3B 2C4", // Canadian Zip Code Structure "country": "CA" // Canadian Country Code }, "lineItems": [ { "id": "1", "amount": 1, "quantity": 100, "productSku": null, "productName": "Test product", "productTaxCode": null } ] } ``` ```json Calculation Response theme={null} { "id": "testCanada", "name": "testCanada", "transactedAt": "2026-04-10T00:00:00", "currency": "CAD", "total": 114.98, "entity": null, "purpose": null, "shippingHandling": 0, "taxCollected": 14.98, //The taxDue from the calculation request "recalculate": true, "discount": 0, "isResale": false, "parentId": null, "subtotal": 100, "shipToAddress": { "line1": "1 Place Ville Marie", "line2": null, "city": "Montreal", "state": "QC", "zip": "H3B 2C4", "country": "CA" }, "lineItems": [ { "id": "1", "amount": 1, "quantity": 100, "productSku": null, "productName": "Test product", "productTaxCode": null } ] } ``` ```json Transaction Request theme={null} { "id": "testCanada", "name": "testCanada", "transactedAt": "2026-04-10T00:00:00", "currency": "CAD", "total": 114.98, "entity": null, "purpose": null, "shippingHandling": 0, "taxCollected": 14.98, //The taxDue from the calculation request "recalculate": true, "discount": 0, "isResale": false, "parentId": null, "subtotal": 100, "shipToAddress": { "line1": "1 Place Ville Marie", "line2": null, "city": "Montreal", "state": "QC", "zip": "H3B 2C4", "country": "CA" }, "lineItems": [ { "id": "1", "amount": 1, "quantity": 100, "productSku": null, "productName": "Test product", "productTaxCode": null } ] } ``` # Certifying Your Integration Source: https://developer.zamp.com/guides/certifying-your-integration Requirements and checklist to certify your Zamp integration so it reliably supports every customer scenario before going live. ## Overview Zamp is a customer-obsessed company. Our integrations are expected to support every customer’s biggest Sales Tax needs. To ensure your integration meets that standard, follow the certification guidelines. ## Case Categories Certification cases are broken up into categories with a variety of cases for each category. Each category will robustly test all potential functionality for that respective workflow or API endpoint. * Do you have the necessary documentation for customers to install and use? * Can users assign Product Tax Codes and Exemptions? * Do customers have all of the testing materials necessary? * Is the integration able to connect to Zamp? * Can you customers access Zamp endpoints? * Are keys and credentials securely stored? * Can a key be rotated as necessary? * Can your integration calculate taxes accurately based on the information within a customer’s transaction? * Can customers see estimated taxes when building an order if they have a storefront? * Will all transactions be posted to Zamp? * Do you use Zamp’s calculations to push accurate taxes for filing? * Can customers initiate refunds and have them reflect accurately in Zamp? * Are you linking transactions accurately?  * Does your integration support address validation? * Can you normalize corrected addresses sent back from Zamp? ## Required Functionality Certain workflows are optional when building an integration to Zamp depending on the type of platform, but there are non-negotiable requirements which are to the benefit of our customers. **Required Workflows** Bearer Token Authentication to Zamp’s APIs Within Your Platform All Transactions Are Posted to Zamp Regardless of Nexus Status if Filing with Zamp Historical Sync or Transaction Backfill Functionality Functionality to Map Zamp Product Tax Codes to Products Functionality to Map Exempt Customers AND Products Decoupled Calculation and Transaction Posting Process Either Cash-based or Accrual-based Account Transaction Posting Passing of the Destination Address on All Transactions for BOTH Calculations and Transactions ## Certification Guide Review the Certification Spreadsheet attached here for the required integration cases, and to establish a framework for your development plan. Depending on the level of service you are leveraging, certain cases can be removed or altered. [Certification Cases](https://docs.google.com/spreadsheets/d/1JvkUwXPADRN1dxywssfzDjAlDzM86W43NN5l8ZCzuEI/edit?usp=sharing) # Common FAQs Source: https://developer.zamp.com/guides/common-faqs Answers to common questions about the Zamp API — historical tax rates, calculations, transactions, filing, and integration support. We support historical tax rates starting from 2023. 1,000 requests per minute. If you have a potential use case for over 1,000, let us know. About 400 milliseconds Yes. There are no restrictions to using an AI application or agent to build your integration, as long as it can be certified with a Zamp representative. Yes, calculations can be handled through a different source if you choose. No, not at this time. No, not at this time.  Not on a single transaction in Zamp. If there are multiple shipping addresses on a single transaction, pass each shipping address as an individual transaction call. Zamp manages sandbox and production accounts within the same environment using the same base URL, but customers will have individual test and live accounts. You can send transactions for any date in the future. However, keep in mind that it will use tax rules for the **current date**. We do not recommend relying on posting future dated transactions often, as tax rules and rates can change. This can result in potential discrepancies during filing.  # Calculations and Transactions Source: https://developer.zamp.com/guides/core-workflows The bread-and-butter of Zamp's APIs. Making calculations and posting to Zamp. ## Overview When building an integration to Zamp, this is the core workflow a business using your platform needs to be able to accomplish. ## Endpoints Used ```text theme={null} POST /calculations POST /transactions ``` ## Recommended Workflow When a customer generates a Sales Order, populate the **Transaction Object** with transaction information. When the Sales Order is saved, make a `POST` request to the `/calculations` endpoint. The calculations endpoint will return a detailed breakdown of the taxes due (`taxDue`) for the transaction you have provided. Your system should retain the taxes due as this will be the liability owed for the transaction. Provided that the transaction is finalized and the invoice is ready to be saved, make a `POST` request to the `/transactions` endpoint with the Zamp returned tax due (from step 3) in the `taxCollected` field. #### Live Example See the below example of an ERP platform making a tax calculation, and posting it to Zamp with the calculated tax amount.