Skip to main content

Customer-Io full reference

This is the full reference documentation for the Customer-Io agent connector.

Supported entities and actions

The Customer-Io connector supports the following entities and actions.

EntityActions
CampaignsList, Get, Context Store Search
Campaign ActionsList, Get, Context Store Search
NewslettersList, Get, Context Store Search
SegmentsList, Create, Get
MessagesList, Get
ActivitiesList
Sender IdentitiesList, Get
SnippetsList, Create, Update
CollectionsList, Create, Get, Update
Reporting WebhooksList, Create, Get, Update
ExportsList, Create, Get
Transactional MessagesList, Get
Transactional Message ContentsList, Update
Transactional EmailCreate
Transactional SmsCreate
Transactional PushCreate
Transactional Inbox MessageCreate
Broadcast TriggerCreate

Campaigns

Campaigns List

Returns a list of all campaigns in the workspace.

Python SDK

await customer_io.campaigns.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "campaigns",
"action": "list"
}'
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
typenull | string
statenull | string
activenull | boolean
creatednull | integer
updatednull | integer
first_startednull | integer
deduplicate_idnull | string
tagsnull | array
actionsnull | array
msg_templatesnull | array
trigger_segment_idsnull | array
filter_segment_idsnull | array
frequencynull | string
event_namenull | string
date_attributenull | string
start_hournull | integer
start_minutesnull | integer
timezonenull | string
use_customer_timezonenull | boolean
created_bynull | string
scheduled_startnull | integer
scheduled_start_should_backfillnull | boolean
scheduled_stopnull | integer
scheduled_stop_should_sunsetnull | boolean

Campaigns Get

Returns a single campaign by ID.

Python SDK

await customer_io.campaigns.get(
campaign_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "campaigns",
"action": "get",
"params": {
"campaign_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
campaign_idintegerYesThe campaign identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
typenull | string
statenull | string
activenull | boolean
creatednull | integer
updatednull | integer
first_startednull | integer
deduplicate_idnull | string
tagsnull | array
actionsnull | array
msg_templatesnull | array
trigger_segment_idsnull | array
filter_segment_idsnull | array
frequencynull | string
event_namenull | string
date_attributenull | string
start_hournull | integer
start_minutesnull | integer
timezonenull | string
use_customer_timezonenull | boolean
created_bynull | string
scheduled_startnull | integer
scheduled_start_should_backfillnull | boolean
scheduled_stopnull | integer
scheduled_stop_should_sunsetnull | boolean

Search and filter campaigns records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

Python SDK

await customer_io.campaigns.context_store_search(
query={"filter": {"eq": {"actions": []}}}
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "campaigns",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"actions": []}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
actionsarrayActions defined in this campaign
activebooleanWhether the campaign is active
createdintegerCreation timestamp (Unix)
created_bystringWho created the campaign
date_attributestringDate attribute used for date-triggered campaigns
deduplicate_idstringDeduplication identifier
event_namestringEvent name that triggers the campaign
first_startedintegerWhen the campaign was first started (Unix)
frequencystringHow frequently a person can receive this campaign
idintegerUnique campaign identifier
msg_templatesarrayMessage templates used in the campaign
namestringCampaign name
start_hourintegerHour of the day to trigger
start_minutesintegerMinute of the hour to trigger
statestringCampaign status (draft, active, stopped)
tagsarrayTags associated with the campaign
timezonestringTimezone for trigger scheduling
trigger_segment_idsarraySegment IDs that trigger this campaign
typestringCampaign trigger type
updatedintegerLast update timestamp (Unix)
use_customer_timezonebooleanWhether to use the customer's timezone
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].actionsarrayActions defined in this campaign
data[].activebooleanWhether the campaign is active
data[].createdintegerCreation timestamp (Unix)
data[].created_bystringWho created the campaign
data[].date_attributestringDate attribute used for date-triggered campaigns
data[].deduplicate_idstringDeduplication identifier
data[].event_namestringEvent name that triggers the campaign
data[].first_startedintegerWhen the campaign was first started (Unix)
data[].frequencystringHow frequently a person can receive this campaign
data[].idintegerUnique campaign identifier
data[].msg_templatesarrayMessage templates used in the campaign
data[].namestringCampaign name
data[].start_hourintegerHour of the day to trigger
data[].start_minutesintegerMinute of the hour to trigger
data[].statestringCampaign status (draft, active, stopped)
data[].tagsarrayTags associated with the campaign
data[].timezonestringTimezone for trigger scheduling
data[].trigger_segment_idsarraySegment IDs that trigger this campaign
data[].typestringCampaign trigger type
data[].updatedintegerLast update timestamp (Unix)
data[].use_customer_timezonebooleanWhether to use the customer's timezone

Campaign Actions

Campaign Actions List

Returns a paginated list of actions for a campaign.

Python SDK

await customer_io.campaign_actions.list(
campaign_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "campaign_actions",
"action": "list",
"params": {
"campaign_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
campaign_idintegerYesThe campaign identifier
startstringNoPagination cursor for the next page
Response Schema

Records

Field NameTypeDescription
idnull | integer | string
namenull | string
typenull | string
campaign_idnull | integer
creatednull | integer
updatednull | integer
deduplicate_idnull | string
bodynull | string
layoutnull | string
fromnull | string
from_idnull | integer
subjectnull | string
preheader_textnull | string
recipientnull | string
reply_tonull | string
reply_to_idnull | integer
bccnull | string
fake_bccnull | boolean
headersnull | string
sending_statenull | string
languagenull | string
parent_action_idnull | integer
preprocessornull | string
body_ampnull | string
broadcast_idnull | integer
editornull | string
urlnull | string
body_plainnull | string

Meta

Field NameTypeDescription
nextstring

Campaign Actions Get

Returns a single campaign action by ID.

Python SDK

await customer_io.campaign_actions.get(
campaign_id=0,
action_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "campaign_actions",
"action": "get",
"params": {
"campaign_id": 0,
"action_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
campaign_idintegerYesThe campaign identifier
action_idintegerYesThe action identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer | string
namenull | string
typenull | string
campaign_idnull | integer
creatednull | integer
updatednull | integer
deduplicate_idnull | string
bodynull | string
layoutnull | string
fromnull | string
from_idnull | integer
subjectnull | string
preheader_textnull | string
recipientnull | string
reply_tonull | string
reply_to_idnull | integer
bccnull | string
fake_bccnull | boolean
headersnull | string
sending_statenull | string
languagenull | string
parent_action_idnull | integer
preprocessornull | string
body_ampnull | string
broadcast_idnull | integer
editornull | string
urlnull | string
body_plainnull | string

Search and filter campaign actions records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

Python SDK

await customer_io.campaign_actions.context_store_search(
query={"filter": {"eq": {"bcc": "<str>"}}}
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "campaign_actions",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"bcc": "<str>"}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
bccstringBCC addresses
bodystringAction body content (HTML for emails)
campaign_idintegerParent campaign ID
createdintegerCreation timestamp (Unix)
deduplicate_idstringDeduplication identifier
editorstringEditor used to create the action
fake_bccbooleanWhether to use fake BCC
fromstringFrom address
from_idstringSender identity ID
headersstringCustom email headers as JSON
idstringUnique action identifier
languagestringLanguage variant
layoutstringLayout template used
namestringAction name
parent_action_idintegerParent action ID for language variants
preheader_textstringEmail preheader/preview text
preprocessorstringCSS preprocessor setting
recipientstringRecipient address
recipient_environment_idintegerRecipient environment ID
reply_tostringReply-to address
reply_to_idstringReply-to sender identity ID
request_methodstringHTTP request method for webhook actions
sending_statestringSending behavior (automatic or draft)
subjectstringEmail subject line
typestringAction type (email, webhook, twilio, push, slack, in_app, whatsapp)
updatedintegerLast update timestamp (Unix)
urlstringWebhook URL (for webhook actions)
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].bccstringBCC addresses
data[].bodystringAction body content (HTML for emails)
data[].campaign_idintegerParent campaign ID
data[].createdintegerCreation timestamp (Unix)
data[].deduplicate_idstringDeduplication identifier
data[].editorstringEditor used to create the action
data[].fake_bccbooleanWhether to use fake BCC
data[].fromstringFrom address
data[].from_idstringSender identity ID
data[].headersstringCustom email headers as JSON
data[].idstringUnique action identifier
data[].languagestringLanguage variant
data[].layoutstringLayout template used
data[].namestringAction name
data[].parent_action_idintegerParent action ID for language variants
data[].preheader_textstringEmail preheader/preview text
data[].preprocessorstringCSS preprocessor setting
data[].recipientstringRecipient address
data[].recipient_environment_idintegerRecipient environment ID
data[].reply_tostringReply-to address
data[].reply_to_idstringReply-to sender identity ID
data[].request_methodstringHTTP request method for webhook actions
data[].sending_statestringSending behavior (automatic or draft)
data[].subjectstringEmail subject line
data[].typestringAction type (email, webhook, twilio, push, slack, in_app, whatsapp)
data[].updatedintegerLast update timestamp (Unix)
data[].urlstringWebhook URL (for webhook actions)

Newsletters

Newsletters List

Returns a paginated list of newsletters.

Python SDK

await customer_io.newsletters.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "newsletters",
"action": "list"
}'

Parameters

Parameter NameTypeRequiredDescription
startstringNoPagination cursor for the next page
limitintegerNoMaximum number of newsletters to return
sort"asc" | "desc"NoSort order
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
typenull | string
creatednull | integer
updatednull | integer
sent_atnull | integer
deduplicate_idnull | string
tagsnull | array
content_idsnull | array
recipient_segment_idsnull | array
subscription_topic_idnull | integer

Meta

Field NameTypeDescription
nextstring

Newsletters Get

Returns a single newsletter by ID.

Python SDK

await customer_io.newsletters.get(
newsletter_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "newsletters",
"action": "get",
"params": {
"newsletter_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
newsletter_idintegerYesThe newsletter identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
typenull | string
creatednull | integer
updatednull | integer
sent_atnull | integer
deduplicate_idnull | string
tagsnull | array
content_idsnull | array
recipient_segment_idsnull | array
subscription_topic_idnull | integer

Search and filter newsletters records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

Python SDK

await customer_io.newsletters.context_store_search(
query={"filter": {"eq": {"content_ids": []}}}
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "newsletters",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"content_ids": []}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
content_idsarrayContent variant IDs for this newsletter
createdintegerCreation timestamp (Unix)
deduplicate_idstringDeduplication identifier
idintegerUnique newsletter identifier
namestringNewsletter name
sent_atintegerWhen the newsletter was last sent (Unix)
tagsarrayTags associated with the newsletter
typestringChannel type (email, webhook, twilio, push, in_app, inbox)
updatedintegerLast update timestamp (Unix)
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].content_idsarrayContent variant IDs for this newsletter
data[].createdintegerCreation timestamp (Unix)
data[].deduplicate_idstringDeduplication identifier
data[].idintegerUnique newsletter identifier
data[].namestringNewsletter name
data[].sent_atintegerWhen the newsletter was last sent (Unix)
data[].tagsarrayTags associated with the newsletter
data[].typestringChannel type (email, webhook, twilio, push, in_app, inbox)
data[].updatedintegerLast update timestamp (Unix)

Segments

Segments List

Returns all segments in the workspace.

Python SDK

await customer_io.segments.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "segments",
"action": "list"
}'
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
descriptionnull | string
typenull | string
statenull | string
created_atnull | integer
updated_atnull | integer
deduplicate_idnull | string
tagsnull | array
progressnull | integer
conditionsnull | object

Segments Create

Creates a new empty manual segment. People can be added to it separately.

Python SDK

await customer_io.segments.create(
segment={
"name": "<str>"
}
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "segments",
"action": "create",
"params": {
"segment": {
"name": "<str>"
}
}
}'

Parameters

Parameter NameTypeRequiredDescription
segmentobjectYes
segment.namestringYesName of the manual segment
segment.descriptionstringNoOptional description of the segment

Segments Get

Returns a single segment by ID.

Python SDK

await customer_io.segments.get(
segment_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "segments",
"action": "get",
"params": {
"segment_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
segment_idintegerYesThe segment identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
descriptionnull | string
typenull | string
statenull | string
created_atnull | integer
updated_atnull | integer
deduplicate_idnull | string
tagsnull | array
progressnull | integer
conditionsnull | object

Messages

Messages List

Returns a paginated list of message deliveries.

Python SDK

await customer_io.messages.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "messages",
"action": "list"
}'

Parameters

Parameter NameTypeRequiredDescription
startstringNoPagination cursor for the next page
limitintegerNoMaximum number of messages to return
type"email" | "webhook" | "twilio" | "whatsapp" | "slack" | "push" | "in_app"NoFilter messages by channel type
metric"attempted" | "sent" | "delivered" | "opened" | "clicked" | "converted" | "bounced" | "spammed" | "unsubscribed" | "dropped" | "failed" | "undeliverable"NoFilter messages by delivery metric
campaign_idintegerNoFilter by campaign ID
newsletter_idintegerNoFilter by newsletter ID
Response Schema

Records

Field NameTypeDescription
idnull | string
typenull | string
creatednull | integer
deduplicate_idnull | string
customer_idnull | string
customer_identifiersnull | object
campaign_idnull | integer
newsletter_idnull | integer
broadcast_idnull | integer
content_idnull | integer
action_idnull | integer
parent_action_idnull | integer
message_template_idnull | integer
recipientnull | string
subjectnull | string
forgottennull | boolean
failure_messagenull | string
trigger_event_idnull | string
metricsnull | object

Meta

Field NameTypeDescription
nextstring

Messages Get

Returns a single message delivery by ID. Untested because the test workspace has no message deliveries to retrieve.

Python SDK

await customer_io.messages.get(
message_id="<str>"
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "messages",
"action": "get",
"params": {
"message_id": "<str>"
}
}'

Parameters

Parameter NameTypeRequiredDescription
message_idstringYesThe message delivery identifier
Response Schema

Records

Field NameTypeDescription
idnull | string
typenull | string
creatednull | integer
deduplicate_idnull | string
customer_idnull | string
customer_identifiersnull | object
campaign_idnull | integer
newsletter_idnull | integer
broadcast_idnull | integer
content_idnull | integer
action_idnull | integer
parent_action_idnull | integer
message_template_idnull | integer
recipientnull | string
subjectnull | string
forgottennull | boolean
failure_messagenull | string
trigger_event_idnull | string
metricsnull | object

Activities

Activities List

Returns a paginated list of activities in the workspace.

Python SDK

await customer_io.activities.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "activities",
"action": "list"
}'

Parameters

Parameter NameTypeRequiredDescription
startstringNoPagination cursor for the next page
limitintegerNoMaximum number of activities to return
typestringNoFilter by activity type
namestringNoFilter by event name
Response Schema

Records

Field NameTypeDescription
idnull | string
typenull | string
timestampnull | integer
customer_idnull | string
customer_identifiersnull | object
delivery_idnull | string
delivery_typenull | string
datanull | object

Meta

Field NameTypeDescription
nextstring

Sender Identities

Sender Identities List

Returns a paginated list of sender identities.

Python SDK

await customer_io.sender_identities.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "sender_identities",
"action": "list"
}'

Parameters

Parameter NameTypeRequiredDescription
startstringNoPagination cursor for the next page
limitintegerNoMaximum number of sender identities to return
sort"asc" | "desc"NoSort order
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
emailnull | string
addressnull | string
template_typenull | string
auto_generatednull | boolean
deduplicate_idnull | string
phonenull | string

Meta

Field NameTypeDescription
nextstring

Sender Identities Get

Returns a single sender identity by ID.

Python SDK

await customer_io.sender_identities.get(
sender_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "sender_identities",
"action": "get",
"params": {
"sender_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
sender_idintegerYesThe sender identity identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
emailnull | string
addressnull | string
template_typenull | string
auto_generatednull | boolean
deduplicate_idnull | string
phonenull | string

Snippets

Snippets List

Returns all snippets in the workspace.

Python SDK

await customer_io.snippets.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "snippets",
"action": "list"
}'
Response Schema

Records

Field NameTypeDescription
namenull | string
valuenull | string
updated_atnull | integer

Snippets Create

Creates a new reusable content snippet. Returns 422 if a snippet with the same name already exists.

Python SDK

await customer_io.snippets.create(
name="<str>",
value="<str>"
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "snippets",
"action": "create",
"params": {
"name": "<str>",
"value": "<str>"
}
}'

Parameters

Parameter NameTypeRequiredDescription
namestringYesUnique snippet name (used as the liquid tag identifier)
valuestringYesSnippet content (plain text, HTML, or Liquid)

Snippets Update

Updates an existing snippet by name, or creates it if it does not exist (upsert behavior).

Python SDK

await customer_io.snippets.update(
name="<str>",
value="<str>"
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "snippets",
"action": "update",
"params": {
"name": "<str>",
"value": "<str>"
}
}'

Parameters

Parameter NameTypeRequiredDescription
namestringYesSnippet name to update (or create if it does not exist)
valuestringYesNew snippet content (plain text, HTML, or Liquid)

Collections

Collections List

Returns all collections in the workspace.

Python SDK

await customer_io.collections.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "collections",
"action": "list"
}'
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
bytesnull | integer
rowsnull | integer
schemanull | array
created_atnull | integer
updated_atnull | integer

Collections Create

Creates a new data collection with inline data or a URL source.

Python SDK

await customer_io.collections.create(
name="<str>",
data=[],
url="<str>"
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "collections",
"action": "create",
"params": {
"name": "<str>",
"data": [],
"url": "<str>"
}
}'

Parameters

Parameter NameTypeRequiredDescription
namestringYesCollection name, referenced in Liquid as collection_name.property
dataarray<object>NoInline collection data (array of objects). Provide either data or url, not both.
urlstringNoURL to a CSV or JSON file containing collection data. Provide either data or url, not both.

Collections Get

Returns a single collection by ID.

Python SDK

await customer_io.collections.get(
collection_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "collections",
"action": "get",
"params": {
"collection_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
collection_idintegerYesThe collection identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
bytesnull | integer
rowsnull | integer
schemanull | array
created_atnull | integer
updated_atnull | integer

Collections Update

Updates an existing collection's name, data, or URL source.

Python SDK

await customer_io.collections.update(
name="<str>",
data=[],
url="<str>",
collection_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "collections",
"action": "update",
"params": {
"name": "<str>",
"data": [],
"url": "<str>",
"collection_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
namestringNoRename the collection
dataarray<object>NoReplace collection data entirely (array of objects). Provide either data or url, not both.
urlstringNoReplace the URL source for collection data. Provide either data or url, not both.
collection_idintegerYesThe collection identifier

Reporting Webhooks

Reporting Webhooks List

Returns all reporting webhooks in the workspace.

Python SDK

await customer_io.reporting_webhooks.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "reporting_webhooks",
"action": "list"
}'
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
endpointnull | string
disablednull | boolean
full_resolutionnull | boolean
with_contentnull | boolean
eventsnull | array

Reporting Webhooks Create

Creates a new reporting webhook to receive event notifications at the specified endpoint.

Python SDK

await customer_io.reporting_webhooks.create(
name="<str>",
endpoint="<str>",
events=[],
disabled=True,
full_resolution=True,
with_content=True
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "reporting_webhooks",
"action": "create",
"params": {
"name": "<str>",
"endpoint": "<str>",
"events": [],
"disabled": True,
"full_resolution": True,
"with_content": True
}
}'

Parameters

Parameter NameTypeRequiredDescription
namestringYesWebhook display name
endpointstringYesThe URL to receive webhook notifications
eventsarray<string>YesEvent types to report (e.g. customer_subscribed, email_sent, email_opened, email_clicked, email_bounced, email_converted, email_unsubscribed, sms_sent, sms_delivered, push_sent)
disabledbooleanNoWhether the webhook should be disabled initially
full_resolutionbooleanNoSend all events instead of only unique events
with_contentbooleanNoInclude the message body in sent events
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
endpointnull | string
disablednull | boolean
full_resolutionnull | boolean
with_contentnull | boolean
eventsnull | array

Reporting Webhooks Get

Returns a single reporting webhook by ID.

Python SDK

await customer_io.reporting_webhooks.get(
webhook_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "reporting_webhooks",
"action": "get",
"params": {
"webhook_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
webhook_idintegerYesThe reporting webhook identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
endpointnull | string
disablednull | boolean
full_resolutionnull | boolean
with_contentnull | boolean
eventsnull | array

Reporting Webhooks Update

Updates an existing reporting webhook's configuration.

Python SDK

await customer_io.reporting_webhooks.update(
name="<str>",
endpoint="<str>",
events=[],
disabled=True,
full_resolution=True,
with_content=True,
webhook_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "reporting_webhooks",
"action": "update",
"params": {
"name": "<str>",
"endpoint": "<str>",
"events": [],
"disabled": True,
"full_resolution": True,
"with_content": True,
"webhook_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
namestringYesWebhook display name
endpointstringYesThe URL to receive webhook notifications
eventsarray<string>YesEvent types to report
disabledbooleanNoWhether the webhook is disabled
full_resolutionbooleanNoSend all events instead of only unique events
with_contentbooleanNoInclude the message body in sent events
webhook_idintegerYesThe reporting webhook identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
endpointnull | string
disablednull | boolean
full_resolutionnull | boolean
with_contentnull | boolean
eventsnull | array

Exports

Exports List

Returns all exports in the workspace.

Python SDK

await customer_io.exports.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "exports",
"action": "list"
}'
Response Schema

Records

Field NameTypeDescription
idnull | integer
typenull | string
statusnull | string
descriptionnull | string
totalnull | integer
downloadsnull | integer
failednull | boolean
created_atnull | integer
updated_atnull | integer
deduplicate_idnull | string
user_idnull | integer
user_emailnull | string

Exports Create

Triggers a new export of customer data. Use filters to select which customers to export.

Python SDK

await customer_io.exports.create(
filters={}
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "exports",
"action": "create",
"params": {
"filters": {}
}
}'

Parameters

Parameter NameTypeRequiredDescription
filtersobjectYesAudience filter conditions to select which customers to export. Uses boolean logic with "and", "or", "not" arrays of conditions, "segment" objects with an "id" field, and "attribute" objects with "field", "operator", and "value" fields. Example: {"and": [{"segment": {"id": 3}}, {"attribute": {"field": "plan", "operator": "eq", "value": "premium"}}]}

Exports Get

Returns a single export by ID.

Python SDK

await customer_io.exports.get(
export_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "exports",
"action": "get",
"params": {
"export_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
export_idintegerYesThe export identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
typenull | string
statusnull | string
descriptionnull | string
totalnull | integer
downloadsnull | integer
failednull | boolean
created_atnull | integer
updated_atnull | integer
deduplicate_idnull | string
user_idnull | integer
user_emailnull | string

Transactional Messages

Transactional Messages List

Returns a list of all transactional message templates in the workspace.

Python SDK

await customer_io.transactional_messages.list()

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_messages",
"action": "list"
}'
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
descriptionnull | string
send_to_unsubscribednull | boolean
link_trackingnull | boolean
open_trackingnull | boolean
hide_message_bodynull | boolean
queue_draftsnull | boolean
trigger_namenull | string
created_atnull | integer
updated_atnull | integer

Transactional Messages Get

Returns a single transactional message template by ID.

Python SDK

await customer_io.transactional_messages.get(
transactional_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_messages",
"action": "get",
"params": {
"transactional_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
transactional_idintegerYesThe transactional message identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
descriptionnull | string
send_to_unsubscribednull | boolean
link_trackingnull | boolean
open_trackingnull | boolean
hide_message_bodynull | boolean
queue_draftsnull | boolean
trigger_namenull | string
created_atnull | integer
updated_atnull | integer

Transactional Message Contents

Transactional Message Contents List

Returns all content variants (including language translations) for a transactional message template.

Python SDK

await customer_io.transactional_message_contents.list(
transactional_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_message_contents",
"action": "list",
"params": {
"transactional_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
transactional_idintegerYesThe transactional message identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
creatednull | integer
updatednull | integer
bodynull | string
languagenull | string
typenull | string
fromnull | string
from_idnull | integer
reply_tonull | string
reply_to_idnull | integer
preprocessornull | string
recipientnull | string
subjectnull | string
bccnull | string
fake_bccnull | boolean
preheader_textnull | string
body_ampnull | string
headersnull | string

Transactional Message Contents Update

Updates the content of a specific variant of a transactional message template by content ID.

Python SDK

await customer_io.transactional_message_contents.update(
body="<str>",
from_id=0,
reply_to_id=0,
recipient="<str>",
subject="<str>",
preheader_text="<str>",
body_amp="<str>",
headers=[],
transactional_id=0,
content_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_message_contents",
"action": "update",
"params": {
"body": "<str>",
"from_id": 0,
"reply_to_id": 0,
"recipient": "<str>",
"subject": "<str>",
"preheader_text": "<str>",
"body_amp": "<str>",
"headers": [],
"transactional_id": 0,
"content_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
bodystringNoHTML body content of the message
from_idintegerNoSender identity ID
reply_to_idinteger | nullNoReply-to sender identity ID
recipientstringNoRecipient expression (e.g. "{{customer.email}}")
subjectstringNoEmail subject line
preheader_textstringNoEmail preheader/preview text
body_ampstringNoAMP HTML body content
headersarray<object>NoCustom email headers as an array of name-value objects
headers.namestringNoHeader name
headers.valuestringNoHeader value
transactional_idintegerYesThe transactional message identifier
content_idintegerYesThe content variant identifier
Response Schema

Records

Field NameTypeDescription
idnull | integer
namenull | string
creatednull | integer
updatednull | integer
bodynull | string
languagenull | string
typenull | string
fromnull | string
from_idnull | integer
reply_tonull | string
reply_to_idnull | integer
preprocessornull | string
recipientnull | string
subjectnull | string
bccnull | string
fake_bccnull | boolean
preheader_textnull | string
body_ampnull | string
headersnull | string

Transactional Email

Transactional Email Create

Sends a transactional email to a single recipient. Can use a pre-built template (via transactional_message_id) or provide inline content (subject, body, from). Creates the recipient profile if it does not already exist.

Python SDK

await customer_io.transactional_email.create(
transactional_message_id=0,
to="<str>",
identifiers={},
message_data={},
from_="<str>",
subject="<str>",
body="<str>",
body_plain="<str>",
reply_to="<str>",
bcc="<str>",
headers={},
preheader_text="<str>",
attachments={},
disable_message_retention=True,
send_to_unsubscribed=True,
tracked=True,
queue_draft=True,
send_at=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_email",
"action": "create",
"params": {
"transactional_message_id": 0,
"to": "<str>",
"identifiers": {},
"message_data": {},
"from": "<str>",
"subject": "<str>",
"body": "<str>",
"body_plain": "<str>",
"reply_to": "<str>",
"bcc": "<str>",
"headers": {},
"preheader_text": "<str>",
"attachments": {},
"disable_message_retention": True,
"send_to_unsubscribed": True,
"tracked": True,
"queue_draft": True,
"send_at": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
transactional_message_idinteger | stringNoTemplate ID (number) or trigger name (string). Required if not providing inline body/subject/from.
tostringYesRecipient email address. Supports display name format: "Name <email>"
identifiersobjectYesRecipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."}
message_dataobjectNoKey-value pairs available as {{trigger.<key>}} in templates
fromstringNoSender address (must be verified domain). Overrides template if provided.
subjectstringNoEmail subject line. Overrides template if provided.
bodystringNoHTML email body. Overrides template if provided.
body_plainstringNoPlaintext email body
reply_tostringNoReply-to email address
bccstringNoBCC address(es), comma-separated. Max 15 total recipients.
headersobjectNoCustom email headers (ASCII only)
preheader_textstringNoEmail preview text
attachmentsobjectNoMap of filename to base64 content: {"file.pdf": "<base64>"}. Max 2MB total.
disable_message_retentionbooleanNoDo not store message body (for sensitive data)
send_to_unsubscribedbooleanNoSend even if person is unsubscribed
trackedbooleanNoEnable open and click tracking
queue_draftbooleanNoQueue as draft instead of sending immediately
send_atintegerNoUnix timestamp for scheduled delivery (up to 90 days in the future)
Response Schema

Records

Field NameTypeDescription
delivery_idnull | string
queued_atnull | integer

Transactional Sms

Transactional Sms Create

Sends a transactional SMS to a single recipient. Always requires a pre-built template (transactional_message_id). Requires Twilio integration to be configured in the workspace.

Python SDK

await customer_io.transactional_sms.create(
transactional_message_id=0,
to="<str>",
identifiers={},
message_data={},
from_="<str>",
send_to_unsubscribed=True,
tracked=True,
queue_draft=True,
disable_message_retention=True
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_sms",
"action": "create",
"params": {
"transactional_message_id": 0,
"to": "<str>",
"identifiers": {},
"message_data": {},
"from": "<str>",
"send_to_unsubscribed": True,
"tracked": True,
"queue_draft": True,
"disable_message_retention": True
}
}'

Parameters

Parameter NameTypeRequiredDescription
transactional_message_idinteger | stringYesTemplate ID (number) or trigger name (string). Always required for SMS.
tostringYesPhone number in E.164 format (e.g. +15551234567)
identifiersobjectYesRecipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."}
message_dataobjectNoKey-value pairs available as {{trigger.<key>}} in templates
fromstringNoOverride sender phone number (must be verified in Twilio)
send_to_unsubscribedbooleanNoSend even if person is unsubscribed
trackedbooleanNoEnable link tracking
queue_draftbooleanNoQueue as draft instead of sending immediately
disable_message_retentionbooleanNoDo not store message content
Response Schema

Records

Field NameTypeDescription
delivery_idnull | string
queued_atnull | integer

Transactional Push

Transactional Push Create

Sends a transactional push notification to a single recipient. Can use a template or provide inline title and message. Requires push notifications to be configured in the workspace.

Python SDK

await customer_io.transactional_push.create(
transactional_message_id=0,
to="<str>",
identifiers={},
message_data={},
title="<str>",
message="<str>",
link="<str>",
image_url="<str>",
custom_data={},
custom_payload={},
sound="<str>",
send_to_unsubscribed=True,
queue_draft=True,
disable_message_retention=True,
send_at=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_push",
"action": "create",
"params": {
"transactional_message_id": 0,
"to": "<str>",
"identifiers": {},
"message_data": {},
"title": "<str>",
"message": "<str>",
"link": "<str>",
"image_url": "<str>",
"custom_data": {},
"custom_payload": {},
"sound": "<str>",
"send_to_unsubscribed": True,
"queue_draft": True,
"disable_message_retention": True,
"send_at": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
transactional_message_idinteger | stringNoTemplate ID or trigger name. Required if not providing inline title/message.
tostringNoDevice target: "last_used" for most recent device, or a specific device token. Defaults to all devices.
identifiersobjectYesRecipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."}
message_dataobjectNoKey-value pairs available as {{trigger.<key>}} in templates
titlestringNoPush notification title (overrides template)
messagestringNoPush notification body (overrides template)
linkstringNoDeep link URL
image_urlstringNoImage URL to display in the notification
custom_dataobjectNoCustom key-value data included in the push payload
custom_payloadobjectNoPlatform-specific payload overrides (iOS/Android)
soundstringNoNotification sound name
send_to_unsubscribedbooleanNoSend even if person is unsubscribed
queue_draftbooleanNoQueue as draft instead of sending immediately
disable_message_retentionbooleanNoDo not store message content
send_atintegerNoUnix timestamp for scheduled delivery
Response Schema

Records

Field NameTypeDescription
delivery_idnull | string
queued_atnull | integer

Transactional Inbox Message

Transactional Inbox Message Create

Sends a transactional in-app inbox message to a single recipient. Always requires a pre-built Inbox-type transactional message template (transactional_message_id). Messages appear in the recipient's notification inbox via the Customer.io SDK.

Python SDK

await customer_io.transactional_inbox_message.create(
transactional_message_id=0,
identifiers={},
message_data={}
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "transactional_inbox_message",
"action": "create",
"params": {
"transactional_message_id": 0,
"identifiers": {},
"message_data": {}
}
}'

Parameters

Parameter NameTypeRequiredDescription
transactional_message_idinteger | stringYesTemplate ID or trigger name. Must reference an Inbox-type transactional message.
identifiersobjectYesRecipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."}
message_dataobjectNoKey-value pairs available as {{trigger.<key>}} in the inbox message template
Response Schema

Records

Field NameTypeDescription
delivery_idnull | string
queued_atnull | integer

Broadcast Trigger

Broadcast Trigger Create

Triggers an API-triggered broadcast campaign. The broadcast must be configured as API-triggered in the Customer.io UI. Cannot be triggered more than once every 10 seconds, with a maximum of 5 queued broadcasts per campaign. Recipients must already exist in the workspace.

Python SDK

await customer_io.broadcast_trigger.create(
data={},
recipients={},
ids=[],
emails=[],
per_user_data=[],
data_file_url="<str>",
id_ignore_missing=True,
email_ignore_missing=True,
email_add_duplicates=True,
campaign_id=0
)

API

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "broadcast_trigger",
"action": "create",
"params": {
"data": {},
"recipients": {},
"ids": [],
"emails": [],
"per_user_data": [],
"data_file_url": "<str>",
"id_ignore_missing": True,
"email_ignore_missing": True,
"email_add_duplicates": True,
"campaign_id": 0
}
}'

Parameters

Parameter NameTypeRequiredDescription
dataobjectNoGlobal data available as {{trigger.<key>}} in broadcast messages
recipientsobjectNoFilter object to define audience (overrides UI-defined recipients). Supports and/or/not/segment/attribute conditions.
idsarray<string>NoList of profile IDs to target (max 10,000)
emailsarray<string>NoList of email addresses to target (max 10,000)
per_user_dataarray<object>NoPer-recipient custom data: [{"id": "user1", "data": {...}}, ...]
data_file_urlstringNoURL to a JSON Lines file with per-user data
id_ignore_missingbooleanNoIgnore IDs that do not match existing profiles (default false)
email_ignore_missingbooleanNoIgnore emails that do not match existing profiles
email_add_duplicatesbooleanNoSend to all profiles sharing an email address
campaign_idintegerYesThe broadcast campaign identifier (found in Triggering Details)
Response Schema

Records

Field NameTypeDescription
idnull | integer