Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.commenda.io/llms.txt

Use this file to discover all available pages before exploring further.

Understanding registration thresholds

A registration threshold is the point at which a seller must register to collect and remit indirect tax in a given jurisdiction. Historically, this obligation was based primarily on physical presence. However, following the 2018 South Dakota v. Wayfair Supreme Court decision in the US, jurisdictions can now require remote sellers to collect and remit indirect tax based on their economic activity — commonly referred to as “economic thresholds.” This concept applies globally: VAT and GST jurisdictions also set thresholds that determine when a business must register and begin collecting tax.
Commenda tracks registration thresholds across US states, Canada, the UK, and the EU — including trade bloc rules like Union OSS, Non-Union OSS, and IOSS. See global exposure tracking for details on multi-jurisdiction support and the v2 API.

How jurisdictions define thresholds

Each jurisdiction sets its own rules for determining when you must register, including:
  1. Threshold amounts: Jurisdictions establish different sales and/or transaction thresholds that trigger a registration obligation. For example, one jurisdiction may have a USD 100,000 sales threshold, while another sets a EUR 10,000 threshold.
  2. Threshold types: Some jurisdictions consider only sales revenue, some consider only the number of transactions, and some consider both.
  3. Evaluation periods: The period over which economic activity is measured varies. Common periods include the previous calendar year, the current or previous calendar year, or a rolling 12-month period.

Threshold tracking

Commenda automatically tracks your progress toward registration thresholds in each jurisdiction based on the transactions you post to the /transactions endpoint. You can use the registration threshold API endpoint to get a comprehensive overview of your threshold status across all jurisdictions, taking into account each jurisdiction’s specific rules.

Default response (US states)

By default, the GET /nexus endpoint returns US-state-level threshold data. The response contains a states array where each object represents your exposure in one US state.
{
  "data": {
    "corporation_id": "74df772f-9260-42cf-9c20-3b613b60fecd",
    "states": [
      {
        "state": "VT",
        "rule": {
          "sales_threshold": 100000,
          "transactions_threshold": 200,
          "threshold_type": "SALES_OR_TRANSACTIONS",
          "evaluation_period_type": "PRECEDING_12_MONTHS",
          "includable_sales_type": "GROSS"
        },
        "calculation": {
          "total_sales": 0,
          "total_transactions": 0,
          "gross_sales": 0,
          "gross_transactions": 0,
          "taxable_sales": 0,
          "taxable_transactions": 0,
          "retail_sales": 0,
          "retail_transactions": 0,
          "sales_exposure_percentage": 0,
          "transactions_exposure_percentage": 0,
          "includable_sales_type": "GROSS"
        },
        "is_nexus_breached": false
      }
    ]
  },
  "message": "Successfully fetched nexus."
}
The default response uses field names like is_nexus_breached and states for backward compatibility. These fields represent registration threshold status — is_nexus_breached indicates whether you have exceeded the registration threshold in a given jurisdiction.

Global response (v2=true)

Pass v2=true as a query parameter to get global jurisdiction-level threshold data. This covers US, Canada, UK, and EU jurisdictions, including support for multiple exposure rules per jurisdiction (for example, EU Union OSS, Non-Union OSS, and IOSS). The v2 response uses a jurisdictions array instead of states, and includes additional fields such as jurisdiction_id, exposure_type, exposure_rule_id, subdivision, and currency.
{
  "data": {
    "corporation_id": "74df772f-9260-42cf-9c20-3b613b60fecd",
    "jurisdictions": [
      {
        "jurisdiction_id": "US_CA_1000",
        "jurisdiction_type": "STATE",
        "jurisdiction_name": "California",
        "exposure_type": "EXPOSURE_ECONOMIC",
        "exposure_rule_id": "US_CA_ECONOMIC_001",
        "subdivision": "CA",
        "currency": "USD",
        "rule": {
          "sales_threshold": 500000,
          "transactions_threshold": null,
          "threshold_type": "SALES_ONLY",
          "evaluation_period_type": "PREVIOUS_OR_CURRENT_CALENDAR_YEAR",
          "location_based_scope": "DESTINATION",
          "exclusion_types": ["TRANSACTION.MARKETPLACE"],
          "establishment_types": []
        },
        "calculation": {
          "included_sales": 150000,
          "included_transactions": 320,
          "gross_sales": 175000,
          "gross_transactions": 350,
          "sales_exposure_percentage": 0.30,
          "transactions_exposure_percentage": 0
        },
        "is_nexus_breached": false,
        "recommended_registration_content_ids": ["REG_STATE_CEN_06_1000"]
      },
      {
        "jurisdiction_id": "TRADEBLOC_EU_3000",
        "jurisdiction_type": "TRADEBLOC",
        "jurisdiction_name": "EU Union OSS",
        "exposure_type": "EXPOSURE",
        "exposure_rule_id": "EU_UNION_OSS_001",
        "subdivision": "",
        "currency": "EUR",
        "rule": {
          "sales_threshold": 10000,
          "transactions_threshold": null,
          "threshold_type": "SALES_ONLY",
          "evaluation_period_type": "PREVIOUS_OR_CURRENT_CALENDAR_YEAR",
          "location_based_scope": "INTRA_COMMUNITY",
          "exclusion_types": ["CUSTOMER.B2B"],
          "establishment_types": [],
          "max_transaction_value": 150
        },
        "calculation": {
          "included_sales": 12000,
          "included_transactions": 45,
          "gross_sales": 14000,
          "gross_transactions": 50,
          "sales_exposure_percentage": 1.20,
          "transactions_exposure_percentage": 0
        },
        "is_nexus_breached": true,
        "date_of_breach": "2026-03-15",
        "recommended_registration_content_ids": ["REG_TRADEBLOC_EU_3000_UOSS"]
      }
    ]
  },
  "message": "Successfully fetched nexus."
}
Each jurisdiction in the v2 response includes a recommended_registration_content_ids field: an array of content IDs that link directly to the V2 Registration API. When a threshold is breached (or approaching breach), use these IDs to discover the appropriate registration options via the Available Registrations endpoint.

Key differences from the default response

FieldDefaultV2 (v2=true)
Top-level arraystatesjurisdictions
Jurisdiction identifierstate (US state code)jurisdiction_id, subdivision
CurrencyImplicitly USDExplicit currency field
Exposure rule metadataNot includedexposure_type, exposure_rule_id, jurisdiction_type
Calculation fieldstotal_sales, total_transactions, etc.included_sales, included_transactions, etc.
Registration recommendationNot includedrecommended_registration_content_ids
Supported jurisdictionsUS states onlyUS, Canada, UK, EU (country-level and tradebloc)