Zuora Data Labeling API

The Data Labeling APIs help you to label your existing data with organization(s) in Zuora. Once you turned on Multi Org feature, if you don't label your existing data, they are simply unlabeled, and unlabeled data can be accessed by all organizations in your tenant. To limit the access of your existing data, you need to label them with organization(s) you defined in the organization hierarchy management setting page. Once labeled, the data can only be accessed by users who have been granted with the labeled organization(s). Note that you have to enable the "Multi Org" feature before using the Data Labeling APIs. ### General guidelines * Firstly, create the org hierarchy and determine the data categorization strategy, for example, by currency, by region, by custom fields etc. * You have to migrate all customer accounts before labeling products in the product catalog * You can leave the users at the root, just so long as you understand that the user would have access to all the Org Units within the Multi-org enabled tenant * Currently, you need to manually label existing Journal Runs, JournalEntry, and AccountingPeriod objects by editing, tell us your use case if you want to automate this process. ### Order of object labeling Except for `Account` and `Product`, there are no dependencies between objects, users can label them in parallel. But please keep in mind that the data access control ensues from the object labeling. For example, if you label a scheduled `BillRun` with `US` org, when it's triggered next time, the bill run will only pick up customer accounts of the `US` org, not others. Likewise, labeling a user will change the user's visible data scope, for example, an `EU` user won't be able to see `US` accounts anymore.

Operations 2

POST /v1/multi-organizations/data-labeling-job Submit a data labeling job #
GET /v1/multi-organizations/data-labeling-job/{job-id} Retrieve a data labeling job #

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-data-labeling-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-data-labeling-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: '2023-12-15'
  title: Reference Data Labeling 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: Data Labeling
  description: The Data Labeling APIs help you to label your existing data with organization(s) in Zuora.
paths:
  /v1/multi-organizations/data-labeling-job:
    post:
      operationId: POST_DataLabelingJob
      summary: Submit a data labeling job
      description: Submits a data labeling job.
      tags:
      - Data Labeling
      parameters:
      - $ref: '#/components/parameters/GLOBAL_HEADER_Idempotency_Key'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Accept_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Content_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Authorization_OAuth'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Entity_Ids_Single'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Track_Id'
      responses:
        '200':
          description: OK
          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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitDataLabelingJobResponse'
              example:
                success: true
                jobId: ff80808186beca0a0186bedbf7d3006f
                jobStatus: Accepted
        '400':
          description: Bad Request
          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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommonErrorResponse'
              example:
                success: false
                processId: 4C0112A0983D040C
                reasons:
                - code: 59620220
                  message: The queryType is invalid
                requestId: 46a352ed-57a2-4a9f-b7cb-a8c864d839f3
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitDataLabelingJobRequest'
        required: true
  /v1/multi-organizations/data-labeling-job/{job-id}:
    get:
      operationId: GET_DataLabelingJob
      summary: Retrieve a data labeling job
      description: Retrieves a data labeling job. You can use this operation to track the status of the data labeling job.
      tags:
      - Data Labeling
      parameters:
      - $ref: '#/components/parameters/GLOBAL_HEADER_Accept_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Content_Encoding'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Authorization_OAuth'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Entity_Ids_Single'
      - $ref: '#/components/parameters/GLOBAL_HEADER_Zuora_Track_Id'
      - name: job-id
        in: path
        required: true
        description: 'Identifier of the data labeling job.

          '
        schema:
          type: string
          format: uuid
          maxLength: 32
          minLength: 32
      responses:
        '200':
          description: OK
          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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetDataLabelingJobResponse'
              example:
                success: true
                jobId: ff80808186b966950186b97922e200ab
                objectType: Account
                totalObject: 11
                jobStatus: Completed
                progress:
                  labeled: 9
                  failed: 1
                  timeout: 1
        '404':
          description: Not Found
          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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommonErrorResponse'
              example:
                success: false
                processId: 4C0112A0983D039B
                reasons:
                - code: 50000020
                  message: The job does not exist
                requestId: 46a352ed-57a2-4a9f-b7cb-a8c864d839f3
components:
  parameters:
    GLOBAL_HEADER_Idempotency_Key:
      name: Idempotency-Key
      in: header
      required: false
      description: "Specify a unique idempotency key if you want to perform an idempotent POST or PATCH request. Do not use this header in other request types. \n\nWith this header specified, the Zuora server can identify subsequent retries of the same request using this value, which prevents the same operation from being performed multiple times by accident. \n"
      schema:
        type: string
        maxLength: 255
    GLOBAL_HEADER_Authorization_OAuth:
      name: Authorization
      in: header
      required: true
      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_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_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_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_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
  schemas:
    GetDataLabelingJobResponse:
      properties:
        jobId:
          description: 'Identifier of the data labeling job.

            '
          format: uuid
          maxLength: 32
          minLength: 32
          type: string
        jobStatus:
          description: 'Status of the data labeling job.


            * `Accepted` - The data labeling job has been accepted by the system.

            * `Dispatched` - The data labeling job is dispatched to the data labeling service.

            * `Completed` - The data labeling job has completed. Please note that `Completed` simply means the data labeling job has completed, but it does not mean the data labeling job has labeled all the data. You can check the `progress` field to see how many data have been `labeled`, `failed` or `timeout`.

            '
          enum:
          - Accepted
          - Dispatched
          - Completed
          type: string
        objectType:
          description: 'The object type of the data labeling job.

            '
          type: string
        progress:
          properties:
            failed:
              description: 'The number of objects that have failed to be labeled.

                '
              type: integer
            labeled:
              description: 'The number of objects that have been labeled.

                '
              type: integer
            timeout:
              description: "The number of objects that have timed out to be labeled.          \n"
              type: integer
          type: object
        success:
          description: 'Indicates whether the job was submitted successfully.

            '
          type: boolean
        totalObject:
          description: 'The total number of objects to be labeled.

            '
          type: integer
      type: object
    SubmitDataLabelingJobResponse:
      properties:
        jobId:
          description: 'Identifier of the data labeling job.

            '
          format: uuid
          maxLength: 32
          minLength: 32
          type: string
        jobStatus:
          description: 'Status of the data labeling job.


            * `Accepted` - The data labeling job has been accepted by the system.

            * `Dispatched` - The data labeling job is dispatched to the data labeling service.

            * `Completed` - The data labeling job has completed. Please note that `Completed` simply means the data labeling job has completed, but it does not mean the data labeling job has labeled all the data. You can check the `progress` field to see how many data have been `labeled`, `failed` or `timeout`.

            '
          enum:
          - Accepted
          - Dispatched
          - Completed
          type: string
        success:
          description: 'Indicates whether the job was submitted successfully.

            '
          type: boolean
      type: object
    CommonErrorResponse:
      properties:
        processId:
          description: 'The Id of the process that handle the operation.

            '
          type: string
        reasons:
          items:
            properties:
              code:
                description: 'The error code of response.

                  '
                type: string
              message:
                description: 'The detail information of the error response

                  '
                type: string
            type: object
          type: array
        requestId:
          description: 'The Id of the request.

            '
          format: uuid
          maxLength: 36
          minLength: 36
          type: string
        success:
          description: 'Indicates whether the call succeeded.

            '
          type: boolean
      type: object
    SubmitDataLabelingJobRequest:
      example:
        objectType: Account
        orgIds:
        - 12345678-1234-1234-1234-123456789012
        query: select Id from Account where BillToContact.Country = 'US'
        queryType: ByZoql
      properties:
        ids:
          description: 'The IDs of the objects to be labeled, only required if the `queryType` is `ById`.


            There is a 4MB limit of the JSON payload, so in case of a large number of IDs, please make sure the payload is less than 4MB.

            '
          items:
            type: string
          type: array
        objectType:
          description: "The object type of the data labeling job.\n\nCurrently, the following objects are supported:\n  * `User`\n  * `Account` \n\n    All the associated transaction objects of the account being labeled will automatically inherit the org label of the account.\n  * `Product`\n\n    You have to label the Account object first, make sure all accounts have been labeled, then you can proceed with the Product object. \n\n    You can get all the unlabeled accounts by running a Data Source export job, with the following query:\n    ``` sql\n    SELECT Id, Name FROM Account WHERE Organization.Id IS NULL\n    ```              \n    \n    All the ProductRatePlanS of the product will be automatically labeled with the same `orgs`.\n    \n    When labeling products, you can omit the `orgs` parameter, i.e, leave it empty, the system will find all the subscriptions that include the product and get the org list of those subscriptions, then label the product with those `orgs`, aka, the `derived orgs`.\n    \n    You can also explicitly specify the orgs parameter, in that case, you will need to provide a super set of the `derived orgs`.  \n  * `BillRun`\n\n    You don't need to specify the `orgs` parameter, we will label the `BillRun` with all the orgs because existing runs could pick up all accounts. You can definitely create new bill run with certain `orgs` to operate separately by `orgs`.\n  * `PaymentRun`\n\n    Same as BillRun.\n  * `ForecastRun`\n"
          type: string
        orgIds:
          description: 'The IDs of the organizations that the data labeling job will associate with the data to be labeled. Either the `orgIds` or `orgs` field is required.

            '
          format: byte
          items:
            format: uuid
            maxLength: 36
            minLength: 36
            type: string
          type: array
        orgs:
          description: 'The names of the organizations that the data labeling job will associate with the data to be labeled. Either the `orgIds` or `orgs` field is required.

            '
          items:
            type: string
          type: array
        query:
          description: 'The query that the data labeling job will run to fetch the data to be labeled, only required if the `queryType` is `ByZoql`.

            '
          type: string
        queryType:
          description: 'Specifies the type of query that the data labeling job will run to fetch the data to be labeled.


            * `ByZoql` - The data labeling job will run a ZOQL query which is specified in the `query` field to fetch the data to be labeled.

            * `ById` - The data labeling job will fetch the data to be labeled by the IDs specified in the `ids` field.

            '
          enum:
          - ByZoql
          - ById
          type: string
      required:
      - objectType
      - queryType
      type: object
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