Numeral Tax Calculations API

Calculates real-time sales tax for a given product, customer, and address or IP at state, county, city, and district granularity, returning per-line-item and total tax amounts. Includes platform/marketplace calculations.

OpenAPI Specification

numeral-openapi.yml Raw ↑
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