{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/recurly/json-schema/recurly-item-schema.json",
  "title": "Item",
  "description": "Full item details.",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/recurly-item-api-openapi.yml#/components/schemas/Item",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "title": "Item ID",
      "maxLength": 13,
      "readOnly": true
    },
    "object": {
      "type": "string",
      "title": "Object type",
      "readOnly": true
    },
    "code": {
      "type": "string",
      "title": "Item code",
      "description": "Unique code to identify the item.",
      "pattern": "/^[a-z0-9_+-]+$/",
      "maxLength": 50
    },
    "state": {
      "title": "State",
      "description": "The current state of the item.",
      "readOnly": true,
      "$ref": "#/$defs/ActiveStateEnum"
    },
    "name": {
      "type": "string",
      "title": "Name",
      "description": "This name describes your item and will appear on the invoice when it's purchased on a one time basis.",
      "maxLength": 255
    },
    "description": {
      "type": "string",
      "title": "Description",
      "description": "Optional, description."
    },
    "external_sku": {
      "type": "string",
      "title": "External SKU",
      "description": "Optional, stock keeping unit to link the item to other inventory systems.",
      "maxLength": 50
    },
    "accounting_code": {
      "type": "string",
      "title": "Item accounting code",
      "description": "Accounting code for invoice line items.",
      "pattern": "/^[a-z0-9_+-]+$/",
      "maxLength": 20
    },
    "revenue_schedule_type": {
      "title": "Revenue schedule type",
      "$ref": "#/$defs/RevenueScheduleTypeEnum"
    },
    "performance_obligation_id": {
      "type": "string",
      "title": "Performance Obligation ID",
      "description": "The ID of a performance obligation. Performance obligations are\nonly accessible as a part of the Recurly RevRec Standard and\nRecurly RevRec Advanced features.\n",
      "maxLength": 13
    },
    "liability_gl_account_id": {
      "type": "string",
      "title": "General Ledger Account ID",
      "description": "The ID of a general ledger account. General ledger accounts are\nonly accessible as a part of the Recurly RevRec Standard and\nRecurly RevRec Advanced features.\n",
      "maxLength": 13
    },
    "revenue_gl_account_id": {
      "type": "string",
      "title": "General Ledger Account ID",
      "description": "The ID of a general ledger account. General ledger accounts are\nonly accessible as a part of the Recurly RevRec Standard and\nRecurly RevRec Advanced features.\n",
      "maxLength": 13
    },
    "avalara_transaction_type": {
      "type": "integer",
      "title": "Avalara Transaction Type",
      "description": "Used by Avalara for Communications taxes. The transaction type in combination with the service type describe how the item is taxed. Refer to [the documentation](https://help.avalara.com/AvaTax_for_Communications/Tax_Calculation/AvaTax_for_Communications_Tax_Engine/Mapping_Resources/TM_00115_AFC_Modules_Corresponding_Transaction_Types) for more available t/s types.",
      "minimum": 0
    },
    "avalara_service_type": {
      "type": "integer",
      "title": "Avalara Service Type",
      "description": "Used by Avalara for Communications taxes. The transaction type in combination with the service type describe how the item is taxed. Refer to [the documentation](https://help.avalara.com/AvaTax_for_Communications/Tax_Calculation/AvaTax_for_Communications_Tax_Engine/Mapping_Resources/TM_00115_AFC_Modules_Corresponding_Transaction_Types) for more available t/s types.",
      "minimum": 0
    },
    "tax_code": {
      "type": "string",
      "maxLength": 50,
      "title": "Tax code",
      "description": "Optional field used by Avalara, Vertex, and Recurly's In-the-Box tax solution to determine taxation rules. You can pass in specific tax codes using any of these tax integrations. For Recurly's In-the-Box tax offering you can also choose to instead use simple values of `unknown`, `physical`, or `digital` tax codes."
    },
    "harmonized_system_code": {
      "type": "string",
      "title": "Harmonized System code",
      "description": "The Harmonized System (HS) code is an internationally standardized system of names and numbers to classify traded products. The HS code, sometimes called Commodity Code, is used by customs authorities around the world to identify products when assessing duties and taxes. The HS code may also be referred to as the tariff code or customs code. Values should contain only digits and decimals.",
      "pattern": "^\\d+(\\.\\d+)*$",
      "maxLength": 25
    },
    "tax_exempt": {
      "type": "boolean",
      "title": "Tax exempt?",
      "description": "`true` exempts tax on the item, `false` applies tax on the item."
    },
    "custom_fields": {
      "$ref": "#/$defs/CustomFields"
    },
    "currencies": {
      "type": "array",
      "title": "Item Pricing",
      "items": {
        "$ref": "#/$defs/Pricing"
      }
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "title": "Created at",
      "readOnly": true
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "title": "Last updated at",
      "readOnly": true
    },
    "deleted_at": {
      "type": "string",
      "format": "date-time",
      "title": "Deleted at",
      "readOnly": true
    }
  },
  "$defs": {
    "ActiveStateEnum": {
      "type": "string",
      "enum": [
        "active",
        "inactive"
      ]
    },
    "CurrencyCode": {
      "type": "string",
      "title": "Currency",
      "description": "3-letter ISO 4217 currency code.",
      "maxLength": 3
    },
    "CustomField": {
      "type": "object",
      "title": "Custom field",
      "properties": {
        "name": {
          "type": "string",
          "title": "Field name",
          "description": "Fields must be created in the UI before values can be assigned to them.",
          "pattern": "/^[a-z0-9_-]+$/i",
          "maxLength": 50
        },
        "value": {
          "type": "string",
          "title": "Field value",
          "description": "Any values that resemble a credit card number or security code (CVV/CVC) will be rejected.",
          "maxLength": 255
        },
        "source_record_type": {
          "type": "string",
          "title": "Source record type",
          "description": "The type of record this custom field was automatically copied from. Only present when the field was copied from another record.",
          "readOnly": true,
          "$ref": "#/$defs/SourceRecordTypeEnum"
        },
        "source_record_id": {
          "type": "string",
          "title": "Source record ID",
          "description": "The UUID of the record this custom field was automatically copied from. Only present when the field was copied from another record.",
          "readOnly": true
        }
      },
      "required": [
        "name",
        "value"
      ]
    },
    "CustomFields": {
      "type": "array",
      "title": "Custom fields",
      "description": "The custom fields will only be altered when they are included in a request. Sending an empty array will not remove any existing values. To remove a field send the name with a null or empty value.",
      "items": {
        "$ref": "#/$defs/CustomField"
      }
    },
    "Pricing": {
      "type": "object",
      "properties": {
        "currency": {
          "$ref": "#/$defs/CurrencyCode"
        },
        "unit_amount": {
          "$ref": "#/$defs/UnitAmount"
        },
        "tax_inclusive": {
          "$ref": "#/$defs/TaxInclusive"
        }
      },
      "required": [
        "currency",
        "unit_amount"
      ]
    },
    "RevenueScheduleTypeEnum": {
      "type": "string",
      "enum": [
        "at_range_end",
        "at_range_start",
        "evenly",
        "never"
      ]
    },
    "SourceRecordTypeEnum": {
      "type": "string",
      "description": "The type of record a custom field was automatically copied from.",
      "enum": [
        "account",
        "plan",
        "product",
        "subscription"
      ]
    },
    "TaxInclusive": {
      "type": "boolean",
      "title": "Tax Inclusive?",
      "default": false,
      "description": "This field is deprecated. Please do not use it.",
      "deprecated": true
    },
    "UnitAmount": {
      "type": "number",
      "format": "float",
      "minimum": 0,
      "maximum": 1000000
    }
  }
}