{
  "components": {
    "schemas": {
      "CartCalculateResponseBody": {
        "additionalProperties": false,
        "properties": {
          "connectionId": {
            "description": "The TaxCloud connection the calculation ran under.",
            "examples": [
              "25eb9b97-5acb-492d-b720-c03e79cf715a"
            ],
            "type": "string"
          },
          "items": {
            "description": "One calculated cart per submitted cart, in the same order, with per-line-item tax rates and amounts.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudCartResponse"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "transactionDate": {
            "description": "RFC3339 datetime the carts were calculated for.",
            "examples": [
              "2024-08-01T14:00:00Z"
            ],
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "connectionId",
          "items"
        ],
        "type": "object"
      },
      "CreateMerchantRequest": {
        "additionalProperties": false,
        "properties": {
          "merchantName": {
            "description": "Legal or trading name of the merchant business. Required; must be 1–255 characters.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "contactFirst": {
            "description": "First name of the merchant's primary contact.",
            "type": "string"
          },
          "contactLast": {
            "description": "Last name of the merchant's primary contact.",
            "type": "string"
          },
          "contactEmail": {
            "description": "Email address of the merchant's primary contact; used for TaxCloud invitations and notifications.",
            "type": "string"
          },
          "sendTaxcloudInvite": {
            "description": "Sends invite to set up and connect a TaxCloud account to a merchant who does not already use TaxCloud. To connect a TaxCloud account for a merchant who already uses TaxCloud, use the \"Set Merchant Credentials\" function. Ignored when merchantType is 'self-managed'.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "merchantType": {
            "default": "taxcloud",
            "description": "The merchant's compliance model, chosen once at creation. 'taxcloud' (the default) starts the TaxCloud invite process, so TaxCloud can handle registration, filing, and remittance for the merchant. 'self-managed' skips the invite entirely and the merchant is active as soon as the call returns, with the merchant remaining responsible for their own compliance. 'connected' and 'offline' are deprecated aliases for 'taxcloud' and 'self-managed' respectively; they are still accepted but should not be used in new integrations.",
            "enum": [
              "taxcloud",
              "self-managed",
              "connected",
              "offline"
            ],
            "type": "string"
          },
          "referenceId": {
            "description": "The ID you use in your own system to identify this merchant.",
            "maxLength": 255,
            "type": "string"
          },
          "merchant_type": {
            "deprecated": true,
            "description": "Deprecated: use 'merchantType' instead. This is the original snake_case spelling of the same field and is still accepted so existing integrations keep working. When both are sent, 'merchantType' wins and this value is ignored.",
            "enum": [
              "taxcloud",
              "self-managed",
              "connected",
              "offline"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantName"
        ],
        "type": "object"
      },
      "CreateMerchantResponse": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID assigned to the newly created merchant; use it in subsequent merchant operations.",
            "type": "string"
          },
          "message": {
            "description": "Human-readable description of the result.",
            "type": "string"
          },
          "status": {
            "description": "Result status of the operation (e.g. 'success').",
            "type": "string"
          }
        },
        "required": [
          "status",
          "message",
          "merchantId"
        ],
        "type": "object"
      },
      "DeleteMerchantCredentialsRequest": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant whose TaxCloud credentials are being deleted. The merchant must be owned by the calling account.",
            "type": "string"
          }
        },
        "required": [
          "merchantId"
        ],
        "type": "object"
      },
      "DeleteMerchantCredentialsResponse": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant whose credentials were deleted.",
            "type": "string"
          },
          "message": {
            "description": "Human-readable description of the result.",
            "type": "string"
          },
          "status": {
            "description": "Result status of the operation (e.g. 'success').",
            "type": "string"
          }
        },
        "required": [
          "status",
          "message",
          "merchantId"
        ],
        "type": "object"
      },
      "DeleteMerchantRequest": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant to soft-delete. The merchant must be owned by the calling account.",
            "type": "string"
          }
        },
        "required": [
          "merchantId"
        ],
        "type": "object"
      },
      "DeleteMerchantResponse": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the deleted merchant.",
            "type": "string"
          },
          "message": {
            "description": "Human-readable description of the result.",
            "type": "string"
          },
          "status": {
            "description": "Result status of the operation (e.g. 'success').",
            "type": "string"
          }
        },
        "required": [
          "status",
          "message",
          "merchantId"
        ],
        "type": "object"
      },
      "ErrorDetail": {
        "additionalProperties": false,
        "properties": {
          "location": {
            "description": "Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'",
            "type": "string"
          },
          "message": {
            "description": "Error message text",
            "type": "string"
          },
          "value": {
            "description": "The value at the given location"
          }
        },
        "type": "object"
      },
      "ErrorModel": {
        "additionalProperties": false,
        "properties": {
          "detail": {
            "description": "A human-readable explanation specific to this occurrence of the problem.",
            "examples": [
              "Property foo is required but is missing."
            ],
            "type": "string"
          },
          "errors": {
            "description": "Optional list of individual error details",
            "items": {
              "$ref": "#/components/schemas/ErrorDetail"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "instance": {
            "description": "A URI reference that identifies the specific occurrence of the problem.",
            "examples": [
              "https://example.com/error-log/abc123"
            ],
            "format": "uri",
            "type": "string"
          },
          "status": {
            "description": "HTTP status code",
            "examples": [
              400
            ],
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
            "examples": [
              "Bad Request"
            ],
            "type": "string"
          },
          "type": {
            "default": "about:blank",
            "description": "A URI reference to human-readable documentation for the error.",
            "examples": [
              "https://example.com/errors/example"
            ],
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "GetMerchantCredentialsRequest": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant whose TaxCloud credentials are being retrieved. The merchant must be owned by the calling account.",
            "type": "string"
          }
        },
        "required": [
          "merchantId"
        ],
        "type": "object"
      },
      "GetMerchantCredentialsResponse": {
        "additionalProperties": false,
        "properties": {
          "apiKey": {
            "description": "TaxCloud API key currently associated with the merchant.",
            "type": "string"
          },
          "connectionId": {
            "description": "TaxCloud connection ID currently associated with the merchant.",
            "type": "string"
          }
        },
        "required": [
          "apiKey",
          "connectionId"
        ],
        "type": "object"
      },
      "GetMerchantRequest": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant to retrieve. The merchant must be owned by the calling account.",
            "type": "string"
          }
        },
        "required": [
          "merchantId"
        ],
        "type": "object"
      },
      "GetMerchantResponse": {
        "additionalProperties": false,
        "properties": {
          "contactEmail": {
            "description": "Email address of the merchant's primary contact.",
            "type": "string"
          },
          "contactFirst": {
            "description": "First name of the merchant's primary contact.",
            "type": "string"
          },
          "contactLast": {
            "description": "Last name of the merchant's primary contact.",
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant.",
            "type": "string"
          },
          "merchantName": {
            "description": "Legal or trading name of the merchant business.",
            "type": "string"
          },
          "referenceId": {
            "description": "The ID you use in your own system to identify this merchant.",
            "type": "string"
          },
          "status": {
            "description": "Derived TaxCloud lifecycle status: 'taxcloud_invited' (invite sent, not yet accepted), 'taxcloud_connected' (TaxCloud credentials set and active), 'taxcloud_disconnected' (previously connected, now disconnected), or 'external_compliance' (managed outside TaxCloud).",
            "enum": [
              "taxcloud_invited",
              "taxcloud_connected",
              "taxcloud_disconnected",
              "external_compliance"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "merchantName",
          "status"
        ],
        "type": "object"
      },
      "HealthComponents": {
        "additionalProperties": false,
        "properties": {
          "dynamo": {
            "description": "DynamoDB connectivity status: 'ok', 'config_error' (AWS config could not be loaded), or 'connection_error' (table could not be described).",
            "enum": [
              "ok",
              "config_error",
              "connection_error"
            ],
            "type": "string"
          },
          "taxdata": {
            "description": "Tax-data cache status: 'ok', 'empty' (cache not loaded), or 'partial' (fewer than the expected number of records loaded).",
            "enum": [
              "ok",
              "empty",
              "partial"
            ],
            "type": "string"
          },
          "taxdata_count": {
            "description": "Number of tax-data records currently loaded in the in-memory cache.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "taxdata",
          "taxdata_count",
          "dynamo"
        ],
        "type": "object"
      },
      "HealthResponse": {
        "additionalProperties": false,
        "properties": {
          "components": {
            "$ref": "#/components/schemas/HealthComponents",
            "description": "Per-component health detail."
          },
          "status": {
            "description": "Overall health of the API. Always 'ok' on a served response; component-level detail is in the components object.",
            "examples": [
              "ok"
            ],
            "type": "string"
          }
        },
        "required": [
          "status",
          "components"
        ],
        "type": "object"
      },
      "Item": {
        "additionalProperties": false,
        "properties": {
          "contactEmail": {
            "description": "Email address of the merchant's primary contact.",
            "type": "string"
          },
          "contactFirst": {
            "description": "First name of the merchant's primary contact.",
            "type": "string"
          },
          "contactLast": {
            "description": "Last name of the merchant's primary contact.",
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant.",
            "type": "string"
          },
          "merchantName": {
            "description": "Legal or trading name of the merchant business.",
            "type": "string"
          },
          "referenceId": {
            "description": "The ID you use in your own system to identify this merchant.",
            "type": "string"
          },
          "status": {
            "description": "Derived TaxCloud lifecycle status: 'taxcloud_invited' (invite sent, not yet accepted), 'taxcloud_connected' (TaxCloud credentials set and active), 'taxcloud_disconnected' (previously connected, now disconnected), or 'external_compliance' (managed outside TaxCloud).",
            "enum": [
              "taxcloud_invited",
              "taxcloud_connected",
              "taxcloud_disconnected",
              "external_compliance"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "merchantName",
          "status"
        ],
        "type": "object"
      },
      "MerchantCartCalculateRequest": {
        "additionalProperties": true,
        "properties": {
          "items": {
            "description": "The carts to calculate tax for. Most integrations send a single cart; up to 100 carts may be calculated in one call.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudCart"
            },
            "maxItems": 100,
            "minItems": 1,
            "type": "array"
          },
          "merchantId": {
            "description": "UUID of the merchant whose TaxCloud connection is used. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "transactionDate": {
            "description": "RFC3339 datetime the carts are calculated for. Defaults to the current time when omitted.",
            "examples": [
              "2024-08-01T14:00:00Z"
            ],
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "items"
        ],
        "type": "object"
      },
      "MerchantCertCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "address": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "Address of the exempt customer."
          },
          "customerBusinessDescription": {
            "description": "Free-text description of the business. Provide when customerBusinessType is Other.",
            "type": "string"
          },
          "customerBusinessType": {
            "description": "The type of business the customer is.",
            "enum": [
              "AccommodationAndFoodServices",
              "AgriculturalForestryFishingHunting",
              "Construction",
              "FinanceAndInsurance",
              "InformationPublishingAndCommunications",
              "Manufacturing",
              "Mining",
              "RealEstate",
              "RentalAndLeasing",
              "RetailTrade",
              "TransportationAndWarehousing",
              "Utilities",
              "WholesaleTrade",
              "BusinessServices",
              "ProfessionalServices",
              "EducationAndHealthCareServices",
              "NonprofitOrganization",
              "Government",
              "NotABusiness",
              "Other"
            ],
            "type": "string"
          },
          "customerId": {
            "description": "Your identifier for the exempt customer. Carts and orders submitted with this customerId can use the certificate.",
            "examples": [
              "customer-453"
            ],
            "type": "string"
          },
          "customerName": {
            "description": "Name of the customer or organization the certificate is issued to.",
            "examples": [
              "Mr. Francis Exempt"
            ],
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "reason": {
            "description": "The reason the customer is exempt from sales tax.",
            "enum": [
              "FederalGovernment",
              "StateOrLocalGovernment",
              "TribalGovernment",
              "ForeignDiplomat",
              "CharitableOrganization",
              "EducationalOrganization",
              "Resale",
              "AgriculturalProduction",
              "IndustrialProductionOrManufacturing",
              "DirectPayPermit",
              "DirectMail",
              "Other",
              "ReligiousOrganization"
            ],
            "examples": [
              "Resale"
            ],
            "type": "string"
          },
          "reasonDescription": {
            "description": "Short free-text elaboration of the exemption reason (maximum 20 characters).",
            "maxLength": 20,
            "type": "string"
          },
          "states": {
            "description": "The states the certificate is valid in, each as a two-letter abbreviation object.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudExemptState"
            },
            "type": "array"
          }
        },
        "required": [
          "merchantId",
          "customerId",
          "customerName",
          "customerBusinessType",
          "reason",
          "reasonDescription",
          "address",
          "states"
        ],
        "type": "object"
      },
      "MerchantCertDeleteRequest": {
        "additionalProperties": true,
        "properties": {
          "certificateId": {
            "description": "The certificateId returned when the exemption certificate was created.",
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "certificateId"
        ],
        "type": "object"
      },
      "MerchantCertGetRequest": {
        "additionalProperties": true,
        "properties": {
          "certificateId": {
            "description": "The certificateId returned when the exemption certificate was created.",
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "certificateId"
        ],
        "type": "object"
      },
      "MerchantCertListRequest": {
        "additionalProperties": true,
        "properties": {
          "ascending": {
            "default": false,
            "description": "Whether to sort results in ascending order. Defaults to false (descending).",
            "type": "boolean"
          },
          "cursor": {
            "description": "Opaque pagination cursor from the nextCursor field of a previous response. Omit to start at the first page.",
            "type": "string"
          },
          "customerId": {
            "description": "Filter results to certificates belonging to this customerId.",
            "type": "string"
          },
          "disabled": {
            "default": false,
            "description": "Set true to list disabled (revoked) certificates instead of active ones. Defaults to false.",
            "type": "boolean"
          },
          "limit": {
            "default": 20,
            "description": "Maximum number of certificates to return per page. Defaults to 20; maximum 100.",
            "format": "int64",
            "maximum": 100,
            "minimum": 0,
            "type": "integer"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "sortBy": {
            "default": "id",
            "description": "The field to sort results by: 'createdDate' or 'id'. Defaults to 'id'.",
            "enum": [
              "createdDate",
              "id"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantId"
        ],
        "type": "object"
      },
      "MerchantNexusCreateRequest": {
        "additionalProperties": false,
        "properties": {
          "locations": {
            "description": "The locations to record. Up to 25 per call; each one is geocoded as it is written, which is what bounds the batch.",
            "items": {
              "$ref": "#/components/schemas/NexusLocationInput"
            },
            "maxItems": 25,
            "minItems": 1,
            "type": "array"
          },
          "merchantId": {
            "description": "UUID of the merchant these locations belong to. Must be owned by the calling account and must be self-managed.",
            "type": "string"
          },
          "nexusType": {
            "default": "physical",
            "description": "The kind of nexus being recorded. Only 'physical' can be created: economic nexus is derived from a merchant's sales activity rather than declared, so sending 'economic' is rejected rather than silently stored as physical.",
            "enum": [
              "physical"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "locations"
        ],
        "type": "object"
      },
      "MerchantNexusCreateResponse": {
        "additionalProperties": false,
        "properties": {
          "locations": {
            "description": "The stored locations, in the order submitted, each with its server-issued locationId and normalized address.",
            "items": {
              "$ref": "#/components/schemas/NexusLocationOutput"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "merchantId": {
            "description": "UUID of the merchant the locations were recorded for.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "locations"
        ],
        "type": "object"
      },
      "MerchantNexusDeleteRequest": {
        "additionalProperties": false,
        "properties": {
          "locationId": {
            "description": "Identifier of the location to remove, as returned by /merchant/nexus/create or /merchant/nexus/list.",
            "examples": [
              "6dc371de-00a4-44bf-8a88-2bcab2f15041"
            ],
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant that owns the location. Must be owned by the calling account and must be self-managed.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "locationId"
        ],
        "type": "object"
      },
      "MerchantNexusDeleteResponse": {
        "additionalProperties": false,
        "properties": {
          "locationId": {
            "description": "Identifier of the removed location.",
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant the location belonged to.",
            "type": "string"
          },
          "message": {
            "description": "Human-readable description of the result.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "locationId",
          "message"
        ],
        "type": "object"
      },
      "MerchantNexusListRequest": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant whose locations to list. Must be owned by the calling account and must be self-managed.",
            "type": "string"
          },
          "nexusType": {
            "description": "Restricts the response to one kind of nexus. Omit it to return every kind. Only 'physical' is supported; 'economic' is rejected with 400, because those rows carry a registration id instead of an address and do not fit this response shape (ZIP-1214).",
            "enum": [
              "physical",
              "economic"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantId"
        ],
        "type": "object"
      },
      "MerchantNexusListResponse": {
        "additionalProperties": false,
        "properties": {
          "locations": {
            "description": "The merchant's recorded locations. An empty array when the merchant has none, which means no physical nexus is being tracked for them.",
            "items": {
              "$ref": "#/components/schemas/NexusLocationOutput"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "merchantId": {
            "description": "UUID of the merchant the locations belong to.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "locations"
        ],
        "type": "object"
      },
      "MerchantNexusUpdateRequest": {
        "additionalProperties": false,
        "properties": {
          "location": {
            "$ref": "#/components/schemas/NexusLocationInput",
            "description": "The location's new contents. Every field is replaced, so send the current value for anything you do not want to clear."
          },
          "locationId": {
            "description": "Identifier of the location to replace, as returned by /merchant/nexus/create or /merchant/nexus/list. A location that has been deleted returns 404.",
            "examples": [
              "6dc371de-00a4-44bf-8a88-2bcab2f15041"
            ],
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant that owns the location. Must be owned by the calling account and must be self-managed.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "locationId",
          "location"
        ],
        "type": "object"
      },
      "MerchantNexusUpdateResponse": {
        "additionalProperties": false,
        "properties": {
          "location": {
            "$ref": "#/components/schemas/NexusLocationOutput",
            "description": "The stored location after the update, with its normalized address."
          },
          "merchantId": {
            "description": "UUID of the merchant the location belongs to.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "location"
        ],
        "type": "object"
      },
      "MerchantOrderCreateFromCartRequest": {
        "additionalProperties": true,
        "properties": {
          "cartId": {
            "description": "The cartId returned by (or supplied to) /merchant/cart/calculate identifying the calculated cart to convert into an order.",
            "examples": [
              "my-cart-1"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "completed": {
            "description": "Whether the order has shipped, creating a tax liability. Defaults to false. Ignored when completedDate is provided.",
            "examples": [
              false
            ],
            "type": "boolean"
          },
          "completedDate": {
            "description": "RFC3339 datetime the order was shipped on, which created the tax liability. Takes precedence over the completed field when provided.",
            "examples": [
              "2024-08-01T14:00:00Z"
            ],
            "format": "date-time",
            "type": "string"
          },
          "kind": {
            "default": "order",
            "description": "The kind of order to create: 'order' for a sale (default) or 'credit' for a credit order.",
            "enum": [
              "order",
              "credit"
            ],
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "orderId": {
            "description": "Your identifier for the resulting order in your own system. Used later with /merchant/order/get, /merchant/order/update, and /merchant/refund/create.",
            "examples": [
              "my-order-1"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "cartId",
          "orderId"
        ],
        "type": "object"
      },
      "MerchantOrderCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "batchId": {
            "description": "Batch ID for grouping related orders.",
            "type": "string"
          },
          "channel": {
            "description": "The sales channel the order came from. Pass one of amazon, ebay, or walmart to exclude marketplace-collected tax from filing.",
            "examples": [
              "walmart"
            ],
            "type": "string"
          },
          "completedDate": {
            "description": "RFC3339 datetime the order was shipped on, which created the tax liability.",
            "examples": [
              "2024-08-01T14:00:00Z"
            ],
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "$ref": "#/components/schemas/TaxCloudCurrency",
            "description": "The currency the line-item prices and tax amounts are denominated in."
          },
          "customerId": {
            "description": "Your identifier for the customer in your own system. Used to match exemption certificates and order history.",
            "examples": [
              "customer-453"
            ],
            "maxLength": 50,
            "type": "string"
          },
          "deliveredBySeller": {
            "description": "Whether the seller delivers the order directly (own vehicles) rather than via common carrier. Affects taxability of delivery charges in some states.",
            "examples": [
              false
            ],
            "type": "boolean"
          },
          "destination": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-to (destination) address of the sale."
          },
          "discounts": {
            "$ref": "#/components/schemas/TaxCloudDiscounts",
            "description": "Line-item and order-level discounts to apply. If omitted, prices are used as is."
          },
          "excludeFromFiling": {
            "description": "Whether to exclude the order from tax filing.",
            "examples": [
              false
            ],
            "type": "boolean"
          },
          "exemption": {
            "$ref": "#/components/schemas/TaxCloudExemption",
            "description": "Exemption information for the customer."
          },
          "kind": {
            "default": "order",
            "description": "The kind of order: 'order' for a sale (default) or 'credit' for a credit order.",
            "enum": [
              "order",
              "credit"
            ],
            "type": "string"
          },
          "lineItems": {
            "description": "The items on the order, each including the tax rate and amount that was collected.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudCartItemWithTax"
            },
            "type": "array"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "orderId": {
            "description": "Your identifier for the order in your own system. Used later with /merchant/order/get, /merchant/order/update, and /merchant/refund/create.",
            "examples": [
              "my-order-1"
            ],
            "maxLength": 50,
            "type": "string"
          },
          "origin": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-from (origin) address of the sale."
          },
          "transactionDate": {
            "description": "RFC3339 datetime the order was purchased on.",
            "examples": [
              "2024-08-01T14:00:00Z"
            ],
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "orderId",
          "customerId",
          "origin",
          "destination",
          "currency",
          "lineItems",
          "transactionDate",
          "completedDate"
        ],
        "type": "object"
      },
      "MerchantOrderGetRequest": {
        "additionalProperties": true,
        "properties": {
          "expand": {
            "description": "Set to 'refunds' to include the order's refunds in the response. Forwarded to TaxCloud as a query parameter.",
            "enum": [
              "refunds"
            ],
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "orderId": {
            "description": "Your identifier for the order to retrieve, as supplied when the order was created.",
            "examples": [
              "my-order-1"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "orderId"
        ],
        "type": "object"
      },
      "MerchantOrderUpdateRequest": {
        "additionalProperties": true,
        "properties": {
          "completedDate": {
            "description": "RFC3339 datetime the order was shipped on, which creates the tax liability.",
            "examples": [
              "2024-08-01T14:00:00Z"
            ],
            "format": "date-time",
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "orderId": {
            "description": "Your identifier for the order to update, as supplied when the order was created. Consumed for routing and not forwarded in the update payload.",
            "examples": [
              "my-order-1"
            ],
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "orderId"
        ],
        "type": "object"
      },
      "MerchantRefundCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "batchId": {
            "description": "Batch ID for grouping related refunds.",
            "type": "string"
          },
          "items": {
            "description": "The line items and quantities to refund. Omit (or send an empty array) to refund the entire order.",
            "items": {
              "$ref": "#/components/schemas/RefundItem"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "merchantId": {
            "description": "UUID of the merchant. Must be owned by the calling account. Consumed by the Ziptax layer for routing and not forwarded to TaxCloud.",
            "type": "string"
          },
          "orderId": {
            "description": "Your identifier for the order to refund, as supplied when the order was created. Consumed for routing and not forwarded in the refund payload.",
            "examples": [
              "my-order-1"
            ],
            "type": "string"
          },
          "returnedDate": {
            "description": "Include only if this return amends a previously filed sales tax return; providing it triggers an Amended Sales Tax Return. Not typically recommended.",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "orderId"
        ],
        "type": "object"
      },
      "MetadataResponse": {
        "additionalProperties": false,
        "properties": {
          "go_version": {
            "description": "Go runtime version the running binary was built with.",
            "type": "string"
          },
          "hostname": {
            "description": "Opaque identifier for the instance serving the request. Stable for the life of that instance and changes when it restarts. Useful for telling support which instance handled a request; it is not a resolvable hostname.",
            "type": "string"
          }
        },
        "required": [
          "go_version",
          "hostname"
        ],
        "type": "object"
      },
      "MetricsResponse": {
        "additionalProperties": false,
        "properties": {
          "core_request_count": {
            "description": "Number of core (tax lookup) requests the account has consumed in the current billing period.",
            "format": "int64",
            "type": "integer"
          },
          "core_request_limit": {
            "description": "Maximum core requests allowed for the account in the current period, from the account's entitlement.",
            "format": "int64",
            "type": "integer"
          },
          "core_usage_percent": {
            "description": "Core request usage as a percentage of the limit (0–100).",
            "format": "double",
            "type": "number"
          },
          "geo_enabled": {
            "description": "Whether the account has the geocoding (geo_enabled) entitlement that allows address and coordinate lookups.",
            "type": "boolean"
          },
          "geo_request_count": {
            "description": "Number of geocoding requests the account has consumed in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "geo_request_limit": {
            "description": "Maximum geocoding requests allowed for the account in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "geo_usage_percent": {
            "description": "Geocoding request usage as a percentage of the limit (0–100).",
            "format": "double",
            "type": "number"
          },
          "is_active": {
            "description": "Whether the account is currently active and able to make requests.",
            "type": "boolean"
          },
          "merchant_request_count": {
            "description": "Number of merchant requests the account has consumed in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "merchant_request_limit": {
            "description": "Maximum merchant requests allowed for the account in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "merchant_usage_percent": {
            "description": "Merchant request usage as a percentage of the limit (0–100).",
            "format": "double",
            "type": "number"
          },
          "message": {
            "description": "Informational message about the account.",
            "type": "string"
          }
        },
        "required": [
          "is_active",
          "core_request_count",
          "core_request_limit",
          "geo_request_count",
          "geo_request_limit",
          "geo_enabled",
          "core_usage_percent",
          "geo_usage_percent",
          "merchant_request_count",
          "merchant_request_limit",
          "merchant_usage_percent",
          "message"
        ],
        "type": "object"
      },
      "MetricsV50Response": {
        "additionalProperties": false,
        "properties": {
          "core_request_count": {
            "description": "Number of core (tax lookup) requests the account has consumed in the current billing period.",
            "format": "int64",
            "type": "integer"
          },
          "core_request_limit": {
            "description": "Maximum core requests allowed for the account in the current period, from the account's entitlement.",
            "format": "int64",
            "type": "integer"
          },
          "core_usage_percent": {
            "description": "Core request usage as a percentage of the limit (0–100).",
            "format": "double",
            "type": "number"
          },
          "geo_enabled": {
            "description": "Whether the account has the geocoding (geo_enabled) entitlement that allows address and coordinate lookups.",
            "type": "boolean"
          },
          "geo_request_count": {
            "description": "Number of geocoding requests the account has consumed in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "geo_request_limit": {
            "description": "Maximum geocoding requests allowed for the account in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "geo_usage_percent": {
            "description": "Geocoding request usage as a percentage of the limit (0–100).",
            "format": "double",
            "type": "number"
          },
          "is_active": {
            "description": "Whether the account is currently active and able to make requests.",
            "type": "boolean"
          },
          "message": {
            "description": "Informational message about the account.",
            "type": "string"
          }
        },
        "required": [
          "is_active",
          "core_request_count",
          "core_request_limit",
          "geo_request_count",
          "geo_request_limit",
          "geo_enabled",
          "core_usage_percent",
          "geo_usage_percent",
          "message"
        ],
        "type": "object"
      },
      "MetricsV60Response": {
        "additionalProperties": false,
        "properties": {
          "is_active": {
            "description": "Whether the account is currently active.",
            "type": "boolean"
          },
          "message": {
            "description": "Informational message about the account.",
            "type": "string"
          },
          "request_count": {
            "description": "Number of requests consumed in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "request_limit": {
            "description": "Maximum requests allowed for the account in the current period.",
            "format": "int64",
            "type": "integer"
          },
          "usage_percent": {
            "description": "Request usage as a percentage of the limit (0-100).",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "request_count",
          "request_limit",
          "usage_percent",
          "is_active",
          "message"
        ],
        "type": "object"
      },
      "NexusLocationInput": {
        "additionalProperties": false,
        "properties": {
          "address": {
            "description": "The location's street address as a single line. It is geocoded when you send it, and the normalized result is what every response returns, so the value you get back will usually differ from the one you sent. US addresses only. An address that cannot be resolved to a state is rejected with 422 rather than stored.",
            "examples": [
              "1401 Lavaca St Austin TX 78701"
            ],
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "isFulfillmentOrigin": {
            "description": "Whether goods actually ship from this location. This is the field origin-sourcing consults, so set it explicitly for anything unusual, such as an office that also ships or a warehouse that does not. When omitted it defaults by locationType: true for 'warehouse', 'inventory_fba', and 'store'; false for the rest.",
            "examples": [
              true
            ],
            "type": "boolean"
          },
          "locationType": {
            "description": "What kind of presence this location represents. 'office', 'store', and 'warehouse' are premises you occupy; 'inventory_fba' covers inventory held in a third-party fulfilment network; 'employee' covers staff or contractors working in a state; 'property' covers inventory or equipment held there; 'temporary' covers short-term presence such as a trade show.",
            "enum": [
              "office",
              "store",
              "warehouse",
              "inventory_fba",
              "employee",
              "property",
              "temporary"
            ],
            "examples": [
              "warehouse"
            ],
            "type": "string"
          },
          "name": {
            "description": "Your own label for this location. Shown back to you on every response and never used in a calculation.",
            "examples": [
              "TestCo Texas Distribution Center"
            ],
            "maxLength": 255,
            "type": "string"
          },
          "referenceId": {
            "description": "The ID you use in your own system to identify this location.",
            "examples": [
              "warehouse-123"
            ],
            "maxLength": 255,
            "type": "string"
          },
          "registered": {
            "description": "Whether the merchant is registered to collect sales tax in this location's state. Defaults to false when omitted.",
            "examples": [
              true
            ],
            "type": "boolean"
          }
        },
        "required": [
          "locationType",
          "address"
        ],
        "type": "object"
      },
      "NexusLocationOutput": {
        "additionalProperties": false,
        "properties": {
          "address": {
            "description": "The normalized address resolved when the location was written, not the string you sent.",
            "examples": [
              "1401 Lavaca St, Austin, TX 78701-1634, United States"
            ],
            "type": "string"
          },
          "isFulfillmentOrigin": {
            "description": "Whether goods ship from this location.",
            "examples": [
              true
            ],
            "type": "boolean"
          },
          "locationId": {
            "description": "Server-issued identifier for this location. Use it with /merchant/nexus/update and /merchant/nexus/delete.",
            "examples": [
              "6dc371de-00a4-44bf-8a88-2bcab2f15041"
            ],
            "type": "string"
          },
          "locationType": {
            "description": "What kind of presence this location represents.",
            "enum": [
              "office",
              "store",
              "warehouse",
              "inventory_fba",
              "employee",
              "property",
              "temporary"
            ],
            "examples": [
              "warehouse"
            ],
            "type": "string"
          },
          "name": {
            "description": "Your own label for this location. Empty when none was supplied.",
            "examples": [
              "TestCo Texas Distribution Center"
            ],
            "type": "string"
          },
          "referenceId": {
            "description": "The ID you use in your own system to identify this location. Empty when none was supplied.",
            "examples": [
              "warehouse-123"
            ],
            "type": "string"
          },
          "registered": {
            "description": "Whether the merchant is registered to collect sales tax in this location's state.",
            "examples": [
              true
            ],
            "type": "boolean"
          }
        },
        "required": [
          "locationId",
          "locationType",
          "name",
          "address",
          "registered",
          "isFulfillmentOrigin",
          "referenceId"
        ],
        "type": "object"
      },
      "NexusThresholdListRequest": {
        "additionalProperties": false,
        "properties": {
          "countryCode": {
            "description": "ISO 3166-1 alpha-3 country code. Defaults to USA, which is the only country published today. A country with no published data returns 404.",
            "examples": [
              "USA"
            ],
            "maxLength": 3,
            "minLength": 3,
            "type": "string"
          },
          "stateCodes": {
            "description": "Two-letter jurisdiction codes to return. Omit it for every jurisdiction. The response is ordered by state code regardless of the order sent, and a repeated code yields one row.",
            "examples": [
              [
                "CA",
                "NY"
              ]
            ],
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "type": [
              "array",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "NexusThresholdListResponse": {
        "additionalProperties": false,
        "properties": {
          "thresholds": {
            "description": "The matching thresholds, ordered by state code.",
            "items": {
              "$ref": "#/components/schemas/NexusThresholdOutput"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "thresholds"
        ],
        "type": "object"
      },
      "NexusThresholdOutput": {
        "additionalProperties": false,
        "properties": {
          "countryCode": {
            "description": "ISO 3166-1 alpha-3 code of the country this jurisdiction belongs to.",
            "examples": [
              "USA"
            ],
            "type": "string"
          },
          "includableSales": {
            "description": "Which sales count toward the threshold. 'none' for a state with no general statewide sales tax.",
            "enum": [
              "gross-sales",
              "retail-sales",
              "taxable-sales",
              "gross-receipts",
              "none"
            ],
            "examples": [
              "gross-sales"
            ],
            "type": "string"
          },
          "includableSalesDetail": {
            "description": "The source wording behind includableSales, carrying qualifiers the enum cannot: California, Georgia, and Missouri count tangible personal property only, and Connecticut names retail sales of both property and services. Empty for a state with no general statewide sales tax.",
            "examples": [
              "Gross sales (TPP only)"
            ],
            "type": "string"
          },
          "marketplace": {
            "description": "Whether sales made through a marketplace facilitator count toward the threshold. 'none' for a state with no general statewide sales tax.",
            "enum": [
              "included",
              "excluded",
              "none"
            ],
            "examples": [
              "included"
            ],
            "type": "string"
          },
          "noSalesTax": {
            "description": "True for the states with no general statewide sales tax: Delaware, Montana, New Hampshire, and Oregon. They are returned rather than omitted so a caller iterating states does not read a missing row as missing data.",
            "examples": [
              false
            ],
            "type": "boolean"
          },
          "period": {
            "description": "The window the threshold is measured over, in the source's own words. Prose rather than a code because the periods genuinely differ per state, from a calendar year to a rolling twelve months to the previous four sales tax quarters. Empty for a state with no general statewide sales tax.",
            "examples": [
              "Current or previous calendar year"
            ],
            "type": "string"
          },
          "rule": {
            "description": "How the two thresholds combine. 'either-threshold': meeting either one establishes nexus. 'both-required': both must be met. 'sales-only': there is no transaction test.",
            "enum": [
              "either-threshold",
              "both-required",
              "sales-only"
            ],
            "examples": [
              "sales-only"
            ],
            "type": "string"
          },
          "stateCode": {
            "description": "Two-letter jurisdiction code. US states plus DC and PR.",
            "examples": [
              "CA"
            ],
            "type": "string"
          },
          "thresholdSales": {
            "description": "Sales volume, in whole US dollars, that establishes economic nexus. Null for a state with no general statewide sales tax.",
            "examples": [
              500000
            ],
            "format": "int64",
            "type": [
              "integer",
              "null"
            ]
          },
          "thresholdTransactions": {
            "description": "Number of separate transactions that establishes economic nexus. Null when the state has no transaction test, which is increasingly common: several states have repealed theirs.",
            "examples": [
              200
            ],
            "format": "int64",
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "countryCode",
          "stateCode",
          "thresholdSales",
          "thresholdTransactions",
          "rule",
          "includableSales",
          "includableSalesDetail",
          "marketplace",
          "period",
          "noSalesTax"
        ],
        "type": "object"
      },
      "RefundItem": {
        "additionalProperties": false,
        "properties": {
          "itemId": {
            "description": "The itemId of the line item to refund. Must match an itemId from the original order.",
            "examples": [
              "item-1"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "quantity": {
            "description": "The quantity of the item to refund. May be fractional and must not exceed the quantity on the original order.",
            "format": "double",
            "maximum": 99999.9999,
            "minimum": 0,
            "type": "number"
          }
        },
        "required": [
          "itemId",
          "quantity"
        ],
        "type": "object"
      },
      "SelfManagedCartCalculateResponseBody": {
        "additionalProperties": false,
        "properties": {
          "items": {
            "description": "One calculated cart per submitted cart, in the same order, with per-line-item tax rates and amounts.",
            "items": {
              "$ref": "#/components/schemas/SelfManagedCartResponse"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "items"
        ],
        "type": "object"
      },
      "SelfManagedCartItemWithTaxResponse": {
        "additionalProperties": false,
        "properties": {
          "index": {
            "description": "Zero-based position of the item within the cart, as submitted.",
            "examples": [
              0
            ],
            "format": "int64",
            "type": "integer"
          },
          "itemId": {
            "description": "Your unique identifier for the line item, as submitted.",
            "examples": [
              "item-1"
            ],
            "type": "string"
          },
          "originalPrice": {
            "description": "The original unit price. Always equal to price, because discounts are not supported for self-managed merchants.",
            "examples": [
              10.75
            ],
            "format": "double",
            "type": "number"
          },
          "price": {
            "description": "The unit price tax was calculated on, as submitted. Discounts are not supported for self-managed merchants, so this is always the submitted price.",
            "examples": [
              10.75
            ],
            "format": "double",
            "type": "number"
          },
          "quantity": {
            "description": "Quantity of the item, as submitted.",
            "examples": [
              1.5
            ],
            "format": "double",
            "type": "number"
          },
          "tax": {
            "$ref": "#/components/schemas/TaxCloudTax",
            "description": "The tax rate and amount calculated for this line item. The amount is money and is rounded to two decimal places, the same precision a TaxCloud-managed cart returns; the rate keeps five decimal places."
          },
          "tic": {
            "description": "Taxability Information Code (TIC) the item was calculated under, as submitted. Null when no TIC was supplied (general tangible goods).",
            "examples": [
              0
            ],
            "format": "int64",
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "index",
          "itemId",
          "tic",
          "price",
          "originalPrice",
          "quantity",
          "tax"
        ],
        "type": "object"
      },
      "SelfManagedCartResponse": {
        "additionalProperties": false,
        "properties": {
          "cartId": {
            "description": "Identifier of the calculated cart: the cartId you submitted, or a generated one when you omitted it. Self-managed calculations are not persisted, so this identifier is for correlating the response with the request only and cannot be used with /merchant/order/create-from-cart.",
            "examples": [
              "my-cart-1"
            ],
            "type": "string"
          },
          "currency": {
            "$ref": "#/components/schemas/TaxCloudCurrency",
            "description": "The currency the prices and tax amounts are denominated in. Always USD for self-managed merchants."
          },
          "customerId": {
            "description": "Your identifier for the customer, as submitted.",
            "examples": [
              "customer-453"
            ],
            "type": "string"
          },
          "destination": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-to (destination) address, as submitted."
          },
          "lineItems": {
            "description": "The submitted line items, each with its calculated tax rate and amount.",
            "items": {
              "$ref": "#/components/schemas/SelfManagedCartItemWithTaxResponse"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "origin": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-from (origin) address, as submitted."
          }
        },
        "required": [
          "cartId",
          "customerId",
          "origin",
          "destination",
          "currency",
          "lineItems"
        ],
        "type": "object"
      },
      "SetMerchantCredentialsRequest": {
        "additionalProperties": false,
        "properties": {
          "apiKey": {
            "description": "TaxCloud API key to associate with the merchant. Stored encrypted at rest with AES-256-GCM.",
            "type": "string"
          },
          "connectionId": {
            "description": "TaxCloud connection ID that pairs with the API key to identify the merchant's TaxCloud integration.",
            "type": "string"
          },
          "merchantId": {
            "description": "UUID of the merchant whose TaxCloud credentials are being set. The merchant must be owned by the calling account.",
            "type": "string"
          }
        },
        "required": [
          "merchantId",
          "apiKey",
          "connectionId"
        ],
        "type": "object"
      },
      "SetMerchantCredentialsResponse": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant whose credentials were set.",
            "type": "string"
          },
          "message": {
            "description": "Human-readable description of the result.",
            "type": "string"
          },
          "status": {
            "description": "Result status of the operation (e.g. 'success').",
            "type": "string"
          }
        },
        "required": [
          "status",
          "message",
          "merchantId"
        ],
        "type": "object"
      },
      "TICData": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Taxability Information Code (TIC) identifier (numeric string).",
            "type": "string"
          },
          "label": {
            "description": "Longer, localized description of what the TIC category covers.",
            "type": "string"
          },
          "nl_label": {
            "description": "Non-localized (base English) description of the TIC category, independent of locale.",
            "type": "string"
          },
          "nl_title": {
            "description": "Non-localized (base English) title of the TIC category, independent of locale.",
            "type": "string"
          },
          "parent": {
            "description": "TIC code of this code's parent category in the TIC hierarchy; empty for top-level categories.",
            "type": "string"
          },
          "title": {
            "description": "Short, localized human-readable title of the TIC category.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "parent",
          "title",
          "label",
          "nl_title",
          "nl_label"
        ],
        "type": "object"
      },
      "TICEntry": {
        "additionalProperties": false,
        "properties": {
          "tic": {
            "$ref": "#/components/schemas/TICData",
            "description": "A single TIC record."
          }
        },
        "required": [
          "tic"
        ],
        "type": "object"
      },
      "TICRecommendPrediction": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "description": "Error string formatted as \"\u003ccode\u003e - \u003cmessage\u003e\" on failure; null on success",
            "type": "string"
          },
          "label": {
            "description": "Label for the recommended TIC",
            "type": "string"
          },
          "naturalLabel": {
            "description": "Natural-language label for the recommended TIC",
            "type": "string"
          },
          "product_description": {
            "description": "Normalized product description used for matching",
            "type": "string"
          },
          "status": {
            "description": "Prediction status",
            "enum": [
              "success",
              "fail"
            ],
            "examples": [
              "success"
            ],
            "type": "string"
          },
          "ticId": {
            "description": "Recommended Taxability Information Code (TIC)",
            "examples": [
              20010
            ],
            "format": "int64",
            "type": "integer"
          },
          "tic_description": {
            "description": "Description of the recommended TIC",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "type": "object"
      },
      "TICRecommendRequestBody": {
        "additionalProperties": false,
        "properties": {
          "query": {
            "description": "Free-text product description to get a recommended TIC for",
            "examples": [
              "wireless bluetooth headphones"
            ],
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "TICRecommendResponse": {
        "additionalProperties": false,
        "properties": {
          "predictions": {
            "description": "Recommended TIC predictions",
            "items": {
              "$ref": "#/components/schemas/TICRecommendPrediction"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "predictions"
        ],
        "type": "object"
      },
      "TICResponse": {
        "additionalProperties": false,
        "properties": {
          "tic_list": {
            "description": "Full list of Taxability Information Codes (TICs) available to the account.",
            "items": {
              "$ref": "#/components/schemas/TICEntry"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "tic_list"
        ],
        "type": "object"
      },
      "TICSearchRequestBody": {
        "additionalProperties": false,
        "properties": {
          "query": {
            "description": "Free-text product description to match against TIC codes",
            "examples": [
              "Ceramic \u0026 Pottery Kilns"
            ],
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "TICSearchResponse": {
        "additionalProperties": false,
        "properties": {
          "$schema": {
            "description": "URL to the JSON Schema for this response",
            "format": "uri",
            "type": "string"
          },
          "nextCursor": {
            "description": "Cursor for retrieving the next page of results",
            "type": "string"
          },
          "query": {
            "description": "Echo of the input query",
            "examples": [
              "Ceramic \u0026 Pottery Kilns"
            ],
            "type": "string"
          },
          "results": {
            "description": "Ranked TIC results (most relevant first)",
            "items": {
              "$ref": "#/components/schemas/TICSearchResult"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "$schema",
          "query",
          "results"
        ],
        "type": "object"
      },
      "TICSearchResult": {
        "additionalProperties": false,
        "properties": {
          "label": {
            "description": "Descriptive label for the TIC, when available",
            "type": "string"
          },
          "name": {
            "description": "Human-readable label for the matched TIC",
            "examples": [
              "Computers"
            ],
            "type": "string"
          },
          "tic": {
            "description": "Matched Taxability Information Code (TIC)",
            "examples": [
              "20010"
            ],
            "type": "string"
          }
        },
        "required": [
          "tic",
          "name"
        ],
        "type": "object"
      },
      "TaxCloudAddress": {
        "additionalProperties": false,
        "properties": {
          "city": {
            "description": "City or post-town of the address.",
            "examples": [
              "Minneapolis"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "countryCode": {
            "default": "US",
            "description": "ISO 3166-1 alpha-2 country code of the address. US (United States) or CA (Canada). Defaults to US when omitted.",
            "enum": [
              "US",
              "CA"
            ],
            "type": "string"
          },
          "line1": {
            "description": "First line of the address: street number and name, PO Box, or building. Values longer than 50 characters are automatically truncated by TaxCloud.",
            "examples": [
              "323 Washington Ave N"
            ],
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          },
          "line2": {
            "description": "Second line of the address, if any (e.g. apartment, suite, or unit number). Values longer than 50 characters are automatically truncated by TaxCloud.",
            "maxLength": 128,
            "type": "string"
          },
          "state": {
            "description": "State, province, or other large territorial division, as a two-letter abbreviation (e.g. MN, CA, ON).",
            "examples": [
              "MN"
            ],
            "maxLength": 32,
            "minLength": 1,
            "type": "string"
          },
          "zip": {
            "description": "Postal or ZIP code. Five-digit (55401) and ZIP+4 (55401-2427) formats are accepted for US addresses.",
            "examples": [
              "55401-2427"
            ],
            "maxLength": 16,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "line1",
          "city",
          "state",
          "zip"
        ],
        "type": "object"
      },
      "TaxCloudCart": {
        "additionalProperties": false,
        "properties": {
          "cartId": {
            "description": "Your identifier for this cart. If omitted, TaxCloud generates one and returns it in the response; either way, pass it to /merchant/order/create-from-cart to capture the cart as an order.",
            "examples": [
              "my-cart-1"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "currency": {
            "$ref": "#/components/schemas/TaxCloudCurrency",
            "description": "The currency the line-item prices are denominated in."
          },
          "customerId": {
            "description": "Your identifier for the customer in your own system. Used to match exemption certificates and order history.",
            "examples": [
              "customer-453"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "deliveredBySeller": {
            "description": "Whether the seller delivers the order directly (own vehicles) rather than via common carrier. Affects taxability of delivery charges in some states.",
            "examples": [
              false
            ],
            "type": "boolean"
          },
          "destination": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-to (destination) address of the sale. Tax is generally calculated for this address in destination-sourced states."
          },
          "discounts": {
            "$ref": "#/components/schemas/TaxCloudDiscounts",
            "description": "Line-item and order-level discounts to apply. If omitted, prices are used as is."
          },
          "exemption": {
            "$ref": "#/components/schemas/TaxCloudExemption",
            "description": "Exemption information for the customer. When the customer is exempt, calculated tax is zero for exempt jurisdictions."
          },
          "lineItems": {
            "description": "The line items in the cart. Tax is calculated per item and returned per item in the response.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudCartItem"
            },
            "type": "array"
          },
          "origin": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-from (origin) address of the sale. Used together with destination to determine sourcing and the applicable jurisdictions."
          }
        },
        "required": [
          "customerId",
          "origin",
          "destination",
          "currency",
          "lineItems"
        ],
        "type": "object"
      },
      "TaxCloudCartItem": {
        "additionalProperties": false,
        "properties": {
          "index": {
            "description": "Zero-based position of the item within the cart. Each line item must have a unique index.",
            "examples": [
              0
            ],
            "format": "int64",
            "maximum": 500,
            "minimum": 0,
            "type": "integer"
          },
          "itemId": {
            "description": "Your unique identifier for the line item (e.g. SKU or line reference). Used to match line items in later order, refund, and discount operations.",
            "examples": [
              "item-1"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "price": {
            "description": "Unit price of the item, in the cart's currency. When discounts are provided, this must be the pre-discount (original) price; tax is calculated on the discounted amount. Self-managed merchants only: both the unit price and the extended price (price * quantity) must be at most 1e12.",
            "examples": [
              10.75
            ],
            "format": "double",
            "minimum": 0,
            "type": "number"
          },
          "productId": {
            "description": "Unique ID of the product in the merchant's TaxCloud product catalog (e.g. SKU). Must match an existing catalog product when provided.",
            "type": "string"
          },
          "quantity": {
            "description": "Quantity of the item. Fractional quantities are allowed. For quantities above the maximum, send a single line with quantity 1 and the extended (total) amount as the price.",
            "examples": [
              1.5
            ],
            "format": "double",
            "maximum": 99999.9999,
            "minimum": 0,
            "type": "number"
          },
          "tic": {
            "description": "Taxability Information Code (TIC) classifying the product for product-specific tax rules (e.g. 11010 for shipping). Defaults to 0 (general tangible goods) when omitted.",
            "examples": [
              0
            ],
            "format": "int64",
            "maximum": 100000,
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "index",
          "itemId",
          "price",
          "quantity"
        ],
        "type": "object"
      },
      "TaxCloudCartItemWithTax": {
        "additionalProperties": false,
        "properties": {
          "index": {
            "description": "Zero-based position of the item within the order. Each line item must have a unique index.",
            "examples": [
              0
            ],
            "format": "int64",
            "maximum": 500,
            "minimum": 0,
            "type": "integer"
          },
          "itemId": {
            "description": "Your unique identifier for the line item (e.g. SKU or line reference). Referenced by refunds and discounts.",
            "examples": [
              "item-1"
            ],
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "price": {
            "description": "Unit price of the item that tax was calculated on, in the order's currency.",
            "examples": [
              10.75
            ],
            "format": "double",
            "minimum": 0,
            "type": "number"
          },
          "productId": {
            "description": "Unique ID of the product in the merchant's TaxCloud product catalog. Must match an existing catalog product when provided.",
            "type": "string"
          },
          "quantity": {
            "description": "Quantity of the item. Fractional quantities are allowed. For quantities above the maximum, send a single line with quantity 1 and the extended (total) amount as the price.",
            "examples": [
              1.5
            ],
            "format": "double",
            "maximum": 99999.9999,
            "minimum": 0,
            "type": "number"
          },
          "tax": {
            "$ref": "#/components/schemas/TaxCloudTax",
            "description": "The tax rate and amount collected for this line item. Required when creating an order directly (the amounts were computed by your checkout)."
          },
          "tic": {
            "description": "Taxability Information Code (TIC) classifying the product for product-specific tax rules. Defaults to 0 (general tangible goods) when omitted.",
            "examples": [
              0
            ],
            "format": "int64",
            "maximum": 100000,
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "index",
          "itemId",
          "price",
          "quantity",
          "tax"
        ],
        "type": "object"
      },
      "TaxCloudCartItemWithTaxResponse": {
        "additionalProperties": false,
        "properties": {
          "index": {
            "description": "Zero-based position of the item within the cart or order.",
            "examples": [
              0
            ],
            "format": "int64",
            "type": "integer"
          },
          "itemId": {
            "description": "Your unique identifier for the line item, as submitted.",
            "examples": [
              "item-1"
            ],
            "type": "string"
          },
          "originalPrice": {
            "description": "The original (pre-discount) unit price, as submitted.",
            "examples": [
              12
            ],
            "format": "double",
            "type": "number"
          },
          "price": {
            "description": "The unit price tax was calculated on. When discounts were applied, this is the discounted unit price.",
            "examples": [
              10.75
            ],
            "format": "double",
            "type": "number"
          },
          "quantity": {
            "description": "Quantity of the item.",
            "examples": [
              1.5
            ],
            "format": "double",
            "type": "number"
          },
          "tax": {
            "$ref": "#/components/schemas/TaxCloudTax",
            "description": "The tax rate and amount calculated for this line item."
          },
          "tic": {
            "description": "Taxability Information Code (TIC) the item was calculated under. Null when no TIC applies.",
            "examples": [
              0
            ],
            "format": "int64",
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "index",
          "itemId",
          "tic",
          "price",
          "originalPrice",
          "quantity",
          "tax"
        ],
        "type": "object"
      },
      "TaxCloudCartResponse": {
        "additionalProperties": false,
        "properties": {
          "cartId": {
            "description": "Identifier of the calculated cart. Pass this to /merchant/order/create-from-cart to capture the cart as an order.",
            "examples": [
              "my-cart-1"
            ],
            "type": "string"
          },
          "currency": {
            "$ref": "#/components/schemas/TaxCloudCurrency",
            "description": "The currency the prices and tax amounts are denominated in."
          },
          "customerId": {
            "description": "Your identifier for the customer, as submitted.",
            "examples": [
              "customer-453"
            ],
            "type": "string"
          },
          "deliveredBySeller": {
            "description": "Whether the seller delivers the order directly, as submitted (false when omitted).",
            "examples": [
              false
            ],
            "type": "boolean"
          },
          "destination": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-to (destination) address, as submitted."
          },
          "exemption": {
            "$ref": "#/components/schemas/TaxCloudExemption",
            "description": "The exemption information applied to the calculation."
          },
          "lineItems": {
            "description": "The submitted line items, each with its calculated tax rate and amount.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudCartItemWithTaxResponse"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "origin": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-from (origin) address, as submitted."
          }
        },
        "required": [
          "cartId",
          "customerId",
          "deliveredBySeller",
          "origin",
          "destination",
          "exemption",
          "currency",
          "lineItems"
        ],
        "type": "object"
      },
      "TaxCloudCertListResponse": {
        "additionalProperties": false,
        "properties": {
          "items": {
            "description": "The exemption certificates on this page of results.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudCertResponse"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "limit": {
            "description": "The maximum number of results per page that was applied.",
            "format": "int64",
            "maximum": 100,
            "minimum": 0,
            "type": "integer"
          },
          "nextCursor": {
            "description": "Opaque cursor to pass as 'cursor' on the next call to fetch the following page. Null when there are no further results.",
            "type": "string"
          }
        },
        "required": [
          "items",
          "limit",
          "nextCursor"
        ],
        "type": "object"
      },
      "TaxCloudCertResponse": {
        "additionalProperties": false,
        "properties": {
          "accountId": {
            "description": "The TaxCloud account id the certificate belongs to.",
            "format": "int64",
            "type": "integer"
          },
          "address": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "Address of the exempt customer."
          },
          "certificateId": {
            "description": "TaxCloud's identifier for the exemption certificate. Use it with /merchant/cert/get, /merchant/cert/delete, and as exemptionId on carts and orders.",
            "type": "string"
          },
          "connectionId": {
            "description": "The TaxCloud connection the certificate belongs to.",
            "type": "string"
          },
          "createdDate": {
            "description": "RFC3339 datetime the certificate was created.",
            "examples": [
              "2024-08-01T14:00:00Z"
            ],
            "format": "date-time",
            "type": "string"
          },
          "customerBusinessDescription": {
            "description": "Free-text description of the business, present when customerBusinessType is Other.",
            "type": "string"
          },
          "customerBusinessType": {
            "description": "The type of business the customer is (e.g. RetailTrade, Government, NonprofitOrganization).",
            "type": "string"
          },
          "customerId": {
            "description": "Your identifier for the exempt customer.",
            "type": "string"
          },
          "customerName": {
            "description": "Name of the customer the certificate was issued to.",
            "examples": [
              "Mr. Francis Exempt"
            ],
            "type": "string"
          },
          "disabledAt": {
            "description": "RFC3339 datetime the certificate was disabled, or null while it is active.",
            "format": "date-time",
            "type": "string"
          },
          "reason": {
            "description": "The reason the customer is exempt (e.g. Resale, FederalGovernment, CharitableOrganization).",
            "examples": [
              "Resale"
            ],
            "type": "string"
          },
          "reasonDescription": {
            "description": "Free-text elaboration of the exemption reason.",
            "type": "string"
          },
          "singlePurchase": {
            "description": "Whether the certificate covers a single purchase only, rather than being a blanket certificate.",
            "type": "boolean"
          },
          "states": {
            "description": "The states the certificate is valid in.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudExemptState"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "certificateId",
          "connectionId",
          "accountId",
          "customerId",
          "customerName",
          "customerBusinessType",
          "reason",
          "reasonDescription",
          "address",
          "states",
          "singlePurchase",
          "createdDate"
        ],
        "type": "object"
      },
      "TaxCloudCurrency": {
        "additionalProperties": false,
        "properties": {
          "currencyCode": {
            "default": "USD",
            "description": "ISO 4217 currency code the line-item prices are denominated in. USD or CAD. Defaults to USD when omitted.",
            "enum": [
              "USD",
              "CAD"
            ],
            "examples": [
              "USD"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "TaxCloudDiscounts": {
        "additionalProperties": false,
        "properties": {
          "lineItemDiscounts": {
            "description": "Discounts applied to specific line items, applied before any order-level discount. Each entry must reference a valid itemId from the lineItems array.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudLineItemDiscount"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "orderDiscount": {
            "$ref": "#/components/schemas/TaxCloudOrderLevelDiscount",
            "description": "A discount applied to the entire order, applied after line-item discounts. Shipping items (TICs 11010-11015) and Colorado retail delivery fees (TIC 11098) are excluded from order-level discount calculations."
          }
        },
        "type": "object"
      },
      "TaxCloudExemptState": {
        "additionalProperties": false,
        "properties": {
          "abbreviation": {
            "description": "Two-letter abbreviation of a state the exemption certificate is valid in.",
            "examples": [
              "MN"
            ],
            "maxLength": 2,
            "minLength": 2,
            "type": "string"
          }
        },
        "required": [
          "abbreviation"
        ],
        "type": "object"
      },
      "TaxCloudExemption": {
        "additionalProperties": false,
        "properties": {
          "exemptionId": {
            "description": "Identifier of an exemption certificate previously created for the customer (see /merchant/cert/create). When provided, the customer is treated as exempt and the certificate is associated with the transaction.",
            "type": "string"
          },
          "isExempt": {
            "description": "Whether the customer is exempt from sales tax. Assumed true when exemptionId is provided.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "TaxCloudLineItemDiscount": {
        "additionalProperties": false,
        "properties": {
          "itemId": {
            "description": "The itemId of the line item this discount applies to. Must match an itemId in the lineItems array.",
            "examples": [
              "item-1"
            ],
            "type": "string"
          },
          "type": {
            "description": "The kind of discount: 'percentage' (a fraction of the price) or 'amount' (a fixed currency amount).",
            "enum": [
              "percentage",
              "amount"
            ],
            "examples": [
              "percentage"
            ],
            "type": "string"
          },
          "value": {
            "description": "The discount value: a decimal fraction between 0 and 1 for 'percentage' (e.g. 0.1 = 10% off), or a currency amount for 'amount'. When discounts are provided, line-item prices must be pre-discount (original) prices.",
            "examples": [
              0.1
            ],
            "format": "double",
            "minimum": 0,
            "type": "number"
          }
        },
        "required": [
          "itemId",
          "type",
          "value"
        ],
        "type": "object"
      },
      "TaxCloudOrderLevelDiscount": {
        "additionalProperties": false,
        "properties": {
          "type": {
            "description": "The kind of discount: 'percentage' (a fraction of the order total) or 'amount' (a fixed currency amount).",
            "enum": [
              "percentage",
              "amount"
            ],
            "examples": [
              "percentage"
            ],
            "type": "string"
          },
          "value": {
            "description": "The discount value: a decimal fraction between 0 and 1 for 'percentage', or a currency amount for 'amount'. When discounts are provided, line-item prices must be pre-discount (original) prices.",
            "examples": [
              0.1
            ],
            "format": "double",
            "minimum": 0,
            "type": "number"
          }
        },
        "required": [
          "type",
          "value"
        ],
        "type": "object"
      },
      "TaxCloudOrderResponse": {
        "additionalProperties": false,
        "properties": {
          "batchId": {
            "description": "Batch ID grouping this order with related orders, if one was supplied.",
            "type": "string"
          },
          "channel": {
            "description": "The sales channel the order came from (e.g. amazon, ebay, walmart). Null when no channel was recorded.",
            "examples": [
              "amazon"
            ],
            "type": "string"
          },
          "completedDate": {
            "description": "RFC3339 datetime the order was shipped/completed on, creating the tax liability. Absent for orders that are not yet completed.",
            "format": "date-time",
            "type": "string"
          },
          "connectionId": {
            "description": "The TaxCloud connection the order was recorded under.",
            "examples": [
              "25eb9b97-5acb-492d-b720-c03e79cf715a"
            ],
            "type": "string"
          },
          "currency": {
            "$ref": "#/components/schemas/TaxCloudCurrency",
            "description": "The currency the prices and tax amounts are denominated in."
          },
          "customerId": {
            "description": "Your identifier for the customer in your own system.",
            "examples": [
              "customer-453"
            ],
            "type": "string"
          },
          "deliveredBySeller": {
            "description": "Whether the seller delivered the order directly.",
            "type": "boolean"
          },
          "destination": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-to (destination) address of the order."
          },
          "excludeFromFiling": {
            "description": "Whether the order is excluded from tax filing.",
            "type": "boolean"
          },
          "exemption": {
            "$ref": "#/components/schemas/TaxCloudExemption",
            "description": "The exemption information recorded on the order."
          },
          "kind": {
            "description": "The kind of order: 'order' for a sale or 'credit' for a credit order.",
            "enum": [
              "order",
              "credit"
            ],
            "type": "string"
          },
          "lineItems": {
            "description": "The order's line items, each with its tax rate and amount.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudCartItemWithTaxResponse"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "orderId": {
            "description": "Your identifier for the order in your own system.",
            "examples": [
              "my-order-1"
            ],
            "type": "string"
          },
          "origin": {
            "$ref": "#/components/schemas/TaxCloudAddress",
            "description": "The ship-from (origin) address of the order."
          },
          "refunds": {
            "description": "Refunds recorded against this order. Only included when the request set expand to 'refunds'.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudRefundResponse"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "transactionDate": {
            "description": "RFC3339 datetime the order was purchased on.",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "connectionId",
          "orderId",
          "kind",
          "customerId",
          "deliveredBySeller",
          "origin",
          "destination",
          "currency",
          "lineItems",
          "exemption",
          "channel",
          "excludeFromFiling"
        ],
        "type": "object"
      },
      "TaxCloudRefundItemResponse": {
        "additionalProperties": false,
        "properties": {
          "index": {
            "description": "Zero-based position of the item within the refund.",
            "format": "int64",
            "type": "integer"
          },
          "itemId": {
            "description": "The itemId of the refunded line item, matching the original order.",
            "type": "string"
          },
          "price": {
            "description": "The unit price refunded, calculated automatically from the order. When the order had discounts, this reflects the discounted amount actually paid.",
            "format": "double",
            "type": "number"
          },
          "quantity": {
            "description": "The quantity refunded.",
            "format": "double",
            "type": "number"
          },
          "tax": {
            "$ref": "#/components/schemas/TaxCloudRefundTax",
            "description": "The tax amount refunded for this line item."
          },
          "tic": {
            "description": "Taxability Information Code (TIC) of the refunded item.",
            "examples": [
              0
            ],
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "index",
          "itemId",
          "price",
          "quantity"
        ],
        "type": "object"
      },
      "TaxCloudRefundResponse": {
        "additionalProperties": false,
        "properties": {
          "batchId": {
            "description": "Batch ID grouping this refund with related refunds, if one was supplied.",
            "type": "string"
          },
          "connectionId": {
            "description": "The TaxCloud connection the refund was recorded under.",
            "examples": [
              "25eb9b97-5acb-492d-b720-c03e79cf715a"
            ],
            "type": "string"
          },
          "createdDate": {
            "description": "RFC3339 datetime the refund was created.",
            "format": "date-time",
            "type": "string"
          },
          "items": {
            "description": "The refunded line items, each with the refunded price, quantity, and tax amount.",
            "items": {
              "$ref": "#/components/schemas/TaxCloudRefundItemResponse"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "returnedDate": {
            "description": "RFC3339 datetime the refund took effect.",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "connectionId",
          "items"
        ],
        "type": "object"
      },
      "TaxCloudRefundTax": {
        "additionalProperties": false,
        "properties": {
          "amount": {
            "description": "The tax amount refunded for the item, calculated proportionally from the order's tax. When the order had discounts, this reflects tax on the discounted price.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "amount"
        ],
        "type": "object"
      },
      "TaxCloudTax": {
        "additionalProperties": false,
        "properties": {
          "amount": {
            "description": "The calculated tax amount for the line item, in the transaction currency.",
            "examples": [
              1.31
            ],
            "format": "double",
            "type": "number"
          },
          "rate": {
            "description": "The combined tax rate applied to the line item, as a decimal fraction (e.g. 0.08125 = 8.125%).",
            "examples": [
              0.08125
            ],
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "rate",
          "amount"
        ],
        "type": "object"
      },
      "UpdateMerchantRequest": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the merchant to update. The merchant must be owned by the calling account.",
            "type": "string"
          },
          "sendTaxcloudInvite": {
            "description": "Whether to email the merchant a TaxCloud invite when this request switches them to 'taxcloud'. Defaults to true. It has no effect on a request that does not change the compliance model, so repeating a request will not invite the merchant twice. The invite goes to the merchant's stored contactEmail; include an 'update' block to change that address first. A merchant with no contact email cannot be invited.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "setMerchantType": {
            "description": "Switches the merchant to a different compliance model. Use 'taxcloud' to have TaxCloud handle the merchant's registration, filing, and remittance: their status becomes 'taxcloud_invited' and they are emailed an invite. Use 'self-managed' to hand compliance back to the merchant: their status becomes 'external_compliance' and their stored TaxCloud credentials are removed. 'connected' and 'offline' are deprecated names for 'taxcloud' and 'self-managed'. Sending the merchant's current model changes nothing. Omit this field to leave the compliance model as it is.",
            "enum": [
              "taxcloud",
              "self-managed",
              "connected",
              "offline"
            ],
            "type": "string"
          },
          "update": {
            "$ref": "#/components/schemas/UpdateStruct",
            "description": "New values for the merchant's name and contact details. Every field in this block is replaced, so send the current value for anything you do not want to clear. Omit the block to change only the compliance model."
          }
        },
        "required": [
          "merchantId"
        ],
        "type": "object"
      },
      "UpdateMerchantResponse": {
        "additionalProperties": false,
        "properties": {
          "merchantId": {
            "description": "UUID of the updated merchant.",
            "type": "string"
          },
          "message": {
            "description": "Human-readable description of the result.",
            "type": "string"
          },
          "status": {
            "description": "Result status of the operation (e.g. 'success').",
            "type": "string"
          }
        },
        "required": [
          "status",
          "message",
          "merchantId"
        ],
        "type": "object"
      },
      "UpdateStruct": {
        "additionalProperties": false,
        "properties": {
          "contactEmail": {
            "description": "Updated email address of the merchant's primary contact.",
            "type": "string"
          },
          "contactFirst": {
            "description": "Updated first name of the merchant's primary contact.",
            "type": "string"
          },
          "contactLast": {
            "description": "Updated last name of the merchant's primary contact.",
            "type": "string"
          },
          "merchantName": {
            "description": "New legal or trading name of the merchant business. Required; must be 1–255 characters.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "referenceId": {
            "description": "The ID you use in your own system to identify this merchant.",
            "maxLength": 255,
            "type": "string"
          }
        },
        "required": [
          "merchantName"
        ],
        "type": "object"
      },
      "V10Response": {
        "additionalProperties": false,
        "properties": {
          "rCode": {
            "description": "Numeric status of the request. 100 = success; 101 = invalid/unknown API key; 102 = invalid state; 103 = invalid city; 104 = invalid postal code; 105 = invalid query string; 106 = unknown API error; 107 = feature/version not enabled for the plan; 108 = request rate limit exceeded; 109 = missing/incomplete/invalid address; 110 = valid request but no result found; 111 = invalid historical parameter; 112 = Canadian (international) rates not enabled; 113 = product rate rules not enabled.",
            "examples": [
              100
            ],
            "format": "int64",
            "type": "integer"
          },
          "results": {
            "description": "Tax rate results for the request. Postal-code-only lookups can return multiple entries (one per overlapping jurisdiction); address and coordinate lookups return a single entry. Empty when no rate is found (response code 110).",
            "items": {
              "$ref": "#/components/schemas/V10TaxResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "version": {
            "description": "Schema version of the response payload (e.g. 'v10').",
            "type": "string"
          }
        },
        "required": [
          "version",
          "rCode",
          "results"
        ],
        "type": "object"
      },
      "V10TaxResult": {
        "additionalProperties": false,
        "properties": {
          "geoCity": {
            "description": "Uppercase city name of the matched location, as resolved by geocoding.",
            "type": "string"
          },
          "geoCounty": {
            "description": "Uppercase county name of the matched location.",
            "type": "string"
          },
          "geoPostalCode": {
            "description": "5-digit postal code of the matched jurisdiction, as resolved by geocoding.",
            "type": "string"
          },
          "geoState": {
            "description": "Two-letter uppercase USPS state code of the matched location.",
            "type": "string"
          },
          "taxSales": {
            "description": "Combined sales tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district sales tax rates.",
            "format": "float",
            "type": "number"
          },
          "taxUse": {
            "description": "Combined use tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district use tax rates.",
            "format": "float",
            "type": "number"
          },
          "txbFreight": {
            "description": "Whether freight/shipping is taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          },
          "txbService": {
            "description": "Whether services/labor are taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          }
        },
        "required": [
          "geoPostalCode",
          "geoCity",
          "geoCounty",
          "geoState",
          "taxSales",
          "taxUse",
          "txbService",
          "txbFreight"
        ],
        "type": "object"
      },
      "V20Response": {
        "additionalProperties": false,
        "properties": {
          "rCode": {
            "description": "Numeric status of the request. 100 = success; 101 = invalid/unknown API key; 102 = invalid state; 103 = invalid city; 104 = invalid postal code; 105 = invalid query string; 106 = unknown API error; 107 = feature/version not enabled for the plan; 108 = request rate limit exceeded; 109 = missing/incomplete/invalid address; 110 = valid request but no result found; 111 = invalid historical parameter; 112 = Canadian (international) rates not enabled; 113 = product rate rules not enabled.",
            "format": "int64",
            "type": "integer"
          },
          "results": {
            "description": "Tax rate results for the request, each with a state/county/city breakdown. Empty when no rate is found (response code 110).",
            "items": {
              "$ref": "#/components/schemas/V20TaxResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "version": {
            "description": "Schema version of the response payload (e.g. 'v20').",
            "type": "string"
          }
        },
        "required": [
          "version",
          "rCode",
          "results"
        ],
        "type": "object"
      },
      "V20TaxResult": {
        "additionalProperties": false,
        "properties": {
          "citySalesTax": {
            "description": "City-level portion of the sales tax rate, as a decimal fraction. 0 when the location has no city-level tax.",
            "format": "float",
            "type": "number"
          },
          "cityTaxCode": {
            "description": "Tax code (jurisdiction identifier) for the city; for Texas addresses this is the TAID of the city that contains the address. Empty when the location has no city-level tax.",
            "type": "string"
          },
          "cityUseTax": {
            "description": "City-level portion of the use tax rate, as a decimal fraction. 0 when the location has no city-level tax.",
            "format": "float",
            "type": "number"
          },
          "countySalesTax": {
            "description": "County-level portion of the sales tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "countyTaxCode": {
            "description": "Tax code (jurisdiction identifier) for the county; empty when the location has no county-level tax.",
            "type": "string"
          },
          "countyUseTax": {
            "description": "County-level portion of the use tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "geoCity": {
            "description": "Uppercase city name of the matched location, as resolved by geocoding.",
            "type": "string"
          },
          "geoCounty": {
            "description": "Uppercase county name of the matched location.",
            "type": "string"
          },
          "geoPostalCode": {
            "description": "5-digit postal code of the matched jurisdiction, as resolved by geocoding.",
            "type": "string"
          },
          "geoState": {
            "description": "Two-letter uppercase USPS state code of the matched location.",
            "type": "string"
          },
          "stateSalesTax": {
            "description": "State-level portion of the sales tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "stateUseTax": {
            "description": "State-level portion of the use tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "taxSales": {
            "description": "Combined sales tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district sales tax rates.",
            "format": "float",
            "type": "number"
          },
          "taxUse": {
            "description": "Combined use tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district use tax rates.",
            "format": "float",
            "type": "number"
          },
          "txbFreight": {
            "description": "Whether freight/shipping is taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          },
          "txbService": {
            "description": "Whether services/labor are taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          }
        },
        "required": [
          "stateSalesTax",
          "stateUseTax",
          "citySalesTax",
          "cityUseTax",
          "cityTaxCode",
          "countySalesTax",
          "countyUseTax",
          "countyTaxCode",
          "geoPostalCode",
          "geoCity",
          "geoCounty",
          "geoState",
          "taxSales",
          "taxUse",
          "txbService",
          "txbFreight"
        ],
        "type": "object"
      },
      "V40Response": {
        "additionalProperties": false,
        "properties": {
          "rCode": {
            "description": "Numeric status of the request. 100 = success; 101 = invalid/unknown API key; 102 = invalid state; 103 = invalid city; 104 = invalid postal code; 105 = invalid query string; 106 = unknown API error; 107 = feature/version not enabled for the plan; 108 = request rate limit exceeded; 109 = missing/incomplete/invalid address; 110 = valid request but no result found; 111 = invalid historical parameter; 112 = Canadian (international) rates not enabled; 113 = product rate rules not enabled.",
            "format": "int64",
            "type": "integer"
          },
          "results": {
            "description": "Tax rate results for the request, each with a state/county/city breakdown plus up to five special districts. Empty when no rate is found (response code 110).",
            "items": {
              "$ref": "#/components/schemas/V40TaxResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "version": {
            "description": "Schema version of the response payload (e.g. 'v40').",
            "type": "string"
          }
        },
        "required": [
          "version",
          "rCode",
          "results"
        ],
        "type": "object"
      },
      "V40TaxResult": {
        "additionalProperties": false,
        "properties": {
          "citySalesTax": {
            "description": "City-level portion of the sales tax rate, as a decimal fraction. 0 when the location has no city-level tax.",
            "format": "float",
            "type": "number"
          },
          "cityTaxCode": {
            "description": "Tax code (jurisdiction identifier) for the city; for Texas addresses this is the TAID of the city that contains the address. Empty when the location has no city-level tax.",
            "type": "string"
          },
          "cityUseTax": {
            "description": "City-level portion of the use tax rate, as a decimal fraction. 0 when the location has no city-level tax.",
            "format": "float",
            "type": "number"
          },
          "countySalesTax": {
            "description": "County-level portion of the sales tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "countyTaxCode": {
            "description": "Tax code (jurisdiction identifier) for the county; empty when the location has no county-level tax.",
            "type": "string"
          },
          "countyUseTax": {
            "description": "County-level portion of the use tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "district1Code": {
            "description": "Tax code (jurisdiction identifier) of the first special tax district applied to this location; empty when no first district applies.",
            "type": "string"
          },
          "district1SalesTax": {
            "description": "Sales tax rate of the first special district, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "district1UseTax": {
            "description": "Use tax rate of the first special district, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "districtSalesTax": {
            "description": "Combined special-district sales tax rate (sum of the district1–district5 sales rates), as a decimal fraction. Special districts include transit authorities and other sub-county taxing areas.",
            "format": "float",
            "type": "number"
          },
          "districtUseTax": {
            "description": "Combined special-district use tax rate (sum of the district1–district5 use rates), as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "geoCity": {
            "description": "Uppercase city name of the matched location, as resolved by geocoding.",
            "type": "string"
          },
          "geoCounty": {
            "description": "Uppercase county name of the matched location.",
            "type": "string"
          },
          "geoPostalCode": {
            "description": "5-digit postal code of the matched jurisdiction, as resolved by geocoding.",
            "type": "string"
          },
          "geoState": {
            "description": "Two-letter uppercase USPS state code of the matched location.",
            "type": "string"
          },
          "stateSalesTax": {
            "description": "State-level portion of the sales tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "stateUseTax": {
            "description": "State-level portion of the use tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "taxSales": {
            "description": "Combined sales tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district sales tax rates.",
            "format": "float",
            "type": "number"
          },
          "taxUse": {
            "description": "Combined use tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district use tax rates.",
            "format": "float",
            "type": "number"
          },
          "txbFreight": {
            "description": "Whether freight/shipping is taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          },
          "txbService": {
            "description": "Whether services/labor are taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          }
        },
        "required": [
          "districtSalesTax",
          "districtUseTax",
          "district1Code",
          "district1SalesTax",
          "district1UseTax",
          "stateSalesTax",
          "stateUseTax",
          "citySalesTax",
          "cityUseTax",
          "cityTaxCode",
          "countySalesTax",
          "countyUseTax",
          "countyTaxCode",
          "geoPostalCode",
          "geoCity",
          "geoCounty",
          "geoState",
          "taxSales",
          "taxUse",
          "txbService",
          "txbFreight"
        ],
        "type": "object"
      },
      "V50AddressDetail": {
        "additionalProperties": false,
        "properties": {
          "geoLat": {
            "description": "Latitude of the geocoded location, or 0 when the location was not geocoded.",
            "format": "double",
            "type": "number"
          },
          "geoLng": {
            "description": "Longitude of the geocoded location, or 0 when the location was not geocoded.",
            "format": "double",
            "type": "number"
          },
          "incorporated": {
            "description": "Whether the geocoded point falls within incorporated city limits, as the string 'true' or 'false'.",
            "type": "string"
          },
          "normalizedAddress": {
            "description": "Standardized address returned by the geocoder, or empty when the location was not geocoded (e.g. postal-code-only lookups).",
            "type": "string"
          }
        },
        "required": [
          "normalizedAddress",
          "incorporated",
          "geoLat",
          "geoLng"
        ],
        "type": "object"
      },
      "V50Response": {
        "additionalProperties": false,
        "properties": {
          "addressDetail": {
            "$ref": "#/components/schemas/V50AddressDetail",
            "description": "Normalized and geocoded address details used for the lookup."
          },
          "rCode": {
            "description": "Numeric status of the request. 100 = success; 101 = invalid/unknown API key; 102 = invalid state; 103 = invalid city; 104 = invalid postal code; 105 = invalid query string; 106 = unknown API error; 107 = feature/version not enabled for the plan; 108 = request rate limit exceeded; 109 = missing/incomplete/invalid address; 110 = valid request but no result found; 111 = invalid historical parameter; 112 = Canadian (international) rates not enabled; 113 = product rate rules not enabled.",
            "format": "int64",
            "type": "integer"
          },
          "results": {
            "description": "Tax rate results for the request, each with a full state/county/city/district breakdown and sourcing model. Empty when no rate is found (response code 110).",
            "items": {
              "$ref": "#/components/schemas/V50TaxResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "satTaxDetail": {
            "$ref": "#/components/schemas/V50SingleArticleTax",
            "description": "Tennessee Single Article Tax breakdown. Present only when sat_item_total is supplied and the resolved location is in Tennessee."
          },
          "version": {
            "description": "Schema version of the response payload (e.g. 'v50').",
            "type": "string"
          }
        },
        "required": [
          "version",
          "rCode",
          "results",
          "addressDetail"
        ],
        "type": "object"
      },
      "V50SingleArticleTax": {
        "additionalProperties": false,
        "properties": {
          "appliedTotal": {
            "description": "Item total (dollars, formatted as a string) used as the basis for the Tennessee Single Article Tax calculation; echoes the sat_item_total request parameter.",
            "type": "string"
          },
          "countyTaxRate": {
            "description": "County tax rate (formatted as a string) applied in the single-article tax calculation.",
            "type": "string"
          },
          "localTaxLimit": {
            "description": "Maximum dollar amount of a single article that is subject to local tax under Tennessee SAT rules (formatted as a string).",
            "type": "string"
          },
          "localTaxTotal": {
            "description": "Total local tax (dollars, formatted as a string) computed for the single article up to the local tax limit.",
            "type": "string"
          },
          "stateAdditionalTaxTotal": {
            "description": "Additional state single-article tax (dollars, formatted as a string) applied to the portion of the item above the local tax limit.",
            "type": "string"
          }
        },
        "required": [
          "appliedTotal",
          "countyTaxRate",
          "localTaxLimit",
          "localTaxTotal",
          "stateAdditionalTaxTotal"
        ],
        "type": "object"
      },
      "V50TaxResult": {
        "additionalProperties": false,
        "properties": {
          "citySalesTax": {
            "description": "City-level portion of the sales tax rate, as a decimal fraction. 0 when the location has no city-level tax.",
            "format": "float",
            "type": "number"
          },
          "cityTaxCode": {
            "description": "Tax code (jurisdiction identifier) for the city; for Texas addresses this is the TAID of the city that contains the address. Empty when the location has no city-level tax.",
            "type": "string"
          },
          "cityUseTax": {
            "description": "City-level portion of the use tax rate, as a decimal fraction. 0 when the location has no city-level tax.",
            "format": "float",
            "type": "number"
          },
          "countySalesTax": {
            "description": "County-level portion of the sales tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "countyTaxCode": {
            "description": "Tax code (jurisdiction identifier) for the county; empty when the location has no county-level tax.",
            "type": "string"
          },
          "countyUseTax": {
            "description": "County-level portion of the use tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "district1Code": {
            "description": "Tax code (jurisdiction identifier) of the first special tax district applied to this location; empty when no first district applies.",
            "type": "string"
          },
          "district1SalesTax": {
            "description": "Sales tax rate of the first special district, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "district1UseTax": {
            "description": "Use tax rate of the first special district, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "district2Code": {
            "description": "Tax code (jurisdiction identifier) of the second special tax district; empty when no second district applies.",
            "type": "string"
          },
          "district2SalesTax": {
            "description": "Sales tax rate of the second special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "district2UseTax": {
            "description": "Use tax rate of the second special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "district3Code": {
            "description": "Tax code (jurisdiction identifier) of the third special tax district; empty when no third district applies.",
            "type": "string"
          },
          "district3SalesTax": {
            "description": "Sales tax rate of the third special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "district3UseTax": {
            "description": "Use tax rate of the third special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "district4Code": {
            "description": "Tax code (jurisdiction identifier) of the fourth special tax district; empty when no fourth district applies.",
            "type": "string"
          },
          "district4SalesTax": {
            "description": "Sales tax rate of the fourth special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "district4UseTax": {
            "description": "Use tax rate of the fourth special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "district5Code": {
            "description": "Tax code (jurisdiction identifier) of the fifth special tax district; empty when no fifth district applies.",
            "type": "string"
          },
          "district5SalesTax": {
            "description": "Sales tax rate of the fifth special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "district5UseTax": {
            "description": "Use tax rate of the fifth special district, as a decimal fraction.",
            "format": "double",
            "type": "number"
          },
          "districtSalesTax": {
            "description": "Combined special-district sales tax rate (sum of the district1–district5 sales rates), as a decimal fraction. Special districts include transit authorities and other sub-county taxing areas.",
            "format": "float",
            "type": "number"
          },
          "districtUseTax": {
            "description": "Combined special-district use tax rate (sum of the district1–district5 use rates), as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "geoCity": {
            "description": "Uppercase city name of the matched location, as resolved by geocoding.",
            "type": "string"
          },
          "geoCounty": {
            "description": "Uppercase county name of the matched location.",
            "type": "string"
          },
          "geoPostalCode": {
            "description": "5-digit postal code of the matched jurisdiction, as resolved by geocoding.",
            "type": "string"
          },
          "geoState": {
            "description": "Two-letter uppercase USPS state code of the matched location.",
            "type": "string"
          },
          "originDestination": {
            "description": "Sourcing model used for this location: 'D' = destination-based (rate of the ship-to address), 'O' = origin-based (rate of the ship-from address).",
            "enum": [
              "D",
              "O"
            ],
            "type": "string"
          },
          "stateSalesTax": {
            "description": "State-level portion of the sales tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "stateUseTax": {
            "description": "State-level portion of the use tax rate, as a decimal fraction.",
            "format": "float",
            "type": "number"
          },
          "taxSales": {
            "description": "Combined sales tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district sales tax rates.",
            "format": "float",
            "type": "number"
          },
          "taxUse": {
            "description": "Combined use tax rate for the location as a decimal fraction (e.g. 0.095 = 9.5%). Sum of the applicable state, county, city, and district use tax rates.",
            "format": "float",
            "type": "number"
          },
          "txbFreight": {
            "description": "Whether freight/shipping is taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          },
          "txbService": {
            "description": "Whether services/labor are taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          }
        },
        "required": [
          "district2Code",
          "district2SalesTax",
          "district2UseTax",
          "district3Code",
          "district3SalesTax",
          "district3UseTax",
          "district4Code",
          "district4SalesTax",
          "district4UseTax",
          "district5Code",
          "district5SalesTax",
          "district5UseTax",
          "originDestination",
          "districtSalesTax",
          "districtUseTax",
          "district1Code",
          "district1SalesTax",
          "district1UseTax",
          "stateSalesTax",
          "stateUseTax",
          "citySalesTax",
          "cityUseTax",
          "cityTaxCode",
          "countySalesTax",
          "countyUseTax",
          "countyTaxCode",
          "geoPostalCode",
          "geoCity",
          "geoCounty",
          "geoState",
          "taxSales",
          "taxUse",
          "txbService",
          "txbFreight"
        ],
        "type": "object"
      },
      "V60AddressComponents": {
        "additionalProperties": false,
        "properties": {
          "countryCode": {
            "description": "ISO-3 country code of the geocoded location (e.g. USA, CAN).",
            "type": "string"
          },
          "countryName": {
            "description": "Full country name of the geocoded location (e.g. United States, Canada).",
            "type": "string"
          },
          "stateCode": {
            "description": "State or province code (e.g. CA, ON).",
            "type": "string"
          },
          "state": {
            "description": "Full state or province name.",
            "type": "string"
          },
          "county": {
            "description": "County name, when available.",
            "type": "string"
          },
          "city": {
            "description": "City name.",
            "type": "string"
          },
          "street": {
            "description": "Street name.",
            "type": "string"
          },
          "postalCode": {
            "description": "Full postal code (ZIP+4 for US addresses when available; full Canadian postal code for Canadian addresses).",
            "type": "string"
          },
          "houseNumber": {
            "description": "House/street number, when available.",
            "type": "string"
          }
        },
        "required": [
          "countryCode",
          "countryName",
          "stateCode",
          "state",
          "county",
          "city",
          "street",
          "postalCode",
          "houseNumber"
        ],
        "type": "object"
      },
      "V60AddressDetail": {
        "additionalProperties": false,
        "properties": {
          "normalizedAddress": {
            "description": "Standardized address returned by the geocoder, or empty when the location was not geocoded (e.g. postal-code-only lookups).",
            "type": "string"
          },
          "incorporated": {
            "description": "Whether the location falls within incorporated city limits, as the string 'true' or 'false'.",
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          },
          "geoLat": {
            "description": "Latitude of the geocoded location, or 0 when the location was not geocoded.",
            "format": "float",
            "type": "number"
          },
          "geoLng": {
            "description": "Longitude of the geocoded location, or 0 when the location was not geocoded.",
            "format": "float",
            "type": "number"
          },
          "address": {
            "$ref": "#/components/schemas/V60AddressComponents",
            "description": "Extended address components from the geocoder. Present only when addressDetailExtended=true is supplied on a geocoded (address or lat/lng) lookup. Available for both USA and Canadian lookups."
          }
        },
        "required": [
          "normalizedAddress",
          "incorporated",
          "geoLat",
          "geoLng"
        ],
        "type": "object"
      },
      "V60BaseRate": {
        "additionalProperties": false,
        "properties": {
          "jurDescription": {
            "description": "Human-readable label combining the jurisdiction and tax type (e.g. 'US State Sales Tax').",
            "type": "string"
          },
          "jurName": {
            "description": "Name or code of the jurisdiction: state alpha code, county/city name, or district label (e.g. 'CA', 'ORANGE', 'Local District: 37').",
            "type": "string"
          },
          "jurTaxCode": {
            "description": "FIPS-like tax code for the jurisdiction (state, county, city, or district). For Texas city components this is the TAID published for the city that contains the address. Null when the jurisdiction has no associated code.",
            "type": [
              "string",
              "null"
            ]
          },
          "jurType": {
            "description": "Jurisdiction level combined with the tax kind (sales vs use) this component represents.",
            "enum": [
              "US_STATE_SALES_TAX",
              "US_STATE_USE_TAX",
              "US_COUNTY_SALES_TAX",
              "US_COUNTY_USE_TAX",
              "US_CITY_SALES_TAX",
              "US_CITY_USE_TAX",
              "US_DISTRICT_SALES_TAX",
              "US_DISTRICT_USE_TAX"
            ],
            "type": "string"
          },
          "rate": {
            "description": "Tax rate for this jurisdiction/tax-type component, as a decimal fraction (e.g. 0.0625 = 6.25%).",
            "format": "float",
            "type": "number"
          }
        },
        "required": [
          "rate",
          "jurType",
          "jurName",
          "jurDescription",
          "jurTaxCode"
        ],
        "type": "object"
      },
      "V60DisplayRate": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "Label for this display rate line (e.g. the jurisdiction name).",
            "type": "string"
          },
          "rate": {
            "description": "Rate for this display line, as a decimal fraction.",
            "format": "float",
            "type": "number"
          }
        },
        "required": [
          "name",
          "rate"
        ],
        "type": "object"
      },
      "V60Metadata": {
        "additionalProperties": false,
        "properties": {
          "response": {
            "$ref": "#/components/schemas/V60ResponseInfo",
            "description": "Response-code detail: numeric code, symbolic name, human-readable message, and a URL to the response schema definition."
          },
          "version": {
            "description": "Schema version of the response payload.",
            "examples": [
              "v60"
            ],
            "type": "string"
          }
        },
        "required": [
          "version",
          "response"
        ],
        "type": "object"
      },
      "V60OriginDestination": {
        "additionalProperties": false,
        "properties": {
          "adjustmentType": {
            "description": "Sourcing ruleset name. Currently always 'ORIGIN_DESTINATION'.",
            "examples": [
              "ORIGIN_DESTINATION"
            ],
            "type": "string"
          },
          "description": {
            "description": "Human-readable description of the sourcing model applied (e.g. 'Destination Based Taxation').",
            "type": "string"
          },
          "value": {
            "description": "Sourcing basis for the location: 'O' = origin-based (ship-from rate), 'D' = destination-based (ship-to rate).",
            "enum": [
              "O",
              "D"
            ],
            "type": "string"
          }
        },
        "required": [
          "adjustmentType",
          "description",
          "value"
        ],
        "type": "object"
      },
      "V60ProductDetail": {
        "additionalProperties": false,
        "properties": {
          "taxabilityCode": {
            "$ref": "#/components/schemas/V60TaxabilityCode",
            "description": "Resolved taxability code details and the product rate rules that apply in this jurisdiction."
          }
        },
        "required": [
          "taxabilityCode"
        ],
        "type": "object"
      },
      "V60RateRule": {
        "additionalProperties": false,
        "properties": {
          "effectiveDt": {
            "description": "Date the rule takes effect, in YYYYMMDD format; null when not specified.",
            "examples": [
              20200101
            ],
            "format": "int64",
            "type": [
              "integer",
              "null"
            ]
          },
          "effectiveTaxRate": {
            "description": "Decimal tax rate that applies to this product in this jurisdiction; null when not specified.",
            "examples": [
              0.0175
            ],
            "format": "float",
            "type": [
              "number",
              "null"
            ]
          },
          "exemptOver": {
            "description": "Amounts above this dollar value are exempt; null when not specified.",
            "format": "float",
            "type": [
              "number",
              "null"
            ]
          },
          "exemptUnder": {
            "description": "Line-item exemption threshold; amounts below this dollar value are exempt; null when not specified.",
            "format": "float",
            "type": [
              "number",
              "null"
            ]
          },
          "expiresDt": {
            "description": "Date the rule expires, in YYYYMMDD format; null means the rule is still in effect.",
            "format": "int64",
            "type": [
              "integer",
              "null"
            ]
          },
          "isDestinationTaxType": {
            "description": "Whether the rule follows destination-based sourcing; null when not specified.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "isFoodDrug": {
            "description": "Hint indicating the product falls under food/drug category classification; null when not specified.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "jurTaxCode": {
            "description": "Code identifying the jurisdiction the rule applies to: a FIPS-like code (state, county, or city), or a conditional jurisdiction code of the form 36:XX-#### or 36:XX-L#### (NY ST-100.3 codes for location-resolved school district / city / county rules; the code is specific to the form part the TIC is sourced from); null when not specified.",
            "examples": [
              "06"
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "perVolumeTaxRate": {
            "description": "Per-volume tax rate for volume-based TIC overrides (e.g., $0.05/mL); null when not applicable.",
            "format": "float",
            "type": "number"
          },
          "perVolumeUnit": {
            "description": "Unit of measurement for perVolumeTaxRate (e.g., mL); null when not applicable.",
            "type": "string"
          },
          "percentTaxable": {
            "description": "Fraction of the sale that is taxable (for example, 0.5 means half-exempt); null when not specified.",
            "format": "float",
            "type": [
              "number",
              "null"
            ]
          },
          "rateCapPerUnit": {
            "description": "Maximum tax rate cap per unit for capped TIC overrides (e.g., $0.30/cigar); null when not applicable.",
            "format": "float",
            "type": "number"
          },
          "taxablePortionOver": {
            "description": "Only the amount over this threshold is taxed; null when not specified.",
            "format": "float",
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "jurTaxCode",
          "effectiveDt",
          "expiresDt",
          "effectiveTaxRate",
          "percentTaxable",
          "exemptUnder",
          "exemptOver",
          "taxablePortionOver",
          "isDestinationTaxType",
          "isFoodDrug"
        ],
        "type": "object"
      },
      "V60Response": {
        "additionalProperties": false,
        "properties": {
          "addressDetail": {
            "$ref": "#/components/schemas/V60AddressDetail",
            "description": "Normalized and geocoded address details used for the lookup."
          },
          "baseRates": {
            "description": "Component tax rates broken out by jurisdiction level (state/county/city/district) and tax type (sales/use). Sum the relevant components to obtain a combined rate.",
            "items": {
              "$ref": "#/components/schemas/V60BaseRate"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/V60Metadata",
            "description": "Versioning and response-code metadata for the request."
          },
          "productDetail": {
            "$ref": "#/components/schemas/V60ProductDetail",
            "description": "Product-specific tax rules. Present only when a taxabilityCode is supplied on the request and the account carries the product_rates entitlement."
          },
          "service": {
            "$ref": "#/components/schemas/V60Service",
            "description": "Whether services/labor are taxable in the resolved jurisdiction."
          },
          "shipping": {
            "$ref": "#/components/schemas/V60Shipping",
            "description": "Whether freight/shipping is taxable in the resolved jurisdiction."
          },
          "sourcingRules": {
            "$ref": "#/components/schemas/V60OriginDestination",
            "description": "Sourcing model (origin- vs destination-based) that applies to the resolved location."
          },
          "taxSummaries": {
            "description": "Aggregated sales and use tax rates for the location, summarizing the base rate components.",
            "items": {
              "$ref": "#/components/schemas/V60TaxSummary"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "metadata",
          "baseRates",
          "service",
          "shipping",
          "sourcingRules",
          "taxSummaries",
          "addressDetail"
        ],
        "type": "object"
      },
      "V60ResponseInfo": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "description": "Numeric status code (100 = success)",
            "examples": [
              100
            ],
            "format": "int64",
            "type": "integer"
          },
          "definition": {
            "description": "URL to the response schema",
            "examples": [
              "http://api.zip-tax.com/request/v60/schema"
            ],
            "type": "string"
          },
          "message": {
            "description": "Human-readable summary",
            "examples": [
              "Successful API Request."
            ],
            "type": "string"
          },
          "name": {
            "description": "Symbolic status name",
            "examples": [
              "RESPONSE_CODE_SUCCESS"
            ],
            "type": "string"
          }
        },
        "required": [
          "code",
          "name",
          "message",
          "definition"
        ],
        "type": "object"
      },
      "V60Service": {
        "additionalProperties": false,
        "properties": {
          "adjustmentType": {
            "description": "Service taxation classification. Currently always 'SERVICE_TAXABLE'.",
            "examples": [
              "SERVICE_TAXABLE"
            ],
            "type": "string"
          },
          "description": {
            "description": "Human-readable explanation of the service taxability determination.",
            "type": "string"
          },
          "taxable": {
            "description": "Whether services/labor are taxable in this jurisdiction. 'Y' = the service is fully taxable and must be separately stated on the invoice; 'N' = the service is not taxable and must be separately stated on the invoice; 'L' = the service is not taxable, but the labor portion is taxable and both must be separately stated on the invoice.",
            "enum": [
              "Y",
              "N",
              "L"
            ],
            "type": "string"
          }
        },
        "required": [
          "adjustmentType",
          "taxable",
          "description"
        ],
        "type": "object"
      },
      "V60Shipping": {
        "additionalProperties": false,
        "properties": {
          "adjustmentType": {
            "description": "Freight taxation classification. Currently always 'FREIGHT_TAXABLE'.",
            "examples": [
              "FREIGHT_TAXABLE"
            ],
            "type": "string"
          },
          "description": {
            "description": "Human-readable explanation of the freight/shipping taxability determination.",
            "type": "string"
          },
          "shippingExtended": {
            "$ref": "#/components/schemas/V60ShippingExtended",
            "description": "Extended state-level shipping rule detail. Present only when shippingExtended=true is supplied on the request."
          },
          "taxable": {
            "description": "Whether freight/shipping is taxable in this jurisdiction. 'Y' = taxable, 'N' = not taxable.",
            "enum": [
              "Y",
              "N"
            ],
            "type": "string"
          }
        },
        "required": [
          "adjustmentType",
          "taxable",
          "description"
        ],
        "type": "object"
      },
      "V60ShippingExtended": {
        "additionalProperties": false,
        "properties": {
          "description": {
            "description": "Human-readable description of the shipping taxability rule.",
            "type": "string"
          },
          "exemptWhenSeparatelyStated": {
            "description": "Whether shipping is exempt when separately stated on the invoice, as the string 'true' or 'false'.",
            "type": "string"
          },
          "rule": {
            "description": "General shipping-taxability rule for the state: one of EXEMPT, EXEMPT_WHEN_SEPARATELY_STATED, ITEM_SPECIFIC, CONDITIONAL, or TAXABLE.",
            "type": "string"
          },
          "stateCode": {
            "description": "Two-letter state code the shipping rule applies to.",
            "type": "string"
          },
          "stateName": {
            "description": "Full state name the shipping rule applies to.",
            "type": "string"
          }
        },
        "required": [
          "stateName",
          "stateCode",
          "rule",
          "exemptWhenSeparatelyStated",
          "description"
        ],
        "type": "object"
      },
      "V60TaxSummary": {
        "additionalProperties": false,
        "properties": {
          "displayRates": {
            "description": "Per-line rate breakdown displayed under this summary.",
            "items": {
              "$ref": "#/components/schemas/V60DisplayRate"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "rate": {
            "description": "Aggregated tax rate for this summary line, as a decimal fraction (e.g. 0.0775 = 7.75%).",
            "format": "float",
            "type": "number"
          },
          "summaryName": {
            "description": "Human-readable name of the summary grouping (e.g. 'Sales Tax').",
            "type": "string"
          },
          "taxType": {
            "description": "Tax kind this summary aggregates: 'SALES_TAX' or 'USE_TAX'.",
            "enum": [
              "SALES_TAX",
              "USE_TAX"
            ],
            "type": "string"
          }
        },
        "required": [
          "rate",
          "taxType",
          "summaryName",
          "displayRates"
        ],
        "type": "object"
      },
      "V60TaxabilityCode": {
        "additionalProperties": false,
        "properties": {
          "countyFIPS": {
            "description": "County FIPS code resolved for the request location.",
            "examples": [
              "059"
            ],
            "type": "string"
          },
          "id": {
            "description": "Taxability Information Code (TIC) supplied on the request.",
            "examples": [
              "20010"
            ],
            "type": "string"
          },
          "label": {
            "description": "Longer description of the TIC.",
            "examples": [
              "Medications dispensed pursuant to a prescription"
            ],
            "type": "string"
          },
          "rateActionCode": {
            "description": "Outcome of the TIC lookup: T00 (valid TIC, rules listed), T01 (valid TIC, no applicable rate rules), T02 (invalid TIC), T03 (invalid TIC format).",
            "enum": [
              "T00",
              "T01",
              "T02",
              "T03"
            ],
            "examples": [
              "T00"
            ],
            "type": "string"
          },
          "rateActionMessage": {
            "description": "Human-readable explanation of the rateActionCode.",
            "examples": [
              "Valid tic, rules listed."
            ],
            "type": "string"
          },
          "rateRules": {
            "description": "Product rate rules that apply to this TIC in the resolved jurisdiction, filtered to rules active on the current date.",
            "items": {
              "$ref": "#/components/schemas/V60RateRule"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "stateFIPS": {
            "description": "State FIPS code resolved for the request location.",
            "examples": [
              "6"
            ],
            "type": "string"
          },
          "title": {
            "description": "Short title of the TIC.",
            "examples": [
              "Prescription drugs"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "stateFIPS",
          "countyFIPS",
          "title",
          "label",
          "rateActionCode",
          "rateActionMessage",
          "rateRules"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "ApiKeyHeader": {
        "description": "API key in header",
        "in": "header",
        "name": "X-API-KEY",
        "type": "apiKey"
      },
      "ApiKeyQuery": {
        "description": "API key for authentication",
        "in": "query",
        "name": "key",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "contact": {
      "email": "support@ziptax.com",
      "name": "ZipTax Support",
      "url": "https://ziptax.com"
    },
    "description": "Production-ready RESTful service for US and Canadian sales tax data lookup",
    "title": "ZipTax API",
    "version": "5.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/account/metrics": {
      "get": {
        "description": "Returns usage metrics for the authenticated account",
        "operationId": "getAccountMetrics",
        "parameters": [
          {
            "description": "API key identifying the account whose usage metrics are returned. May be supplied as this query parameter or the X-API-KEY header.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key identifying the account whose usage metrics are returned. May be supplied as this query parameter or the X-API-KEY header.",
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricsResponse"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Account Metrics",
        "tags": [
          "Account"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/account/v50/metrics": {
      "get": {
        "description": "Returns usage metrics for the authenticated account in the legacy core/geo format (the /account/metrics shape without the merchant_* counters).",
        "operationId": "getAccountMetricsV50",
        "parameters": [
          {
            "description": "API key identifying the account whose usage metrics are returned. May be supplied as this query parameter or the X-API-KEY header.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key identifying the account whose usage metrics are returned. May be supplied as this query parameter or the X-API-KEY header.",
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricsV50Response"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Account Metrics (v5.0)",
        "tags": [
          "Account"
        ],
        "x-fern-audiences": [
          "v50"
        ]
      }
    },
    "/account/v60/metrics": {
      "get": {
        "description": "Returns usage metrics for the authenticated account in the simplified v6.0 format. In v6.0 all keys are geo keys, so the counters reflect geo usage.",
        "operationId": "getAccountMetricsV60",
        "parameters": [
          {
            "description": "API key identifying the account whose usage metrics are returned. May be supplied as this query parameter or the X-API-KEY header.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key identifying the account whose usage metrics are returned. May be supplied as this query parameter or the X-API-KEY header.",
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricsV60Response"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Account Metrics",
        "tags": [
          "Account"
        ],
        "x-fern-audiences": [
          "v60"
        ]
      }
    },
    "/data/tic": {
      "get": {
        "description": "Returns Taxability Information Code (TIC) data",
        "operationId": "getTICData",
        "parameters": [
          {
            "description": "Serialization format of the response body: 'json' (default) or 'xml'.",
            "explode": false,
            "in": "query",
            "name": "format",
            "schema": {
              "default": "json",
              "description": "Serialization format of the response body: 'json' (default) or 'xml'.",
              "enum": [
                "json",
                "xml"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TICResponse"
                }
              }
            },
            "description": "OK"
          },
          "default": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Error"
          }
        },
        "summary": "Get TIC Codes",
        "tags": [
          "Data"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/cart/calculate": {
      "post": {
        "description": "Calculates sales tax for one or more carts on behalf of a merchant. The request contract is the same for both merchant management modes, so a caller does not have to know which mode a merchant is in. TaxCloud-managed merchant: the request is forwarded to TaxCloud (POST /connections/{connectionId}/carts) using the merchant's stored credentials and TaxCloud's response is returned verbatim; capture the returned cartId with /merchant/order/create-from-cart to record the sale. Self-managed merchant: the cart is calculated in-process by the Ziptax rate engine, US destinations only, and nothing is persisted - the returned cartId correlates the response with the request and cannot be captured as an order, and the other stateful /merchant endpoints return 403. Self-managed calculation rejects (rather than ignores) fields it cannot honour: discounts, exemption, deliveredBySeller, productId, and any currency other than USD. A value that asks for nothing is accepted, so a caller that always emits the TaxCloud shape is not refused: deliveredBySeller false, and an exemption claiming no exemption ({} or {\"isExempt\": false}). TIC vocabulary also differs: self-managed carts use Ziptax TICs, where 10001 is shipping and 11000 is handling, and TaxCloud's shipping TICs 11010-11015 and the Colorado retail delivery fee TIC 11098 are rejected with 400 because they cannot be mapped onto the in-process shipping and handling treatment. A self-managed interstate cart whose destination address cannot be resolved returns 422 rather than being sourced at its origin, which would quote another state's rate. A self-managed request may contain at most 2500 line items summed across all carts; a larger batch is rejected with 400 before any cart is calculated. Calculation has no lasting side effect in either mode and is safe to retry.",
        "operationId": "merchantCartCalculate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantCartCalculateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/CartCalculateResponseBody"
                    },
                    {
                      "$ref": "#/components/schemas/SelfManagedCartCalculateResponseBody"
                    }
                  ]
                }
              }
            },
            "description": "Calculated carts. For a TaxCloud-managed merchant this is TaxCloud's response relayed verbatim; for a self-managed merchant it is the Ziptax calculation, which has no connectionId, exemption, or deliveredBySeller."
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartCalculateResponseBody"
                }
              }
            },
            "description": "Resource created. TaxCloud's 201 response is relayed verbatim, including any Location header."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Calculate Cart Tax",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/cert/create": {
      "post": {
        "description": "Creates an exemption certificate for one of the merchant's customers. The request is forwarded to TaxCloud POST /connections/{connectionId}/exemption-certificates using the merchant's stored credentials and TaxCloud's response is returned verbatim. Reference the returned certificateId as exemptionId on carts and orders to apply the exemption. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantCertCreate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantCertCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudCertResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudCertResponse"
                }
              }
            },
            "description": "Resource created. TaxCloud's 201 response is relayed verbatim, including any Location header."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Create Exemption Certificate (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/cert/delete": {
      "post": {
        "description": "Deletes (disables) an exemption certificate so it can no longer be applied to new transactions. The request is forwarded to TaxCloud DELETE /connections/{connectionId}/exemption-certificates/{certificateId} using the merchant's stored credentials and TaxCloud's response is returned verbatim. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantCertDelete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantCertDeleteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "204": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Resource deleted. TaxCloud's 204 (no content) response is relayed verbatim."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Delete Exemption Certificate (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/cert/get": {
      "post": {
        "description": "Retrieves a single exemption certificate. The request is forwarded to TaxCloud GET /connections/{connectionId}/exemption-certificates/{certificateId} using the merchant's stored credentials and TaxCloud's response is returned verbatim. This is a read and is safe to retry. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantCertGet",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantCertGetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudCertResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Exemption Certificate (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/cert/list": {
      "post": {
        "description": "Lists the merchant's exemption certificates with cursor-based pagination. The request is forwarded to TaxCloud GET /exemption-certificates, scoped to the merchant's connection, with the optional filter fields mapped onto the query string; TaxCloud's response is returned verbatim. This is a read and is safe to retry. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantCertList",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantCertListRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudCertListResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "List Exemption Certificates (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/create": {
      "post": {
        "description": "Creates a new merchant under the authenticated account. Requires X-API-KEY header.",
        "operationId": "createMerchant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateMerchantResponse"
                }
              }
            },
            "description": "Created"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Create Merchant",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/credentials/delete": {
      "post": {
        "description": "Deletes TaxCloud credentials for a merchant. The caller must own the merchant.",
        "operationId": "deleteMerchantCredentials",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteMerchantCredentialsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteMerchantCredentialsResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Delete Merchant Credentials",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/credentials/get": {
      "post": {
        "description": "Retrieves TaxCloud credentials for a merchant. The caller must own the merchant.",
        "operationId": "getMerchantCredentials",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetMerchantCredentialsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMerchantCredentialsResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Merchant Credentials",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/credentials/set": {
      "post": {
        "description": "Sets or updates TaxCloud credentials for a merchant. Credentials are encrypted at rest with AES-256-GCM. On success an asynchronous webhook notification is sent to the configured endpoint.",
        "operationId": "setMerchantCredentials",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetMerchantCredentialsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetMerchantCredentialsResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Set Merchant Credentials",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/delete": {
      "post": {
        "description": "Deletes a merchant. You can only delete merchants that belong to your account. Requests for any other merchant, or for one that has already been deleted, return 403.",
        "operationId": "deleteMerchant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteMerchantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteMerchantResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Delete Merchant",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/get": {
      "post": {
        "description": "Returns a single merchant by ID. You can only read merchants that belong to your account. Requests for any other merchant, or for one that has been deleted, return 404.",
        "operationId": "getMerchant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetMerchantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMerchantResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Merchant",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/list": {
      "get": {
        "description": "Returns every active merchant on your account. Deleted merchants are not included.",
        "operationId": "listMerchants",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Item"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "List Merchants",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/nexus/create": {
      "post": {
        "description": "Records one or more physical locations for a merchant. A merchant's physical locations are what establish its nexus, and nexus is what decides whether a sale is sourced at its origin or its destination, so this is the data a self-managed cart calculation depends on.\n\nEach address is geocoded as it is written, and the normalized result is what every response returns; expect the address you get back to differ from the one you sent. If any address in the request cannot be resolved to a US state the whole request is rejected with 422 and nothing is stored, so a retry cannot duplicate the locations that would otherwise have succeeded.\n\nAddress resolution for the whole request is budgeted at 10 seconds. A batch that exceeds it returns 504 and stores nothing; send fewer locations per call if you hit this. Geocoding that had already completed is still billed, because the lookups were still performed.\n\nAvailable to self-managed merchants only. A TaxCloud-managed merchant's nexus is held in TaxCloud, so this returns 403 for them.",
        "operationId": "merchantNexusCreate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantNexusCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantNexusCreateResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Service Unavailable"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Create Nexus Locations",
        "tags": [
          "Merchant Nexus"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/nexus/delete": {
      "post": {
        "description": "Removes a recorded location so it no longer contributes to the merchant's nexus. The location stops appearing in /merchant/nexus/list immediately, and is retained internally so past filings keep their basis.\n\nRemoving a merchant's last location is allowed: it simply means no physical nexus is tracked for them. Deleting a location that is already gone returns 404.\n\nAvailable to self-managed merchants only; a TaxCloud-managed merchant returns 403.",
        "operationId": "merchantNexusDelete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantNexusDeleteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantNexusDeleteResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Delete Nexus Location",
        "tags": [
          "Merchant Nexus"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/nexus/list": {
      "post": {
        "description": "Returns a merchant's recorded nexus locations. Deleted locations are not included.\n\nAvailable to self-managed merchants only; a TaxCloud-managed merchant returns 403, and their nexus is read through the Management API instead.",
        "operationId": "merchantNexusList",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantNexusListRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantNexusListResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "List Nexus Locations",
        "tags": [
          "Merchant Nexus"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/nexus/update": {
      "post": {
        "description": "Replaces a recorded location.\n\nThe `location` block is a full replacement, not a patch: every field in it is written, so send the current value for anything you do not want cleared. The address is geocoded again, so an update may change the normalized address even when you send the same string, and a location can be moved to a different state this way.\n\nAvailable to self-managed merchants only; a TaxCloud-managed merchant returns 403.",
        "operationId": "merchantNexusUpdate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantNexusUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantNexusUpdateResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Update Nexus Location",
        "tags": [
          "Merchant Nexus"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/order/create": {
      "post": {
        "description": "Records an order directly, without a prior cart calculation; the tax amounts on each line item are the amounts your checkout collected. The request is forwarded to TaxCloud POST /connections/{connectionId}/orders using the merchant's stored credentials and TaxCloud's response is returned verbatim. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantOrderCreate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantOrderCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudOrderResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudOrderResponse"
                }
              }
            },
            "description": "Resource created. TaxCloud's 201 response is relayed verbatim, including any Location header."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Create Order (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/order/create-from-cart": {
      "post": {
        "description": "Captures a cart previously calculated with /merchant/cart/calculate as a recorded order. The request is forwarded to TaxCloud POST /connections/{connectionId}/carts/orders using the merchant's stored credentials and TaxCloud's response is returned verbatim. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantOrderCreateFromCart",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantOrderCreateFromCartRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudOrderResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudOrderResponse"
                }
              }
            },
            "description": "Resource created. TaxCloud's 201 response is relayed verbatim, including any Location header."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Create Order From Cart (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/order/get": {
      "post": {
        "description": "Retrieves a recorded order. The request is forwarded to TaxCloud GET /connections/{connectionId}/orders/{orderId} using the merchant's stored credentials and TaxCloud's response is returned verbatim. This is a read and is safe to retry. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantOrderGet",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantOrderGetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudOrderResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Order (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/order/update": {
      "post": {
        "description": "Modifies a recorded order; currently the completedDate can be set to mark the order shipped, creating the tax liability. The request is forwarded to TaxCloud PATCH /connections/{connectionId}/orders/{orderId} using the merchant's stored credentials and TaxCloud's response is returned verbatim. Updates overwrite the fields you send, so do not retry them blindly. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantOrderUpdate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantOrderUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudOrderResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Update Order (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/refund/create": {
      "post": {
        "description": "Refunds all or part of a recorded order. The request is forwarded to TaxCloud POST /connections/{connectionId}/orders/refunds/{orderId} using the merchant's stored credentials and TaxCloud's response is returned verbatim. Refund prices and tax amounts are calculated automatically from the order; when the order had discounts, refunds use the discounted prices actually paid. Do not retry refunds blindly - a duplicate submission records a duplicate refund. Available only for TaxCloud-managed merchants: a self-managed merchant has no TaxCloud connection to store or read this state in, so the request is refused with 403 and only /merchant/cart/calculate is supported.",
        "operationId": "merchantRefundCreate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MerchantRefundCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudRefundResponse"
                }
              }
            },
            "description": "TaxCloud response relayed verbatim."
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxCloudRefundResponse"
                }
              }
            },
            "description": "Resource created. TaxCloud's 201 response is relayed verbatim, including any Location header."
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Request Entity Too Large"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Create Refund (TaxCloud)",
        "tags": [
          "Merchant TaxCloud"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/merchant/update": {
      "post": {
        "description": "Updates a merchant's details, its compliance model, or both.\n\nSend `update` to change the merchant's name and contact details, `setMerchantType` to switch the merchant between the `taxcloud` and `self-managed` compliance models, or both together. At least one of the two is required.\n\nSwitching the compliance model sets the merchant's `status`: `taxcloud` produces `taxcloud_invited` and emails the merchant a TaxCloud invite, `self-managed` produces `external_compliance`.\n\n**Switching to `self-managed` disconnects the merchant from TaxCloud.** Their stored TaxCloud credentials are removed, so the order, exemption certificate, and refund endpoints return 403 for them and cart calculation switches to Ziptax's own rate engine. Reconnecting later means switching back to `taxcloud` and setting their credentials again via \"Set Merchant Credentials\".\n\nSending the compliance model a merchant already has changes nothing and does not re-send the invite, so a request is safe to repeat.\n\nYou can only update merchants that belong to your account. Requests for any other merchant, or for one that has been deleted, return 403.",
        "operationId": "updateMerchant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateMerchantResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Update Merchant",
        "tags": [
          "Merchant"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/nexus-threshold/list": {
      "post": {
        "description": "Returns the economic nexus thresholds that decide when a seller has to register in a state: the sales figure, the transaction count where one still applies, how the two combine, which sales count toward them, whether marketplace sales are included, and the period each state measures over.\n\nThis is reference data. It is the same for every caller and is not derived from your sales: compare it against your own totals to work out where you are approaching a threshold.\n\nSend no body, or no `stateCodes`, to get every jurisdiction the country publishes. `countryCode` defaults to USA, currently the only country published. States with no general statewide sales tax (Delaware, Montana, New Hampshire, Oregon) are returned with `noSalesTax: true` and null thresholds rather than omitted.\n\nA `stateCodes` list naming a code that is not published is rejected with 400 rather than answered with the states that did match, so a typo cannot read back as 'this state has no threshold'.",
        "operationId": "nexusThresholdList",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NexusThresholdListRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NexusThresholdListResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "List Economic Nexus Thresholds",
        "tags": [
          "Nexus Thresholds"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/request/v10": {
      "get": {
        "description": "Returns basic tax rate information with 8 fields including combined rates",
        "operationId": "getTaxRatesV10",
        "parameters": [
          {
            "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
              "examples": [
                "your-api-key"
              ],
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          },
          {
            "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
            "explode": false,
            "in": "query",
            "name": "format",
            "schema": {
              "default": "json",
              "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
              "enum": [
                "json",
                "xml"
              ],
              "type": "string"
            }
          },
          {
            "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
            "explode": false,
            "in": "query",
            "name": "postalcode",
            "schema": {
              "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
              "examples": [
                "90210"
              ],
              "maxLength": 5,
              "minLength": 5,
              "pattern": "^[0-9]{5}$",
              "type": "string"
            }
          },
          {
            "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
            "explode": false,
            "in": "query",
            "name": "address",
            "schema": {
              "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
              "examples": [
                "123 Main St"
              ],
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
            "explode": false,
            "in": "query",
            "name": "state",
            "schema": {
              "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
              "examples": [
                "CA"
              ],
              "maxLength": 2,
              "minLength": 2,
              "pattern": "^[A-Z]{2}$",
              "type": "string"
            }
          },
          {
            "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
            "explode": false,
            "in": "query",
            "name": "city",
            "schema": {
              "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
              "examples": [
                "Beverly Hills"
              ],
              "maxLength": 50,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V10Response"
                }
              }
            },
            "description": "OK"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Tax Rates (v1.0)",
        "tags": [
          "Tax Rates"
        ],
        "x-fern-audiences": [
          "v10"
        ]
      }
    },
    "/request/v20": {
      "get": {
        "description": "Returns detailed tax breakdown with 16 fields including use tax rates",
        "operationId": "getTaxRatesV20",
        "parameters": [
          {
            "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
              "examples": [
                "your-api-key"
              ],
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          },
          {
            "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
            "explode": false,
            "in": "query",
            "name": "format",
            "schema": {
              "default": "json",
              "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
              "enum": [
                "json",
                "xml"
              ],
              "type": "string"
            }
          },
          {
            "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
            "explode": false,
            "in": "query",
            "name": "postalcode",
            "schema": {
              "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
              "examples": [
                "90210"
              ],
              "maxLength": 5,
              "minLength": 5,
              "pattern": "^[0-9]{5}$",
              "type": "string"
            }
          },
          {
            "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
            "explode": false,
            "in": "query",
            "name": "address",
            "schema": {
              "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
              "examples": [
                "123 Main St"
              ],
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
            "explode": false,
            "in": "query",
            "name": "state",
            "schema": {
              "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
              "examples": [
                "CA"
              ],
              "maxLength": 2,
              "minLength": 2,
              "pattern": "^[A-Z]{2}$",
              "type": "string"
            }
          },
          {
            "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
            "explode": false,
            "in": "query",
            "name": "city",
            "schema": {
              "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
              "examples": [
                "Beverly Hills"
              ],
              "maxLength": 50,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V20Response"
                }
              }
            },
            "description": "OK"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Tax Rates (v2.0)",
        "tags": [
          "Tax Rates"
        ],
        "x-fern-audiences": [
          "v20"
        ]
      }
    },
    "/request/v30": {
      "get": {
        "description": "Returns tax rates with same structure as v2.0 (compatibility version)",
        "operationId": "getTaxRatesV30",
        "parameters": [
          {
            "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
              "examples": [
                "your-api-key"
              ],
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          },
          {
            "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
            "explode": false,
            "in": "query",
            "name": "format",
            "schema": {
              "default": "json",
              "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
              "enum": [
                "json",
                "xml"
              ],
              "type": "string"
            }
          },
          {
            "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
            "explode": false,
            "in": "query",
            "name": "postalcode",
            "schema": {
              "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
              "examples": [
                "90210"
              ],
              "maxLength": 5,
              "minLength": 5,
              "pattern": "^[0-9]{5}$",
              "type": "string"
            }
          },
          {
            "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
            "explode": false,
            "in": "query",
            "name": "address",
            "schema": {
              "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
              "examples": [
                "123 Main St"
              ],
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
            "explode": false,
            "in": "query",
            "name": "state",
            "schema": {
              "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
              "examples": [
                "CA"
              ],
              "maxLength": 2,
              "minLength": 2,
              "pattern": "^[A-Z]{2}$",
              "type": "string"
            }
          },
          {
            "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
            "explode": false,
            "in": "query",
            "name": "city",
            "schema": {
              "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
              "examples": [
                "Beverly Hills"
              ],
              "maxLength": 50,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V20Response"
                }
              }
            },
            "description": "OK"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Tax Rates (v3.0)",
        "tags": [
          "Tax Rates"
        ],
        "x-fern-audiences": [
          "v30"
        ]
      }
    },
    "/request/v40": {
      "get": {
        "description": "Returns tax rates with multi-district support (22+ fields)",
        "operationId": "getTaxRatesV40",
        "parameters": [
          {
            "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
              "examples": [
                "your-api-key"
              ],
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          },
          {
            "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
            "explode": false,
            "in": "query",
            "name": "format",
            "schema": {
              "default": "json",
              "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
              "enum": [
                "json",
                "xml"
              ],
              "type": "string"
            }
          },
          {
            "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
            "explode": false,
            "in": "query",
            "name": "postalcode",
            "schema": {
              "description": "5-digit US ZIP code to look up. When supplied on its own (no street address), the response may contain multiple results — one per tax jurisdiction that overlaps the ZIP. An invalid format returns response code 104.",
              "examples": [
                "90210"
              ],
              "maxLength": 5,
              "minLength": 5,
              "pattern": "^[0-9]{5}$",
              "type": "string"
            }
          },
          {
            "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
            "explode": false,
            "in": "query",
            "name": "address",
            "schema": {
              "description": "Street address to geocode to a single rooftop-level jurisdiction. When supplied (typically alongside city/state or postal code) the API geocodes the address and returns the one applicable rate. An incomplete or ungeocodable address returns response code 109.",
              "examples": [
                "123 Main St"
              ],
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
            "explode": false,
            "in": "query",
            "name": "state",
            "schema": {
              "description": "Two-letter USPS state abbreviation. Used together with city or postal code to disambiguate the location. An invalid format returns response code 102.",
              "examples": [
                "CA"
              ],
              "maxLength": 2,
              "minLength": 2,
              "pattern": "^[A-Z]{2}$",
              "type": "string"
            }
          },
          {
            "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
            "explode": false,
            "in": "query",
            "name": "city",
            "schema": {
              "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
              "examples": [
                "Beverly Hills"
              ],
              "maxLength": 50,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V40Response"
                }
              }
            },
            "description": "OK"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Tax Rates (v4.0)",
        "tags": [
          "Tax Rates"
        ],
        "x-fern-audiences": [
          "v40"
        ]
      }
    },
    "/request/v40/activate": {
      "get": {
        "description": "Activates v4.0 features for the account",
        "operationId": "activateV40",
        "parameters": [
          {
            "description": "API key for authentication",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key for authentication",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "default": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Activate v4.0 Features",
        "tags": [
          "Tax Rates"
        ],
        "x-fern-audiences": [
          "v40"
        ]
      }
    },
    "/request/v50": {
      "get": {
        "description": "Returns comprehensive tax rates with geocoding support, multi-district breakdown,\n\t\t\tand Tennessee Single Article Tax calculations. Supports both USA and Canada.",
        "operationId": "getTaxRatesV50",
        "parameters": [
          {
            "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
              "examples": [
                "your-api-key"
              ],
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          },
          {
            "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
            "explode": false,
            "in": "query",
            "name": "format",
            "schema": {
              "default": "json",
              "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
              "enum": [
                "json",
                "xml"
              ],
              "type": "string"
            }
          },
          {
            "description": "Country of the lookup: 'USA' (default), 'CAN', or a US territory (ASM, GUM, MNP, PRI, VIR). 'CAN' requires the Canadian rates (rate_loc_can) entitlement; otherwise the request returns response code 112. US territories are looked up via the USA path and require no additional entitlement.",
            "explode": false,
            "in": "query",
            "name": "countryCode",
            "schema": {
              "default": "USA",
              "description": "Country of the lookup: 'USA' (default), 'CAN', or a US territory (ASM, GUM, MNP, PRI, VIR). 'CAN' requires the Canadian rates (rate_loc_can) entitlement; otherwise the request returns response code 112. US territories are looked up via the USA path and require no additional entitlement.",
              "enum": [
                "USA",
                "CAN",
                "PRI",
                "ASM",
                "GUM",
                "MNP",
                "VIR"
              ],
              "type": "string"
            }
          },
          {
            "description": "5-digit US ZIP code to look up. When supplied on its own the response may contain multiple results, one per overlapping jurisdiction. An invalid format returns response code 104.",
            "explode": false,
            "in": "query",
            "name": "postalcode",
            "schema": {
              "description": "5-digit US ZIP code to look up. When supplied on its own the response may contain multiple results, one per overlapping jurisdiction. An invalid format returns response code 104.",
              "maxLength": 5,
              "minLength": 5,
              "pattern": "^[0-9]{5}$",
              "type": "string"
            }
          },
          {
            "description": "Street address to geocode to a single rooftop-level jurisdiction. Geocoding requires the geo_enabled entitlement; an incomplete or ungeocodable address returns response code 109.",
            "explode": false,
            "in": "query",
            "name": "address",
            "schema": {
              "description": "Street address to geocode to a single rooftop-level jurisdiction. Geocoding requires the geo_enabled entitlement; an incomplete or ungeocodable address returns response code 109.",
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "description": "State name or two-letter abbreviation. Used with city or postal code to disambiguate the location. An invalid format returns response code 102.",
            "explode": false,
            "in": "query",
            "name": "state",
            "schema": {
              "description": "State name or two-letter abbreviation. Used with city or postal code to disambiguate the location. An invalid format returns response code 102.",
              "maxLength": 50,
              "type": "string"
            }
          },
          {
            "description": "Two-letter state code (e.g. CA). Alternative to 'state' for supplying the state as a code rather than a name.",
            "explode": false,
            "in": "query",
            "name": "stateCode",
            "schema": {
              "description": "Two-letter state code (e.g. CA). Alternative to 'state' for supplying the state as a code rather than a name.",
              "maxLength": 2,
              "minLength": 2,
              "pattern": "^[A-Z]{2}$",
              "type": "string"
            }
          },
          {
            "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
            "explode": false,
            "in": "query",
            "name": "city",
            "schema": {
              "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
              "maxLength": 50,
              "type": "string"
            }
          },
          {
            "description": "County name used to refine the lookup when supplied without a street address.",
            "explode": false,
            "in": "query",
            "name": "county",
            "schema": {
              "description": "County name used to refine the lookup when supplied without a street address.",
              "maxLength": 50,
              "type": "string"
            }
          },
          {
            "description": "Latitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
            "explode": false,
            "in": "query",
            "name": "lat",
            "schema": {
              "description": "Latitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
              "format": "double",
              "maximum": 90,
              "minimum": -90,
              "type": "number"
            }
          },
          {
            "description": "Longitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
            "explode": false,
            "in": "query",
            "name": "lng",
            "schema": {
              "description": "Longitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
              "format": "double",
              "maximum": 180,
              "minimum": -180,
              "type": "number"
            }
          },
          {
            "description": "Unincorporated-area handling. Only the value 'auto' has an effect: on geo (address) lookups in unincorporated areas it applies the appropriate sourcing adjustment. No default is applied when omitted, and no other value (including 'origin'/'destination') changes the result.",
            "explode": false,
            "in": "query",
            "name": "adjustment",
            "schema": {
              "description": "Unincorporated-area handling. Only the value 'auto' has an effect: on geo (address) lookups in unincorporated areas it applies the appropriate sourcing adjustment. No default is applied when omitted, and no other value (including 'origin'/'destination') changes the result.",
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "description": "Single-article item total in dollars used to compute Tennessee Single Article Tax (SAT). When greater than 0 and the location is in Tennessee, the response includes the satTaxDetail object describing the local tax limit and additional state tax on the single article.",
            "explode": false,
            "in": "query",
            "name": "sat_item_total",
            "schema": {
              "description": "Single-article item total in dollars used to compute Tennessee Single Article Tax (SAT). When greater than 0 and the location is in Tennessee, the response includes the satTaxDetail object describing the local tax limit and additional state tax on the single article.",
              "format": "double",
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "description": "Historical period to price the lookup against, formatted YYYYMM (6 digits, e.g. 202401). Returns the rates that were in effect for that month. Requires historical data to be enabled; an invalid format returns response code 111.",
            "explode": false,
            "in": "query",
            "name": "historical",
            "schema": {
              "description": "Historical period to price the lookup against, formatted YYYYMM (6 digits, e.g. 202401). Returns the rates that were in effect for that month. Requires historical data to be enabled; an invalid format returns response code 111.",
              "pattern": "^[0-9]{6}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V50Response"
                }
              }
            },
            "description": "OK"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Tax Rates (v5.0)",
        "tags": [
          "Tax Rates"
        ],
        "x-fern-audiences": [
          "v50"
        ]
      }
    },
    "/request/v60": {
      "get": {
        "description": "Returns tax rates in a new structured format with separate base rates,\n\t\t\tservice/shipping taxability, and tax summaries. Built on v5.0 data but with enhanced organization. Note: postal-code-only lookups (no address or lat/lng) return the legacy v5.0-style response body (version, rCode, results) rather than the structured object documented here.",
        "operationId": "getTaxRatesV60",
        "parameters": [
          {
            "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
            "explode": false,
            "in": "query",
            "name": "key",
            "schema": {
              "description": "API key that authenticates the request and resolves the account's plan, entitlements, and rate limits. Supply it either as this query parameter or the X-API-KEY request header. A missing, malformed, or unknown key returns response code 101.",
              "examples": [
                "your-api-key"
              ],
              "maxLength": 100,
              "minLength": 10,
              "type": "string"
            }
          },
          {
            "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
            "explode": false,
            "in": "query",
            "name": "format",
            "schema": {
              "default": "json",
              "description": "Serialization format of the response body. 'json' (default) returns a JSON object; 'xml' returns the same data as an XML document.",
              "enum": [
                "json",
                "xml"
              ],
              "type": "string"
            }
          },
          {
            "description": "Country of the lookup: 'USA' (default), 'CAN', or a US territory (ASM, GUM, MNP, PRI, VIR). 'CAN' requires the Canadian rates (rate_loc_can) entitlement; otherwise the request returns response code 112. US territories are looked up via the USA path and require no additional entitlement.",
            "explode": false,
            "in": "query",
            "name": "countryCode",
            "schema": {
              "default": "USA",
              "description": "Country of the lookup: 'USA' (default), 'CAN', or a US territory (ASM, GUM, MNP, PRI, VIR). 'CAN' requires the Canadian rates (rate_loc_can) entitlement; otherwise the request returns response code 112. US territories are looked up via the USA path and require no additional entitlement.",
              "enum": [
                "USA",
                "CAN",
                "PRI",
                "ASM",
                "GUM",
                "MNP",
                "VIR"
              ],
              "type": "string"
            }
          },
          {
            "description": "5-digit US ZIP code to look up. When supplied on its own the response may contain rates for multiple overlapping jurisdictions. An invalid format returns response code 104.",
            "explode": false,
            "in": "query",
            "name": "postalcode",
            "schema": {
              "description": "5-digit US ZIP code to look up. When supplied on its own the response may contain rates for multiple overlapping jurisdictions. An invalid format returns response code 104.",
              "maxLength": 5,
              "minLength": 5,
              "pattern": "^[0-9]{5}$",
              "type": "string"
            }
          },
          {
            "description": "Street address to geocode to a single rooftop-level jurisdiction. Geocoding requires the geo_enabled entitlement; an incomplete or ungeocodable address returns response code 109.",
            "explode": false,
            "in": "query",
            "name": "address",
            "schema": {
              "description": "Street address to geocode to a single rooftop-level jurisdiction. Geocoding requires the geo_enabled entitlement; an incomplete or ungeocodable address returns response code 109.",
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "description": "State name or two-letter abbreviation. Used with city or postal code to disambiguate the location. An invalid format returns response code 102.",
            "explode": false,
            "in": "query",
            "name": "state",
            "schema": {
              "description": "State name or two-letter abbreviation. Used with city or postal code to disambiguate the location. An invalid format returns response code 102.",
              "maxLength": 50,
              "type": "string"
            }
          },
          {
            "description": "Two-letter state code (e.g. CA). Alternative to 'state' for supplying the state as a code rather than a name.",
            "explode": false,
            "in": "query",
            "name": "stateCode",
            "schema": {
              "description": "Two-letter state code (e.g. CA). Alternative to 'state' for supplying the state as a code rather than a name.",
              "maxLength": 2,
              "minLength": 2,
              "pattern": "^[A-Z]{2}$",
              "type": "string"
            }
          },
          {
            "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
            "explode": false,
            "in": "query",
            "name": "city",
            "schema": {
              "description": "City name used together with state to narrow the lookup when no street address is supplied. An invalid format returns response code 103.",
              "maxLength": 50,
              "type": "string"
            }
          },
          {
            "description": "County name used to refine the lookup when supplied without a street address.",
            "explode": false,
            "in": "query",
            "name": "county",
            "schema": {
              "description": "County name used to refine the lookup when supplied without a street address.",
              "maxLength": 50,
              "type": "string"
            }
          },
          {
            "description": "Latitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
            "explode": false,
            "in": "query",
            "name": "lat",
            "schema": {
              "description": "Latitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
              "format": "double",
              "maximum": 90,
              "minimum": -90,
              "type": "number"
            }
          },
          {
            "description": "Longitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
            "explode": false,
            "in": "query",
            "name": "lng",
            "schema": {
              "description": "Longitude of a geographic point. When both lat and lng are supplied the API resolves the single jurisdiction containing that point (coordinate lookup).",
              "format": "double",
              "maximum": 180,
              "minimum": -180,
              "type": "number"
            }
          },
          {
            "description": "Sourcing/unincorporated-area handling. Defaults to 'auto', which applies the appropriate sourcing adjustment on geo (address) lookups in unincorporated areas. The values 'origin' and 'destination' are accepted but currently do not change the resolved result.",
            "explode": false,
            "in": "query",
            "name": "adjustment",
            "schema": {
              "default": "auto",
              "description": "Sourcing/unincorporated-area handling. Defaults to 'auto', which applies the appropriate sourcing adjustment on geo (address) lookups in unincorporated areas. The values 'origin' and 'destination' are accepted but currently do not change the resolved result.",
              "enum": [
                "auto",
                "origin",
                "destination"
              ],
              "type": "string"
            }
          },
          {
            "description": "Single-article item total in dollars, used for Tennessee Single Article Tax (SAT) calculation on TN address lookups. Note: the v6.0 response does not currently return a SAT breakdown object; the SAT detail (satTaxDetail) is available in the v5.0 response.",
            "explode": false,
            "in": "query",
            "name": "sat_item_total",
            "schema": {
              "description": "Single-article item total in dollars, used for Tennessee Single Article Tax (SAT) calculation on TN address lookups. Note: the v6.0 response does not currently return a SAT breakdown object; the SAT detail (satTaxDetail) is available in the v5.0 response.",
              "format": "double",
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "description": "Historical period to price the lookup against, formatted YYYYMM (6 digits, e.g. 202401). Returns the rates that were in effect for that month. Requires historical data to be enabled; an invalid format returns response code 111.",
            "explode": false,
            "in": "query",
            "name": "historical",
            "schema": {
              "description": "Historical period to price the lookup against, formatted YYYYMM (6 digits, e.g. 202401). Returns the rates that were in effect for that month. Requires historical data to be enabled; an invalid format returns response code 111.",
              "pattern": "^[0-9]{6}$",
              "type": "string"
            }
          },
          {
            "description": "Product Taxability Information Code (TIC). When supplied, the response includes a productDetail object describing the rate rules that apply to that product category in the resolved jurisdiction. Accepts numeric standard TIC codes (e.g., 20010) or alphanumeric override codes (e.g., CIR00001). Requires the product_rates entitlement for standard codes.",
            "explode": false,
            "in": "query",
            "name": "taxabilityCode",
            "schema": {
              "description": "Product Taxability Information Code (TIC). When supplied, the response includes a productDetail object describing the rate rules that apply to that product category in the resolved jurisdiction. Accepts numeric standard TIC codes (e.g., 20010) or alphanumeric override codes (e.g., CIR00001). Requires the product_rates entitlement for standard codes.",
              "examples": [
                "20010"
              ],
              "pattern": "^[A-Za-z0-9]{1,10}$",
              "type": "string"
            }
          },
          {
            "description": "When true, returns a full geocoding object in the response broken into address parts (street, city, postal code, etc.). Defaults to false.",
            "explode": false,
            "in": "query",
            "name": "addressDetailExtended",
            "schema": {
              "default": false,
              "description": "When true, returns a full geocoding object in the response broken into address parts (street, city, postal code, etc.). Defaults to false.",
              "type": "boolean"
            }
          },
          {
            "description": "When true, returns a detailed shipping object to help navigate collection complexity. The GENERAL_RULE value will be one of: EXEMPT, EXEMPT_WHEN_SEPARATELY_STATED, ITEM_SPECIFIC, CONDITIONAL, or TAXABLE. For EXEMPT_WHEN_SEPARATELY_STATED, the response includes a boolean flag, and a natural-language description is included for clarity. Defaults to false.",
            "explode": false,
            "in": "query",
            "name": "shippingExtended",
            "schema": {
              "default": false,
              "description": "When true, returns a detailed shipping object to help navigate collection complexity. The GENERAL_RULE value will be one of: EXEMPT, EXEMPT_WHEN_SEPARATELY_STATED, ITEM_SPECIFIC, CONDITIONAL, or TAXABLE. For EXEMPT_WHEN_SEPARATELY_STATED, the response includes a boolean flag, and a natural-language description is included for clarity. Defaults to false.",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V60Response"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Forbidden"
          },
          "405": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Method Not Allowed"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyQuery": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "summary": "Get Tax Rates",
        "tags": [
          "Tax Rates"
        ],
        "x-fern-audiences": [
          "v60"
        ]
      }
    },
    "/schemas/ticsearch": {
      "get": {
        "description": "Returns the JSON Schema describing the TIC search response body. Public; no authentication required.",
        "operationId": "getTICSearchSchema",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "default": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Error"
          }
        },
        "summary": "Get TIC Search JSON Schema",
        "tags": [
          "Search"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/search/tic": {
      "post": {
        "description": "Searches Taxability Information Codes (TIC) by free-text product description and returns ranked matches. Requires authentication via the X-API-KEY header or key query parameter.",
        "operationId": "searchTIC",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TICSearchRequestBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TICSearchResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          },
          {
            "ApiKeyQuery": []
          }
        ],
        "summary": "Search TIC Codes",
        "tags": [
          "Search"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/search/tic/recommend": {
      "post": {
        "description": "Returns a recommended Taxability Information Code (TIC) for a free-text product description using a machine-learning model. Requires authentication via the X-API-KEY header or key query parameter.",
        "operationId": "recommendTIC",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TICRecommendRequestBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TICRecommendResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unauthorized"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Bad Gateway"
          },
          "504": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Gateway Timeout"
          }
        },
        "security": [
          {
            "ApiKeyHeader": []
          },
          {
            "ApiKeyQuery": []
          }
        ],
        "summary": "Recommend TIC Code",
        "tags": [
          "Search"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/system/health": {
      "get": {
        "description": "Returns the health status of the API and its components",
        "operationId": "getHealth",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            },
            "description": "OK"
          },
          "default": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Error"
          }
        },
        "summary": "Health Check",
        "tags": [
          "System"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    },
    "/system/metadata": {
      "get": {
        "description": "Returns system metadata including version and environment information",
        "operationId": "getMetadata",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetadataResponse"
                }
              }
            },
            "description": "OK"
          },
          "default": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Error"
          }
        },
        "summary": "Get System Metadata",
        "tags": [
          "System"
        ],
        "x-fern-audiences": [
          "v10",
          "v20",
          "v30",
          "v40",
          "v50",
          "v60"
        ]
      }
    }
  },
  "servers": [
    {
      "description": "Production Server",
      "url": "https://api.zip-tax.com"
    },
    {
      "description": "Local Development Server",
      "url": "http://localhost:8080"
    }
  ],
  "tags": [
    {
      "description": "Sales tax rate lookup operations",
      "name": "Tax Rates"
    },
    {
      "description": "System health and metadata operations",
      "name": "System"
    },
    {
      "description": "Account management and metrics",
      "name": "Account"
    },
    {
      "description": "Tax data and TIC code operations",
      "name": "Data"
    },
    {
      "description": "Merchant management and credential operations",
      "name": "Merchant"
    },
    {
      "description": "Physical nexus locations for self-managed merchants",
      "name": "Merchant Nexus"
    }
  ]
}