Xero · Schema

Subscription

AccountingBank FeedsFinanceFinancial ServicesInvoicingPayrollSmall Business

Properties

Name Type Description
currentPeriodEnd string End of the current period that the subscription has been invoiced for.
endDate string If the subscription has been canceled, this is the date when the subscription ends. If null, the subscription is active and has not been cancelled
id string The unique identifier of the subscription
organisationId string The Xero generated unique identifier for the organisation
plans array List of plans for the subscription.
startDate string Date when the subscription was first created.
status string Status of the subscription. Available statuses are ACTIVE, CANCELED, and PAST_DUE.
testMode boolean Boolean used to indicate if the subscription is in test mode
View JSON Schema on GitHub

JSON Schema

xero-subscription-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/xero/main/json-schema/xero-subscription-schema.json",
  "title": "Subscription",
  "x-generated": "2026-10-20",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/xero-app-store-api-openapi.yml#/components/schemas/Subscription",
  "type": "object",
  "properties": {
    "currentPeriodEnd": {
      "description": "End of the current period that the subscription has been invoiced for.\n",
      "format": "date-time",
      "type": "string",
      "x-is-datetime": true
    },
    "endDate": {
      "description": "If the subscription has been canceled, this is the date when the subscription ends. If null, the subscription is active and has not been cancelled",
      "format": "date-time",
      "type": "string",
      "x-is-datetime": true
    },
    "id": {
      "description": "The unique identifier of the subscription",
      "format": "uuid",
      "type": "string"
    },
    "organisationId": {
      "description": "The Xero generated unique identifier for the organisation",
      "format": "uuid",
      "type": "string"
    },
    "plans": {
      "description": "List of plans for the subscription.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Plan"
      }
    },
    "startDate": {
      "description": "Date when the subscription was first created.",
      "format": "date-time",
      "type": "string",
      "x-is-datetime": true
    },
    "status": {
      "description": "Status of the subscription. Available statuses are ACTIVE, CANCELED, and PAST_DUE.",
      "type": "string",
      "enum": [
        "ACTIVE",
        "CANCELED",
        "PAST_DUE"
      ]
    },
    "testMode": {
      "description": "Boolean used to indicate if the subscription is in test mode",
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "organisationId",
    "status",
    "startDate",
    "currentPeriodEnd",
    "plans"
  ],
  "$defs": {
    "Plan": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The unique identifier of the plan",
          "format": "uuid",
          "type": "string"
        },
        "name": {
          "description": "The name of the plan. It is used in the invoice line item\ndescription.\n",
          "type": "string"
        },
        "status": {
          "description": "Status of the plan. Available statuses are ACTIVE, CANCELED, and\nPENDING_ACTIVATION.\n",
          "type": "string",
          "enum": [
            "ACTIVE",
            "CANCELED",
            "PENDING_ACTIVATION"
          ]
        },
        "subscriptionItems": {
          "description": "List of the subscription items belonging to the plan. It does not\ninclude cancelled subscription items.\n",
          "items": {
            "$ref": "#/$defs/SubscriptionItem"
          },
          "type": "array"
        }
      },
      "required": [
        "id",
        "name",
        "status",
        "subscriptionItems"
      ]
    },
    "Price": {
      "type": "object",
      "properties": {
        "amount": {
          "description": "The net (before tax) amount.",
          "type": "number",
          "format": "double",
          "x-is-money": true
        },
        "currency": {
          "description": "The currency of the price.",
          "type": "string"
        },
        "id": {
          "description": "The unique identifier of the price.",
          "format": "uuid",
          "type": "string"
        }
      },
      "required": [
        "id",
        "amount",
        "currency"
      ]
    },
    "Product": {
      "properties": {
        "id": {
          "description": "The unique identifier for the product",
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "description": "The name of the product",
          "type": "string"
        },
        "seatUnit": {
          "description": "The unit of the per seat product. e.g. \"user\", \"organisation\", \"SMS\", etc",
          "type": "string"
        },
        "type": {
          "description": "The pricing model of the product:\n* FIXED: Customers are charged a fixed amount for each billing period\n* PER_SEAT: Customers are charged based on the number of units they purchase\n* METERED: Customers are charged per use of this product\n* SIMPLE: Customers are charged on a fixed amount for each billing period with an optional add-on feature\n",
          "type": "string",
          "enum": [
            "FIXED",
            "PER_SEAT",
            "METERED",
            "SIMPLE"
          ]
        },
        "usageUnit": {
          "description": "The unit of the usage product. e.g. \"user\", \"minutes\", \"SMS\", etc",
          "type": "string"
        }
      }
    },
    "SubscriptionItem": {
      "type": "object",
      "properties": {
        "endDate": {
          "description": "Date when the subscription to this product will end",
          "format": "date-time",
          "type": "string",
          "x-is-datetime": true
        },
        "id": {
          "description": "The unique identifier of the subscription item.",
          "format": "uuid",
          "type": "string"
        },
        "price": {
          "description": "The price of the product subscribed to.",
          "$ref": "#/$defs/Price"
        },
        "product": {
          "description": "The product subscribed to.",
          "$ref": "#/$defs/Product"
        },
        "quantity": {
          "description": "The quantity of the item. For a fixed product, it is 1. For a per-seat product, it is a positive integer. For metered products, it is always null.",
          "type": "integer"
        },
        "startDate": {
          "description": "Date the subscription started, or will start. Note: this could be in\nthe future for downgrades or reduced number of seats that haven't taken effect yet.\n",
          "format": "date-time",
          "type": "string",
          "x-is-datetime": true
        },
        "status": {
          "description": "Status of the subscription item. Available statuses are ACTIVE, CANCELED, and\nPENDING_ACTIVATION.\n",
          "type": "string",
          "enum": [
            "ACTIVE",
            "CANCELED",
            "PENDING_ACTIVATION"
          ]
        },
        "testMode": {
          "description": "If the subscription is a test subscription",
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "startDate",
        "product",
        "price",
        "status"
      ]
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/xero-subscription"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.