Errors

Every handled error returns a consistent JSON envelope with an HTTP status code, a stable machine-readable code, and a human-readable message.

{
  "error": {
    "code": "validation_error",
    "message": "One or more request fields are invalid.",
    "request_id": "9f4c1d2e-7b3a-4f7e-9c1d-2e7b3a4f7e9c",
    "severity": "error",
    "details": [
      {
        "code": "greater_than_equal",
        "message": "Input should be greater than or equal to 0",
        "target": "lines.0.amount",
        "severity": "error"
      }
    ]
  }
}

Error codes

StatusCodeMeaning
422validation_errorOne or more request fields failed schema validation. Inspect error.details for stable field targets; submitted values are never echoed.
401missing_api_keyNo API key supplied.
401invalid_api_keyKey is unknown, revoked, or expired.
403module_not_enabledAPI Access is not enabled for the account.
403insufficient_scopeKey lacks the scope required by the endpoint.
403location_not_authorizedA requested return filing unit is outside the API key’s immutable location or organization scope.
403organization_scope_requiredOrganization-wide account administration requires an organization-scoped API key.
403provider_key_requiredThe endpoint requires a service-provider portfolio credential.
403provider_not_activeThe provider practice is inactive and cannot administer clients or access taxpayer data.
400missing_client_contextA provider taxpayer-data request omitted both X-ITMS-Client-Ref and X-ITMS-Client-Id.
400invalid_client_contextThe legacy X-ITMS-Client-Id is not a numeric engagement identifier.
400conflicting_client_contextX-ITMS-Client-Ref and X-ITMS-Client-Id select different engagements.
403client_context_not_authorizedThe engagement is foreign, paused, offboarded, unavailable, or otherwise not authorized for this provider key.
404provider_client_not_foundNo client engagement visible to this provider matches the requested identifier.
400invalid_addressship_to could not be resolved to a US state and 5-digit ZIP.
400invalid_requestThe request is valid JSON but includes an unsupported or conflicting option — for example, tax_included combined with a discount on the same line, or a refund line that does not exist on the original transaction.
400invalid_tax_codeStrict mode: a line used an unrecognized ITMS tax code.
400invalid_nexus_modeA committed transaction attempted reference nexus behavior.
409idempotency_conflictAn Idempotency-Key was reused with a different request payload.
422accuracy_requirement_not_metThe requested deterministic accuracy policy could not be met.
422product_identity_requiredrequire_known was selected but a line did not resolve to a known tax code or SKU.
422address_precision_requirement_not_metA document or line destination resolved below minimum_address_precision.
422exemption_certificate_not_foundThe selected certificate is not active and assigned to the customer in this key scope.
422certificate_not_effectiveActivation was requested before or after the certificate validity window.
422certificate_evidence_incompleteActivation requires jurisdiction, exemption reason, signer, signature type, durable evidence reference, document SHA-256, and an authorized named reviewer.
422certificate_review_authority_not_permittedThe API key claimed service-provider review authority but is not a provider-scoped key.
422certificate_not_activeAssignment requires an active, currently effective certificate.
422certificate_customer_mismatchThe certificate belongs to a different scoped customer.
422rate_unavailableNo rate exists for the state/ZIP/date combination.
422ky_historical_window_unsupportedKentucky exempts this product class, but the transaction date precedes the earliest date the archived statute can ground (2007-07-01 for food, 2009-07-01 for prescription drugs). ITMS will neither charge tax it cannot defend nor grant an exemption it cannot evidence. Previously returned as rate_unavailable. On POST /transactions this rejects the WHOLE document: a single such line rolls back every line, so no partial transaction is persisted.
422il_sourcing_unresolved_no_seller_factsIllinois local rates depend on how you sell into the state, and the request declared no seller posture. Send seller_class as "remote", "marketplace" or "in_state", or set up a verified Illinois seller location for the account. Previously returned as rate_unavailable. error.details[0] repeats the code, the instruction, and the request field to change.
422il_sourcing_unresolved_in_state_seller_without_validated_profileThe request declared an in-state Illinois seller, but no verified Illinois seller location is on file for the account. Add one, or send the request as a remote or marketplace seller. Previously returned as rate_unavailable.
422il_sourcing_unresolved_conflicting_seller_factsThe Illinois seller details on the request contradict each other (seller class and ship-from point to different ways of selling into the state). Send one consistent posture. Previously returned as rate_unavailable.
422il_sourcing_unresolved_untrusted_contractThe Illinois sourcing declaration supplied with the request could not be verified, so ITMS stopped rather than guessing which local rate applies. Previously returned as rate_unavailable.
422il_sourcing_not_enabledITMS is not set up to work out your Illinois seller posture from the details on file for this account. Contact support. Previously returned as rate_unavailable.
422il_in_state_selling_not_enabledSelling from an Illinois location is not enabled for the account, so a sale from an Illinois store cannot be priced. Send the request as a remote or marketplace seller, or contact support. Previously returned as rate_unavailable.
422il_product_identity_requiredIllinois rates depend on what is being sold and the line could not be identified. Send a product code or description ITMS can identify. Previously returned as rate_unavailable.
422il_address_not_locatedThe Illinois address could not be matched to an official Illinois rate area. Check the street address, city and ZIP code. Previously returned as rate_unavailable.
422il_rate_lookup_unresolvedITMS could not select an Illinois local rate for the line and returned no rate rather than one it cannot stand behind. Check the street address, city and ZIP code. This is also the code for any Illinois refusal without a more specific one. Previously returned as rate_unavailable.
422il_rate_index_not_readyIllinois rates are briefly unavailable while the official Illinois rate list is loading. Retry shortly. Previously returned as rate_unavailable.
422il_rate_lookup_failedAn Illinois rate lookup could not be completed. Retry, and contact support if it persists. Previously returned as rate_unavailable.
409duplicate_transactionThe transaction code already exists for your account and environment.
404transaction_not_foundNo transaction with that code in the key’s scope.
409invalid_lifecycleThe lifecycle action is not allowed (e.g. voiding a refunded transaction).
422refund_exceeds_refundableThe refund amount exceeds what remains refundable on the original.
422credit_exceeds_taxA tax-only credit exceeds the remaining committed tax on a line.
422invalid_adjustment_codesOriginal, reversal, and replacement codes are not distinct.
429rate_limit_exceededToo many requests; retry after the Retry-After interval.
500internal_errorUnexpected server error — same envelope, with a request_id to reference. No stack traces are returned.

Request IDs

Every response carries an X-Request-Id header, and handled errors echo the same id as error.request_id. Include it when contacting support so we can locate the exact request.

Service-provider authorization errors

Provider administration requires a provider credential. Taxpayer-data calls additionally require X-ITMS-Client-Ref (recommended) or the numeric engagement ID in X-ITMS-Client-Id. If both are present, they must select the same client. Authorization failures do not disclose whether another provider's client exists. See the service-provider portfolio guide for the full context model.

Validation errors

Request-body validation failures (missing fields, malformed values) return HTTP 422 with code validation_error in the standard envelope. Inspect error.details for stable field targets such as lines.0.amount. Submitted values are not echoed in validation errors.

Unhandled errors

Unexpected server errors return HTTP 500 with code internal_error in the same envelope and a request id. Stack traces and internal details are never returned to API consumers.

Duplicate transactions

Reusing a transaction code returns HTTP 409 duplicate_transaction without modifying the original — see Transaction lifecycle for the full duplicate and retry semantics.