> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.zip.tax/v-6-0/guides/merchant-compliance-solutions/exemption-certificates/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.zip.tax/_mcp/server. # Exemption Certificates Exemption certificates record that a merchant's customer is exempt from sales tax in one or more states. Store a certificate so future orders for that customer are treated correctly, then retrieve, list, or delete certificates as needed. All operations act on a single [TaxCloud-connected merchant](taxcloud-connected-merchants) identified by `merchantId`. All endpoints use `POST` and the `X-API-KEY` header. See [Merchant Transactions](transactions) for the shared conventions, error shapes, and usage rules. > **Info** > > Exemption certificates are not available for > [self-managed merchants](self-managed-merchants) — all four operations return > `403`, and their [cart calculations](self-managed-cart-calculation) do not apply > exemptions. Handle exempt customers outside Ziptax for those merchants. ## Create a certificate ```http POST https://api.zip-tax.com/merchant/cert/create ``` | Field | Type | Required | Description | | ----------------------------- | ------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------- | | `merchantId` | string (UUID) | Yes | The connected merchant. Must be owned by the calling account. Consumed for routing and not forwarded. | | `customerId` | string | Yes | Your identifier for the exempt customer. Carts and orders submitted with this `customerId` can use the certificate. | | `customerName` | string | Yes | The customer or organization name as it appears on the certificate. | | `customerBusinessType` | string | Yes | The type of business the customer is. One of the [business type values](#business-types) below. | | `customerBusinessDescription` | string | No | Free-text description of the business. Provide when `customerBusinessType` is `Other`. | | `reason` | string | Yes | The reason for the exemption. One of the [reason values](#exemption-reasons) below. | | `reasonDescription` | string (max 20 chars) | Yes | Short free-text elaboration of the exemption reason. | | `address` | [Address](cart#address-object) | Yes | The customer's address. | | `states` | array of objects | Yes | The states the exemption applies to, each as `{ "abbreviation": "NV" }` with a two-letter state abbreviation. | ### Business types `AccommodationAndFoodServices`, `AgriculturalForestryFishingHunting`, `Construction`, `FinanceAndInsurance`, `InformationPublishingAndCommunications`, `Manufacturing`, `Mining`, `RealEstate`, `RentalAndLeasing`, `RetailTrade`, `TransportationAndWarehousing`, `Utilities`, `WholesaleTrade`, `BusinessServices`, `ProfessionalServices`, `EducationAndHealthCareServices`, `NonprofitOrganization`, `Government`, `NotABusiness`, `Other` ### Exemption reasons `FederalGovernment`, `StateOrLocalGovernment`, `TribalGovernment`, `ForeignDiplomat`, `CharitableOrganization`, `ReligiousOrganization`, `EducationalOrganization`, `Resale`, `AgriculturalProduction`, `IndustrialProductionOrManufacturing`, `DirectPayPermit`, `DirectMail`, `Other` #### cURL ```bash curl -X POST "https://api.zip-tax.com/merchant/cert/create" \ -H "X-API-KEY: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "merchantId": "6b3c1f5e-2a8d-4c9b-9f2e-1d7a4b6c8e10", "customerId": "cust-5567", "customerName": "Acme Wholesale LLC", "customerBusinessType": "WholesaleTrade", "reason": "Resale", "reasonDescription": "Purchased for resale", "address": { "line1": "500 Industrial Way", "city": "Reno", "state": "NV", "zip": "89502" }, "states": [ { "abbreviation": "NV" }, { "abbreviation": "CA" } ] }' ``` Returns the created [certificate](#certificate-response), including the `certificateId` you use to retrieve or delete it, and which you can reference as `exemptionId` on [carts](cart) and [orders](orders). ## Get a certificate Retrieve a single certificate by its id. ```http POST https://api.zip-tax.com/merchant/cert/get ``` | Field | Type | Required | Description | | --------------- | ------------- | -------- | -------------------------------------------------------------- | | `merchantId` | string (UUID) | Yes | The connected merchant. | | `certificateId` | string | Yes | The `certificateId` returned when the certificate was created. | #### cURL ```bash curl -X POST "https://api.zip-tax.com/merchant/cert/get" \ -H "X-API-KEY: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "merchantId": "6b3c1f5e-2a8d-4c9b-9f2e-1d7a4b6c8e10", "certificateId": "cert_7a4b6c8e" }' ``` Returns the [certificate](#certificate-response). ## List certificates List the certificates stored for a merchant, with cursor-based pagination. ```http POST https://api.zip-tax.com/merchant/cert/list ``` | Field | Type | Required | Description | | ------------ | --------------- | -------- | ------------------------------------------------------------------------------------------------------------- | | `merchantId` | string (UUID) | Yes | The connected merchant. | | `limit` | integer (0–100) | No | Maximum number of certificates per page. Defaults to `20`. | | `cursor` | string | No | Opaque pagination cursor from the `nextCursor` field of a previous response. Omit to start at the first page. | | `ascending` | boolean | No | Whether to sort results in ascending order. Defaults to `false`. | | `sortBy` | string | No | Field to sort by: `createdDate` or `id`. Defaults to `id`. | | `customerId` | string | No | Filter to certificates belonging to this customer. | | `disabled` | boolean | No | Set `true` to list disabled (deleted) certificates instead of active ones. Defaults to `false`. | Returns `{ "items": [...], "limit": 20, "nextCursor": "..." }` where each item is a [certificate](#certificate-response) and `nextCursor` is `null` on the last page. > **Info** > > `cert/get` and `cert/list` are separate endpoints: use `cert/get` to fetch one > certificate by id, and `cert/list` to enumerate a merchant's certificates. ## Delete a certificate Deletes (disables) a certificate so it can no longer be applied to new transactions. Returns `204 No Content` on success. ```http POST https://api.zip-tax.com/merchant/cert/delete ``` | Field | Type | Required | Description | | --------------- | ------------- | -------- | -------------------------------------------------------------- | | `merchantId` | string (UUID) | Yes | The connected merchant. | | `certificateId` | string | Yes | The `certificateId` returned when the certificate was created. | #### cURL ```bash curl -X POST "https://api.zip-tax.com/merchant/cert/delete" \ -H "X-API-KEY: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "merchantId": "6b3c1f5e-2a8d-4c9b-9f2e-1d7a4b6c8e10", "certificateId": "cert_7a4b6c8e" }' ``` ## Certificate response `cert/create`, `cert/get`, and each `cert/list` item return the certificate record: | Field | Type | Description | | ----------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------- | | `certificateId` | string | Identifier for the certificate. Use with `cert/get`, `cert/delete`, and as `exemptionId` on carts and orders. | | `connectionId` | string | The TaxCloud connection the certificate belongs to. | | `accountId` | integer | The TaxCloud account the certificate belongs to. | | `customerId` | string | Your identifier for the exempt customer. | | `customerName` | string | Name of the customer the certificate was issued to. | | `customerBusinessType` | string | The type of business the customer is. | | `customerBusinessDescription` | string | Free-text description, present when the business type is `Other`. | | `reason` | string | The reason the customer is exempt. | | `reasonDescription` | string | Free-text elaboration of the exemption reason. | | `address` | [Address](cart#address-object) | Address of the exempt customer. | | `states[]` | array | The states the certificate is valid in, each as `{ "abbreviation": "NV" }`. | | `singlePurchase` | boolean | Whether the certificate covers a single purchase only, rather than being a blanket certificate. | | `createdDate` | string (RFC3339 date-time) | When the certificate was created. | | `disabledAt` | string (RFC3339 date-time) or null | When the certificate was disabled, or `null` while it is active. | ## Related #### [Orders](orders) Record orders that honor a customer's exemptions. #### [Merchant Transactions](transactions) Shared conventions, errors, and usage. > Store, retrieve, list, and delete customer exemption certificates for a TaxCloud-connected merchant.