Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
version: 1.0.0
title: Customer.io Track Track V2 API
description: "# Overview\n\nOur Track API provides ways to send real-time customer data to your Customer.io workspace including customer identification and event tracking.\n\n# Use our Postman collection\n\nWe've generated a Postman collection to help you get started with our APIs.\n\nIf you fork this collection, you might want to disable the *Watch original collection* option. We automatically update our Postman collection whenever we release changes to our documentation, even if we don't change our APIs—which happens daily! Rather than being flooded with Postman notifications, you can check out our [Release Notes](/release-notes/) for updates to our APIs.\n\n**NOTE**: Postman endpoints default to our US APIs. If you're in our European (EU) region, you'll need to add `-eu` to the server variables (`track_api_url` and `app_api_url`).\n\n[<img src=\"https://run.pstmn.io/button.svg\" alt=\"Run In Postman\" style=\"width: 128px; height: 32px;\">](https://god.gw.postman.com/run-collection/23697545-0f7ae1e8-8177-46fc-808a-2fd363dd52b9?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D23697545-0f7ae1e8-8177-46fc-808a-2fd363dd52b9%26entityType%3Dcollection%26workspaceId%3Db886877f-fc09-475f-84fe-6221a98f4d18#?env%5BCustomer.io%20API%20Environment%5D=W3sia2V5IjoidHJhY2tfYXBpX3VybCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiJ0cmFjay5jdXN0b21lci5pbyIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiYXBwX2FwaV91cmwiLCJ0eXBlIjoiZGVmYXVsdCIsInZhbHVlIjoiYXBpLmN1c3RvbWVyLmlvIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJzaXRlX2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiYXBpX2tleSIsInR5cGUiOiJzZWNyZXQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiYmVhcmVyIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiYnJvYWRjYXN0X2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiaW1wb3J0X2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiZW1haWxfYWRkcmVzcyIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6InN1cHByZXNzaW9uX3R5cGUiLCJ0eXBlIjoiZGVmYXVsdCIsInZhbHVlIjoiIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJjb2xsZWN0aW9uX2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5Ijoic25pcHBldF9uYW1lIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5Ijoid2ViaG9va19pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6InNlbmRlcl9pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6ImV4cG9ydF9pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6Im1lc3NhZ2VfaWQiLCJ0eXBlIjoiZGVmYXVsdCIsInZhbHVlIjoiIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJzZWdtZW50X2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoibmV3c2xldHRlcl9pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6ImNvbnRlbnRfaWQiLCJ0eXBlIjoiZGVmYXVsdCIsInZhbHVlIjoiIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJjYW1wYWlnbl9pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6ImFjdGlvbl9pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6ImN1c3RvbWVyX2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoidHJhbnNhY3Rpb25hbF9pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6InRyaWdnZXJfaWQiLCJ0eXBlIjoiZGVmYXVsdCIsInZhbHVlIjoiIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJmb3JtX2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiaWRlbnRpZmllciIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6ImRldmljZV9pZCIsInR5cGUiOiJkZWZhdWx0IiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6ImRlbGl2ZXJ5X2lkIiwidHlwZSI6ImRlZmF1bHQiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9XQ==)\n\n# Server addresses: US and EU\nCustomer.io hosts services in the United States (US) and European Union. Select the appropriate server address for your region.\n\n| Region | Server Address |\n| :-- | :-- |\n| US | https://track.customer.io |\n| EU | https://track-eu.customer.io |\n\nNote that if your account is in the EU region and you send traffic to our US endpoints, we'll redirect it accordingly but this traffic still passes through US servers and data could be logged in the US.\n\n# Authentication \n\nYou can find all of your API authentication information in your [Account Settings](https://fly.customer.io/settings/api_credentials). Our Tracking API uses HTTP basic authorization. The App API uses bearer authorization, and you can generate tokens supporting different scopes. Each operation in this document references the authorization header it requires.\n\n# v1 vs v2 APIs\n\nMost of the time, when we talk about *The Track API*, we're talking about the v1 API because the v2 API isn't used in any of our libraries and rarely used in libraries built by third parties; it's much more common that you'd encounter the v1 API.\n\nIf you're integrating with Customer.io using one of our libraries, or a third party customer data platform (CDP) like Segment or Rudderstack, you'll be using the v1 API.\n\nThe v2 API is newer and supports two important features that the v1 API doesn't natively support: objects and batching. But, if you're integrating directly with our API, we suggest you use the [Pipelines API](/integrations/api/cdp/). The Pipelines API supports both objects, batching, *and* all of our newest integrations and libraries are based on it.\n\n# Rate Limits\n\nThe Track API has a rate limit of 1000 requests per second for both active data integrations and historical backfill scripts. This limit applies to both our v1 and v2 APIs. \n\nWhile this rate is not strictly enforced, consistently exceeding it may lead to throttling or dropped data, especially during periods of high system load. If we detect a sustained high volume that could impact other customers, we may contact you to help adjust your integration or, in rare cases, temporarily block requests.\n\n**Rate limits are subject to change. We may adjust these thresholds to ensure stable performance for all customers.**\n\nBelow are the payload size limits for the Track API. If any of these limits are too restrictive for your needs, contact support to let us know your situation as we may be able to accommodate special circumstances. \n\n## Customer limits\n\nThese limits apply to people and their attributes, often referred to as \"customers\" in our APIs.\n\n| Data Type | Limit | Description |\n| -- | -- | -- |\n| ID | 150 bytes | Max length of a person's ID value |\n| Attribute Name | 150 bytes | Max length of each attribute name |\n| Attribute Value | 1000 bytes | Max length of attribute values |\n| Unique attributes | 300 | Max number of attributes allowed per person or Identify call |\n\n## Object and relationship limits\n\nObjects (groups) and relationships between people and objects can have their own attributes. Their limits are similar to people (customers).\n\n| Data Type | Limit | Description |\n| -- | -- | -- |\n| Object ID | 150 bytes | Max length of a object's ID |\n| Attribute Names | 150 bytes | Max length of each attribute name |\n| Attribute Values | 1000 bytes | Max length of attribute values |\n| Unique attributes | 300 | Max number of attributes allowed per object or relationship |\n| Total attribute size | 100 Kilobytes | Max size of all attributes associated with an object or relationship |\n\n## Track API Event limits\n\nThese limits apply to events that you'll send with the `/v1/track` call.\n\n| Data Type | Limit | Description |\n| -- | -- | -- |\n| Event Name | 100 bytes | Max length of each event name |\n| Event Data | 100000 bytes | Max length of each event data |\n\n\n## v2 API Limits\n\nThe v2 API has two endpoints, both of which have limits on the total size of requests. \n* `/entity` is limited to requests 32kb or smaller.\n* `/batch` is limited to requests 500kb or smaller.\n \n Each of the requests within a batch must also be 32kb or smaller.\n"
servers:
- url: https://track.customer.io
description: The base URL for the Track API. Track endpoints use basic authentication with your Site ID as the user name and your secret key as the password.
- url: https://track-eu.customer.io
description: The base URL for the Track API (EU region). Track endpoints use basic authentication with your Site ID as the user name and your secret key as the password.
tags:
- name: track_v2
x-displayName: Track v2 API
description: "This version of our edge API has only two endpoints, but supports the majority of our traditional v1 track operations and then some based on the `type` and `action` keys that you set in your request. \n \nYou can use the `/batch` call to send multiple requests at the same time. Unlike the v1 API, you can also make requests affecting objects and deliveries. Objects are a grouping mechanism for people—like an account people belong to or an online course that they enroll in. Deliveries are events based on messages sent from Customer.io.\n\nThe chart below lists the type of `action` you can perform for each `type`. Our requests below are broken out by `type`; use the `action` dropdown to see the specific payload structure for each action.\n\n| Action | Person | Object | Delivery | \n| :-- | :--: | :--: | :--: |\n| identify | ✅ | ✅ | |\n| delete | ✅ | ✅ | |\n| event | ✅ | | ✅ |\n| screen | ✅ | | |\n| page | ✅ | | |\n| add_relationships | ✅ | ✅ | |\n| delete_relationships | ✅ | ✅ | |\n| add_device | ✅ | | | \n| delete_device | ✅ | | |\n| merge | ✅ | | |\n| suppress | ✅ | | |\n| unsuppress | ✅ | | |\n"
paths:
/api/v2/entity:
post:
operationId: entity
tags:
- track_v2
summary: Make a single request
description: "This endpoint lets you create, update, or delete a single person or object—including managing relationships between objects and people. \n\nAn \"object\" is any kind of non-person entity that you want to associate with one or more people—like a company, an educational course that people signed up for, a product, etc. \n\nYour request must be smaller than 32kb. \n"
servers:
- url: https://track.customer.io
description: This endpoint is a part of the Track API. Track endpoints use basic authentication with your Site ID as the user name and your secret key as the password.
security:
- Tracking-API-Key: []
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/person_operations'
- $ref: '#/components/schemas/object_operations'
- $ref: '#/components/schemas/delivery_operations'
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: The request was malformed or invalid.
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
'401':
$ref: '#/components/responses/401'
x-codeSamples:
- lang: json
label: JSON
source: "{\n \"type\": \"person\",\n \"identifiers\": {\n \"id\": \"42\"\n },\n \"action\": \"identify\",\n \"attributes\": {\n \"first_name\": \"Jane\"\n }\n}"
/api/v2/batch:
post:
operationId: batch
tags:
- track_v2
summary: Send multiple requests
description: "This endpoint lets you batch requests for different people and objects in a single request. Each object in your array represents an individual \"entity\" operation—it represents a change for a person, an object, or a delivery. \n\nYou can mix types in this request; you are not limited to a batch containing only objects or only people. An \"object\" is a non-person entity that you want to associate with one or more people—like a company, an educational course that people enroll in, etc.\n\nYour batch request must be smaller than 500kb. Each of the requests within the batch must also be 32kb or smaller.\n"
servers:
- url: https://track.customer.io
description: This endpoint is a part of the Track API. Track endpoints use basic authentication with your Site ID as the user name and your secret key as the password.
security:
- Tracking-API-Key: []
requestBody:
content:
application/json:
schema:
type: object
example:
batch:
- type: person
identifiers:
id: '42'
action: identify
attributes:
first_name: Jane
last_name: Doe
plan: premium
- type: object
identifiers:
object_type_id: '1'
object_id: acme
action: identify
attributes:
name: Acme Corp
plan: enterprise
seats: 50
- type: object
identifiers:
object_type_id: '1'
object_id: acme
action: add_relationships
cio_relationships:
- identifiers:
id: '42'
relationship_attributes:
role: admin
properties:
batch:
description: A batch of requests, where each object is any individual [entity payload](##tag/v2_entity/operation/entity)—modifying a single person or object.
type: array
items:
anyOf:
- title: Person
anyOf:
- $ref: '#/components/schemas/identify_person'
- $ref: '#/components/schemas/person_delete'
- $ref: '#/components/schemas/person_event'
- $ref: '#/components/schemas/person_screen'
- $ref: '#/components/schemas/person_page'
- $ref: '#/components/schemas/person_add_relationships'
- $ref: '#/components/schemas/person_delete_relationships'
- $ref: '#/components/schemas/person_add_device'
- $ref: '#/components/schemas/person_delete_device'
- $ref: '#/components/schemas/person_merge'
- $ref: '#/components/schemas/person_suppress'
- $ref: '#/components/schemas/person_unsuppress'
discriminator:
propertyName: action
- title: Object
anyOf:
- $ref: '#/components/schemas/object_identify'
- $ref: '#/components/schemas/object_identify_anonymous'
- $ref: '#/components/schemas/object_delete'
- $ref: '#/components/schemas/object_add_relationships'
- $ref: '#/components/schemas/object_delete_relationships'
discriminator:
propertyName: action
- $ref: '#/components/schemas/delivery_operations'
responses:
'200':
$ref: '#/components/responses/200'
'207':
description: At least one object in the batch was invalid; all other requests are accepted. This response contains a list of errors for the invalid objects in the batch.
content:
application/json:
schema:
type: object
properties:
errors:
type: array
description: An array of objects, where each object represents an error. The `batch_index` field for each object is the 0-indexed position of the failing object in your request.
items:
type: object
properties:
batch_index:
type: integer
description: The 0-indexed position of the failing object in your request.
reason:
type: string
description: The reason for the error.
field:
type: string
description: The field containing the error.
message:
type: string
description: A detailed description of the error in the offending field.
'400':
description: The entire request was malformed or invalid.
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
'401':
$ref: '#/components/responses/401'
x-codeSamples:
- lang: json
label: JSON
source: "{\n \"batch\": [\n {\n \"type\": \"person\",\n \"identifiers\": {\n \"id\": \"42\"\n },\n \"action\": \"identify\",\n \"attributes\": {\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"plan\": \"premium\"\n }\n },\n {\n \"type\": \"object\",\n \"identifiers\": {\n \"object_type_id\": \"1\",\n \"object_id\": \"acme\"\n },\n \"action\": \"identify\",\n \"attributes\": {\n \"name\": \"Acme Corp\",\n \"plan\": \"enterprise\",\n \"seats\": 50\n }\n },\n {\n \"type\": \"object\",\n \"identifiers\": {\n \"object_type_id\": \"1\",\n \"object_id\": \"acme\"\n },\n \"action\": \"add_relationships\",\n \"cio_relationships\": [\n {\n \"identifiers\": {\n \"id\": \"42\"\n },\n \"relationship_attributes\": {\n \"role\": \"admin\"\n }\n }\n ]\n }\n ]\n}"
components:
schemas:
object_delete:
title: 'Object: Delete'
description: 'Delete an object. This also removes relationships from people.
'
example:
type: object
identifiers:
object_type_id: '1'
object_id: acme
action: delete
allOf:
- $ref: '#/components/schemas/object_common'
- type: object
required:
- action
properties:
action:
type: string
description: Indicates that the operation will `delete` the the item of the specified `type`.
enum:
- delete
object_delete_relationships:
title: 'Object: Delete relationships'
description: Delete relationships between an object and one or more people.
example:
type: object
identifiers:
object_type_id: '1'
object_id: acme
action: delete_relationships
cio_relationships:
- identifiers:
id: '42'
allOf:
- $ref: '#/components/schemas/object_common'
- type: object
required:
- action
- cio_relationships
properties:
action:
type: string
description: This operation deletes an object relationship from one or more people.
enum:
- delete_relationships
cio_relationships:
$ref: '#/components/schemas/v2_cio_relationships'
person_screen:
title: 'Person: Screen view'
description: A mobile "screenview" event attributed to a person. Our `screen` and `page` event types are more specific than our standard `event`, and help you track and target people based on the pages people visit in your mobile app or website.
example:
type: person
identifiers:
id: '42'
action: screen
name: Dashboard
attributes:
app_version: 2.1.0
allOf:
- $ref: '#/components/schemas/person_common'
- type: object
required:
- action
- name
properties:
action:
type: string
description: A mobile "screenview" event attributed to a person. Our `screen` and `page` event types are more specific than our standard `event`, and help you track and target people based on the pages people visit in your mobile app or website.
enum:
- screen
id:
type: string
format: ULID
description: A valid ULID used to deduplicate events. Note - our Python and Ruby libraries do not pass this id.
name:
type: string
description: The name of the screen a person visited. This is how you'll find and select screen view events in Customer.io.
timestamp:
type: integer
description: The Unix timestamp when the event happened.
attributes:
type: object
description: Additional information that you might want to reference in a message using liquid or use to set attributes on the identified person.
additionalProperties:
x-additionalPropertiesName: liquid merge data
description: Insert key-values that you want to reference in your message here.
person_add_relationships:
title: 'Person: Add relationships'
description: Associate multiple objects with a person.
example:
type: person
identifiers:
id: '42'
action: add_relationships
cio_relationships:
- identifiers:
object_type_id: '1'
object_id: acme
relationship_attributes:
role: admin
allOf:
- $ref: '#/components/schemas/person_common'
- type: object
required:
- action
- cio_relationships
properties:
action:
type: string
description: This operation associates a person with one or more objects.
enum:
- add_relationships
cio_relationships:
$ref: '#/components/schemas/object_relationships'
object_identify_anonymous:
title: 'Object: Identify anonymous'
description: The `identify_anonymous` action lets you relate an object to a person who hasn't yet identified themselves by anonymous_id. When you identify the person, their anonymous relationship will carry over to the identified profile.
example:
type: object
identifiers:
object_type_id: '1'
object_id: acme
action: identify_anonymous
anonymous_id: anon-abc-123
allOf:
- $ref: '#/components/schemas/object_common_identify'
- type: object
required:
- action
properties:
action:
type: string
description: Indicates that the operation will `identify` the item of the specified `type` and relate it to an `anonymous_id`.
enum:
- identify_anonymous
attributes:
$ref: '#/components/schemas/object_attributes'
cio_relationships:
type: array
description: The anonymous people you want to associate with an object. Each object in the array contains an `anonymous_id` representing a person you haven't yet identified by `id` or `email`.
items:
type: object
properties:
identifiers:
type: object
properties:
anonymous_id:
$ref: '#/components/schemas/anonymous_id'
relationship_attributes:
type: object
description: Coming October 2023 - The attributes associated with a relationship. Passing null or an empty string removes the attribute from the relationship.
identify_person:
title: 'Person: Identify'
description: Add or update a person.
example:
type: person
identifiers:
id: '42'
action: identify
attributes:
first_name: Jane
last_name: Doe
plan: premium
allOf:
- $ref: '#/components/schemas/person_common'
- type: object
required:
- action
properties:
action:
type: string
description: Indicates that the operation will `identify` the the item of the specified `type`.
enum:
- identify
timestamp:
type: integer
description: The Unix timestamp for when the attribute update occurred. This can be used to control the order of attribute updates when multiple requests are sent in rapid succession.
example: 1772013598
attributes:
type: object
description: Attributes that you want to add or update for this person. You can pass properties that aren't defined below to set custom attributes; the defined properties are reserved in the Customer.io Track API.
properties:
cio_subscription_preferences:
$ref: '#/components/schemas/cio_subscription_preferences'
_update:
type: boolean
default: false
description: If `true`, update only existing people and prevent accidental profile creation. If no person matches the identifiers, the request does nothing.
additionalProperties:
x-additionalPropertiesName: additional attributes
description: Custom properties that you want to set as attributes on this person.
cio_relationships:
$ref: '#/components/schemas/object_relationships'
person_suppress:
title: 'Person: Suppress'
description: Suppress a person's identifier(s) in Customer.io, so that you can't message a person or add their identifiers back to your workspace. This is separate from suppressions performed by your email provider.
example:
type: person
identifiers:
id: '42'
action: suppress
allOf:
- $ref: '#/components/schemas/person_common'
- type: object
required:
- action
properties:
action:
type: string
description: Suppress a person's identifier(s) in Customer.io, so that you can't message a person or add their identifiers back to your workspace. This is separate from suppressions performed by your email provider.
enum:
- suppress
errors:
x-scalar-ignore: true
type: array
description: An array of errors, where each object represents a different error.
items:
type: object
properties:
reason:
type: string
description: The reason for the error.
field:
type: string
description: The field containing the error.
message:
type: string
description: A detailed description of the error in the offending field.
delivery_operations:
title: 'Delivery: Event'
description: The "delivery" type lets you attribute metrics to messages that don't self-report back to Customer.io, like push and in-app notifications.
example:
type: delivery
identifiers:
id: RPIyMTM6OjEyMzQ=
action: event
name: opened
attributes:
device_token: a83b219c-e756-4c5b-a8e3-d1a5c5b2f3c1
type: object
required:
- type
- action
- identifiers
- name
- attributes
properties:
type:
type: string
description: The "delivery" type lets you attribute metrics to messages that don't self-report back to Customer.io, like push and in-app notifications.
enum:
- delivery
action:
type: string
description: An `event` action indicates a delivery event. Use the `name` to determine the specific metric that you want to attribute to this delivery.
enum:
- event
identifiers:
type: object
description: Contains identifiers for the delivery itself.
properties:
id:
type: string
description: The `delivery_id` for the delivery that you want to attribute metrics to.
name:
type: string
description: The name of the metric you want to attribute to this "delivery".
enum:
- opened
- converted
- delivered
attributes:
type: object
required:
- device_token
description: Contains information about the delivery and the individual who received the message.
properties:
device_token:
type: string
description: The device that received the message.
person_unsuppress:
title: 'Person: Unsuppress'
description: Unsuppress a person's identifier(s) in Customer.io, so that you can message a person or add their identifiers back to your workspace. This does not unsuppress addresses that were previously suppressed by your email provider.
example:
type: person
identifiers:
id: '42'
action: unsuppress
allOf:
- $ref: '#/components/schemas/person_common'
- type: object
required:
- action
properties:
action:
type: string
description: Unsuppress a person's identifier(s) in Customer.io, so that you can message a person or add their identifiers back to your workspace. This does not unsuppress addresses that were previously suppressed by your email provider.
enum:
- unsuppress
relationship_attributes:
x-scalar-ignore: true
type: object
description: 'The attributes associated with a relationship. Passing null or an empty string removes the attribute from the relationship.
'
additionalProperties:
x-additionalPropertiesName: Relationship Attributes
example:
role: admin
cio_id:
x-scalar-ignore: true
type: string
description: A unique identifier set by Customer.io, used to reference a person if you want to update their identifiers.
example: a3000001
person_delete:
title: 'Person: Delete'
description: Delete a person from your workspace.
example:
type: person
identifiers:
id: '42'
action: delete
allOf:
- $ref: '#/components/schemas/person_common'
- type: object
required:
- action
properties:
action:
type: string
description: Indicates that the operation will `delete` the the item of the specified `type`.
enum:
- delete
cio_subscription_preferences:
x-scalar-ignore: true
description: A person's [subscription center](/journeys/channels/subscriptions/center/) preferences. Use JSON dot notation, such as `cio_subscription_preferences.topics.topic_<id>`, to update one topic without replacing others.
type: object
properties:
topics:
type: object
description: Contains active topics in your workspace, named `topic_<id>`.
additionalProperties:
x-additionalPropertiesName: topic_<id>
description: Boolean preference for a topic named `topic_<id>`; `true` subscribes, `false` unsubscribes, and empty or missing values use the topic default. Find topic IDs with [getTopics](#tag/subscription-center/getTopics).
type: boolean
example:
topics:
topic_1: true
topic_2: false
topic_3: true
person_merge:
title: 'Person: Merge'
example:
primary:
id: '42'
secondary:
id: known-user-456
type: object
description: Merges `secondary` into `primary`, then deletes `secondary`. The operation is not reversible, and `primary` must already exist. See [merging duplicate people](/journeys/people/manage/merge-people/).
required:
- type
- primary
- secondary
- action
properties:
type:
description: The operation modifies a person in Customer.io
type: string
enum:
- person
action:
type: string
description: Merges `secondary` into `
# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/customer-io/refs/heads/main/openapi/customer-io-track-v2-api-openapi.yml