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
| Status | Code | Meaning |
|---|---|---|
| 422 | validation_error | One or more request fields failed schema validation. Inspect error.details for stable field targets; submitted values are never echoed. |
| 401 | missing_api_key | No API key supplied. |
| 401 | invalid_api_key | Key is unknown, revoked, or expired. |
| 403 | module_not_enabled | API Access is not enabled for the account. |
| 403 | insufficient_scope | Key lacks the scope required by the endpoint. |
| 403 | location_not_authorized | A requested return filing unit is outside the API key’s immutable location or organization scope. |
| 403 | organization_scope_required | Organization-wide account administration requires an organization-scoped API key. |
| 403 | provider_key_required | The endpoint requires a service-provider portfolio credential. |
| 403 | provider_not_active | The provider practice is inactive and cannot administer clients or access taxpayer data. |
| 400 | missing_client_context | A provider taxpayer-data request omitted both X-ITMS-Client-Ref and X-ITMS-Client-Id. |
| 400 | invalid_client_context | The legacy X-ITMS-Client-Id is not a numeric engagement identifier. |
| 400 | conflicting_client_context | X-ITMS-Client-Ref and X-ITMS-Client-Id select different engagements. |
| 403 | client_context_not_authorized | The engagement is foreign, paused, offboarded, unavailable, or otherwise not authorized for this provider key. |
| 404 | provider_client_not_found | No client engagement visible to this provider matches the requested identifier. |
| 400 | invalid_address | ship_to could not be resolved to a US state and 5-digit ZIP. |
| 400 | invalid_request | The 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. |
| 400 | invalid_tax_code | Strict mode: a line used an unrecognized ITMS tax code. |
| 400 | invalid_nexus_mode | A committed transaction attempted reference nexus behavior. |
| 409 | idempotency_conflict | An Idempotency-Key was reused with a different request payload. |
| 422 | accuracy_requirement_not_met | The requested deterministic accuracy policy could not be met. |
| 422 | product_identity_required | require_known was selected but a line did not resolve to a known tax code or SKU. |
| 422 | address_precision_requirement_not_met | A document or line destination resolved below minimum_address_precision. |
| 422 | exemption_certificate_not_found | The selected certificate is not active and assigned to the customer in this key scope. |
| 422 | certificate_not_effective | Activation was requested before or after the certificate validity window. |
| 422 | certificate_evidence_incomplete | Activation requires jurisdiction, exemption reason, signer, signature type, durable evidence reference, document SHA-256, and an authorized named reviewer. |
| 422 | certificate_review_authority_not_permitted | The API key claimed service-provider review authority but is not a provider-scoped key. |
| 422 | certificate_not_active | Assignment requires an active, currently effective certificate. |
| 422 | certificate_customer_mismatch | The certificate belongs to a different scoped customer. |
| 422 | rate_unavailable | No rate exists for the state/ZIP/date combination. |
| 422 | ky_historical_window_unsupported | Kentucky 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. |
| 422 | il_sourcing_unresolved_no_seller_facts | Illinois 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. |
| 422 | il_sourcing_unresolved_in_state_seller_without_validated_profile | The 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. |
| 422 | il_sourcing_unresolved_conflicting_seller_facts | The 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. |
| 422 | il_sourcing_unresolved_untrusted_contract | The 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. |
| 422 | il_sourcing_not_enabled | ITMS 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. |
| 422 | il_in_state_selling_not_enabled | Selling 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. |
| 422 | il_product_identity_required | Illinois 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. |
| 422 | il_address_not_located | The 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. |
| 422 | il_rate_lookup_unresolved | ITMS 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. |
| 422 | il_rate_index_not_ready | Illinois rates are briefly unavailable while the official Illinois rate list is loading. Retry shortly. Previously returned as rate_unavailable. |
| 422 | il_rate_lookup_failed | An Illinois rate lookup could not be completed. Retry, and contact support if it persists. Previously returned as rate_unavailable. |
| 409 | duplicate_transaction | The transaction code already exists for your account and environment. |
| 404 | transaction_not_found | No transaction with that code in the key’s scope. |
| 409 | invalid_lifecycle | The lifecycle action is not allowed (e.g. voiding a refunded transaction). |
| 422 | refund_exceeds_refundable | The refund amount exceeds what remains refundable on the original. |
| 422 | credit_exceeds_tax | A tax-only credit exceeds the remaining committed tax on a line. |
| 422 | invalid_adjustment_codes | Original, reversal, and replacement codes are not distinct. |
| 429 | rate_limit_exceeded | Too many requests; retry after the Retry-After interval. |
| 500 | internal_error | Unexpected 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.
