Zuora Catalog API

The Zuora Billing product catalog is where you define your products and pricing. The product catalog's ability to handle sophisticated pricing models gives you the power to easily adapt your pricing to customer and market needs, to grow your business and drive more revenue.

Operations 2

GET /v1/catalog/products List all products #
GET /v1/catalog/products/{product-key} Retrieve a product #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/zuora-catalog-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

zuora-catalog-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: '2023-12-15'
  title: Reference Catalog API
  description: '# Introduction


    Welcome to the REST API reference for the Zuora Billing, Payments, and Central Platform!'
  contact:
    email: docs@zuora.com
servers:
- url: https://rest.zuora.com/
tags:
- name: Catalog
  description: The Zuora Billing product catalog is where you define your products and pricing. The product catalog's ability to handle sophisticated pricing models gives you the power to easily adapt your pricing to customer and market needs, to grow your business and drive more revenue.
paths:
  /v1/catalog/products:
    get:
      summary: List all products
      operationId: GET_Catalog
      description: 'Retrieves the entire product catalog, including all products, features, and their corresponding product rate plans, charges. Products are returned in reverse chronological order on the `UpdatedDate` field.


        For each product, this operation returns a maximum of 300 product rate plans in the response. Across the returned product rate plans, up to 300 product rate plan charges can be returned for each product.'
      tags:
      - Catalog
      parameters:
      - $ref: '#/components/parameters/GLOBAL_HEADER_Accept_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Content_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Authorization_OAuth_optional'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Track_Id'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Entity_Ids_Single'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Org_Ids'
      - $ref: '#/components/parameters/GLOBAL_REQUEST_page'
      - $ref: '#/components/parameters/GLOBAL_REQUEST_pageSize_catalog'
      - name: zuora-version
        in: header
        required: false
        description: "The minor version of the Zuora REST API. \n\nYou only need to set this parameter if you use the `productRatePlans` field.\n"
        schema:
          type: string
      responses:
        '200':
          headers:
            Content-Encoding:
              description: "This header is returned if you specify the `Accept-Encoding: gzip` request header and the response contains over 1000 bytes of data.\n\nNote that only the following MIME types support gzipped responses:\n  - `application/json`\n  - `application/xml`\n  - `text/html`\n  - `text/csv`\n  - `text/plain`\n"
              schema:
                type: string
            RateLimit-Limit:
              description: 'The request limit quota for the time window closest to exhaustion. See [rate limits](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Policies/Concurrent_Request_Limits#Rate_limits) for more information.

                '
              schema:
                type: string
            RateLimit-Remaining:
              description: 'The number of requests remaining in the time window closest to quota exhaustion. See [rate limits](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Policies/Concurrent_Request_Limits#Rate_limits) for more information.

                '
              schema:
                type: number
            RateLimit-Reset:
              description: 'The number of seconds until the quota resets for the time window closest to quota exhaustion. See [rate limits](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Policies/Concurrent_Request_Limits#Rate_limits) for more information.

                '
              schema:
                type: number
            Zuora-Request-Id:
              description: 'The Zuora internal identifier of the API call. You cannot control the value of this header.

                '
              schema:
                type: string
                maxLength: 36
                minLength: 36
            Zuora-Track-Id:
              description: 'A custom identifier for tracing the API call. If you specified a tracing identifier in the request headers, Zuora returns the same tracing identifier. Otherwise, Zuora does not set this header.

                '
              schema:
                type: string
                maxLength: 64
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GETCatalogType'
              example:
                products:
                - id: 8a8082c45aa81b51015ad5a2d07d0e89
                  sku: SKU-00000987
                  name: ABC
                  description: ''
                  category: Base Products
                  effectiveStartDate: '2017-01-01'
                  effectiveEndDate: '2020-01-01'
                  productNumber: PC-00000011
                  productRatePlans: https://rest.zuora.com/v1/rateplan/40289f466463d683016463ef8b7301a0/productRatePlan
                success: true
  /v1/catalog/products/{product-key}:
    get:
      summary: Retrieve a product
      operationId: GET_Product
      description: 'Retrieves detailed information about a specific product, including information about its product rate plans and charges.


        This operation returns a maximum of 300 product rate plans and 300 product rate plan charges across all product rate plans in the response.'
      tags:
      - Catalog
      parameters:
      - $ref: '#/components/parameters/GLOBAL_HEADER_Accept_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Content_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Authorization_OAuth_optional'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Track_Id'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Entity_Ids_Single'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Org_Ids'
      - name: zuora-version
        in: header
        required: false
        description: "The minor version of the Zuora REST API. \n\nYou only need to set this parameter if you use the `productRatePlans` field.\n"
        schema:
          type: string
      - name: product-key
        in: path
        description: 'The unique ID, SKU, or product number of the product that you want to retrieve. For example, 8a808255575bdae4015774e9602e16fe, SKU-00000987, or PC-00000006.

          '
        required: true
        schema:
          type: string
      responses:
        '200':
          headers:
            Content-Encoding:
              description: "This header is returned if you specify the `Accept-Encoding: gzip` request header and the response contains over 1000 bytes of data.\n\nNote that only the following MIME types support gzipped responses:\n  - `application/json`\n  - `application/xml`\n  - `text/html`\n  - `text/csv`\n  - `text/plain`\n"
              schema:
                type: string
            RateLimit-Limit:
              description: 'The request limit quota for the time window closest to exhaustion. See [rate limits](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Policies/Concurrent_Request_Limits#Rate_limits) for more information.

                '
              schema:
                type: string
            RateLimit-Remaining:
              description: 'The number of requests remaining in the time window closest to quota exhaustion. See [rate limits](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Policies/Concurrent_Request_Limits#Rate_limits) for more information.

                '
              schema:
                type: number
            RateLimit-Reset:
              description: 'The number of seconds until the quota resets for the time window closest to quota exhaustion. See [rate limits](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Policies/Concurrent_Request_Limits#Rate_limits) for more information.

                '
              schema:
                type: number
            Zuora-Request-Id:
              description: 'The Zuora internal identifier of the API call. You cannot control the value of this header.

                '
              schema:
                type: string
                maxLength: 36
                minLength: 36
            Zuora-Track-Id:
              description: 'A custom identifier for tracing the API call. If you specified a tracing identifier in the request headers, Zuora returns the same tracing identifier. Otherwise, Zuora does not set this header.

                '
              schema:
                type: string
                maxLength: 64
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GETProductType'
              example:
                id: 8a8082c45aa81b51015ad5a2d07d0e89
                sku: SKU-00000987
                name: ABC
                description: ''
                category: Base Products
                effectiveStartDate: '2017-01-01'
                effectiveEndDate: '2020-01-01'
                productRatePlans: https://rest.zuora.com/v1/rateplan/40289f466463d683016463ef8b7301a0/productRatePlan
                productNumber: PC-00000006
                success: true
components:
  parameters:
    GLOBAL_REQUEST_pageSize_catalog:
      name: pageSize
      in: query
      required: false
      description: 'The number of records returned per page in the response.

        '
      schema:
        type: integer
        default: 10
        maximum: 40
    GLOBAL_HEADER_Authorization_OAuth_optional:
      name: Authorization
      in: header
      required: false
      description: 'The value is in the `Bearer {token}` format where {token} is a valid OAuth token generated by calling [Create an OAuth token](/api-references/api/operation/createToken).

        '
      schema:
        type: string
    GLOBAL_HEADER_Zuora_Entity_Ids_Single:
      name: Zuora-Entity-Ids
      in: header
      required: false
      description: 'An entity ID. If you have [Zuora Multi-entity](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Multi-entity) enabled and the OAuth token is valid for more than one entity, you must use this header to specify which entity to perform the operation in. If the OAuth token is only valid for a single entity, or you do not have Zuora Multi-entity enabled, you do not need to set this header.

        '
      schema:
        type: string
    GLOBAL_HEADER_Content_Encoding:
      name: Content-Encoding
      in: header
      required: false
      description: 'Include the `Content-Encoding: gzip` header to compress a request. With this header specified, you should upload a gzipped file for the request payload instead of sending the JSON payload.

        '
      schema:
        type: string
    GLOBAL_HEADER_Zuora_Track_Id:
      name: Zuora-Track-Id
      in: header
      required: false
      description: 'A custom identifier for tracing the API call. If you set a value for this header, Zuora returns the same value in the response headers. This header enables you to associate your system process identifiers with Zuora API calls, to assist with troubleshooting in the event of an issue.


        The value of this field must use the US-ASCII character set and must not include any of the following characters: colon (`:`), semicolon (`;`), double quote (`"`), and quote (`''`).

        '
      schema:
        type: string
        maxLength: 64
    GLOBAL_REQUEST_page:
      name: page
      in: query
      required: false
      description: 'The index number of the page that you want to retrieve. This parameter is dependent on `pageSize`. You must set `pageSize` before specifying `page`. For example, if you set `pageSize` to `20` and `page` to `2`, the 21st to 40th records are returned in the response.

        '
      schema:
        type: integer
        default: 1
        minimum: 1
    GLOBAL_HEADER_Accept_Encoding:
      name: Accept-Encoding
      in: header
      required: false
      description: "Include the `Accept-Encoding: gzip` header to compress responses as a gzipped file. It can significantly reduce the bandwidth required for a response. \n\nIf specified, Zuora automatically compresses responses that contain over 1000 bytes of data, and the response contains a `Content-Encoding` header with the compression algorithm so that your client can decompress it.\n"
      schema:
        type: string
    GLOBAL_HEADER_Zuora_Org_Ids:
      name: Zuora-Org-Ids
      in: header
      required: false
      description: "Comma separated IDs. If you have <a href=\"https://knowledgecenter.zuora.com/Zuora_Central_Platform/Multi-Org\" target=\"_blank\">Zuora Multi-Org</a> enabled, \nyou can use this header to specify which orgs to perform the operation in. If you do not have Zuora Multi-Org enabled, you should not set this header.\n\nThe IDs must be a sub-set of the user's accessible orgs. If you specify an org that the user does not have access to, the operation fails.\n\nIf the header is not set, the operation is performed in scope of the user's accessible orgs.\n"
      schema:
        type: string
  schemas:
    ProductObjectNSFields:
      description: 'Container for Product fields provided by the [Zuora Connector for NetSuite](https://www.zuora.com/connect/app/?appId=265).

        '
      properties:
        IntegrationId__NS:
          description: 'ID of the corresponding object in NetSuite. Only available if you have installed the [Zuora Connector for NetSuite](https://www.zuora.com/connect/app/?appId=265).

            '
          maxLength: 255
          type: string
        IntegrationStatus__NS:
          description: 'Status of the product''s synchronization with NetSuite. Only available if you have installed the [Zuora Connector for NetSuite](https://www.zuora.com/connect/app/?appId=265).

            '
          maxLength: 255
          type: string
        ItemType__NS:
          description: 'Type of item that is created in NetSuite for the product. Only available if you have installed the [Zuora Connector for NetSuite](https://www.zuora.com/connect/app/?appId=265).

            '
          enum:
          - Inventory
          - Non Inventory
          - Service
          type: string
        SyncDate__NS:
          description: 'Date when the product was synchronized with NetSuite. Only available if you have installed the [Zuora Connector for NetSuite](https://www.zuora.com/connect/app/?appId=265).

            '
          maxLength: 255
          type: string
      title: productFieldsNS
      type: object
    GetProductFeatureType:
      allOf:
      - properties:
          code:
            description: 'Feature code, up to 255 characters long.

              '
            type: string
          description:
            description: 'Feature description.

              '
            type: string
          id:
            description: 'Feature ID.

              '
            type: string
          name:
            description: 'Feature name, up to 255 characters long.

              '
            type: string
          status:
            description: ''
            type: string
        type: object
      - $ref: '#/components/schemas/ProductFeatureObjectCustomFields'
      title: productFeatures
    ProductFeatureObjectCustomFields:
      additionalProperties:
        description: 'Custom fields of the Product Feature object. The name of each custom field has the form <code>*customField*__c</code>. Custom field names are case sensitive. See [Manage Custom Fields](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Manage_Custom_Fields) for more information.

          '
      description: 'Container for custom fields of a Product Feature object.

        '
      title: productFeatureFieldsCustom
      type: object
    GETCatalogType:
      properties:
        nextPage:
          description: 'URL to retrieve the next page of the response if it exists; otherwise absent.

            '
          format: URL
          type: string
        products:
          description: 'Container for one or more products:

            '
          items:
            $ref: '#/components/schemas/GETProductType'
          type: array
        success:
          description: 'Returns `true` if the request was processed successfully.

            '
          type: boolean
      type: object
    ProductObjectCustomFields:
      additionalProperties:
        description: 'Custom fields of the Product object. The name of each custom field has the form <code>*customField*__c</code>. Custom field names are case sensitive. See [Manage Custom Fields](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Manage_Custom_Fields) for more information.

          '
      description: 'Container for custom fields of a Product object.

        '
      title: productFieldsCustom
      type: object
    GETProductType:
      allOf:
      - properties:
          category:
            description: "Category of the product. Used by Zuora Quotes Guided Product Selector.\n\nPossible values are:\n  - Base Products\n  - Add On Services\n  - Miscellaneous Products\n"
            type: string
          description:
            description: 'Optional product description.

              '
            type: string
          effectiveEndDate:
            description: 'The date when the product expires and cannot be subscribed to anymore, as `yyyy-mm-dd`.

              '
            format: date
            type: string
          effectiveStartDate:
            description: 'The date when the product becomes available and can be subscribed to, as `yyyy-mm-dd`.

              '
            format: date
            type: string
          id:
            description: 'Product ID.

              '
            type: string
          name:
            description: 'Product name, up to 100 characters.

              '
            type: string
          organizationLabels:
            description: "The organization(s) that the object belongs to. \n\nNote: This field is available only when the Multi-Org feature is enabled.            \n"
            items:
              properties:
                organizationId:
                  description: 'The organization ID.

                    '
                  type: string
                organizationName:
                  description: 'The organization name.

                    '
                  type: string
              type: object
            type: array
          productFeatures:
            description: 'Container for one or more product features. Only available when the following settings are enabled:

              - The Entitlements feature in your tenant

              - The Enable Feature Specification in Product and Subscriptions setting in Settings > Billing

              '
            items:
              $ref: '#/components/schemas/GetProductFeatureType'
            type: array
          productNumber:
            description: 'The natural key of the product.

              '
            type: string
          productRatePlans:
            description: "URL to retrieve information about all product rate plans of a specific product. For example, `/v1/rateplan/40289f466463d683016463ef8b7301a0/productRatePlan`. If you want to view the product rate plan details, call [List all product rate plans of a product](/api-references/api/operation/GET_ProductRatePlans) with the returned URL.\n\nThis field is in Zuora REST API version control. If you set the `zuora-version` request header to `230.0` or later [available versions](/api-references/api/overview/#section/API-Versions/Minor-Version), the value of this field is a URL. Zuora recommends that you use the latest behavior to retrieve product information.\n\nIf you do not set the `zuora-version` request header or you set this header to `229.0` or earlier [available versions](/api-references/api/overview/#section/API-Versions/Minor-Version), the value of this field is an array of product rate plan details. \nFor more information about the array, see the response body of [List all product rate plans of a product](/api-references/api/operation/GET_ProductRatePlans). **Note**: The array contains a maximum of 300 product rate plans. Additionally, across all product rate plans, at most 300 product rate plan charges are returned.\n"
            format: URL
            type: string
          sku:
            description: 'Unique product SKU, up to 50 characters.

              '
            type: string
          tags:
            description: ''
            type: string
        type: object
      - $ref: '#/components/schemas/ProductObjectNSFields'
      - $ref: '#/components/schemas/ProductObjectCustomFields'
      title: products
x-tagGroups:
- name: Authentication
  tags:
  - OAuth
- name: Products
  tags:
  - Products
  - Catalog
  - Catalog Groups
  - Offers
  - Price Book Items
  - Product Rate Plans
  - Product Rate Plan Definitions
  - Product Rate Plan Charges
  - Product Charge Definitions
  - Product Rate Plan Charge Tiers
  - Zuora Revenue Integration
- name: Customer Accounts
  tags:
  - Accounts
  - Contacts
  - Contact Snapshots
- name: Orders and Subscriptions
  tags:
  - Sign Up
  - Orders
  - Order Actions
  - Order Line Items
  - Fulfillments
  - Ramps
  - Subscriptions
  - Rate Plans
- name: Advanced Consumption Billing
  tags:
  - Prepaid with Drawdown
- name: Usage
  tags:
  - Usage
- name: Billing Documents
  tags:
  - Delivery Adjustments
  - Billing Documents
  - Invoices
  - Credit Memos
  - Debit Memos
  - E-Invoicing
  - Invoice Schedules
  - Taxation Items
  - Sequence Sets
  - Operations
- name: Bill Runs
  tags:
  - Bill Run
  - Billing Preview Run
- name: Payment Methods
  tags:
  - Payment Methods
  - Custom Payment Method Types
  - Payment Method Updater
  - Payment Method Snapshots
  - Payment Method Transaction Logs
  - Hosted Pages
  - RSA Signatures
- name: Payments
  tags:
  - Payment Authorization
  - Payment Gateways
  - Payment Gateway Reconciliation
  - Payments
  - Payment Transaction Logs
  - Payment Runs
  - Payment Schedules
  - Refunds
- name: Finance
  tags:
  - Accounting Codes
  - Accounting Periods
  - Summary Journal Entries
  - Journal Runs
  - Mass Updater
- name: Events and Notifications
  tags:
  - Notifications
  - Custom Event Triggers
  - Custom Scheduled Events
- name: Custom Objects
  tags:
  - Custom Object Definitions
  - Custom Object Records
  - Custom Object Jobs
- name: System Health
  tags:
  - API Health
  - Bill Run Health
  - Electronic Payments Health
- name: Workflow
  tags:
  - Workflows
- name: Data Query
  tags:
  - Data Queries
- name: AQuA
  tags:
  - Aggregate Queries
- name: Deployment Manager
  tags:
  - Configuration Templates
- name: Multiple Organizations
  tags:
  - Data Labeling
- name: Order to Revenue
  tags:
  - Regenerate
- name: General-Purpose Operations
  tags:
  - Actions
  - Settings
  - Files
  - Imports
  - Custom Exchange Rates
  - Attachments
  - Describe