Numeral Products & Tax Codes API
Creates, categorizes, lists, and deletes products and maps them to tax-code product categories that drive correct taxability, plus customer records with tax-exemption status.
Creates, categorizes, lists, and deletes products and maps them to tax-code product categories that drive correct taxability, plus customer records with tax-exemption status.
openapi: 3.0.1
info:
title: Numeral API
description: >-
REST API for the Numeral (Numeral HQ) sales-tax compliance platform. Calculate
real-time sales tax by customer location, record transactions and refunds, and
manage products and customers. Registrations, nexus monitoring, filing, and
remittance are delivered as managed platform services on top of the data captured
through this API. Not affiliated with Numeral (numeral.io), an unrelated payment
operations company.
termsOfService: https://www.numeral.com/terms
contact:
name: Numeral Support
url: https://www.numeral.com/
version: '2026-03-01'
servers:
- url: https://api.numeralhq.com
description: Numeral production API
security:
- bearerAuth: []
tags:
- name: Tax Calculations
- name: Transactions
- name: Refunds
- name: Products
- name: Customers
- name: Health
paths:
/tax/calculations:
post:
operationId: createCalculation
tags:
- Tax Calculations
summary: Get tax information for a given product and address or IP.
parameters:
- $ref: '#/components/parameters/ApiVersion'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CalculationRequest'
responses:
'200':
description: Calculated tax for the supplied order.
content:
application/json:
schema:
$ref: '#/components/schemas/CalculationResponse'
/tax/platform_calculations:
post:
operationId: createPlatformCalculation
tags:
- Tax Calculations
summary: Calculate tax for marketplace / platform transactions on behalf of a merchant.
parameters:
- $ref: '#/components/parameters/ApiVersion'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CalculationRequest'
responses:
'200':
description: Calculated tax for the platform order.
content:
application/json:
schema:
$ref: '#/components/schemas/CalculationResponse'
/tax/transactions:
post:
operationId: createTransaction
tags:
- Transactions
summary: Record a completed sale from a prior calculation.
parameters:
- $ref: '#/components/parameters/ApiVersion'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionRequest'
responses:
'200':
description: The recorded transaction.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionResponse'
/tax/transactions/{transaction_id}:
get:
operationId: getTransaction
tags:
- Transactions
summary: Retrieve a specific transaction.
parameters:
- $ref: '#/components/parameters/TransactionId'
responses:
'200':
description: The requested transaction.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionResponse'
delete:
operationId: deleteTransaction
tags:
- Transactions
summary: Delete a specific transaction.
parameters:
- $ref: '#/components/parameters/TransactionId'
responses:
'200':
description: Deletion confirmation.
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedResource'
/tax/transactions/{transaction_id}/refunds:
get:
operationId: getRefundsForTransaction
tags:
- Refunds
summary: Retrieve refunds for a specific transaction.
parameters:
- $ref: '#/components/parameters/TransactionId'
responses:
'200':
description: Refunds associated with the transaction.
content:
application/json:
schema:
type: object
properties:
refunds:
type: array
items:
$ref: '#/components/schemas/RefundResponse'
/tax/refunds:
post:
operationId: createRefund
tags:
- Refunds
summary: Add a refund to a transaction.
parameters:
- $ref: '#/components/parameters/ApiVersion'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RefundRequest'
responses:
'200':
description: The created refund.
content:
application/json:
schema:
$ref: '#/components/schemas/RefundResponse'
/tax/refund_reversals:
post:
operationId: createRefundReversal
tags:
- Refunds
summary: Reverse a refund you have previously created.
parameters:
- $ref: '#/components/parameters/ApiVersion'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- refund_id
properties:
refund_id:
type: string
description: Identifier of the refund to reverse.
responses:
'200':
description: The reversed refund.
content:
application/json:
schema:
$ref: '#/components/schemas/RefundResponse'
/tax/products:
post:
operationId: createProduct
tags:
- Products
summary: Create and categorize a new product.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProductRequest'
responses:
'200':
description: The created product.
content:
application/json:
schema:
$ref: '#/components/schemas/ProductResponse'
get:
operationId: listProducts
tags:
- Products
summary: Retrieve a paginated list of up to 50 products.
parameters:
- name: cursor
in: query
required: false
schema:
type: string
description: Pagination cursor (last product id from the prior page).
responses:
'200':
description: A page of products.
content:
application/json:
schema:
type: object
properties:
has_more:
type: boolean
last_product_id:
type: string
products:
type: array
items:
$ref: '#/components/schemas/ProductResponse'
/tax/products/{reference_product_id}:
get:
operationId: getProduct
tags:
- Products
summary: Retrieve a specific product.
parameters:
- name: reference_product_id
in: path
required: true
schema:
type: string
responses:
'200':
description: The requested product.
content:
application/json:
schema:
$ref: '#/components/schemas/ProductResponse'
delete:
operationId: deleteProduct
tags:
- Products
summary: Delete a specific product.
parameters:
- name: reference_product_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Deletion confirmation.
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedResource'
/tax/customers:
post:
operationId: createCustomer
tags:
- Customers
summary: Create a new customer and optionally mark as tax exempt.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerRequest'
responses:
'200':
description: The created customer.
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerResponse'
/tax/customers/{customer_id}:
get:
operationId: getCustomer
tags:
- Customers
summary: Retrieve a specific customer.
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: id_type
in: query
required: false
schema:
type: string
enum:
- id
- reference_customer_id
description: Whether customer_id is Numeral's id or your reference_customer_id.
responses:
'200':
description: The requested customer.
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerResponse'
delete:
operationId: deleteCustomer
tags:
- Customers
summary: Delete a specific customer.
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Deletion confirmation.
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedResource'
/tax/ping:
get:
operationId: pingHealthCheck
tags:
- Health
summary: Authenticated health check endpoint.
parameters:
- $ref: '#/components/parameters/ApiVersion'
responses:
'200':
description: Service health.
content:
application/json:
schema:
type: object
properties:
status:
type: string
env:
type: string
timestamp:
type: string
format: date-time
api_version:
type: string
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Provide your Numeral API key as a Bearer token in the Authorization header.
parameters:
ApiVersion:
name: X-API-Version
in: header
required: false
schema:
type: string
enum:
- '2026-03-01'
- '2026-01-01'
- '2025-05-12'
- '2024-09-01'
default: '2024-09-01'
description: API version. Defaults to 2024-09-01 when omitted.
TransactionId:
name: transaction_id
in: path
required: true
schema:
type: string
schemas:
Address:
type: object
properties:
line_1:
type: string
line_2:
type: string
city:
type: string
state:
type: string
postal_code:
type: string
country:
type: string
LineItem:
type: object
properties:
reference_product_id:
type: string
amount:
type: integer
description: Line amount in the smallest currency unit (e.g., cents).
quantity:
type: integer
product_category:
type: string
CalculationRequest:
type: object
properties:
customer:
type: object
properties:
reference_customer_id:
type: string
customer_address:
$ref: '#/components/schemas/Address'
ip_address:
type: string
origin_address:
$ref: '#/components/schemas/Address'
order_details:
type: object
properties:
customer_currency_code:
type: string
line_items:
type: array
items:
$ref: '#/components/schemas/LineItem'
metadata:
type: object
additionalProperties: true
CalculationResponse:
type: object
properties:
id:
type: string
object:
type: string
customer_currency_code:
type: string
line_items:
type: array
items:
type: object
properties:
reference_product_id:
type: string
tax_amount:
type: integer
taxable_amount:
type: integer
total_tax_amount:
type: integer
total_amount_excluding_tax:
type: integer
total_amount_including_tax:
type: integer
expires_at:
type: string
format: date-time
testmode:
type: boolean
address_resolution_status:
type: string
address_used:
$ref: '#/components/schemas/Address'
TransactionRequest:
type: object
required:
- calculation_id
properties:
calculation_id:
type: string
reference_order_id:
type: string
transaction_processed_at:
type: string
format: date-time
metadata:
type: object
additionalProperties: true
TransactionResponse:
type: object
properties:
id:
type: string
object:
type: string
calculation_id:
type: string
reference_order_id:
type: string
customer_currency_code:
type: string
filing_currency_code:
type: string
line_items:
type: array
items:
$ref: '#/components/schemas/LineItem'
testmode:
type: boolean
metadata:
type: object
additionalProperties: true
RefundRequest:
type: object
required:
- transaction_id
properties:
transaction_id:
type: string
type:
type: string
refund_processed_at:
type: string
format: date-time
line_items:
type: array
items:
$ref: '#/components/schemas/LineItem'
RefundResponse:
type: object
properties:
id:
type: string
object:
type: string
refund_type:
type: string
testmode:
type: boolean
refund_processed_at:
type: string
format: date-time
line_items:
type: array
items:
$ref: '#/components/schemas/LineItem'
ProductRequest:
type: object
required:
- reference_product_id
properties:
reference_product_id:
type: string
reference_product_name:
type: string
product_category:
type: string
description: Tax-code product category that drives taxability.
ProductResponse:
type: object
properties:
object:
type: string
reference_product_id:
type: string
reference_product_name:
type: string
product_category:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
testmode:
type: boolean
CustomerRequest:
type: object
properties:
name:
type: string
email:
type: string
is_tax_exempt:
type: boolean
reference_customer_id:
type: string
CustomerResponse:
type: object
properties:
id:
type: string
object:
type: string
reference_customer_id:
type: string
name:
type: string
email:
type: string
is_tax_exempt:
type: boolean
DeletedResource:
type: object
properties:
object:
type: string
deleted_at:
type: string
format: date-time