New France e-invoicing mandate goes live September 2026 — our implementation is ready. See all mandates →
Exemption Certificate Management

Exemption Certificate Management

Exemption Certificate Management (ECM) gives sellers a structured way to collect, store, and apply US sales tax exemption certificates — and to demonstrate compliance when audited. Under US sales tax law, a seller who fails to collect tax must prove it holds a valid, unexpired exemption certificate for that buyer and jurisdiction. Without documented certificates, the seller bears the tax liability.

Key capabilities

  • Structured certificate storage — capture certificate number, jurisdiction, form type, buyer details, and validity dates in a single record per certificate
  • Calculation integration — reference a stored certificate at calculation time using customer.exemptionRef to zero-rate the transaction automatically
  • Buyer collection wizard — generate a hosted link that guides a buyer through completing and submitting their exemption form; no custom UI required
  • Automated expiry alerts — renewal reminders sent at 60, 30, 14, and 7 days before a certificate expires
  • Audit readiness score — a 0–100 score across your certificate portfolio, updated in real time as certificates are added, expire, or are renewed
  • Gap analysis — identifies buyers with taxable purchases in a jurisdiction where no valid certificate is on file
  • SST multi-state certificates — a single Streamlined Sales Tax certificate can cover all 24 SST member states
ECM uses the same base URL as the core API (https://api.clearvo.io) and the same csk_live_* / csk_test_* key system. The certificate endpoints live under /v1/tax/exemptions; the audit score and gap analysis endpoints are under /api/tenant/exemptions.
Exemption Certificate Management

Create a Certificate

Creates a new exemption certificate record. The record stores the certificate metadata — jurisdiction, form type, validity dates, and your own reference — alongside the buyer's details. It does not store the underlying document file; attach the scanned certificate to your document management system and reference it via certificateRef.

certificateRef is your own identifier for the certificate document — for example, a file name, DMS document ID, or internal reference number. It is not the buyer's sales tax permit number or tax ID. Use buyerTaxId for the buyer's tax registration number.

Endpoint

POST https://api.clearvo.io/v1/tax/exemptions

curl
curl https://api.clearvo.io/v1/tax/exemptions \
  -X POST \
  -H "x-api-key: csk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "certificateRef": "CERT-TX-ACME-2026-001",
    "customerRef": "cus_abc123",
    "customerName": "Acme Manufacturing LLC",
    "buyerTaxId": "12-3456789",
    "certificateType": "MANUFACTURING",
    "country": "US",
    "region": "TX",
    "effectiveFrom": "2026-01-01",
    "effectiveTo": "2026-12-31"
  }'
JSON Response
{
  "id": "cl_cert_01j9...",
  "ids": ["cl_cert_01j9..."],
  "certificateRef": "CERT-TX-ACME-2026-001",
  "customerRef": "cus_abc123",
  "customerName": "Acme Manufacturing LLC",
  "buyerTaxId": "12-3456789",
  "certificateType": "MANUFACTURING",
  "country": "US",
  "regions": ["TX"],
  "regionNames": ["Texas"],
  "effectiveFrom": "2026-01-01",
  "effectiveTo": "2026-12-31",
  "status": "ACTIVE",
  "createdAt": "2026-06-26T10:00:00.000Z"
}

Request fields

FieldTypeRequiredDescription
certificateRefstringYesYour identifier for the certificate document — a DMS reference, file name, or internal tracking number. This groups multi-state rows into a single certificate record. It is not the buyer's tax ID.
customerRefstringYesYour ERP or billing system reference for the buyer (e.g. Stripe customer ID, SAP customer number). Passed by your system when generating a collection request so the submitted certificate is linked back to your customer record.
customerNamestringNoLegal name of the buyer holding the exemption.
buyerTaxIdstringNoThe buyer's EIN or tax registration number. Stored for audit identification only.
certificateTypestringYesThe exemption basis. One of: RESALE, MANUFACTURING, AGRICULTURAL, ENERGY, EXEMPT_ORG, GOVERNMENT, DIRECT_PAY, BLANKET_OTHER.
formTypestringNoCertificate form type: SST (Streamlined Sales Tax — covers all 24 member states, omit region), MTC (Multistate Tax Commission), or CUSTOM for a state-specific form. See SST Multi-State Certificates.
countrystringNoISO 3166-1 alpha-2 country code. Defaults to "US".
regionstringNoTwo-letter US state code (e.g. "TX", "CA"). Omit for SST multi-state certificates.
effectiveFromstringYesISO 8601 date (YYYY-MM-DD) from which the certificate is valid.
effectiveTostringNoISO 8601 date (YYYY-MM-DD) on which the certificate expires. Omit for open-ended certificates. When set, Clearvo sends renewal alerts and transitions status to EXPIRED on the expiry date.

Certificate status values

StatusMeaning
ACTIVEThe certificate is within its validity period and can be applied to calculations.
EXPIREDThe certificate's validTo date has passed. Transactions against this certificate will not be zero-rated. Renew by creating a new certificate record and updating customer.exemptionRef on future calculations.
PENDINGThe certificate's validFrom date is in the future. It will become ACTIVE automatically on that date.
REVOKEDThe certificate has been manually revoked via DELETE /v1/tax/exemptions/{id}. Revoked records are retained for audit purposes.

Other certificate endpoints

MethodPathDescription
GET/v1/tax/exemptionsList certificates grouped by certificateRef — a multi-state certificate appears as one entry with regions[] and regionNames[]. Filter by status, country, or region. Supports page and limit (default 25, max 100).
GET/v1/tax/exemptions/{id}Retrieve a single certificate by its Clearvo ID.
PATCH/v1/tax/exemptions/{id}Update validTo, certificateRef, or reason on an existing certificate. Cannot change buyerTaxId, region, or formType — create a new record instead.
DELETE/v1/tax/exemptions/{id}Revoke a certificate. Sets status to REVOKED and stops it from being applied to new calculations. The record is retained.
Exemption Certificate Management

Apply a Certificate at Calculation

To apply a stored exemption certificate to a transaction, pass customer.exemptionRef in the POST /v1/tax/calculate request body. Clearvo looks up the certificate, verifies it is ACTIVE and covers the transaction's jurisdiction, and applies a zero rate with tax code E (exempt) to qualifying line items.

This approach keeps the exemption decision in the API layer — your billing or ERP system passes the certificate ID it already holds for the buyer, and Clearvo resolves whether the exemption is valid for the current transaction.

curl
curl https://api.clearvo.io/v1/tax/calculate \
  -X POST \
  -H "x-api-key: csk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "currency": "USD",
    "commit": true,
    "seller": {
      "country": "US",
      "address": { "country": "US", "region": "TX" }
    },
    "customer": {
      "exemptionRef": "ecm_01j9...",
      "address": { "country": "US", "region": "TX" }
    },
    "lineItems": [
      {
        "id": "line-1",
        "amount": 4500.00,
        "productName": "Industrial conveyor components"
      }
    ]
  }'
JSON Response
{
  "calculationId": "cl_calc_02k7...",
  "committed": true,
  "currency": "USD",
  "exemption": {
    "id": "ecm_01j9...",
    "applied": true,
    "status": "ACTIVE",
    "certificateRef": "CERT-TX-ACME-2026-001"
  },
  "lineItems": [
    {
      "id": "line-1",
      "taxCode": "E",
      "rate": 0,
      "taxableAmount": 4500.00,
      "taxAmount": 0,
      "totalAmount": 4500.00
    }
  ],
  "totals": {
    "subtotal": 4500.00,
    "totalTax": 0,
    "total": 4500.00
  }
}

The response includes an exemption object confirming which certificate was applied and its current status at the time of the calculation. If the certificate is EXPIRED or REVOKED at calculation time, the field exemption.applied is false, the standard tax rate is applied, and the response includes an exemption.reason string explaining why the certificate was not used.

Committed calculations that used a certificate reference the exemption.certificateRef in the audit trail. This is the link your tax advisor needs to match an exempt sale on a return to the physical certificate on file — store the certificateRef alongside your invoice records.
Exemption Certificate Management

Buyer Collection Wizard

The buyer wizard provides a hosted, guided flow where the buyer completes and submits their exemption certificate. You generate a time-limited collection link via the API and send it to the buyer — by email, embedded in your portal, or included on an invoice. When the buyer completes the form, the certificate record is created in your account automatically and a webhook event is fired.

This eliminates the need to build a custom exemption collection UI and reduces certificate rejection rates caused by incorrectly completed forms — the wizard enforces the required fields for the selected form type and jurisdiction.

Generate a collection link

POST https://api.clearvo.io/v1/tax/exemptions/{id}/collection-link

Where {id} is an existing certificate record ID. If you do not yet have a certificate record for the buyer, create a stub record first (with validFrom and jurisdiction populated but no validTo or certificateRef) and then generate the link against that record.

curl
curl https://api.clearvo.io/v1/tax/exemptions/ecm_01j9.../collection-link \
  -X POST \
  -H "x-api-key: csk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "expiresIn": 604800,
    "redirectUrl": "https://yourapp.com/onboarding/complete"
  }'
JSON Response
{
  "url": "https://app.clearvo.io/collect/tok_abc123xyz",
  "token": "tok_abc123xyz",
  "expiresAt": "2026-07-03T10:00:00.000Z"
}

Send the url to the buyer. The wizard at app.clearvo.io/collect/{token} is pre-populated with the jurisdiction, form type, and buyer name from the certificate record. The buyer fills in their details, signs, and submits. On submission:

  • The certificate record is updated with the submitted data and its status changes to ACTIVE
  • A certificate.collected webhook event is sent to your configured endpoint
  • The buyer is redirected to the redirectUrl you specified, if provided

Collection link fields

FieldTypeRequiredDescription
expiresInintegerNoSeconds until the link expires. Default: 604800 (7 days). Maximum: 2592000 (30 days). After expiry, the link returns a 410 Gone page and the buyer must request a new one.
redirectUrlstringNoA fully qualified URL to redirect the buyer to after successful submission. If omitted, the buyer sees a generic confirmation page.
Exemption Certificate Management

Expiry Tracking and Renewal Alerts

For any certificate with a validTo date set, Clearvo sends automated renewal alerts before expiry. Alerts are delivered as webhook events and as email notifications to the account's configured email address.

Alert schedule

Days before expiryWebhook event typeAction recommended
60certificate.expiry_warningContact the buyer to initiate renewal. Send a new collection link if the buyer completes their own form.
30certificate.expiry_warningFollow up if renewal has not been received. Escalate in your accounts receivable workflow.
14certificate.expiry_warningConsider pausing exemption treatment for new orders until renewal is confirmed.
7certificate.expiry_warningFinal alert. If no renewed certificate is received, the calculation engine will apply standard sales tax from the expiry date.
0 (on expiry)certificate.expiredThe certificate status transitions to EXPIRED. New calculations referencing this certificate will not receive the exemption.

Webhook payload

All certificate lifecycle events share the same payload shape:

JSON — certificate.expiry_warning
{
  "event": "certificate.expiry_warning",
  "data": {
    "id": "ecm_01j9...",
    "buyerName": "Acme Manufacturing LLC",
    "buyerTaxId": "12-3456789",
    "region": "TX",
    "certificateRef": "CERT-TX-ACME-2026-001",
    "validTo": "2026-12-31",
    "daysUntilExpiry": 30
  },
  "createdAt": "2026-12-01T00:00:00.000Z"
}

To receive webhook events, configure your endpoint in the Clearvo dashboard under Settings > Webhooks, or via the Webhooks API. Subscribe to the certificate.* event category to receive all certificate lifecycle events.

Exemption Certificate Management

Audit Readiness Score

The audit readiness score is a 0–100 integer that reflects the health of your exemption certificate portfolio at a point in time. It is computed across all exempt transactions for your entity and accounts for missing certificates, expired certificates, and certificates nearing expiry. A score of 100 means every exempt sale can be substantiated with a valid, current certificate. A score below 80 indicates material audit risk.

Endpoint

GET https://api.clearvo.io/api/tenant/exemptions/audit-score

curl
curl https://api.clearvo.io/api/tenant/exemptions/audit-score \
  -H "x-api-key: csk_live_..."
JSON Response
{
  "score": 84,
  "totalExemptTransactions": 312,
  "coveredTransactions": 262,
  "uncoveredTransactions": 50,
  "activeCertificates": 41,
  "expiringWithin30Days": 6,
  "expiredCertificates": 3,
  "gaps": 9,
  "calculatedAt": "2026-06-26T10:00:00.000Z"
}

Response fields

FieldTypeDescription
scoreinteger0–100. The overall audit readiness score for this entity. Scores below 80 represent material risk; below 60 is high risk.
totalExemptTransactionsintegerTotal number of committed calculations with a tax code of E (exempt) in the entity's history.
coveredTransactionsintegerExempt transactions that have a valid, active certificate on file for the buyer and jurisdiction at the time of the transaction.
uncoveredTransactionsintegerExempt transactions with no matching active certificate. Each of these represents a potential liability if audited.
activeCertificatesintegerTotal number of certificates in ACTIVE status.
expiringWithin30DaysintegerNumber of active certificates with a validTo date within the next 30 days. Use this to prioritise renewal outreach.
expiredCertificatesintegerTotal number of certificates that have transitioned to EXPIRED status.
gapsintegerNumber of distinct buyer-jurisdiction pairs where exempt sales have been made but no valid certificate exists. See Gap Analysis for the full list.
calculatedAtstringISO 8601 timestamp of when the score was computed.
Exemption Certificate Management

Gap Analysis

The gap analysis endpoint identifies every buyer-jurisdiction pair where your entity has made exempt sales but does not hold a valid, active certificate. Each gap represents a potential audit finding — the tax authority may assess the uncollected tax plus interest and penalties if you cannot produce a certificate to justify the exemption.

Endpoint

GET https://api.clearvo.io/api/tenant/exemptions/gaps

curl
curl "https://api.clearvo.io/api/tenant/exemptions/gaps?page=1&limit=50" \
  -H "x-api-key: csk_live_..."
JSON Response
{
  "gaps": [
    {
      "buyerName": "Delta Supplies Inc",
      "buyerTaxId": "98-7654321",
      "country": "US",
      "region": "CA",
      "exemptTransactionCount": 14,
      "exemptSalesTotal": 28340.00,
      "currency": "USD",
      "estimatedTaxExposure": 2919.02,
      "oldestExemptSaleDate": "2026-01-08",
      "latestExemptSaleDate": "2026-06-22"
    }
  ],
  "total": 9,
  "page": 1,
  "limit": 50
}

Response fields

FieldTypeDescription
buyerNamestringThe buyer's name as recorded on exempt calculations. Matches the name on the certificate record if one exists but has expired or been revoked.
buyerTaxIdstring | nullThe buyer's tax ID as recorded on the calculations, if available.
countrystringISO country code of the jurisdiction where the gap exists.
regionstringUS state or province code.
exemptTransactionCountintegerNumber of committed calculations marked as exempt for this buyer-jurisdiction pair with no valid certificate.
exemptSalesTotalnumberTotal pre-tax value of the uncertified exempt sales in the transaction currency.
estimatedTaxExposurenumberEstimated tax liability if the exemptions are disallowed on audit — computed using the applicable state rate for the jurisdiction. This is an estimate; the actual assessment may differ based on the audit period and penalties applied.
oldestExemptSaleDatestringISO 8601 date of the earliest uncertified exempt sale for this buyer-jurisdiction pair. Relevant for determining the audit look-back period.
latestExemptSaleDatestringISO 8601 date of the most recent uncertified exempt sale.
Use the gap analysis to prioritise certificate collection outreach. Sort by estimatedTaxExposure descending to address the highest-risk gaps first. For each gap, create a certificate stub record and generate a collection link to send to the buyer — see Buyer Collection Wizard.
Exemption Certificate Management

SST Multi-State Certificates

The Streamlined Sales Tax (SST) programme allows a buyer to submit a single exemption certificate that is valid in all 24 SST member states. Instead of collecting a separate certificate per state, you collect one SST certificate and it covers all member state jurisdictions automatically.

To create an SST certificate, set formType: "SST" and omit the region field. Clearvo stores the certificate as a multi-state record and matches it against transactions in any of the 24 member states when customer.exemptionRef is passed at calculation time.

SST member states

The 24 SST member states as of 2026:

AR, GA, IN, IA, KS, KY, MI, MN, NE, NV, NJ, NC, ND, OH, OK, RI, SD, TN, UT, VT, WA, WV, WI, WY

SST membership can change. Clearvo maintains an up-to-date list of member states internally — a certificate with formType: "SST" is always matched against the current member state list, not against a snapshot taken at the time the certificate was created.
curl — create SST certificate
curl https://api.clearvo.io/v1/tax/exemptions \
  -X POST \
  -H "x-api-key: csk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "buyerName": "Horizon Wholesale Corp",
    "buyerTaxId": "55-1234567",
    "country": "US",
    "formType": "SST",
    "reason": "Resale — SST multi-state certificate",
    "certificateRef": "CERT-SST-HORIZON-2026",
    "validFrom": "2026-01-01",
    "validTo": "2026-12-31"
  }'
JSON Response
{
  "id": "ecm_02k8...",
  "buyerName": "Horizon Wholesale Corp",
  "buyerTaxId": "55-1234567",
  "country": "US",
  "region": null,
  "formType": "SST",
  "sstMemberStates": ["AR","GA","IN","IA","KS","KY","MI","MN","NE","NV","NJ","NC","ND","OH","OK","RI","SD","TN","UT","VT","WA","WV","WI","WY"],
  "reason": "Resale — SST multi-state certificate",
  "certificateRef": "CERT-SST-HORIZON-2026",
  "validFrom": "2026-01-01",
  "validTo": "2026-12-31",
  "status": "ACTIVE",
  "createdAt": "2026-06-26T10:00:00.000Z"
}

The response includes a sstMemberStates array listing the states covered at the time of creation. When a calculation references this certificate via customer.exemptionRef and the transaction's region matches any member state, the exemption is applied. Non-member states are unaffected — a transaction in CA (California, not an SST member) would not receive the exemption.

Non-SST states

For buyers who also need coverage in non-member states (such as California, New York, or Texas), collect a separate state-specific certificate for each and create individual certificate records with the region field set accordingly. Both the SST certificate and the state-specific certificates can be active for the same buyer simultaneously — Clearvo applies whichever certificate covers the transaction's jurisdiction.