Catalog API Endpoints for Tracking Plans

Use the Data Catalog API to create and manage your tracking plans programmatically.
Available Plans
  • growth
  • enterprise

This guide covers the Data Catalog API endpoints for:

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": "Data catalog API",
  "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": "Data catalog API",
      "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": "Data catalog API",
  "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": "Data catalog API",
  "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": "Data catalog API",
  "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 tracking plan events

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.

Upsert event with rules

danger
This endpoint will be deprecated soon.
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
Required
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": "Data catalog API",
  "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.

Upsert event with properties

This endpoint has the same functionality as Upsert event with rules except that this request operates on the event properties rather than rules.

POST
/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
Required
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.
properties
Required
Array
The event properties against which RudderStack validates the event. It cannot be empty.

See Properties structure section below for more information on this parameter.
identitySection
Optional
String
Section from which RudderStack extracts the event properties. See Event structure for tracking plans for more information.

Properties structure

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
Required
Object
Advanced rules for the property. See JSON Schema for the complete list of supported keywords.
required
Optional
Boolean
Determines whether the property must be present in the event.
additionalProperties
Optional
Boolean
This parameter is only applicable for arrays and objects if nested properties are present. It determines if additional properties (apart from the provided nested properties) should be allowed.
metadata
Optional
Object
Additional metadata for the property containing generic keywords.
properties
Required only for nested properties
Array
Details of the nested properties.

Example request

Example response

{
  "id": "tp_2u9kdo9I3y0ou8O722ZTc8SOgMk",
  "name": "Product Viewed Plan",
  "version": 3,
  "description": "User viewed a product.",
  "creationType": "Data catalog API",
  "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.

Upsert event with identifiers

This endpoint has the same functionality as Upsert event with properties except that this request only requires the identifiers (tracking plan ID, event ID, and property IDs).

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

Path parameters

trackingPlanId
Required
String
Tracking plan ID.

Request body

id
Required
String
Event ID.

RudderStack automatically fetches the event name, description, type, and other event details from this ID.
properties
Required
Array
The event properties against which RudderStack validates the event. It cannot be empty.

See Properties structure section below for more information on this parameter.

Properties structure

id
Required
String
Property ID.

RudderStack automatically fetches the property name, description, type, and other details from this ID.
required
Optional
Boolean
Determines whether the property must be present in the event.
additionalProperties
Optional
Boolean
This parameter is only applicable for arrays and objects if nested properties are present. It determines if additional properties (apart from the provided nested properties) should be allowed.
metadata
Optional
Object
Additional metadata for the property containing generic keywords.
properties
Required only for nested properties
Array
Details of the nested properties.

Example request

Example response

{
  "id": "tp_2u9kdo9I3y0ou8O722ZTc8SOgMk",
  "name": "Product Viewed Plan",
  "version": 3,
  "description": "User viewed a product.",
  "creationType": "Data catalog API",
  "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.

    Query parameters

    format
    Optional
    String
    Fetches the response in the specified format. Acceptable values are:

    • schema: Response is shown with the rules object. This is the default format value.
    • properties: Response is shown with the properties object.

    Example request

    Example response

    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 tracking plan 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.

    Questions? Contact us by email or on Slack