{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/recurly/json-schema/recurly-invoice-collection-schema.json",
  "title": "Invoice collection",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/recurly-recover-openapi.yml#/components/schemas/InvoiceCollection",
  "type": "object",
  "properties": {
    "object": {
      "type": "string",
      "title": "Object type"
    },
    "charge_invoice": {
      "$ref": "#/$defs/Invoice"
    },
    "credit_invoices": {
      "type": "array",
      "title": "Credit invoices",
      "items": {
        "$ref": "#/$defs/Invoice"
      }
    },
    "verification_transactions": {
      "type": "array",
      "title": "Verification transactions",
      "description": "Verification transactions (used for free trial payment method validation)",
      "items": {
        "$ref": "#/$defs/Transaction"
      }
    }
  },
  "$defs": {
    "AccountMini": {
      "type": "object",
      "title": "Account mini details",
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 13,
          "readOnly": true
        },
        "object": {
          "type": "string",
          "title": "Object type",
          "readOnly": true
        },
        "code": {
          "type": "string",
          "description": "The unique identifier of the account.",
          "maxLength": 50
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "The email address used for communicating with this customer.",
          "maxLength": 255
        },
        "first_name": {
          "type": "string",
          "maxLength": 255
        },
        "last_name": {
          "type": "string",
          "maxLength": 255
        },
        "company": {
          "type": "string",
          "maxLength": 255
        },
        "parent_account_id": {
          "type": "string",
          "maxLength": 13
        },
        "bill_to": {
          "type": "string",
          "maxLength": 6
        },
        "dunning_campaign_id": {
          "type": "string",
          "title": "Dunning Campaign ID",
          "description": "Unique ID to identify a dunning campaign. Used to specify if a non-default dunning campaign should be assigned to this account. For sites without multiple dunning campaigns enabled, the default dunning campaign will always be used."
        }
      }
    },
    "Address": {
      "type": "object",
      "properties": {
        "phone": {
          "type": "string",
          "title": "Phone number"
        },
        "street1": {
          "type": "string",
          "title": "Street 1",
          "maxLength": 50
        },
        "street2": {
          "type": "string",
          "title": "Street 2",
          "maxLength": 50
        },
        "city": {
          "type": "string",
          "title": "City"
        },
        "region": {
          "type": "string",
          "title": "State/Province",
          "description": "State or province."
        },
        "postal_code": {
          "type": "string",
          "title": "Zip/Postal code",
          "description": "Zip or postal code."
        },
        "country": {
          "type": "string",
          "title": "Country",
          "description": "Country, 2-letter ISO 3166-1 alpha-2 code."
        },
        "geo_code": {
          "type": "string",
          "maxLength": 20,
          "description": "Code that represents a geographic entity (location or object). Only returned when Vertex or Avalara for Communications is enabled."
        }
      }
    },
    "AddressWithName": {
      "allOf": [
        {
          "$ref": "#/$defs/Address"
        }
      ],
      "type": "object",
      "properties": {
        "first_name": {
          "type": "string",
          "title": "First name"
        },
        "last_name": {
          "type": "string",
          "title": "Last name"
        }
      }
    },
    "CouponDiscount": {
      "type": "object",
      "description": "Details of the discount a coupon applies. Will contain a `type`\nproperty and one of the following properties: `percent`, `fixed`, `trial`.\n",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "fixed",
            "free_trial",
            "percent"
          ]
        },
        "percent": {
          "description": "This is only present when `type=percent`.",
          "type": "integer"
        },
        "currencies": {
          "type": "array",
          "description": "This is only present when `type=fixed`.",
          "items": {
            "$ref": "#/$defs/CouponDiscountPricing"
          }
        },
        "trial": {
          "type": "object",
          "x-class-name": "CouponDiscountTrial",
          "description": "This is only present when `type=free_trial`.",
          "properties": {
            "unit": {
              "title": "Trial unit",
              "description": "Temporal unit of the free trial. When `billing_period`, `length` represents the number of billing cycles.",
              "type": "string",
              "enum": [
                "day",
                "month",
                "week",
                "billing_period"
              ]
            },
            "length": {
              "type": "integer",
              "title": "Trial length",
              "description": "Trial length measured in the units specified by the sibling `unit` property"
            }
          }
        }
      }
    },
    "CouponDiscountPricing": {
      "type": "object",
      "properties": {
        "currency": {
          "type": "string",
          "title": "Currency",
          "description": "3-letter ISO 4217 currency code.",
          "maxLength": 3
        },
        "amount": {
          "type": "number",
          "format": "float",
          "title": "Discount Amount",
          "description": "Value of the fixed discount that this coupon applies."
        }
      }
    },
    "CouponMini": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "title": "Coupon ID",
          "readOnly": true
        },
        "object": {
          "type": "string",
          "title": "Object type",
          "readOnly": true
        },
        "code": {
          "type": "string",
          "title": "Coupon code",
          "description": "The code the customer enters to redeem the coupon."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The internal name for the coupon."
        },
        "state": {
          "title": "State",
          "description": "Indicates if the coupon is redeemable, and if it is not, why.",
          "type": "string",
          "enum": [
            "expired",
            "maxed_out",
            "redeemable"
          ]
        },
        "discount": {
          "$ref": "#/$defs/CouponDiscount"
        },
        "coupon_type": {
          "title": "Coupon type (TODO: implement coupon generation)",
          "description": "Whether the coupon is \"single_code\" or \"bulk\". Bulk coupons will require a `unique_code_template` and will generate unique codes through the `/generate` endpoint.",
          "type": "string",
          "enum": [
            "bulk",
            "single_code"
          ]
        },
        "expired_at": {
          "type": "string",
          "title": "Expired at",
          "description": "The date and time the coupon was expired early or reached its `max_redemptions`.",
          "format": "date-time"
        }
      }
    },
    "CouponRedemptionMini": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "title": "Coupon Redemption ID",
          "readOnly": true
        },
        "object": {
          "type": "string",
          "title": "Object type",
          "description": "Will always be `coupon`.",
          "readOnly": true
        },
        "coupon": {
          "$ref": "#/$defs/CouponMini"
        },
        "state": {
          "title": "Coupon Redemption state",
          "type": "string",
          "enum": [
            "active",
            "inactive"
          ]
        },
        "remaining_duration": {
          "readOnly": true,
          "$ref": "#/$defs/CouponRedemptionRemainingDuration"
        },
        "discounted": {
          "type": "number",
          "format": "float",
          "title": "Amount Discounted",
          "description": "The amount that was discounted upon the application of the coupon, formatted with the currency."
        },
        "created_at": {
          "type": "string",
          "title": "Created at",
          "format": "date-time",
          "readOnly": true
        },
        "remaining_discount": {
          "type": "number",
          "format": "float",
          "title": "Remaining discount",
          "description": "The remaining discount budget of a draw_down application mode coupon, formatted with the currency. Null when the coupon does not use the draw_down application mode or its budget resets each billing period."
        },
        "discount_period_ends_at": {
          "type": "string",
          "title": "Discount period ends at",
          "description": "The end of the current discount period for a draw_down application mode coupon with a time-limited duration. Null when the coupon does not use the draw_down application mode with a time-limited duration.",
          "format": "date-time"
        }
      }
    },
    "CouponRedemptionRemainingDuration": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "title": "Duration Type",
          "description": "The coupon's duration type. `temporal` includes an `expires_at` timestamp. `billing_periods` includes a `redemptions_remaining` count of billing cycles. `forever` and `single_use` have no additional fields.",
          "readOnly": true,
          "enum": [
            "forever",
            "single_use",
            "temporal",
            "billing_periods"
          ]
        },
        "expires_at": {
          "type": "string",
          "title": "Expires at",
          "format": "date-time",
          "description": "Present when `type` is `temporal`. The datetime after which this redemption will no longer apply.",
          "readOnly": true
        },
        "redemptions_remaining": {
          "type": "integer",
          "title": "Redemptions Remaining",
          "description": "The number of redemption periods remaining for which this coupon will still apply.",
          "readOnly": true
        }
      }
    },
    "CreditPayment": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "title": "Credit Payment ID",
          "maxLength": 13
        },
        "object": {
          "type": "string",
          "title": "Object type"
        },
        "uuid": {
          "type": "string",
          "title": "Recurly UUID",
          "description": "The UUID is useful for matching data with the CSV exports and building URLs into Recurly's UI.",
          "maxLength": 32
        },
        "action": {
          "title": "Action",
          "description": "The action for which the credit was created.",
          "type": "string",
          "enum": [
            "payment",
            "reduction",
            "refund",
            "write_off"
          ]
        },
        "account": {
          "$ref": "#/$defs/AccountMini"
        },
        "applied_to_invoice": {
          "$ref": "#/$defs/InvoiceMini"
        },
        "original_invoice": {
          "$ref": "#/$defs/InvoiceMini"
        },
        "currency": {
          "type": "string",
          "title": "Currency",
          "description": "3-letter ISO 4217 currency code.",
          "maxLength": 3
        },
        "amount": {
          "type": "number",
          "format": "float",
          "title": "Amount",
          "description": "Total credit payment amount applied to the charge invoice."
        },
        "original_credit_payment_id": {
          "type": "string",
          "title": "Original Credit Payment ID",
          "description": "For credit payments with action `refund`, this is the credit payment that was refunded.",
          "maxLength": 13
        },
        "refund_transaction": {
          "$ref": "#/$defs/Transaction"
        },
        "created_at": {
          "type": "string",
          "title": "Created at",
          "format": "date-time",
          "readOnly": true
        },
        "updated_at": {
          "type": "string",
          "title": "Last updated at",
          "format": "date-time",
          "readOnly": true
        },
        "voided_at": {
          "type": "string",
          "title": "Voided at",
          "format": "date-time",
          "readOnly": true
        }
      }
    },
    "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 a custom field was automatically copied from.",
          "readOnly": true,
          "enum": [
            "account",
            "plan",
            "product",
            "subscription"
          ]
        },
        "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"
      }
    },
    "FraudRiskRule": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "title": "The Kount rule number."
        },
        "message": {
          "type": "string",
          "title": "Description of why the rule was triggered"
        }
      }
    },
    "Invoice": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "title": "Invoice ID",
          "readOnly": true
        },
        "uuid": {
          "type": "string",
          "title": "Invoice UUID",
          "readOnly": true
        },
        "object": {
          "type": "string",
          "title": "Object type",
          "readOnly": true
        },
        "type": {
          "title": "Invoice type",
          "description": "Invoices are either charge, credit, or legacy invoices.",
          "type": "string",
          "enum": [
            "charge",
            "credit",
            "legacy"
          ]
        },
        "origin": {
          "title": "Origin",
          "description": "The event that created the invoice.",
          "type": "string",
          "enum": [
            "carryforward_credit",
            "carryforward_gift_credit",
            "credit",
            "external_refund",
            "gift_card",
            "immediate_change",
            "import",
            "line_item_refund",
            "open_amount_refund",
            "prepayment",
            "purchase",
            "refund",
            "renewal",
            "termination",
            "usage_correction",
            "write_off"
          ]
        },
        "state": {
          "title": "Invoice state",
          "type": "string",
          "default": "all",
          "enum": [
            "open",
            "pending",
            "processing",
            "past_due",
            "paid",
            "closed",
            "failed",
            "voided"
          ]
        },
        "account": {
          "$ref": "#/$defs/AccountMini"
        },
        "billing_info_id": {
          "type": "string",
          "title": "Billing info ID",
          "description": "The `billing_info_id` is the value that represents a specific billing info for an end customer. When `billing_info_id` is used to assign billing info to the subscription, all future billing events for the subscription will bill to the specified billing info. `billing_info_id` can ONLY be used for sites utilizing the Wallet feature."
        },
        "subscription_ids": {
          "type": "array",
          "title": "Subscription IDs",
          "description": "If the invoice is charging or refunding for one or more subscriptions, these are their IDs.",
          "items": {
            "type": "string",
            "title": "Subscription ID",
            "maxLength": 13
          }
        },
        "previous_invoice_id": {
          "type": "string",
          "title": "Previous invoice ID",
          "description": "On refund invoices, this value will exist and show the invoice ID of the purchase invoice the refund was created from. This field is only populated for sites without the [Only Bill What Changed](https://docs.recurly.com/docs/only-bill-what-changed) feature enabled. Sites with Only Bill What Changed enabled should use the [related_invoices endpoint](https://recurly.com/developers/api/v2021-02-25/index.html#operation/list_related_invoices) to see purchase invoices refunded by this invoice.",
          "maxLength": 13
        },
        "number": {
          "type": "string",
          "title": "Invoice number",
          "description": "If VAT taxation and the Country Invoice Sequencing feature are enabled, invoices will have country-specific invoice numbers for invoices billed to EU countries (ex: FR1001). Non-EU invoices will continue to use the site-level invoice number sequence."
        },
        "collection_method": {
          "title": "Collection method",
          "description": "An automatic invoice means a corresponding transaction is run using the account's billing information at the same time the invoice is created. Manual invoices are created without a corresponding transaction. The merchant must enter a manual payment transaction or have the customer pay the invoice with an automatic method, like credit card, PayPal, Amazon, or ACH bank payment.",
          "default": "automatic",
          "type": "string",
          "enum": [
            "automatic",
            "manual"
          ]
        },
        "po_number": {
          "type": "string",
          "title": "Purchase order number",
          "description": "For manual invoicing, this identifies the PO number associated with the subscription.",
          "maxLength": 50
        },
        "net_terms": {
          "type": "integer",
          "title": "Net terms",
          "description": "Integer paired with `Net Terms Type` and representing the number\nof days past the current date (for `net` Net Terms Type) or days after\nthe last day of the current month (for `eom` Net Terms Type) that the\ninvoice will become past due. For `manual` collection method, an additional 24 hours is\nadded to ensure the customer has the entire last day to make payment before\nbecoming past due. For example:\n\nIf an invoice is due `net 0`, it is due 'On Receipt' and will become past due 24 hours after it's created.\nIf an invoice is due `net 30`, it will become past due at 31 days exactly.\nIf an invoice is due `eom 30`, it will become past due 31 days from the last day of the current month.\n\nFor `automatic` collection method, the additional 24 hours is not added. For example, On-Receipt is due immediately, and `net 30` will become due exactly 30 days from invoice generation, at which point Recurly will attempt collection.\nWhen `eom` Net Terms Type is passed, the value for `Net Terms` is restricted to `0, 15, 30, 45, 60, or 90`.\n\nFor more information on how net terms work with `manual` collection visit our docs page (https://docs.recurly.com/docs/manual-payments#section-collection-terms)\nor visit (https://docs.recurly.com/docs/automatic-invoicing-terms#section-collection-terms) for information about net terms using `automatic` collection.",
          "minimum": 0,
          "default": 0
        },
        "net_terms_type": {
          "type": "string",
          "title": "Net Terms Type",
          "description": "Optionally supplied string that may be either `net` or `eom` (end-of-month).\nWhen `net`, an invoice becomes past due the specified number of `Net Terms` days from the current date.\nWhen `eom` an invoice becomes past due the specified number of `Net Terms` days from the last day of the current month.\n",
          "enum": [
            "net",
            "eom"
          ],
          "default": "net"
        },
        "address": {
          "$ref": "#/$defs/InvoiceAddress"
        },
        "shipping_address": {
          "$ref": "#/$defs/ShippingAddress"
        },
        "currency": {
          "type": "string",
          "title": "Currency",
          "description": "3-letter ISO 4217 currency code.",
          "maxLength": 3
        },
        "discount": {
          "type": "number",
          "format": "float",
          "title": "Discount",
          "description": "Total discounts applied to this invoice."
        },
        "coupon_redemptions": {
          "type": "array",
          "title": "Coupon Redemptions",
          "description": "The coupon redemptions applied to this invoice.",
          "items": {
            "$ref": "#/$defs/CouponRedemptionMini"
          }
        },
        "subtotal": {
          "type": "number",
          "format": "float",
          "title": "Subtotal",
          "description": "The summation of charges and credits, before discounts and taxes."
        },
        "subtotal_after_discount": {
          "type": "number",
          "format": "float",
          "title": "Subtotal After Discount",
          "description": "The summation of charges and credits, after discounts applied."
        },
        "tax": {
          "type": "number",
          "format": "float",
          "title": "Tax",
          "description": "The total tax on this invoice."
        },
        "reference_only_currency_conversion": {
          "$ref": "#/$defs/ReferenceOnlyCurrencyConversion"
        },
        "total": {
          "type": "number",
          "format": "float",
          "title": "Total",
          "description": "The final total on this invoice. The summation of invoice charges, discounts, credits, and tax."
        },
        "refundable_amount": {
          "type": "number",
          "format": "float",
          "title": "Refundable amount",
          "description": "The refundable amount on a charge invoice. It will be null for all other invoices."
        },
        "paid": {
          "type": "number",
          "format": "float",
          "title": "Paid",
          "description": "The total amount of successful payments transaction on this invoice."
        },
        "balance": {
          "type": "number",
          "format": "float",
          "title": "Balance",
          "description": "The outstanding balance remaining on this invoice."
        },
        "tax_info": {
          "$ref": "#/$defs/TaxInfo"
        },
        "used_tax_service": {
          "type": "boolean",
          "title": "Used Tax Service?",
          "description": "Will be `true` when the invoice had a successful response from the tax service and `false` when the invoice was not sent to tax service due to a lack of address or enabled jurisdiction or was processed without tax due to a non-blocking error returned from the tax service."
        },
        "vat_number": {
          "type": "string",
          "title": "VAT number",
          "description": "VAT registration number for the customer on this invoice. This will come from the VAT Number field in the Billing Info or the Account Info depending on your tax settings and the invoice collection method.",
          "maxLength": 20
        },
        "vat_reverse_charge_notes": {
          "type": "string",
          "title": "VAT reverse charge notes",
          "description": "VAT Reverse Charge Notes only appear if you have EU VAT enabled or are using your own Avalara AvaTax account and the customer is in the EU, has a VAT number, and is in a different country than your own. This will default to the VAT Reverse Charge Notes text specified on the Tax Settings page in your Recurly admin, unless custom notes were created with the original subscription."
        },
        "terms_and_conditions": {
          "type": "string",
          "title": "Terms and conditions",
          "description": "This will default to the Terms and Conditions text specified on the Invoice Settings page in your Recurly admin. Specify custom notes to add or override Terms and Conditions."
        },
        "customer_notes": {
          "type": "string",
          "title": "Customer notes",
          "description": "This will default to the Customer Notes text specified on the Invoice Settings. Specify custom notes to add or override Customer Notes."
        },
        "line_items": {
          "type": "array",
          "title": "Line Items",
          "items": {
            "$ref": "#/$defs/LineItem"
          }
        },
        "has_more_line_items": {
          "type": "boolean",
          "title": "Has more Line Items",
          "description": "Identifies if the invoice has more line items than are returned in `line_items`. If `has_more_line_items` is `true`, then a request needs to be made to the `list_invoice_line_items` endpoint."
        },
        "transactions": {
          "type": "array",
          "title": "Transactions",
          "items": {
            "$ref": "#/$defs/Transaction"
          }
        },
        "credit_payments": {
          "type": "array",
          "title": "Credit payments",
          "items": {
            "$ref": "#/$defs/CreditPayment"
          }
        },
        "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
        },
        "due_at": {
          "type": "string",
          "format": "date-time",
          "title": "Due at",
          "description": "Date invoice is due. This is the date the net terms are reached."
        },
        "closed_at": {
          "type": "string",
          "format": "date-time",
          "title": "Closed at",
          "description": "Date invoice was marked paid or failed."
        },
        "dunning_campaign_id": {
          "type": "string",
          "title": "Dunning Campaign ID",
          "description": "Unique ID to identify the dunning campaign used when dunning the invoice. For sites without multiple dunning campaigns enabled, this will always be the default dunning campaign."
        },
        "dunning_events_sent": {
          "type": "integer",
          "title": "Dunning Event Sent",
          "description": "Number of times the event was sent."
        },
        "final_dunning_event": {
          "type": "boolean",
          "title": "Final Dunning Event",
          "description": "Last communication attempt."
        },
        "business_entity_id": {
          "type": "string",
          "title": "Business Entity ID",
          "description": "Unique ID to identify the business entity assigned to the invoice. Available when the `Multiple Business Entities` feature is enabled."
        },
        "custom_fields": {
          "$ref": "#/$defs/InvoiceCustomFields"
        }
      }
    },
    "InvoiceAddress": {
      "allOf": [
        {
          "$ref": "#/$defs/Address"
        },
        {
          "$ref": "#/$defs/AddressWithName"
        }
      ],
      "type": "object",
      "properties": {
        "name_on_account": {
          "type": "string",
          "title": "Name on account"
        },
        "company": {
          "type": "string",
          "title": "Company"
        }
      }
    },
    "InvoiceCustomFields": {
      "type": "array",
      "title": "Custom fields",
      "description": "A list of custom fields that were on the account at the time of invoice creation and were marked to be displayed on invoices. Read-only; cannot be set directly on the invoice.",
      "readOnly": true,
      "items": {
        "$ref": "#/$defs/CustomField"
      }
    },
    "InvoiceMini": {
      "type": "object",
      "title": "Invoice mini details",
      "properties": {
        "id": {
          "type": "string",
          "title": "Invoice ID",
          "maxLength": 13
        },
        "object": {
          "type": "string",
          "title": "Object type"
        },
        "number": {
          "type": "string",
          "title": "Invoice number"
        },
        "business_entity_id": {
          "type": "string",
          "title": "Business Entity ID",
          "description": "Unique ID to identify the business entity assigned to the invoice. Available when the `Multiple Business Entities` feature is enabled."
        },
        "type": {
          "title": "Invoice type",
          "type": "string",
          "enum": [
            "charge",
            "credit",
            "legacy"
          ]
        },
        "state": {
          "title": "Invoice state",
          "type": "string",
          "default": "all",
          "enum": [
            "open",
            "pending",
            "processing",
            "past_due",
            "paid",
            "closed",
            "failed",
            "voided"
          ]
        }
      }
    },
    "LineItem": {
      "type": "object",
      "title": "Line item",
      "properties": {
        "id": {
          "type": "string",
          "title": "Line item ID",
          "maxLength": 13
        },
        "object": {
          "type": "string",
          "title": "Object type"
        },
        "uuid": {
          "type": "string",
          "title": "UUID",
          "description": "The UUID is useful for matching data with the CSV exports and building URLs into Recurly's UI.",
          "maxLength": 32
        },
        "type": {
          "title": "Line item type",
          "description": "Charges are positive line items that debit the account. Credits are negative line items that credit the account.",
          "type": "string",
          "enum": [
            "charge",
            "credit"
          ]
        },
        "item_code": {
          "type": "string",
          "title": "Item Code",
          "description": "Unique code to identify an item. Available when the Credit Invoices feature is enabled.",
          "pattern": "/^[a-z0-9_+-]+$/",
          "maxLength": 50
        },
        "item_id": {
          "type": "string",
          "title": "Item ID",
          "description": "System-generated unique identifier for an item. Available when the Credit Invoices feature is enabled.",
          "maxLength": 13
        },
        "external_sku": {
          "type": "string",
          "title": "External SKU",
          "description": "Optional Stock Keeping Unit assigned to an item. Available when the Credit Invoices feature is enabled.",
          "maxLength": 50
        },
        "revenue_schedule_type": {
          "title": "Revenue schedule type",
          "type": "string",
          "enum": [
            "at_invoice",
            "at_range_end",
            "at_range_start",
            "evenly",
            "never"
          ]
        },
        "state": {
          "title": "Current state of the line item",
          "description": "Pending line items are charges or credits on an account that have not been applied to an invoice yet. Invoiced line items will always have an `invoice_id` value.",
          "type": "string",
          "enum": [
            "invoiced",
            "pending"
          ]
        },
        "legacy_category": {
          "title": "Legacy category",
          "description": "Category to describe the role of a line item on a legacy invoice:\n- \"charges\" refers to charges being billed for on this invoice.\n- \"credits\" refers to refund or proration credits. This portion of the invoice can be considered a credit memo.\n- \"applied_credits\" refers to previous credits applied to this invoice. See their original_line_item_id to determine where the credit first originated.\n- \"carryforwards\" can be ignored. They exist to consume any remaining credit balance. A new credit with the same amount will be created and placed back on the account.\n",
          "type": "string",
          "enum": [
            "applied_credit",
            "carryforward",
            "charge",
            "credit"
          ]
        },
        "account": {
          "$ref": "#/$defs/AccountMini"
        },
        "bill_for_account_id": {
          "type": "string",
          "title": "Bill For Account ID",
          "maxLength": 13,
          "description": "The UUID of the account responsible for originating the line item."
        },
        "subscription_id": {
          "type": "string",
          "title": "Subscription ID",
          "description": "If the line item is a charge or credit for a subscription, this is its ID.",
          "maxLength": 13
        },
        "plan_id": {
          "type": "string",
          "title": "Plan ID",
          "description": "If the line item is a charge or credit for a plan or add-on, this is the plan's ID.",
          "maxLength": 13
        },
        "plan_code": {
          "type": "string",
          "title": "Plan code",
          "description": "If the line item is a charge or credit for a plan or add-on, this is the plan's code.",
          "maxLength": 50
        },
        "add_on_id": {
          "type": "string",
          "title": "Add-on ID",
          "description": "If the line item is a charge or credit for an add-on this is its ID.",
          "maxLength": 13
        },
        "add_on_code": {
          "type": "string",
          "title": "Add-on code",
          "description": "If the line item is a charge or credit for an add-on, this is its code.",
          "maxLength": 50
        },
        "invoice_id": {
          "type": "string",
          "title": "Invoice ID",
          "description": "Once the line item has been invoiced this will be the invoice's ID.",
          "maxLength": 13
        },
        "invoice_number": {
          "type": "string",
          "title": "Invoice number",
          "description": "Once the line item has been invoiced this will be the invoice's number. If VAT taxation and the Country Invoice Sequencing feature are enabled, invoices will have country-specific invoice numbers for invoices billed to EU countries (ex: FR1001). Non-EU invoices will continue to use the site-level invoice number sequence."
        },
        "previous_line_item_id": {
          "type": "string",
          "title": "Previous line item ID",
          "description": "Will only have a value if the line item is a credit created from a previous credit, or if the credit was created from a charge refund.",
          "maxLength": 13
        },
        "original_line_item_invoice_id": {
          "type": "string",
          "title": "Original line item's invoice ID",
          "description": "The invoice where the credit originated. Will only have a value if the line item is a credit created from a previous credit, or if the credit was created from a charge refund.",
          "maxLength": 13
        },
        "origin": {
          "title": "Origin of line item",
          "description": "A credit created from an original charge will have the value of the charge's origin.",
          "type": "string",
          "enum": [
            "add_on",
            "add_on_trial",
            "carryforward",
            "coupon",
            "credit",
            "debit",
            "one_time",
            "plan",
            "plan_trial",
            "setup_fee",
            "prepayment"
          ]
        },
        "accounting_code": {
          "type": "string",
          "title": "Accounting code",
          "description": "Internal accounting code to help you reconcile your revenue to the correct ledger. Line items created as part of a subscription invoice will use the plan or add-on's accounting code, otherwise the value will only be present if you define an accounting code when creating the line item.",
          "maxLength": 20
        },
        "product_code": {
          "type": "string",
          "title": "Product code",
          "description": "For plan-related line items this will be the plan's code, for add-on related line items it will be the add-on's code. For item-related line items it will be the item's `external_sku`.",
          "maxLength": 50
        },
        "credit_reason_code": {
          "title": "Credit reason code",
          "description": "The reason the credit was given when line item is `type=credit`.",
          "default": "general",
          "type": "string",
          "enum": [
            "general",
            "gift_card",
            "promotional",
            "refund",
            "service",
            "write_off"
          ]
        },
        "currency": {
          "type": "string",
          "title": "Currency",
          "description": "3-letter ISO 4217 currency code.",
          "maxLength": 3
        },
        "amount": {
          "type": "number",
          "format": "float",
          "title": "Total after discounts and taxes",
          "description": "`(quantity * unit_amount) - discount + tax`"
        },
        "description": {
          "type": "string",
          "title": "Description",
          "description": "Description that appears on the invoice. For subscription related items this will be filled in automatically.",
          "maxLength": 255
        },
        "quantity": {
          "type": "integer",
          "title": "Quantity",
          "description": "This number will be multiplied by the unit amount to compute the subtotal before any discounts or taxes.",
          "default": 1
        },
        "quantity_decimal": {
          "type": "string",
          "title": "Quantity Decimal",
          "description": "A floating-point alternative to Quantity. If this value is present, it will be used in place of Quantity for calculations, and Quantity will be the rounded integer value of this number. This field supports up to 9 decimal places. The Decimal Quantity feature must be enabled to utilize this field."
        },
        "unit_amount": {
          "type": "number",
          "format": "float",
          "title": "Unit amount",
          "description": "Positive amount for a charge, negative amount for a credit."
        },
        "unit_amount_decimal": {
          "type": "string",
          "title": "Unit amount decimal",
          "description": "Positive amount for a charge, negative amount for a credit."
        },
        "tax_inclusive": {
          "type": "boolean",
          "title": "Tax Inclusive?",
          "description": "Determines whether or not tax is included in the unit amount. The Tax Inclusive Pricing feature (separate from the Mixed Tax Pricing feature) must be enabled to utilize this flag."
        },
        "subtotal": {
          "type": "number",
          "format": "float",
          "title": "Total before discounts and taxes",
          "description": "`quantity * unit_amount`"
        },
        "discount": {
          "type": "number",
          "format": "float",
          "title": "Discount",
          "description": "The sum of all discounts applied to the line item."
        },
        "discounts": {
          "type": "array",
          "title": "Discounts",
          "description": "The breakdown of discounts applied to the line item by coupon redemption.",
          "items": {
            "$ref": "#/$defs/LineItemDiscount"
          }
        },
        "liability_gl_account_code": {
          "type": "string",
          "title": "Accounting code for the ledger account.",
          "description": "Unique code to identify the ledger account. Each code must start\nwith a letter or number. The following special characters are\nallowed: `-_.,:`\n",
          "pattern": "/^[A-Za-z0-9](( *)?[\\-A-Za-z0-9_.,:])*$/",
          "maxLength": 255
        },
        "revenue_gl_account_code": {
          "type": "string",
          "title": "Accounting code for the ledger account.",
          "description": "Unique code to identify the ledger account. Each code must start\nwith a letter or number. The following special characters are\nallowed: `-_.,:`\n",
          "pattern": "/^[A-Za-z0-9](( *)?[\\-A-Za-z0-9_.,:])*$/",
          "maxLength": 255
        },
        "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
        },
        "tax": {
          "type": "number",
          "format": "float",
          "title": "Tax",
          "description": "The tax amount for the line item."
        },
        "taxable": {
          "type": "boolean",
          "title": "Taxable?",
          "description": "`true` if the line item is taxable, `false` if it is not."
        },
        "tax_exempt": {
          "type": "boolean",
          "title": "Tax exempt?",
          "description": "`true` exempts tax on charges, `false` applies tax on charges. If not defined, then defaults to the Plan and Site settings. This attribute does not work for credits (negative line items). Credits are always applied post-tax. Pre-tax discounts should use the Coupons feature."
        },
        "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 line 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 line 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
        },
        "vertex_transaction_type": {
          "type": "string",
          "title": "Vertex Transaction Type",
          "description": "Used by Vertex for tax calculations. Possible values are sale, rental, lease.",
          "enum": [
            "sale",
            "rental",
            "lease"
          ]
        },
        "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.",
          "maxLength": 25,
          "pattern": "^\\d+(\\.\\d+)*$"
        },
        "tax_info": {
          "$ref": "#/$defs/TaxInfo"
        },
        "origin_tax_address_source": {
          "type": "string",
          "title": "Origin tax address source",
          "description": "The source of the address that will be used as the origin in determining taxes. Available only when the site is on an Elite plan. A value of \"origin\" refers to the \"Business entity tax address\". A value of \"destination\" refers to the \"Customer tax address\".",
          "default": "origin",
          "enum": [
            "origin",
            "destination"
          ]
        },
        "destination_tax_address_source": {
          "type": "string",
          "title": "Destination tax address source",
          "description": "The source of the address that will be used as the destinaion in determining taxes. Available only when the site is on an Elite plan. A value of \"destination\" refers to the \"Customer tax address\". A value of \"origin\" refers to the \"Business entity tax address\".",
          "default": "destination",
          "enum": [
            "destination",
            "origin"
          ]
        },
        "proration_rate": {
          "type": "number",
          "format": "float",
          "title": "Proration rate",
          "description": "When a line item has been prorated, this is the rate of the proration. Proration rates were made available for line items created after March 30, 2017. For line items created prior to that date, the proration rate will be `null`, even if the line item was prorated.",
          "minimum": 0,
          "maximum": 1
        },
        "refund": {
          "type": "boolean",
          "title": "Refund?"
        },
        "refunded_quantity": {
          "type": "integer",
          "title": "Refunded Quantity",
          "description": "For refund charges, the quantity being refunded. For non-refund charges, the total quantity refunded (possibly over multiple refunds)."
        },
        "refunded_quantity_decimal": {
          "type": "string",
          "title": "Refunded Quantity Decimal",
          "description": "A floating-point alternative to Refunded Quantity. For refund charges, the quantity being refunded. For non-refund charges, the total quantity refunded (possibly over multiple refunds). The Decimal Quantity feature must be enabled to utilize this field."
        },
        "credit_applied": {
          "type": "number",
          "format": "float",
          "title": "Credit Applied",
          "description": "The amount of credit from this line item that was applied to the invoice."
        },
        "shipping_address": {
          "$ref": "#/$defs/ShippingAddress"
        },
        "start_date": {
          "type": "string",
          "format": "date-time",
          "title": "Start date",
          "description": "If an end date is present, this is value indicates the beginning of a billing time range. If no end date is present it indicates billing for a specific date."
        },
        "end_date": {
          "type": "string",
          "format": "date-time",
          "title": "End date",
          "description": "If this date is provided, it indicates the end of a time range."
        },
        "custom_fields": {
          "$ref": "#/$defs/CustomFields"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "title": "Created at",
          "description": "When the line item was created."
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "title": "Last updated at",
          "description": "When the line item was last changed."
        }
      }
    },
    "LineItemDiscount": {
      "type": "object",
      "title": "Line item discount",
      "description": "A discount applied to a line item charge by a coupon redemption.",
      "properties": {
        "object": {
          "type": "string",
          "title": "Object type",
          "description": "Will always be `line_item_discount`.",
          "readOnly": true
        },
        "coupon_id": {
          "type": "string",
          "title": "Coupon ID",
          "description": "The ID of the coupon that generated this discount.",
          "readOnly": true
        },
        "coupon_redemption_id": {
          "type": "string",
          "title": "Coupon Redemption ID",
          "description": "The ID of the coupon redemption that generated this discount.",
          "readOnly": true
        },
        "order_applied": {
          "type": "integer",
          "title": "Order applied",
          "description": "The order in which this discount was applied when multiple coupons were redeemed.",
          "readOnly": true
        },
        "discount_amount": {
          "type": "number",
          "format": "float",
          "title": "Discount amount",
          "description": "The amount discounted on this line item by this coupon redemption.",
          "readOnly": true
        },
        "currency": {
          "type": "string",
          "title": "Currency",
          "description": "3-letter ISO 4217 currency code.",
          "maxLength": 3,
          "readOnly": true
        }
      }
    },
    "PaymentGatewayReferences": {
      "type": "object",
      "title": "Payment Gateway References Object",
      "description": "Array of Payment Gateway References, each a reference to a third-party gateway object of varying types.",
      "properties": {
        "token": {
          "type": "string",
          "title": "Token",
          "description": "Reference value used when the external token was created. If a Stripe gateway or Ebanx gateway is used, this value will need to be accompanied by its reference_type."
        },
        "reference_type": {
          "type": "string",
          "title": "Reference Type",
          "description": "The type of reference token. The value can be omitted for gateways that only support one type of token.",
          "enum": [
            "stripe_confirmation_token",
            "upi_vpa"
          ]
        }
      }
    },
    "PaymentMethod": {
      "type": "object",
      "properties": {
        "object": {
          "type": "string",
          "enum": [
            "bacs",
            "amazon",
            "amazon_billing_agreement",
            "apple_pay",
            "apple_pay_merchant_token",
            "bank_account_info",
            "braintree_apple_pay",
            "check",
            "credit_card",
            "eft",
            "gateway_token",
            "google_pay",
            "google_pay_device_pan",
            "iban_bank_account",
            "money_order",
            "other",
            "paypal",
            "paypal_billing_agreement",
            "roku",
            "sepadirectdebit",
            "venmo",
            "wire_transfer",
            "braintree_v_zero",
            "boleto",
            "cash_app",
            "upi_autopay",
            "pix_automatico",
            "mercadopago",
            "klarna",
            "braintree_google_pay",
            "stripe_link"
          ]
        },
        "card_type": {
          "description": "Visa, MasterCard, American Express, Discover, JCB, etc.",
          "type": "string",
          "enum": [
            "American Express",
            "Dankort",
            "Diners Club",
            "Discover",
            "ELO",
            "Forbrugsforeningen",
            "Hipercard",
            "JCB",
            "Laser",
            "Maestro",
            "MasterCard",
            "Test Card",
            "Union Pay",
            "Unknown",
            "Visa",
            "Tarjeta Naranja"
          ]
        },
        "first_six": {
          "type": "string",
          "description": "Credit card number's first six digits.\n\nFor a tokenized wallet payment (`apple_pay`, `google_pay`, or\n`google_pay_device_pan`), this is the DPAN's (the wallet/device token's own\nnumber) first six digits, not the underlying card's (FPAN).\n",
          "maxLength": 6
        },
        "last_four": {
          "type": "string",
          "description": "Credit card number's last four digits. Will refer to bank account if payment\nmethod is ACH.\n\nFor a tokenized wallet payment (`apple_pay`, `google_pay`, or\n`google_pay_device_pan`), this is the DPAN's last four digits, not the\nunderlying card's (FPAN).\n",
          "maxLength": 4
        },
        "last_two": {
          "type": "string",
          "description": "The IBAN bank account's last two digits.",
          "maxLength": 2
        },
        "exp_month": {
          "type": "integer",
          "description": "Expiration month.",
          "maxLength": 2
        },
        "exp_year": {
          "type": "integer",
          "description": "Expiration year.",
          "maxLength": 4
        },
        "gateway_token": {
          "type": "string",
          "description": "A token used in place of a credit card in order to perform transactions.",
          "maxLength": 50
        },
        "cc_bin_country": {
          "type": "string",
          "description": "The 2-letter ISO 3166-1 alpha-2 country code associated with the card's issuer, if known."
        },
        "funding_source": {
          "description": "The funding source of the card, if known.",
          "type": "string",
          "enum": [
            "credit",
            "debit",
            "charge",
            "prepaid",
            "deferred_debit"
          ]
        },
        "gateway_code": {
          "type": "string",
          "description": "An identifier for a specific payment gateway.",
          "maxLength": 13
        },
        "gateway_attributes": {
          "type": "object",
          "description": "Gateway specific attributes associated with this PaymentMethod",
          "x-class-name": "GatewayAttributes",
          "properties": {
            "account_reference": {
              "type": "string",
              "description": "Used by Adyen and Braintree gateways. For Adyen the Shopper Reference value used when the external token was created. For Braintree the PayPal PayerID is populated in the response.",
              "maxLength": 264
            }
          }
        },
        "card_network_preference": {
          "description": "Represents the card network preference associated with the billing info for dual badged cards. Must be a supported card network.",
          "type": "string",
          "enum": [
            "Bancontact",
            "CartesBancaires",
            "Dankort",
            "MasterCard",
            "Visa"
          ]
        },
        "billing_agreement_id": {
          "type": "string",
          "description": "Billing Agreement identifier. Only present for Amazon or Paypal payment methods."
        },
        "name_on_account": {
          "type": "string",
          "description": "The name associated with the bank account."
        },
        "account_type": {
          "description": "The bank account type. Only present for ACH payment methods.",
          "type": "string",
          "enum": [
            "checking",
            "savings"
          ]
        },
        "routing_number": {
          "type": "string",
          "description": "The bank account's routing number. Only present for ACH payment methods."
        },
        "routing_number_bank": {
          "type": "string",
          "description": "The bank name of this routing number."
        },
        "username": {
          "type": "string",
          "description": "Username of the associated payment method. Currently only associated with Venmo."
        }
      }
    },
    "ReferenceOnlyCurrencyConversion": {
      "type": "object",
      "title": "Reference Only Currency Conversion",
      "properties": {
        "currency": {
          "type": "string",
          "title": "Currency",
          "description": "3-letter ISO 4217 currency code.",
          "maxLength": 3
        },
        "subtotal_in_cents": {
          "type": "number",
          "format": "float",
          "title": "Subtotal In Cents",
          "description": "The subtotal converted to the currency."
        },
        "tax_in_cents": {
          "type": "number",
          "format": "float",
          "title": "Tax In Cents",
          "description": "The tax converted to the currency."
        },
        "rate": {
          "type": "string",
          "title": "Rate",
          "description": "The conversion rate to the currency."
        },
        "source": {
          "type": "string",
          "title": "Source",
          "description": "The source of the conversion rate."
        },
        "date": {
          "type": "string",
          "title": "Date",
          "format": "date",
          "description": "The date of the conversion rate."
        }
      }
    },
    "ShippingAddress": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "title": "Shipping Address ID",
          "maxLength": 13,
          "readOnly": true
        },
        "object": {
          "type": "string",
          "title": "Object type",
          "readOnly": true
        },
        "account_id": {
          "type": "string",
          "title": "Account ID",
          "maxLength": 13,
          "readOnly": true
        },
        "nickname": {
          "type": "string",
          "maxLength": 255
        },
        "first_name": {
          "type": "string",
          "maxLength": 255
        },
        "last_name": {
          "type": "string",
          "maxLength": 255
        },
        "company": {
          "type": "string",
          "maxLength": 255
        },
        "email": {
          "type": "string",
          "maxLength": 255
        },
        "vat_number": {
          "type": "string",
          "maxLength": 20
        },
        "phone": {
          "type": "string",
          "maxLength": 30
        },
        "street1": {
          "type": "string",
          "maxLength": 255
        },
        "street2": {
          "type": "string",
          "maxLength": 255
        },
        "city": {
          "type": "string",
          "maxLength": 255
        },
        "region": {
          "type": "string",
          "maxLength": 255,
          "description": "State or province."
        },
        "postal_code": {
          "type": "string",
          "maxLength": 20,
          "description": "Zip or postal code."
        },
        "country": {
          "type": "string",
          "maxLength": 50,
          "description": "Country, 2-letter ISO 3166-1 alpha-2 code."
        },
        "geo_code": {
          "type": "string",
          "maxLength": 20,
          "description": "Code that represents a geographic entity (location or object). Only returned when Vertex or Avalara for Communications is enabled."
        },
        "created_at": {
          "type": "string",
          "title": "Created at",
          "format": "date-time",
          "readOnly": true
        },
        "updated_at": {
          "type": "string",
          "title": "Updated at",
          "format": "date-time",
          "readOnly": true
        }
      }
    },
    "TaxDetail": {
      "type": "object",
      "title": "Tax detail",
      "properties": {
        "type": {
          "type": "string",
          "title": "Type",
          "description": "Provides the tax type for the region or type of Comminications tax when Avalara for Communications or Vertex is enabled. For Canadian Sales Tax, this will be GST, HST, QST or PST."
        },
        "region": {
          "type": "string",
          "title": "Region",
          "description": "Provides the tax region applied on an invoice. For Canadian Sales Tax, this will be either the 2 letter province code or country code. Not present when Avalara for Communications is enabled."
        },
        "rate": {
          "type": "number",
          "format": "float",
          "title": "Rate",
          "description": "Provides the tax rate for the region."
        },
        "tax": {
          "type": "number",
          "format": "float",
          "title": "Tax",
          "description": "The total tax applied for this tax type."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "Provides the name of the Communications tax applied. Present only when Avalara for Communications or Vertex is enabled."
        },
        "level": {
          "type": "string",
          "title": "Level",
          "description": "Provides the jurisdiction level for the Communications tax applied. Example values include city, state and federal. Present only when Avalara for Communications or Vertex is enabled."
        },
        "billable": {
          "type": "boolean",
          "title": "Billable",
          "description": "Whether or not the line item is taxable. Only populated for a single LineItem fetch when Avalara for Communications or Vertex is enabled."
        }
      }
    },
    "TaxInfo": {
      "type": "object",
      "title": "Tax info",
      "description": "Only for merchants using Recurly's In-The-Box taxes.",
      "properties": {
        "type": {
          "type": "string",
          "title": "Type",
          "description": "Provides the tax type as \"vat\" for EU VAT, \"usst\" for U.S. Sales Tax, or the 2 letter country code for country level tax types like Canada, Australia, New Zealand, Israel, and all non-EU European countries. Not present when Avalara for Communications is enabled."
        },
        "region": {
          "type": "string",
          "title": "Region",
          "description": "Provides the tax region applied on an invoice. For U.S. Sales Tax, this will be the 2 letter state code. For EU VAT this will be the 2 letter country code. For all country level tax types, this will display the regional tax, like VAT, GST, or PST. Not present when Avalara for Communications is enabled."
        },
        "rate": {
          "type": "number",
          "format": "float",
          "title": "Rate",
          "description": "The combined tax rate. Not present when Avalara for Communications is enabled."
        },
        "tax_details": {
          "type": "array",
          "description": "Provides additional tax details for Communications taxes when Avalara for Communications or Vertex Tax Breakdown is enabled or Canadian Sales Tax. Tax details will only be populated for the Invoice response when fetching a single invoice and not for the InvoiceList or LineItemList. Only populated for a single LineItem fetch when Avalara for Communications is enabled.",
          "items": {
            "$ref": "#/$defs/TaxDetail"
          }
        }
      }
    },
    "Transaction": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "title": "Transaction ID",
          "maxLength": 13
        },
        "object": {
          "type": "string",
          "title": "Object type"
        },
        "uuid": {
          "type": "string",
          "title": "Recurly UUID",
          "description": "The UUID is useful for matching data with the CSV exports and building URLs into Recurly's UI.",
          "maxLength": 32
        },
        "original_transaction_id": {
          "type": "string",
          "title": "Original Transaction ID",
          "description": "If this transaction is a refund (`type=refund`), this will be the ID of the original transaction on the invoice being refunded.",
          "maxLength": 13
        },
        "account": {
          "$ref": "#/$defs/AccountMini"
        },
        "initiator": {
          "type": "string",
          "description": "Must be sent for one-time transactions in order to provide context on which entity is submitting the transaction to ensure proper fraud checks are observed, such as 3DS. If the customer is in session, send `customer`. If this is a merchant initiated one-time transaction, send `merchant`.",
          "enum": [
            "customer",
            "merchant"
          ]
        },
        "invoice": {
          "$ref": "#/$defs/InvoiceMini"
        },
        "merchant_reason_code": {
          "type": "string",
          "default": "none",
          "description": "This conditional parameter is useful for merchants in specific industries who need to submit one-time Merchant Initiated transactions in specific cases.\nNot all gateways support these methods, but will support a generic one-time Merchant Initiated transaction.\nOnly use this if the initiator value is \"merchant\". Otherwise, it will be ignored.\n  - Incremental: Send `incremental` with an additional purchase if the original authorization amount is not sufficient to cover the costs of your service or product. For example, if the customer adds goods or services or there are additional expenses.\n  - No Show: Send `no_show` if you charge customers a fee due to an agreed-upon cancellation policy in your industry.\n  - Resubmission: Send `resubmission` if you need to attempt collection on a declined transaction. You may also use the force collection behavior which has the same effect.\n  - Service Extension: Send `service_extension` if you are in a service industry and the customer has increased/extended their service in some way. For example: adding a day onto a car rental agreement.\n  - Split Shipment: Send `split_shipment` if you sell physical product and need to split up a shipment into multiple transactions when the customer is no longer in session.\n  - Top Up: Send `top_up` if you process one-time transactions based on a pre-arranged agreement with your customer where there is a pre-arranged account balance that needs maintaining. For example, if the customer has agreed to maintain an account balance of 30.00 and their current balance is 20.00, the MIT amount would be at least 10.00 to meet that 30.00 threshold.\n",
          "enum": [
            "incremental",
            "no_show",
            "resubmission",
            "service_extension",
            "split_shipment",
            "top_up"
          ]
        },
        "voided_by_invoice": {
          "$ref": "#/$defs/InvoiceMini"
        },
        "subscription_ids": {
          "type": "array",
          "title": "Subscription IDs",
          "description": "If the transaction is charging or refunding for one or more subscriptions, these are their IDs.",
          "items": {
            "type": "string",
            "title": "Subscription ID",
            "maxLength": 13
          }
        },
        "type": {
          "title": "Transaction type",
          "description": "- `authorization` – verifies billing information and places a hold on money in the customer's account.\n- `capture` – captures funds held by an authorization and completes a purchase.\n- `purchase` – combines the authorization and capture in one transaction.\n- `refund` – returns all or a portion of the money collected in a previous transaction to the customer.\n- `verify` – a $0 or $1 transaction used to verify billing information which is immediately voided.\n",
          "type": "string",
          "enum": [
            "authorization",
            "capture",
            "purchase",
            "refund",
            "verify"
          ]
        },
        "origin": {
          "title": "Origin of transaction",
          "description": "Describes how the transaction was triggered.",
          "type": "string",
          "enum": [
            "api",
            "chargeback",
            "external_recovery",
            "force_collect",
            "hpp",
            "merchant",
            "recurly_admin",
            "recurlyjs",
            "recurring",
            "refunded_externally",
            "transparent",
            "token_api",
            "api_force_collect",
            "api_sub_change",
            "api_verify_card",
            "refund_balance",
            "amazon_v2_ipn"
          ]
        },
        "currency": {
          "type": "string",
          "title": "Currency",
          "description": "3-letter ISO 4217 currency code.",
          "maxLength": 3
        },
        "description": {
          "type": "string",
          "title": "Description",
          "description": "The description that gets sent to the gateway."
        },
        "amount": {
          "type": "number",
          "format": "float",
          "title": "Amount",
          "description": "Total transaction amount sent to the payment gateway."
        },
        "status": {
          "title": "Transaction status",
          "description": "The current transaction status. Note that the status may change, e.g. a `pending` transaction may become `declined` or `success` may later become `void`.",
          "type": "string",
          "enum": [
            "chargeback",
            "declined",
            "error",
            "pending",
            "processing",
            "scheduled",
            "success",
            "void"
          ]
        },
        "success": {
          "type": "boolean",
          "title": "Success?",
          "description": "Did this transaction complete successfully?"
        },
        "backup_payment_method_used": {
          "type": "boolean",
          "title": "Backup Payment Method Used?",
          "description": "Indicates if the transaction was completed using a backup payment"
        },
        "refunded": {
          "type": "boolean",
          "title": "Refunded?",
          "description": "Indicates if part or all of this transaction was refunded."
        },
        "billing_address": {
          "$ref": "#/$defs/AddressWithName"
        },
        "collection_method": {
          "description": "The method by which the payment was collected.",
          "type": "string",
          "enum": [
            "automatic",
            "manual"
          ]
        },
        "payment_method": {
          "$ref": "#/$defs/PaymentMethod"
        },
        "payment_gateway_references": {
          "type": "array",
          "description": "Array of Payment Gateway References captured at transaction time, each a reference to a third-party gateway object of varying types.",
          "items": {
            "$ref": "#/$defs/PaymentGatewayReferences"
          }
        },
        "ip_address_v4": {
          "type": "string",
          "title": "IP address",
          "description": "IP address provided when the billing information was collected:\n\n- When the customer enters billing information into the Recurly.js or Hosted Payment Pages, Recurly records the IP address.\n- When the merchant enters billing information using the API, the merchant may provide an IP address.\n- When the merchant enters billing information using the UI, no IP address is recorded.\n"
        },
        "ip_address_country": {
          "type": "string",
          "title": "Origin IP address country, 2-letter ISO 3166-1 alpha-2 code, if known by Recurly."
        },
        "status_code": {
          "type": "string",
          "title": "Status code"
        },
        "status_message": {
          "type": "string",
          "title": "Status message",
          "description": "For declined (`success=false`) transactions, the message displayed to the merchant."
        },
        "customer_message": {
          "type": "string",
          "title": "Customer message",
          "description": "For declined (`success=false`) transactions, the message displayed to the customer."
        },
        "customer_message_locale": {
          "type": "string",
          "title": "Language code for the message"
        },
        "payment_gateway": {
          "type": "object",
          "x-class-name": "TransactionPaymentGateway",
          "properties": {
            "id": {
              "type": "string"
            },
            "object": {
              "type": "string",
              "title": "Object type"
            },
            "type": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          }
        },
        "gateway_message": {
          "type": "string",
          "title": "Gateway message",
          "description": "Transaction message from the payment gateway."
        },
        "gateway_reference": {
          "type": "string",
          "title": "Gateway reference",
          "description": "Transaction reference number from the payment gateway."
        },
        "gateway_approval_code": {
          "type": "string",
          "title": "Transaction approval code from the payment gateway."
        },
        "gateway_response_code": {
          "type": "string",
          "title": "For declined transactions (`success=false`), this field lists the gateway error code."
        },
        "gateway_response_time": {
          "type": "number",
          "format": "float",
          "title": "Gateway response time",
          "description": "Time, in seconds, for gateway to process the transaction."
        },
        "gateway_response_values": {
          "type": "object",
          "title": "Gateway response values",
          "description": "The values in this field will vary from gateway to gateway."
        },
        "cvv_check": {
          "title": "CVV check",
          "description": "When processed, result from checking the CVV/CVC value on the transaction.",
          "type": "string",
          "enum": [
            "D",
            "I",
            "M",
            "N",
            "P",
            "S",
            "U",
            "X"
          ]
        },
        "avs_check": {
          "title": "AVS check",
          "description": "When processed, result from checking the overall AVS on the transaction.",
          "type": "string",
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "E",
            "F",
            "G",
            "H",
            "I",
            "J",
            "K",
            "L",
            "M",
            "N",
            "O",
            "P",
            "Q",
            "R",
            "S",
            "T",
            "U",
            "V",
            "W",
            "X",
            "Y",
            "Z"
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "title": "Created at"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "title": "Updated at"
        },
        "voided_at": {
          "type": "string",
          "format": "date-time",
          "title": "Voided at"
        },
        "collected_at": {
          "type": "string",
          "format": "date-time",
          "title": "Collected at, or if not collected yet, the time the transaction was created."
        },
        "action_result": {
          "type": "object",
          "description": "Action result params to be used in Recurly-JS to complete a payment when using asynchronous payment methods, e.g., Boleto, iDEAL and Sofort.",
          "title": "Action result"
        },
        "vat_number": {
          "type": "string",
          "description": "VAT number for the customer on this transaction. If the customer's Billing Info country is BR or AR, then this will be their Tax Identifier. For all other countries this will come from the VAT Number field in the Billing Info.",
          "title": "VAT Number"
        },
        "fraud_info": {
          "$ref": "#/$defs/TransactionFraudInfo"
        },
        "next_action": {
          "type": "object",
          "x-class-name": "TransactionNextAction",
          "description": "Next action values are used for any required customer follow-up action. Currently, this is supported for Ebanx when using Pix Automatico.",
          "properties": {
            "type": {
              "type": "string",
              "title": "Next action type",
              "description": "The type of next action required for the transaction.",
              "enum": [
                "qr_code"
              ]
            },
            "value": {
              "type": "string",
              "title": "Next action value",
              "description": "The value associated with the next action type."
            }
          },
          "title": "Next action"
        }
      }
    },
    "TransactionFraudInfo": {
      "type": "object",
      "title": "Fraud information",
      "readOnly": true,
      "properties": {
        "object": {
          "type": "string",
          "title": "Object type",
          "readOnly": true
        },
        "score": {
          "type": "integer",
          "title": "Kount score",
          "minimum": 1,
          "maximum": 99
        },
        "decision": {
          "title": "Kount decision",
          "maxLength": 10,
          "type": "string",
          "enum": [
            "approve",
            "decline",
            "escalate",
            "review"
          ]
        },
        "reference": {
          "type": "string",
          "title": "Kount transaction reference ID"
        },
        "risk_rules_triggered": {
          "type": "array",
          "title": "Risk Rules Triggered",
          "description": "A list of fraud risk rules that were triggered for the transaction.",
          "items": {
            "$ref": "#/$defs/FraudRiskRule"
          }
        }
      }
    }
  }
}