Skip to main content

API Changelog

Version 2026-03-01

Release Date: March 1, 2026This version adds IP-based tax resolution to calculations and platform calculations, plus a headless ECM read API for managing exemption certificates and certificate requests.

New: Headless ECM read API (certificate-requests + certificates)

The headless ECM surface lets a client embed exemption-certificate collection in their own product — list, retrieve, and cancel certificate requests, and list / retrieve certificates with per-jurisdiction validity and a short-lived download URL.These endpoints are live-only (sk_test_* keys return TESTMODE_NOT_SUPPORTED) and are scoped by your API key’s account.

New Endpoints

Certificate Requests

Manage outstanding certificate collection requests.
  • GET /tax/certificate-requests — List
  • GET /tax/certificate-requests/{request_id} — Get
  • DELETE /tax/certificate-requests/{request_id} — Cancel (terminal, idempotent)

Certificates

Read submitted certificates and download the original document.
  • GET /tax/certificates — List with filters (customer, jurisdiction, status, type, dates)
  • GET /tax/certificates/{certificate_id} — Get with short-lived download_url

Public status vocabulary

The status field on both objects uses a deliberately narrow public vocabulary — Numeral’s review pipeline runs many internal states that are not surfaced. expiring and expired are kept distinct from invalid so a renewable lapse is distinguishable from a rejected or revoked certificate.

New error types

Error Codes Reference

See the full list of error types and their meanings.

Notes

  • Cancel is terminal and idempotent — calling DELETE on an already-canceled request returns 200 with the same body.
  • download_url on GET /tax/certificates/{id} is a pre-signed URL with roughly a 1-hour TTL. Re-fetch the certificate to mint a new URL. The URL is null (response is still 200) when no document is attached yet.
  • Webhooks for certificate state transitions (e.g. certificate.processing_completed) will ship under the Public Webhooks Platform. Polling these read endpoints is the supported interim pattern.

Additive response fields

Certificates and certificate requests now include two enrichments to the customer/buyer link (backfill-safe, no breaking changes):
  • customer.name — display name for the linked customer. Populated from Customer.name with a fallback to the linked master buyer’s legal_name when the customer record has no name of its own.
  • linked_buyer — the master buyer entity that owns the certificate or request. Distinct from customer (a Customer record) — populated whenever the object has a master-buyer reference. Use this field to render “who owns this certificate” without depending on a specific Customer record having been linked yet.

New Feature: IP-Based Tax Resolution

IP Resolution

Pass a customer IP address instead of a full address for tax calculations.
  • Works with both /tax/calculations and /tax/platform/calculations
  • Supports IPv4 and IPv6 addresses

Resolution Modes

Control how insufficient IP data is handled.
  • strict - Error if insufficient detail
  • zero - Return zero-rate
  • approximate - Use most populous ZIP
  • best_effort - Try approximate, fall back to zero

The customer.ip Object

Instead of providing customer.address, you can now pass customer.ip:
At least one of customer.address or customer.ip must be provided. You can also provide both — the address will be used first, with IP as a fallback.

Resolution Modes

Numeral strongly recommends using strict mode to stay as compliant as possible.

New Response Fields

Calculation responses now include these additional fields:

Example: IP-Based Calculation

Response:

New Error Types

Error Codes Reference

See the complete list of error types and their meanings.

New Field: transacted_at

Calculations and platform calculations now accept an optional top-level transacted_at field — the time the transaction occurred, as a Unix timestamp in seconds. It determines which tax rates and rules apply at that point in time (for example, during a sales tax holiday). If omitted, the calculation uses the current time.

Migration Guide

From 2026-01-01 to 2026-03-01

There are no breaking changes from 2026-01-01. All existing requests continue to work as-is.
  1. Update your X-API-Version header to 2026-03-01
  2. Optionally use customer.ip instead of or in addition to customer.address
  3. Handle new 422 error types if using IP resolution with strict mode
  4. Check location_source in responses to see whether address or IP was used

Version 2026-01-01

Release Date: January 1, 2026This version introduces Merchant Management and Platform Calculations for marketplace and payment processor scenarios.

New Endpoints

Merchant CRUD

Full create, read, update, and delete operations for merchants (sellers) on your platform.
  • POST /tax/merchants - Create merchant
  • GET /tax/merchants - List merchants
  • GET /tax/merchants/:id - Get merchant
  • POST /tax/merchants/:id - Update merchant
  • DELETE /tax/merchants/:id - Delete merchant

Platform Calculations

Tax calculations for marketplace transactions with merchant context.
  • POST /tax/platform/calculations

Platform Transactions

Convert platform calculations into recorded transactions for tax reporting.
  • POST /tax/platform/transactions

Breaking Changes

Amount is Per-Unit in Platform CalculationsThe most significant change in this version is how amount is interpreted in the /platform/calculations endpoint.Example:

New Features

Merchant Management

Create and manage merchants (sellers) on your platform:
Key features:
  • Use your own IDs via reference_merchant_id
  • Store merchant tax IDs for B2B transactions
  • Default addresses used as origin in calculations
  • Testmode isolation (test merchants separate from live)

Platform Calculations

Calculate taxes for marketplace/platform transactions:
Key features:
  • Per-unit pricing - amount × quantity = taxable base
  • Merchant context - Link calculations to specific sellers
  • Platform roles - Specify your role (marketplace, payment processor, merchant of record)
  • Fee calculations - Separate tax calculation for platform fees
  • Enhanced response - Includes tax_authority_name, tax_authority_type, tax_type

Platform Roles

Specify your role in the transaction:

Platform Transactions

Convert platform calculations into recorded transactions for tax reporting and filing:
Key features:
  • Returns a list - May return one or two transactions depending on your platform role
  • Payment processors - Receive separate order and fee transactions
  • Marketplace providers / Merchants of record - Receive a single order transaction
  • Transaction types - type: "order" for sales, type: "fee" for platform fees

Fee Calculations

Calculate taxes on platform fees separately from order items:
The response includes separate totals:

Enhanced Tax Response

Platform calculations include additional jurisdiction details:

New Error Format

Breaking Change: Simplified Error ResponseError responses now use a flattened structure instead of the nested error object from previous versions.
Previous format (2025-05-12 and earlier):
New format (2026-01-01+):
Key changes:
  • Flattened structure - No more nested error object
  • HTTP status in response - code field contains the HTTP status code
  • Uppercase error types - Error types are now SCREAMING_SNAKE_CASE
  • Consistent typing - Use the type field for programmatic error handling

Error Codes Reference

See the complete list of error types and their meanings.

Previous Versions