Data Catalog API

Manage your tracking plans, events, and properties in your data catalog programmatically.
Available Plans
  • growth
  • enterprise

success
The Data Catalog API is a part of RudderStack’s Data Governance toolkit that ensures the quality and integrity of your data in a secure and compliant manner.

You can use the Data Catalog API to:

  • Create and manage your tracking plans programmatically.
  • Add or update events and properties in your data catalog.
  • Create and manage categories for your data catalog events.

Prerequisites

Generate a workspace-level service access token in the RudderStack dashboard.

info
For production use cases, RudderStack recommends using a service access token instead of personal access token.

Authentication

The Data Catalog API uses Bearer authentication in the following format:

Authorization: Bearer <SERVICE_ACCESS_TOKEN>

Base URL

Use the base URL for your API requests depending on your region:

Manage tracking plans

This section covers the API endpoints for creating and managing your tracking plans.

Create tracking plan

POST
/catalog/tracking-plans

Request body

name
Required
String
Tracking plan name.

Note that:
  • The name must be between 3 and 65 characters and should start with a letter.
  • It must contain only letters, numbers, underscores, commas, spaces, dashes, and dots.
description
Optional
String
Tracking plan description.

Example request

Example response

{
  "id": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
  "name": "Product Ordered Plan",
  "description": "Tracking plan for users placing an order for the product.",
  "version": 1,
  "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
  "creationType": "BackendAPI",
  "createdAt": "2024-05-22T10:34:03.016Z",
  "updatedAt": "2024-05-22T10:34:03.016Z"
}

Response codes

CodeDescription
200Tracking plan is successfully created. RudderStack also returns an ID for the newly created tracking plan.
400Bad or invalid request.

List all tracking plans

GET
/catalog/tracking-plans

Example request

Example response

{
  "trackingPlans": [{
      "id": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
      "name": "Product Ordered Plan",
      "description": "Tracking plan for users placing an order for the product.",
      "version": 1,
      "createdAt": "2024-05-22T13:07:18.617Z",
      "updatedAt": "2024-05-22T13:07:18.617Z",
      "creationType": "BackendAPI",
      "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e"
    },
    {
      "id": "tp_2rKxjFu6R1qot19aWhTW7W7Ojew",
      "name": "Order Completed Plan",
      "description": "Tracking plan for users completing an order for the product.",
      "version": 4,
      "createdAt": "2024-01-30T15:41:14.446Z",
      "updatedAt": "2024-02-01T08:59:15.095Z",
      "creationType": "Event Audit API",
      "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e"
    }
  ]
}

Response codes

CodeDescription
200List of all tracking plans in the associated workspace.

Get tracking plan by ID

GET
/catalog/tracking-plans/{trackingPlanId}

Path parameters

trackingPlanId
Required
String
Tracking plan ID.
version
Optional
String
Tracking plan version. Note that it must be a number.

Example request

Example response

{
  "id": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
  "name": "Product Ordered Plan",
  "description": "Tracking plan for users placing an order for the product.",
  "version": 1,
  "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
  "creationType": "BackendAPI",
  "createdAt": "2024-05-22T13:07:18.617Z",
  "updatedAt": "2024-05-22T13:07:18.617Z"
}

Response codes

CodeDescription
200Tracking plan is updated successfully.
404Tracking plan not found for the specified ID.

Update tracking plan

PUT
/catalog/tracking-plans/{trackingPlanId}

Path parameters

trackingPlanId
Required
String
Tracking plan ID.

Request body

To update the tracking plan, at least one of the following parameters is required:

name
String
Tracking plan name.

Note that:
  • The name must be between 3 and 65 characters and should start with a letter.
  • It must contain only letters, numbers, underscores, commas, spaces, dashes, and dots.
description
String
Tracking plan description.

Example request

Example response

{
  "id": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
  "name": "New Product Ordered Plan",
  "description": "Updated tracking plan for users placing an order for the product.",
  "version": 2,
  "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
  "creationType": "BackendAPI",
  "createdAt": "2024-05-22T10:34:03.016Z",
  "updatedAt": "2024-05-22T10:36:49.252Z"
}

Response codes

CodeDescription
200Tracking plan is updated successfully.
400Bad or invalid request.

Delete tracking plan

danger
Deleted tracking plans cannot be recovered or restored.
DELETE
/catalog/tracking-plans/{trackingPlanId}

Path parameters

trackingPlanId
Required
String
Tracking plan ID.

Example request

Example response

{
  "name": "New Product Ordered Plan",
  "version": 1,
  "description": "Updated tracking plan for users placing an order for the product.",
  "creationType": "BackendAPI",
  "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
  "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
  "updatedBy": null,
  "createdAt": "2024-05-22T13:41:33.057Z",
  "updatedAt": "2024-05-22T13:41:33.057Z",
  "events": []
}

Response codes

CodeDescription
200Tracking plan is deleted successfully.
400Bad or invalid request.

Manage events in tracking plans

This section covers the API endpoints for upserting and managing events in your tracking plans.

info
The Data Catalog API creates the events and properties in the data catalog only if they do not exist already.

Upsert event to tracking plan

warning

While upserting an event to a tracking plan, make sure the schema of the properties adheres to the advanced rules set for those properties in the data catalog. Otherwise, RudderStack will drop the schema and give the below error:

“Property with name [${prop.name}] and type [${prop.type}] already exists with different advanced keywords.”

If you get this error, you can update the existing catalog property by adding required advanced rules and try again.

PATCH
/catalog/tracking-plans/{trackingPlanId}/events

Path parameters

trackingPlanId
Required
String
Tracking plan ID.

Request body

name
Required
String
Name of the event to be upserted.

Note that:
  • The name must be between 3 and 65 characters and should start with a letter.
  • It must contain only letters, numbers, underscores, commas, spaces, dashes, and dots.
  • For non-track events, the name should be an empty string.
description
Optional
String
Event description.
eventType
Optional
String
Type of event to be upserted.

Note that:
  • Once set, the event type cannot be updated later.
  • Allowed event types are track, identify, group, page, and screen.
categoryId
Optional
String
Category ID of the event. It should be a valid, non-empty string.
rules
Required
Object
JSON schema against which RudderStack validates the event. The event rules cannot be empty.

Note: The keywords defined for a property in the rules parameter are the same as the advanced rules defined for a property in the dashboard.
identitySection
Optional
String
Section from which RudderStack extracts the event properties. See Event structure for tracking plans for more information.

Example request

Example response

{
  "id": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
  "name": "Product Viewed Plan",
  "version": 3,
  "description": "User viewed a product.",
  "creationType": "BackendAPI",
  "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
  "createdAt": "2024-05-22T10:34:03.016Z",
  "updatedAt": "2024-05-22T11:01:24.706Z"
}

Response codes

CodeDescription
200Event is upserted to the tracking plan successfully. The API gives the updated tracking plan information as a response.
400Bad or invalid request.

List all events in tracking plan

GET
/catalog/tracking-plans/{trackingPlanId}/events

Path parameters

trackingPlanId
Required
String
Tracking plan ID.
page
Optional
Number
In a paginated view, all the response entries are divided into pages. Use this field to specify which page of results to return. Default value is 1.

Note:

  • This parameter must be a positive integer.
  • The API returns a maximum of 50 pages.

    Example request

    Example response

    {
      "data": [{
        "id": "ev_2gotMKGuOtdDY4XbSdKjkwk4qc2",
        "name": "Product Viewed",
        "description": "User viewed a product.",
        "eventType": "track",
        "categoryId": null,
        "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
        "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
        "updatedBy": null,
        "createdAt": "2024-05-22T11:01:24.706Z",
        "updatedAt": "2024-05-22T11:01:24.706Z",
        "identitySection": "properties",
        "additionalProperties": true,
      }],
      "total": 1,
      "currentPage": 1,
      "pageSize": 50
    }
    

    Response codes

    CodeDescription
    200All the events in the tracking plan are fetched successfully.

    The response body contains the below fields:

    FieldTypeDescription
    dataArrayContains all the events in the tracking plan.
    totalNumberTotal number of entries in the response.
    currentPageNumberCurrent page number being viewed (starts from 1).
    pageSizeNumberMaximum number of items displayed per page.

    Get tracking plan event by ID

    GET
    /catalog/tracking-plans/{trackingPlanId}/events/{eventId}

    Path parameters

    trackingPlanId
    Required
    String
    Tracking plan ID.
    eventId
    Required
    String
    Event ID.

    Example request

    Example response

    {
      "id": "ev_2gotMKGuOtdDY4XbSdKjkwk4qc2",
      "name": "Product Viewed",
      "description": "User viewed a product.",
      "eventType": "track",
      "categoryId": null,
      "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
      "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
      "updatedBy": null,
      "createdAt": "2024-05-22T11:01:24.706Z",
      "updatedAt": "2024-05-22T11:01:24.706Z",
      "identitySection": "properties",
      "rules": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "properties": {
            "type": "object",
            "required": [
              "amount"
            ],
            "additionalProperties": false,
            "properties": {
              "amount": {
                "type": [
                  "number"
                ]
              },
            }
          }
        }
      }
    }
    

    Response codes

    CodeDescription
    200Event specified by the ID is fetched successfully.
    404Tracking plan event not found for the specified ID.

    Delete event from tracking plan

    DELETE
    /catalog/tracking-plans/{trackingPlanId}/events/{eventId}

    Path parameters

    trackingPlanId
    Required
    String
    Tracking plan ID.
    eventId
    Required
    String
    Event ID.

    Example request

    Response codes

    CodeDescription
    204Event is deleted from tracking plan successfully.
    400Bad or invalid request.

    Manage events in data catalog

    This section covers the API endpoints for creating and managing events in your data catalog.

    Create new event

    POST
    /catalog/events

    Request body

    name
    Required
    String
    Name of the event.

    Note that:
    • The name must be between 3 and 65 characters and should start with a letter.
    • It must contain only letters, numbers, underscores, commas, spaces, dashes, and dots.
    • For non-track events, the name should be an empty string.
    description
    Optional
    String
    Event description.
    eventType
    Optional
    String
    Type of event to be created in the data catalog.

    Note that:
    • Once set, the event type cannot be updated later.
    • Allowed event types are track, identify, group, page, and screen.
    categoryId
    Optional
    String
    Category ID of the event. It should be a valid, non-empty string.

    Example request

    Example response

    {
      "name": "Product Viewed",
      "description": "User viewed a product.",
      "eventType": "track",
      "categoryId": null,
      "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
      "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
      "id": "ev_2gqmsfib1Zl6n6QL0mjCi9PJbDS",
      "createdAt": "2024-05-23T03:08:09.972Z",
      "updatedAt": "2024-05-23T03:08:09.972Z"
    }
    

    Response codes

    CodeDescription
    200Event is created successfully.
    400Invalid request.

    List all events

    GET
    /catalog/events

    Query parameters

    orderBy
    Optional
    String

    Order the events list by a specific field.

    Allowed fields are name, createdAt, updatedAt. For example, name:asc.

    page
    Optional
    Number
    In a paginated view, all the response entries are divided into pages. Use this field to specify which page of results to return. Default value is 1.

    Note:

    • This parameter must be a positive integer.
    • The API returns a maximum of 50 pages.

      Example request

      Example response

      {
        "data": [{
            "id": "ev_2g60ZQeit5D54rBHUUh0oK3IxzH",
            "name": "Order Placed",
            "description": "User placed an order.",
            "eventType": "track",
            "categoryId": null,
            "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
            "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
            "updatedBy": null,
            "createdAt": "2024-05-06T13:39:34.294Z",
            "updatedAt": "2024-05-06T13:39:34.294Z"
          },
          ....
      
          {
            "id": "ev_2dJfRK8t0hOmmAaCTc0VvMB36e1",
            "name": "Product Added to Cart",
            "description": "User added product to cart.",
            "eventType": "track",
            "categoryId": null,
            "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
            "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
            "updatedBy": "1zirfVbEQN0zIImR235a1JivVYU",
            "createdAt": "2024-03-06T13:18:12.044Z",
            "updatedAt": "2024-05-13T11:39:40.115Z"
          },
        ],
        "total": 3563,
        "currentPage": 1,
        "pageSize": 50
      }
      

      Response codes

      CodeDescription
      200All events in the data catalog are retrieved successfully.

      The response body contains the below fields:

      FieldTypeDescription
      dataArrayContains all the events in the data catalog.
      totalNumberTotal number of entries in the response.
      currentPageNumberCurrent page number being viewed (starts from 1).
      pageSizeNumberMaximum number of items displayed per page.

      Get event by ID

      GET
      /catalog/events/{eventId}

      Path parameters

      eventId
      Required
      String
      The event ID.

      Example request

      Example response

      {
        "id": "ev_2dJfRQIZLrBhqdLoLoxywHpicLp",
        "name": "Product Viewed",
        "description": "User viewed a product.",
        "eventType": "track",
        "categoryId": null,
        "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
        "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
        "updatedBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
        "createdAt": "2024-03-06T13:18:12.044Z",
        "updatedAt": "2024-05-22T14:57:50.265Z",
        "category": null
      }
      

      Response codes

      CodeDescription
      200All events in the data catalog are retrieved successfully.
      404Event not found for the specified event ID.

      Update event

      PUT
      /catalog/events/{eventId}

      Path parameters

      eventId
      Required
      String
      The event ID.

      Request body

      To update an event in the data catalog, at least one of the following parameters is required:

      name
      String
      Name of the event.

      Note that:
      • The name must be between 3 and 65 characters and should start with a letter.
      • It must contain only letters, numbers, underscores, commas, spaces, dashes, and dots.
      • For non-track events, the name should be an empty string.
      description
      String
      Event description.
      categoryId
      String
      Category ID of the event. It should be a valid, non-empty string.

      Example request

      Example response

      {
        "name": "Product Viewed Again",
        "description": "User revisited a product on the website.",
        "categoryId": null
      }
      

      Response codes

      CodeDescription
      200Event is updated successfully.
      404Event not found for the specified event ID.

      Delete event

      warning
      You cannot delete an event that is connected to a tracking plan. Use the Delete event from tracking plan API to disconnect the event and then try deleting it.
      DELETE
      /catalog/events/{eventId}

      Path parameters

      eventId
      Required
      String
      Event ID.

      Example request

      Example response

      {
        "name": "Product Purchased",
        "description": "User purchased a product on the website.",
        "eventType": "track",
        "categoryId": null,
        "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
        "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
        "updatedBy": null,
        "createdAt": "2024-05-22T14:59:14.287Z",
        "updatedAt": "2024-05-22T14:59:14.287Z"
      }
      

      Response codes

      CodeDescription
      200Event is deleted from the catalog successfully.
      404Event not found for the specified event ID.

      Manage properties in data catalog

      This section covers the API endpoints for creating and managing properties in your data catalog.

      Create new property

      POST
      /catalog/properties

      Request body

      name
      Required
      String
      Property name.

      Note that:
      • The name must be of at least one character and should start with a letter.
      • It must contain only letters, numbers, underscores, and spaces.
      description
      Optional
      String
      Property description.
      type
      Required
      String
      Data type of the property.

      Note that:
      • The data type must be either string, integer, number, object, array, boolean, null, or multi data type.
      • If not explicitly set, RudderStack allows all the above data types for the property, by default.
      propConfig
      Optional
      Object
      Advanced rules for the property. See JSON Schema for the complete list of supported keywords.
      info

      RudderStack supports multi data type for the type parameter. An example is shown:

      {
        "type": ["string", "integer", "boolean", "null"]
      }
      

      Example request

      Example response

      {
        "name": "amount",
        "description": "Amount for the product",
        "type": "number",
        "propConfig": {
            "multipleOf": 2
        },
        "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
        "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
        "id": "prop_2gqpkKg1GtHWKR8JtNChoKsqhIK",
        "createdAt": "2024-05-23T03:31:43.297Z",
        "updatedAt": "2024-05-23T03:31:43.297Z"
      }
      

      Response codes

      CodeDescription
      200Property is created successfully.
      400Invalid request.

      List all properties

      GET
      /catalog/properties

      Path parameters

      orderBy
      Optional
      String

      Order the properties list by a specific field.

      Allowed fields are name, createdAt, updatedAt. For example, name:asc.

      page
      Optional
      Number
      In a paginated view, all the response entries are divided into pages. Use this field to specify which page of results to return. Default value is 1.

      Note:

      • This parameter must be a positive integer.
      • The API returns a maximum of 50 pages.

        Example request

        Example response

        {
          "data": [{
              "id": "prop_2dJfRQ233WrPRpWBPqbF4PuiMc0",
              "name": "affiliation",
              "description": "Product affiliation",
              "type": "string",
              "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
              "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
              "updatedBy": null,
              "createdAt": "2024-03-06T13:18:12.044Z",
              "updatedAt": "2024-03-06T13:18:12.044Z"
            },
        
            ...
        
            {
              "id": "prop_2bfXbQuinn4298XzqlyxmktRAX9d",
              "name": "Email",
              "description": "User's email",
              "type": "string",
              "propConfig": {},
              "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
              "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
              "updatedBy": "1zirfVbEQN0zIImR235a1JivVYU",
              "createdAt": "2024-01-30T09:32:57.983Z",
              "updatedAt": "2024-01-30T09:33:18.885Z"
            }
          ],
          "total": 450,
          "currentPage": 1,
          "pageSize": 50
        }
        

        Response codes

        CodeDescription
        200All properties in the data catalog are retrieved successfully.

        The response body contains the below fields:

        FieldTypeDescription
        dataArrayContains all the properties in the data catalog.
        totalNumberTotal number of entries in the response.
        currentPageNumberCurrent page number being viewed (starts from 1).
        pageSizeNumberMaximum number of items displayed per page.

        Get property by ID

        GET
        /catalog/properties/{propertyId}

        Path parameters

        propertyId
        Required
        String
        Property ID.

        Example request

        Example response

        {
          "id": "prop_2bfXbQuinn4298XzqlyxmktRAX9d",
          "name": "Email",
          "description": "User's email",
          "type": "string",
          "propConfig": {},
          "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
          "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
          "updatedBy": "1zirfVbEQN0zIImR235a1JivVYU",
          "createdAt": "2024-01-30T09:32:57.983Z",
          "updatedAt": "2024-01-30T09:33:18.885Z"
        }
        

        Response codes

        CodeDescription
        200Property for the specified ID is retrieved successfully.
        404Property not found for the specified event ID.

        Update property

        PUT
        /catalog/properties/{propertyId}

        Path parameters

        propertyId
        Required
        String
        Property ID.

        Request body

        To update the event property in the data catalog, at least one of the following parameters is required:

        name
        String
        Property name.

        Note that:
        • The name must be of at least one character and should start with a letter.
        • It must contain only letters, numbers, underscores, and spaces.
        description
        String
        Property description.
        type
        String
        Data type of the property.

        Note that:
        • The data type must be either string, integer, number, object, array, boolean, null, or multi data type.
        • If not explicitly set, RudderStack allows all the above data types for the property, by default.
        propConfig
        Optional
        Object
        Advanced rules for the property. See JSON Schema for the complete list of supported keywords.
        info

        RudderStack supports multi data type for the type parameter. An example is shown:

        {
          "type": ["string", "integer", "boolean", "null"]
        }
        

        Example request

        Example response

        {
          "id": "prop_2bfXbQuinn4298XzqlyxmktRAX9d",
          "name": "Email",
          "description": "User's email address",
          "propConfig": {
              "format": "email"
          },
          "type": "number",
          "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
          "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
          "updatedBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
          "createdAt": "2024-01-30T09:32:57.983Z",
          "updatedAt": "2024-05-23T03:41:10.715Z"
        }
        

        Response codes

        CodeDescription
        200Property is updated successfully.
        400Property not found for the specified event ID.

        Delete property

        DELETE
        /catalog/properties/{propertyId}

        Path parameters

        propertyId
        Required
        String
        Property ID.

        Example request

        Example response

        {
          "name": "Email",
          "description": "User's email address",
          "type": "number",
          "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
          "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
          "updatedBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
          "createdAt": "2024-01-30T09:32:57.983Z",
          "updatedAt": "2024-05-23T03:41:10.715Z"
        }
        

        Response codes

        CodeDescription
        200Property is deleted from the catalog successfully.
        400Property not found for the specified event ID.

        Manage categories in data catalog

        This section covers the API endpoints for creating and managing categories in your data catalog. Go to Govern > Data Catalog > Events tab in your RudderStack dashboard to view the categories and associate them to your events.

        Data catalog categories

        Create new category

        POST
        /catalog/categories

        Request body

        name
        Required
        String
        Category name.

        Note that:
        • The name must be between 3 and 65 characters and should start with a letter.
        • It must contain only letters, numbers, underscores, commas, spaces, dashes, and dots.
        description
        Optional
        String
        Category description.

        Example request

        Example response

        {
          "name": "Onboarding",
          "description": "Customer onboarding",
          "icon": "star",
          "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
          "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
          "id": "cat_2gqs1Yzy1Vpeeewm69meqc6d8zH",
          "createdAt": "2024-05-23T03:50:27.416Z",
          "updatedAt": "2024-05-23T03:50:27.416Z"
        }
        

        Response codes

        CodeDescription
        200Category is created successfully.
        400Invalid Request.

        List all categories

        GET
        /catalog/categories

        Path parameters

        orderBy
        Optional
        String

        Order the categories list by a specific field.

        Allowed fields are name, createdAt, updatedAt. For example, name:asc.

        page
        Optional
        Number
        In a paginated view, all the response entries are divided into pages. Use this field to specify which page of results to return. Default value is 1.

        Note:

        • This parameter must be a positive integer.
        • The API returns a maximum of 50 pages.

          Example request

          Example response

          {
            "data": [{
                "id": "cat_2gqs1Yzy1Vpeeewm69meqc6d8zH",
                "name": "Onboarding",
                "description": "Customer onboarding",
                "icon": "star",
                "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
                "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
                "updatedBy": null,
                "createdAt": "2024-05-23T03:50:27.416Z",
                "updatedAt": "2024-05-23T03:50:27.416Z"
              },
          
              ...
          
              {
                "id": "cat_4gs21Yzy1Vpw1m69meqc6d8zH",
                "name": "Product Experience",
                "description": "Enhance overall product and customer experience",
                "icon": "star",
                "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
                "createdBy": "1zirfVbEQN0zIImR235a1JivVYU",
                "updatedBy": null,
                "createdAt": "2024-04-30T14:30:30.254Z",
                "updatedAt": "2024-04-30T14:30:30.254Z"
              }
            ],
            "total": 10,
            "currentPage": 1,
            "pageSize": 1000
          }
          

          Response codes

          CodeDescription
          200All the categories are fetched successfully.

          The response body contains the below fields:

          FieldTypeDescription
          dataArrayContains all the categories in the data catalog.
          totalNumberTotal number of entries in the response.
          currentPageNumberCurrent page number being viewed (starts from 1).
          pageSizeNumberMaximum number of items displayed per page.

          Get category by ID

          GET
          /catalog/categories/{categoryId}

          Path parameters

          categoryId
          Required
          String
          Category ID.

          Example request

          Example response

          {
            "id": "cat_2gqs1Yzy1Vpeeewm69meqc6d8zH",
            "name": "Onboarding",
            "description": "Customer onboarding",
            "icon": "star",
            "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
            "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
            "updatedBy": null,
            "createdAt": "2024-05-23T03:50:27.416Z",
            "updatedAt": "2024-05-23T03:50:27.416Z"
          }
          

          Response codes

          CodeDescription
          200Category for the specified ID is retrieved successfully.
          404Category not found for the specified ID.

          Delete category

          DELETE
          /catalog/categories/{categoryId}

          Path parameters

          categoryId
          Required
          String
          Category ID.

          Example request

          Example response

          {
            "name": "Onboarding",
            "description": "Customer onboarding",
            "icon": "star",
            "workspaceId": "1hitizAoFT91DD6rfFhBjiTex3e",
            "createdBy": "2KDKycoVHAOLttVvzBiqw12O3Hr",
            "updatedBy": null,
            "createdAt": "2024-05-23T03:50:27.416Z",
            "updatedAt": "2024-05-23T03:50:27.416Z"
          }
          

          Response codes

          CodeDescription
          200Category is deleted from the catalog successfully.
          400Category not found for the specified event ID.

          Manage tracking plan-source connections

          This section covers the API endpoints for managing the connections between your tracking plans and sources.

          Add new connection

          POST
          /catalog/tracking-plans/{trackingPlanId}/sources/{sourceId}

          Path parameters

          trackingPlanId
          Required
          String
          Tracking plan ID.
          sourceId
          Required
          String
          Source ID.

          Request body

          warning
          The request body must not be empty. Otherwise, you will encounter an error.
          config
          Required
          Object
          Tracking plan configuration for the source. See Config object structure below for more information.

          Config object structure

          The config object provided in the request body contains the source-specific tracking plan settings for validating the individual events. A sample object is shown below:

          {
            "config": {
              "page": {
                "unplannedProperties": "forward",  // or "drop"
                "anyOtherViolation": "forward",  // or "drop"
                "propagateValidationErrors": "true",  // or "false"
              },
              "group": {
                "unplannedProperties": "forward",
                "anyOtherViolation": "forward",
                "propagateValidationErrors": "true"
              },
              "track": {
                "allowUnplannedEvents": "true",
                "unplannedProperties": "forward",
                "anyOtherViolation": "forward",
                "propagateValidationErrors": "true",  // or "false"
              },
              "global": {
                "allowUnplannedEvents": "true",
                "unplannedProperties": "forward",
                "anyOtherViolation": "forward",
                "propagateValidationErrors": "true"
              },
              "screen": {
                "unplannedProperties": "forward",
                "anyOtherViolation": "forward",
                "propagateValidationErrors": "true"
              },
              "identify": {
                "unplannedProperties": "forward",
                "anyOtherViolation": "forward",
                "propagateValidationErrors": "true"
              }
            }
          }
          

          The event-level settings that you can define within the config object are described below. See Source-specific tracking plan settings for more information:

          Field
          Description
          allowUnplannedEventsApplicable for track object only.

          Boolean that determines if RudderStack should drop all events that do not match the predefined event names in the tracking plan.
          unplannedPropertiesAcceptable values are forward and drop.

          Determines if RudderStack should forward or drop events that contain properties not matching the list of predefined properties for the specific event.
          anyOtherViolationAcceptable values are forward and drop.

          Determines if RudderStack should forward or drop events with any other violations that include Type Mismatch, Required Fields Missing, and others outlined in the Violation types section.
          propagateValidationErrorsBoolean that determines if RudderStack should capture the validation errors in the event’s context object and send them downstream (user transformations and destinations).
          info

          Note that:

          • You need not provide the tracking plan settings for all events. For example, you can include only the track and global objects within config. However, note that you must not provide a blank event object. If included, you must define at least one setting for that event.
          • RudderStack uses the default settings for the events that you do not specify explicitly and validates them accordingly.

          Example request

          Example response

          {
            "sourceId": "2nk0qVvmxE79uIwsKebgVH4iNTR",
            "trackingPlanId": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
            "config": {
              "page": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "group": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "track": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "allowUnplannedEvents": "true",
                "propagateValidationErrors": "true"
              },
              "global": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "allowUnplannedEvents": "false",
                "propagateValidationErrors": "true"
              },
              "screen": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "identify": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              }
            }
          }
          

          Response codes

          CodeDescription
          200Connection created successfully.
          400
          • Invalid Request
          • Empty or incorrect config object.
          • Source already connected to tracking plan.

          Update tracking plan configuration

          PUT
          /catalog/tracking-plans/{trackingPlanId}/sources/{sourceId}

          Path parameters

          trackingPlanId
          Required
          String
          Tracking plan ID.
          sourceId
          Required
          String
          Source ID.

          Request body

          warning
          The request body must not be empty. Otherwise, you will encounter an error.
          config
          Required
          Object
          Tracking plan configuration for the source. See Config object structure below for more information.

          Config object structure

          The config object provided in the request body contains the source-specific tracking plan settings for validating the individual events. A sample object is shown below:

          {
            "config": {
              "page": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "group": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "track": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "allowUnplannedEvents": "true",
                "propagateValidationErrors": "true"
              },
              "global": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "allowUnplannedEvents": "false",
                "propagateValidationErrors": "true"
              },
              "screen": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "identify": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              }
            }
          }
          

          The event-level settings that you can define within the config object are described below. See Source-specific tracking plan settings for more information:

          Field
          Description
          allowUnplannedEventsApplicable for track object only.

          Boolean that determines if RudderStack should drop all events that do not match the predefined event names in the tracking plan.
          unplannedPropertiesAcceptable values are forward and drop.

          Determines if RudderStack should forward or drop events that contain properties not matching the list of predefined properties for the specific event.
          anyOtherViolationAcceptable values are forward and drop.

          Determines if RudderStack should forward or drop events with any other violations that include Type Mismatch, Required Fields Missing, and others outlined in the Violation types section.
          propagateValidationErrorsBoolean that determines if RudderStack should capture the validation errors in the event’s context object and send them downstream (user transformations and destinations).
          info

          Note that:

          • You need not provide the tracking plan settings for all events. For example, you can include only the track and global objects within config. However, note that you must not provide a blank event object. If included, you must define at least one setting for that event.
          • RudderStack uses the default settings for the events that you do not specify explicitly and validates them accordingly.

          Example request

          Example response

          {
            "config": {
              "page": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "group": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "track": {
                "anyOtherViolation": "drop",
                "unplannedProperties": "forward",
                "allowUnplannedEvents": "true",
                "propagateValidationErrors": "true"
              },
              "global": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "allowUnplannedEvents": "false",
                "propagateValidationErrors": "true"
              },
              "screen": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              },
              "identify": {
                "anyOtherViolation": "forward",
                "unplannedProperties": "forward",
                "propagateValidationErrors": "true"
              }
            }
          }
          

          Response codes

          CodeDescription
          200Configuration updated successfully.
          400
          • Invalid Request
          • Empty or incorrect config object.
          • Source is not connected to tracking plan.

          List all sources connected to tracking plan

          GET
          /catalog/tracking-plans/{trackingPlanId}/sources

          Path parameters

          trackingPlanId
          Required
          String
          Tracking plan ID.

          Example request

          Example response

          {
            "connections": [{
                "sourceId": "2nk0qVvmxE79uIwsKebgVH4iNTR",
                "trackingPlanId": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
                "config": {
                  "track": {
                    "anyOtherViolation": "forward",
                    "unplannedProperties": "forward",
                    "allowUnplannedEvents": "true",
                    "propagateValidationErrors": "true"
                  },
                  "global": {
                    "anyOtherViolation": "forward",
                    "unplannedProperties": "forward",
                    "allowUnplannedEvents": "false",
                    "propagateValidationErrors": "true"
                  },
                  "identify": {
                    "anyOtherViolation": "forward",
                    "unplannedProperties": "forward",
                    "propagateValidationErrors": "true"
                  }
                }
              },
              {
                "sourceId": "2rL1XeHCG8P8OrMHnHx4WjMjuTo",
                "trackingPlanId": "tp_5gopz6tfKxAjpS4TjuqVIeTdm7T",
                "config": {
                  "track": {
                    "anyOtherViolation": "drop",
                    "unplannedProperties": "forward",
                    "allowUnplannedEvents": "true",
                    "propagateValidationErrors": "true"
                  },
                  "global": {
                    "anyOtherViolation": "forward",
                    "unplannedProperties": "forward",
                    "allowUnplannedEvents": "false",
                    "propagateValidationErrors": "true"
                  }
                }
              }
            ]
          }
          

          Response codes

          CodeDescription
          200All the sources connected to a tracking plan fetched successfully.

          Delete source connection

          DELETE
          /catalog/tracking-plans/{trackingPlanId}/sources/{sourceId}

          Path parameters

          trackingPlanId
          Required
          String
          Tracking plan ID.
          sourceId
          Required
          String
          Source ID.

          Example request

          Response codes

          CodeDescription
          204Source disconnected from tracking plan successfully.
          400
          • Source already disconnected from tracking plan.
          • Invalid source ID.

          Custom types

          info

          Th endpoints covered in this section are in beta as part of RudderStack’s Early Access Program, where we work with early users and customers to test new features and get feedback.

          Note that these features are functional but can change as we improve them. Contact the RudderStack team to get access.

          This section covers the API endpoints for creating and managing custom types.

          Create custom type

          Github Badge
          POST
          /catalog/custom-types

          Request body

          warning
          The request body must not be empty. Otherwise, you will encounter an error.
          name
          Required
          String
          Custom type name.

          Note that:
          • The custom type name must be between 2 and 65 characters long.
          • it must start with a capital letter and contain only letters, numbers, underscores and dashes.
          • You cannot change the custom type name later.
          description
          Optional
          String
          Custom type description.
          type
          Required
          String
          Valid data type. Acceptable values are string, number, integer, boolean, null, array, and object.
          config
          Required
          Object
          Custom type configuration. See Config object for more details.
          properties
          Required for object type
          Array
          Array of properties. See Properties structure for more information on passing this array in the request body.

          This parameter is ignored for non-object data types.

          Config object

          You must include the config object to create a new custom type successfully. You can also pass an empty object to accept any values.

          The config object can take the below parameters depending on type (data type of the custom type) specified in the request body:

          Custom data typeAcceptable fields
          String
          FieldDescription
          enumArray of acceptable values for the custom type.
          minLengthNumber defining the minimum string length for the custom type.
          maxLengthNumber defining the maximum string length for the custom type.
          patternRegular expression that defining the constraints for the property, for example, email, datetime, URL, ipv4/ipv6, etc.

          You can also define a custom pattern.
          formatDefines the accepted format.

          Acceptable values are datetime, date, time, email, uuid, hostname, ipv4, and ipv6.
          Number / Integer
          FieldDescription
          enumArray of acceptable values for the custom type.
          minimumMinimum acceptable value for the custom type.
          maximumMinimum acceptable value for the custom type.
          exclusiveMinimumMinimum exclusive value for the custom type.
          exclusiveMaximumMaximum exclusive value for the custom type.
          multipleOfNumber that is a multiple of a factor.
          Array
          FieldDescription
          itemTypesList of valid data types (including custom type).

          If you specify a custom type, note that:
          • You can include only one custom type, for example, itemTypes: ["CustomType1"].
          • You cannot include multiple custom types, for example, itemTypes: ["CustomType1", "CustomType2"].

          Properties structure

          You must include the properties array if your custom type is of the object data type. Note that the properties array must contain a list of objects, with each object containing the following details:

          ParameterDescription
          id
          Required
          Property ID.
          requiredBoolean that determines if the property is required or optional.

          A sample properties array is shown below:

          "properties": [
            {
              "id": "prop_<id1>",      // Property ID
              "required": true/false      // Determines whether the property is required or optional
            },
            ....
            {
              "id": "prop_<id2>",
              "required": true/false
            }
          ]
          

          Example request

          Example response

          {
            "config": {
              "enum": [
                "ABC",
                "DEF",
                "XYZ"
              ]
            },
            "rules": {
              "enum": [
                "ABC",
                "DEF",
                "XYZ"
              ],
              "type": [
                "string"
              ]
            },
            "defs": [],
            "itemDefinitions": [],
            "name": "StringCustomType",
            "type": "string",
            "dataType": "string",
            "version": 1,
            "description": "",
            "workspaceId": "2Csl0lSTbuM3daOQB2GcDH8o",
            "createdBy": "1sW1rW9Q03EobQOuJekQKnrjRem",
            "id": "def_2rvoibDJPpoFKgGvNFAZHKSwWss",
            "createdAt": "2025-01-21T08:43:57.515Z",
            "updatedAt": "2025-01-21T08:43:57.515Z"
          }
          
          info
          The rules object in the above response corresponds to the internal schema constructed based on the provided configuration and is used for validation.

          Response codes

          CodeDescription
          200Custom type is successfully created. RudderStack returns an ID for the newly created custom type in the response.
          400Bad or invalid request. Some reasons include:

          • Missing name.
          • Missing/incorrect config object.
          • Missing/incorrect type.
          • Missing/incorrect properties array (for object type).

          Update custom type

          Github Badge
          PUT
          /catalog/custom-types/{customTypeId}

          Path parameters

          customTypeId
          Required
          String
          Custom type ID.

          Request body

          warning
          The request body must not be empty. Otherwise, you will encounter an error.
          config
          Required
          Object
          Updated configuration for the custom type. See Config object for more details.
          type
          Required
          String
          New data type for the custom type. Acceptable values are string, number, integer, boolean, null, array, and object.
          properties
          Required for object type
          Array
          Array of properties. See Properties structure for more information on passing this array in the request body.

          Note: This parameter is ignored for non-object data types.

          Config object

          You must include the config object to create a new custom type successfully. You can also pass an empty object to accept any values.

          The config object can take the below parameters depending on type (data type of the custom type) specified in the request body:

          Custom data typeAcceptable fields
          String
          FieldDescription
          enumArray of acceptable values for the custom type.
          minLengthNumber defining the minimum string length for the custom type.
          maxLengthNumber defining the maximum string length for the custom type.
          patternRegular expression that defining the constraints for the property, for example, email, datetime, URL, ipv4/ipv6, etc.

          You can also define a custom pattern.
          formatDefines the accepted format.

          Acceptable values are datetime, date, time, email, uuid, hostname, ipv4, and ipv6.
          Number / Integer
          FieldDescription
          enumArray of acceptable values for the custom type.
          minimumMinimum acceptable value for the custom type.
          maximumMinimum acceptable value for the custom type.
          exclusiveMinimumMinimum exclusive value for the custom type.
          exclusiveMaximumMaximum exclusive value for the custom type.
          multipleOfNumber that is a multiple of a factor.
          Array
          FieldDescription
          itemTypesList of valid data types (including custom type).

          If you specify a custom type, note that:
          • You can include only one custom type, for example, itemTypes: ["CustomType1"].
          • You cannot include multiple custom types, for example, itemTypes: ["CustomType1", "CustomType2"].

          Properties structure

          You must include the properties array if your custom type is of the object data type. Note that the properties array must contain a list of objects, with each object containing the following details:

          ParameterDescription
          id
          Required
          Property ID.
          requiredBoolean that determines if the property is required or optional.

          A sample properties array is shown below:

          "properties": [
            {
              "id": "prop_<id1>",      // Property ID
              "required": true/false      // Determines whether the property is required or optional
            },
            ....
            {
              "id": "prop_<id2>",
              "required": true/false
            }
          ]
          

          Example request

          Example response

          {
            "config": {
              "enum": ["A", "B", "C"],
              "maxLength": 15,
              "minLength": 5
            },
            "rules": {
              "enum": ["A", "B", "C"],
              "maxLength": 15,
              "minLength": 5,
              "type": ["string"]
            },
            "defs": [],
            "itemDefinitions": [],
            "id": "def_2s1OUfwmHOEwMdoJFOKoaMr6VWS",
            "name": "StringCustomType",
            "type": "string",
            "dataType": "string",
            "version": 2,
            "description": "",
            "workspaceId": "29fJnntLeqmZEj0MBIFOCi6jRce",
            "createdBy": "1sW1rW9Q03EobQOuJekQKnrjRem",
            "createdAt": "2025-01-23T08:07:11.872Z",
            "updatedBy": "1sW1rW9Q03EobQOuJekQKnrjRem",
            "updatedAt": "2025-01-23T08:07:11.872Z"
          }
          
          info
          The rules object in the above response corresponds to the internal schema constructed based on the provided configuration and is used for validation.

          Response codes

          CodeDescription
          200Custom type is successfully updated.
          400Bad or invalid request. Some reasons include:

          • Missing/incorrect config object.
          • Missing/incorrect type.
          • Missing/incorrect properties array (for object type).

          List all custom types

          Github Badge
          GET
          /catalog/custom-types

          Example request

          Example response

          {
            "data": [{
              "config": {
                "itemTypes": ["integer", "number", "string", "object"]
              },
              "rules": {
                "type": ["array"],
                "items": {
                  "type": ["integer", "number", "string", "object"]
                }
              },
              "defs": [],
              "itemDefinitions": [],
              "id": "def_2rvgmGLCrAYftKqBHLSxVU2hGYz",
              "name": "ArrayCustomType",
              "type": "array",
              "dataType": "array",
              "version": 1,
              "description": "",
              "workspaceId": "29fJnntLeqmZEj0MBIFOCi6jRce",
              "createdBy": "1sW1rW9Q03EobQOuJekQKnrjRem",
              "createdAt": "2025-01-21T07:38:39.327Z",
              "updatedBy": null,
              "updatedAt": "2025-01-21T07:38:39.327Z",
              "properties": []
            }, 
            .....
            
            {
              "config": {
                "enum": ["ABC", "DEF", "XYZ"]
              },
              "rules": {
                "enum": ["ABC", "DEF", "XYZ"],
                "type": ["string"]
              },
              "defs": [],
              "itemDefinitions": [],
              "id": "def_2p4Sbks9YgDTNL7tQv78L15Vxgp",
              "name": "StringCustomType",
              "type": "string",
              "dataType": "string",
              "version": 2,
              "description": "",
              "workspaceId": "29fJnntLeqmZEj0MBIFOCi6jRce",
              "createdBy": "2m9DOlUweDGtsguECIDn7xIz0xc",
              "createdAt": "2024-11-19T13:45:27.391Z",
              "updatedBy": "2m9DOlUweDGtsguECIDn7xIz0xc",
              "updatedAt": "2024-11-19T13:45:27.391Z",
              "properties": []
            }]
          } 
          

          Response codes

          CodeDescription
          200Custom types are fetched successfully.
          400Bad or invalid request.

          Get custom type by ID

          Github Badge
          GET
          /catalog/custom-types/{customTypeId}

          Path parameters

          customTypeId
          Required
          String
          Custom type ID.

          Example request

          Example response

          {
            "config": {
              "enum": ["A", "B", "C"],
              "maxLength": 15,
              "minLength": 5
            },
            "rules": {
              "enum": ["A", "B", "C"],
              "maxLength": 15,
              "minLength": 5,
              "type": ["string"]
            },
            "defs": [],
            "itemDefinitions": [],
            "id": "def_2s1OUfwmHOEwMdoJFOKoaMr6VWS",
            "name": "StringCustomType",
            "type": "string",
            "dataType": "string",
            "version": 2,
            "description": "",
            "workspaceId": "29fJnntLeqmZEj0MBIFOCi6jRce",
            "createdBy": "1sW1rW9Q03EobQOuJekQKnrjRem",
            "createdAt": "2025-01-23T08:07:11.872Z",
            "updatedBy": "1sW1rW9Q03EobQOuJekQKnrjRem",
            "updatedAt": "2025-01-23T08:07:11.872Z",
            "properties": []
          }
          

          Response codes

          CodeDescription
          200Custom type fetched successfully.
          400Bad or invalid request.
          404Custom type with the specified ID was not found.

          Delete custom type

          Github Badge
          DELETE
          /catalog/custom-types/{customTypeId}
          warning

          You cannot delete a custom type that is referenced by another property.

          For example, if you have a property propertyname1 of data type CustomType-1, then you cannot use this endpoint to delete CustomType-1.

          Path parameters

          customTypeId
          Required
          String
          Custom type ID.

          Example request

          Example response

          {
            "config": {
              "enum": ["ABC", "DEF", "XYZ"],
              "maxLength": 10,
              "minLength": 4
            },
            "rules": {
              "enum": ["ABC", "DEF", "XYZ"],
              "maxLength": 10,
              "minLength": 4,
              "type": ["string"]
            },
            "defs": [],
            "itemDefinitions": [],
            "name": "StringCustomType",
            "type": "string",
            "dataType": "string",
            "version": 1,
            "description": "",
            "workspaceId": "29fJnntLeqmZEj0MBIFOCi6jRce",
            "createdBy": "1sW1rW9Q03EobQOuJekQKnrjRem",
            "createdAt": "2025-01-23T08:18:50.790Z",
            "updatedBy": null,
            "updatedAt": "2025-01-23T08:18:50.790Z"
          }
          

          Response codes

          CodeDescription
          200Custom type is successfully deleted.
          400Bad or invalid request.
          404Custom type with the specified ID was not found.

          FAQ

          How can I create a property with a schema that validates an array of enums?

          The following example highlights how to create a property that is an array of enums:

          Step 1: Create a new custom type of string type containing the enums

          Create a new custom type of type string. Specify the config object containing enums, as shown below:

          "config": {
            "enum": [
              "iOS",
              "Android"
            ]
          }
          

          The corresponding request and response looks as follows:

          Step 2: Create a new array custom type

          Create a new custom type of type array. Specify the config object with itemTypes set to an array of CustomTypeOS (created in Step 1), as shown below:

          "config": {
            "itemTypes": [
              "CustomTypeOS"
            ]
          }
          

          The corresponding request and response looks as follows:

          Step 3: Create a new property of custom array type

          Create a new property and set the data type to the custom array type created in the above step. The request body looks as follows:

          {
            "name": "NewPropertyOS", // Replace with the desired name
            "description": "Sample property of array custom type",
            "type": "CustomTypeArray",
            "propConfig": {}
          }
          

          The corresponding request and response looks as follows:

          The above property NewPropertyOS is of type CustomTypeArray, where:

          • CustomTypeArray is an array of CustomTypeOS custom type.
          • CustomTypeOS is a string custom type containing enums (iOS and Android).

          Alternative Step 3: Create array property and specify string custom type in property configuration

          You can also create a property of array type and specify the string custom type (containing the enums) within the propConfig object, as shown:


          Questions? Contact us by email or on Slack