Module airbyte_agent_sdk.connectors.customer_io.connector
Customer-Io connector.
Classes
ActivitiesQuery(connector: CustomerIoConnector)
: Query class for Activities entity operations.
Initialize query with connector reference.
Methods
list(self, start: str | None = None, limit: int | None = None, type: str | None = None, name: str | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResultWithMeta[list[Activity], ActivitiesListResultMeta]
: Returns a paginated list of activities in the workspace.
Args: start: Pagination cursor for the next page limit: Maximum number of activities to return type: Filter by activity type name: Filter by event name **kwargs: Additional parameters
Returns: ActivitiesListResult
BroadcastTriggerQuery(connector: CustomerIoConnector)
: Query class for BroadcastTrigger entity operations.
Initialize query with connector reference.
Methods
create(self, campaign_id: str, data: dict[str, Any] | None = None, recipients: dict[str, Any] | None = None, ids: list[str] | None = None, emails: list[str] | None = None, per_user_data: list[dict[str, Any]] | None = None, data_file_url: str | None = None, id_ignore_missing: bool | None = None, email_ignore_missing: bool | None = None, email_add_duplicates: bool | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.BroadcastTriggerResponse
: 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.
Args: data: Global data available as {{trigger.<key>}} in broadcast messages recipients: Filter object to define audience (overrides UI-defined recipients). Supports and/or/not/segment/attribute conditions. ids: List of profile IDs to target (max 10,000) emails: List of email addresses to target (max 10,000) per_user_data: Per-recipient custom data: [{"id": "user1", "data": {...}}, ...] data_file_url: URL to a JSON Lines file with per-user data id_ignore_missing: Ignore IDs that do not match existing profiles (default false) email_ignore_missing: Ignore emails that do not match existing profiles email_add_duplicates: Send to all profiles sharing an email address campaign_id: The broadcast campaign identifier (found in Triggering Details) **kwargs: Additional parameters
Returns: BroadcastTriggerResponse
CampaignActionsQuery(connector: CustomerIoConnector)
: Query class for CampaignActions entity operations.
Initialize query with connector reference.
Methods
context_store_search(self, query: CampaignActionsSearchQuery, limit: int | None = None, cursor: str | None = None, fields: list[list[str]] | None = None) ‑> airbyte_agent_sdk.connectors.customer_io.models.AirbyteSearchResult[CampaignActionsSearchData]
: Search campaign_actions records from Airbyte cache.
This operation searches cached data from Airbyte syncs. Only available in hosted execution mode.
Available filter fields (CampaignActionsSearchFilter):
- bcc: BCC addresses
- body: Action body content (HTML for emails)
- campaign_id: Parent campaign ID
- created: Creation timestamp (Unix)
- deduplicate_id: Deduplication identifier
- editor: Editor used to create the action
- fake_bcc: Whether to use fake BCC
- from_: From address
- from_id: Sender identity ID
- headers: Custom email headers as JSON
- id: Unique action identifier
- language: Language variant
- layout: Layout template used
- name: Action name
- parent_action_id: Parent action ID for language variants
- preheader_text: Email preheader/preview text
- preprocessor: CSS preprocessor setting
- recipient: Recipient address
- recipient_environment_id: Recipient environment ID
- reply_to: Reply-to address
- reply_to_id: Reply-to sender identity ID
- request_method: HTTP request method for webhook actions
- sending_state: Sending behavior (automatic or draft)
- subject: Email subject line
- type_: Action type (email, webhook, twilio, push, slack, in_app, whatsapp)
- updated: Last update timestamp (Unix)
- url: Webhook URL (for webhook actions)
Args: query: Filter and sort conditions. Supports operators like eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or. Example: {"filter": {"eq": {"status": "active"}}} limit: Maximum results to return (default 1000) cursor: Pagination cursor from previous response's meta.cursor fields: Field paths to include in results. Each path is a list of keys for nested access. Example: [["id"], ["user", "name"]] returns id and user.name fields.
Returns: CampaignActionsSearchResult with typed records, pagination metadata, and optional search metadata
Raises: NotImplementedError: If called in local execution mode
get(self, campaign_id: str, action_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CampaignAction
: Returns a single campaign action by ID.
Args: campaign_id: The campaign identifier action_id: The action identifier **kwargs: Additional parameters
Returns: CampaignAction
list(self, campaign_id: str, start: str | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResultWithMeta[list[CampaignAction], CampaignActionsListResultMeta]
: Returns a paginated list of actions for a campaign.
Args: campaign_id: The campaign identifier start: Pagination cursor for the next page **kwargs: Additional parameters
Returns: CampaignActionsListResult
CampaignsQuery(connector: CustomerIoConnector)
: Query class for Campaigns entity operations.
Initialize query with connector reference.
Methods
context_store_search(self, query: CampaignsSearchQuery, limit: int | None = None, cursor: str | None = None, fields: list[list[str]] | None = None) ‑> airbyte_agent_sdk.connectors.customer_io.models.AirbyteSearchResult[CampaignsSearchData]
: Search campaigns records from Airbyte cache.
This operation searches cached data from Airbyte syncs. Only available in hosted execution mode.
Available filter fields (CampaignsSearchFilter):
- actions: Actions defined in this campaign
- active: Whether the campaign is active
- created: Creation timestamp (Unix)
- created_by: Who created the campaign
- date_attribute: Date attribute used for date-triggered campaigns
- deduplicate_id: Deduplication identifier
- event_name: Event name that triggers the campaign
- first_started: When the campaign was first started (Unix)
- frequency: How frequently a person can receive this campaign
- id: Unique campaign identifier
- msg_templates: Message templates used in the campaign
- name: Campaign name
- start_hour: Hour of the day to trigger
- start_minutes: Minute of the hour to trigger
- state: Campaign status (draft, active, stopped)
- tags: Tags associated with the campaign
- timezone: Timezone for trigger scheduling
- trigger_segment_ids: Segment IDs that trigger this campaign
- type_: Campaign trigger type
- updated: Last update timestamp (Unix)
- use_customer_timezone: Whether to use the customer's timezone
Args: query: Filter and sort conditions. Supports operators like eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or. Example: {"filter": {"eq": {"status": "active"}}} limit: Maximum results to return (default 1000) cursor: Pagination cursor from previous response's meta.cursor fields: Field paths to include in results. Each path is a list of keys for nested access. Example: [["id"], ["user", "name"]] returns id and user.name fields.
Returns: CampaignsSearchResult with typed records, pagination metadata, and optional search metadata
Raises: NotImplementedError: If called in local execution mode
get(self, campaign_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.Campaign
: Returns a single campaign by ID.
Args: campaign_id: The campaign identifier **kwargs: Additional parameters
Returns: Campaign
list(self, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[Campaign]]
: Returns a list of all campaigns in the workspace.
Returns: CampaignsListResult
CollectionsQuery(connector: CustomerIoConnector)
: Query class for Collections entity operations.
Initialize query with connector reference.
Methods
create(self, name: str, data: list[dict[str, Any]] | None = None, url: str | None = None, **kwargs) ‑> dict[str, typing.Any]
: Creates a new data collection with inline data or a URL source.
Args: name: Collection name, referenced in Liquid as collection_name.property data: Inline collection data (array of objects). Provide either data or url, not both. url: URL to a CSV or JSON file containing collection data. Provide either data or url, not both. **kwargs: Additional parameters
Returns: dict[str, Any]
get(self, collection_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.Collection
: Returns a single collection by ID.
Args: collection_id: The collection identifier **kwargs: Additional parameters
Returns: Collection
list(self, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[Collection]]
: Returns all collections in the workspace.
Returns: CollectionsListResult
update(self, collection_id: str, name: str | None = None, data: list[dict[str, Any]] | None = None, url: str | None = None, **kwargs) ‑> dict[str, typing.Any]
: Updates an existing collection's name, data, or URL source.
Args: name: Rename the collection data: Replace collection data entirely (array of objects). Provide either data or url, not both. url: Replace the URL source for collection data. Provide either data or url, not both. collection_id: The collection identifier **kwargs: Additional parameters
Returns: dict[str, Any]
CustomerIoConnector(auth_config: CustomerIoAuthConfig | AirbyteAuthConfig | BaseModel | None = None, on_token_refresh: Any | None = None)
: Type-safe Customer-Io API connector.
Auto-generated from OpenAPI specification with full type safety.
Initialize a new customer-io connector instance.
Supports both local and hosted execution modes:
- Local mode: Provide connector-specific auth config (e.g., CustomerIoAuthConfig)
- Hosted mode: Provide
AirbyteAuthConfigwith client credentials and eitherconnector_idorworkspace_name
Args: auth_config: Either connector-specific auth config for local mode, or AirbyteAuthConfig for hosted mode on_token_refresh: Optional callback for OAuth2 token refresh persistence. Called with new_tokens dict when tokens are refreshed. Can be sync or async. Example: lambda tokens: save_to_database(tokens) Examples:
Local mode (direct API calls)
connector = CustomerIoConnector(auth_config=CustomerIoAuthConfig(app_api_key="..."))
Hosted mode with explicit connector_id (no lookup needed)
connector = CustomerIoConnector( auth_config=AirbyteAuthConfig( airbyte_client_id="client_abc123", airbyte_client_secret="secret_xyz789", connector_id="existing-source-uuid" ) )
Hosted mode with lookup by workspace_name
connector = CustomerIoConnector( auth_config=AirbyteAuthConfig( workspace_name="user-123", organization_id="00000000-0000-0000-0000-000000000123", airbyte_client_id="client_abc123", airbyte_client_secret="secret_xyz789" ) )
Class variables
connector_name
: The type of the None singleton.
connector_version
: The type of the None singleton.
sdk_version
: The type of the None singleton.
Static methods
tool_utils(func: _F | None = None, *, update_docstring: bool = True, max_output_chars: int | None = 100000, framework: FrameworkName | None = None, internal_retries: int = 0, should_internal_retry: Callable[[Exception, tuple[Any, ...], dict[str, Any]], bool] | None = None, exhausted_runtime_failure_message: Callable[[Exception, tuple[Any, ...], dict[str, Any]], str | None] | None = None) ‑> ~_F | Callable[[~_F], ~_F]
: Decorator that adds tool utilities like docstring augmentation and output limits.
Composes :func:airbyte_agent_sdk.translation.translate_exceptions for
runtime wrapping (sync/async branch + output-size check + framework
signal translation + optional internal retry loop), and adds
connector-specific docstring augmentation on top of it.
Usage: @mcp.tool() @CustomerIoConnector.tool_utils async def execute(entity: str, action: str, params: dict): ...
@mcp.tool() @CustomerIoConnector.tool_utils(update_docstring=False, max_output_chars=None) async def execute(entity: str, action: str, params: dict): ...
@mcp.tool() @CustomerIoConnector.tool_utils(framework="pydantic_ai", internal_retries=2) async def execute(entity: str, action: str, params: dict): ...
Args:
update_docstring: When True, append connector capabilities to doc.
max_output_chars: Max serialized output size before raising. Use None to disable.
framework: One of "pydantic_ai" | "langchain" | "openai_agents" | "mcp".
Defaults to None → auto-detect by attempting each framework's canonical
import in order. Explicit always wins.
internal_retries: How many transient runtime failures (429/5xx, network,
timeout) to retry silently before surfacing. Default 0. Forwarded to
:func:airbyte_agent_sdk.translation.translate_exceptions.
should_internal_retry: Optional predicate (error, args, kwargs) -> bool
further restricting which retryable errors are safe for this specific
tool. Forwarded to
:func:airbyte_agent_sdk.translation.translate_exceptions.
exhausted_runtime_failure_message: Optional callback
(error, args, kwargs) -> str | None. Invoked after internal retries
are exhausted OR were skipped via should_internal_retry returning
False. Forwarded to
:func:airbyte_agent_sdk.translation.translate_exceptions.
Instance variables
connector_id: str | None
: Get the connector/source ID (only available in hosted mode).
Returns: The connector ID if in hosted mode, None if in local mode.
Methods
check(self) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoCheckResult
: Perform a health check to verify connectivity and credentials.
Executes a lightweight list operation (limit=1) to validate that the connector can communicate with the API and credentials are valid.
Returns: CustomerIoCheckResult with status ("healthy" or "unhealthy") and optional error message
Example: result = await connector.check() if result.status == "healthy": print("Connection verified!") else: print(f"Check failed: {result.error}")
close(self)
: Close the connector and release resources.
entity_schema(self, entity: str) ‑> dict[str, typing.Any] | None
: Get the JSON schema for an entity.
Args: entity: Entity name (e.g., "contacts", "companies")
Returns: JSON schema dict describing the entity structure, or None if not found.
Example: schema = connector.entity_schema("contacts") if schema: print(f"Contact properties: {list(schema.get('properties', {}).keys())}")
execute(self, entity: str, action: "Literal['list', 'get', 'create', 'update', 'context_store_search']", params: Mapping[str, Any] | None = None, *, select_fields: list[str] | None = None, exclude_fields: list[str] | None = None, skip_truncation: bool = True) ‑> Any
: Execute an entity operation with full type safety.
This is the recommended interface for blessed connectors as it:
- Uses the same signature as non-blessed connectors
- Provides full IDE autocomplete for entity/action/params
- Makes migration from generic to blessed connectors seamless
Args: entity: Entity name (e.g., "customers") action: Operation action (e.g., "create", "get", "list") params: Operation parameters (typed based on entity+action) select_fields: Optional allowlist of dot-notation fields to include exclude_fields: Optional blocklist of dot-notation fields to remove skip_truncation: Disable long-text truncation for collection actions
Returns: Typed response based on the operation
Example: customer = await connector.execute( entity="customers", action="get", params={"id": "cus_123"} )
list_entities(self) ‑> list[dict[str, typing.Any]]
: Get structured data about available entities, actions, and parameters.
Returns a list of entity descriptions with:
- entity_name: Name of the entity (e.g., "contacts", "deals")
- description: Entity description from the first endpoint
- available_actions: List of actions (e.g., ["list", "get", "create"])
- parameters: Dict mapping action -> list of parameter dicts
Example: entities = connector.list_entities() for entity in entities: print(f"{entity['entity_name']}: {entity['available_actions']}")
ExportsQuery(connector: CustomerIoConnector)
: Query class for Exports entity operations.
Initialize query with connector reference.
Methods
create(self, filters: dict[str, Any], **kwargs) ‑> dict[str, typing.Any]
: Triggers a new export of customer data. Use filters to select which customers to export.
Args: filters: Audience 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"}}]}
**kwargs: Additional parameters
Returns: dict[str, Any]
get(self, export_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.Export
: Returns a single export by ID.
Args: export_id: The export identifier **kwargs: Additional parameters
Returns: Export
list(self, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[Export]]
: Returns all exports in the workspace.
Returns: ExportsListResult
MessagesQuery(connector: CustomerIoConnector)
: Query class for Messages entity operations.
Initialize query with connector reference.
Methods
get(self, message_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.Message
: Returns a single message delivery by ID. Untested because the test workspace has no message deliveries to retrieve.
Args: message_id: The message delivery identifier **kwargs: Additional parameters
Returns: Message
list(self, start: str | None = None, limit: int | None = None, type: str | None = None, metric: str | None = None, campaign_id: int | None = None, newsletter_id: int | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResultWithMeta[list[Message], MessagesListResultMeta]
: Returns a paginated list of message deliveries.
Args: start: Pagination cursor for the next page limit: Maximum number of messages to return type: Filter messages by channel type metric: Filter messages by delivery metric campaign_id: Filter by campaign ID newsletter_id: Filter by newsletter ID **kwargs: Additional parameters
Returns: MessagesListResult
NewslettersQuery(connector: CustomerIoConnector)
: Query class for Newsletters entity operations.
Initialize query with connector reference.
Methods
context_store_search(self, query: NewslettersSearchQuery, limit: int | None = None, cursor: str | None = None, fields: list[list[str]] | None = None) ‑> airbyte_agent_sdk.connectors.customer_io.models.AirbyteSearchResult[NewslettersSearchData]
: Search newsletters records from Airbyte cache.
This operation searches cached data from Airbyte syncs. Only available in hosted execution mode.
Available filter fields (NewslettersSearchFilter):
- content_ids: Content variant IDs for this newsletter
- created: Creation timestamp (Unix)
- deduplicate_id: Deduplication identifier
- id: Unique newsletter identifier
- name: Newsletter name
- sent_at: When the newsletter was last sent (Unix)
- tags: Tags associated with the newsletter
- type_: Channel type (email, webhook, twilio, push, in_app, inbox)
- updated: Last update timestamp (Unix)
Args: query: Filter and sort conditions. Supports operators like eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or. Example: {"filter": {"eq": {"status": "active"}}} limit: Maximum results to return (default 1000) cursor: Pagination cursor from previous response's meta.cursor fields: Field paths to include in results. Each path is a list of keys for nested access. Example: [["id"], ["user", "name"]] returns id and user.name fields.
Returns: NewslettersSearchResult with typed records, pagination metadata, and optional search metadata
Raises: NotImplementedError: If called in local execution mode
get(self, newsletter_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.Newsletter
: Returns a single newsletter by ID.
Args: newsletter_id: The newsletter identifier **kwargs: Additional parameters
Returns: Newsletter
list(self, start: str | None = None, limit: int | None = None, sort: str | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResultWithMeta[list[Newsletter], NewslettersListResultMeta]
: Returns a paginated list of newsletters.
Args: start: Pagination cursor for the next page limit: Maximum number of newsletters to return sort: Sort order **kwargs: Additional parameters
Returns: NewslettersListResult
ReportingWebhooksQuery(connector: CustomerIoConnector)
: Query class for ReportingWebhooks entity operations.
Initialize query with connector reference.
Methods
create(self, name: str, endpoint: str, events: list[str], disabled: bool | None = None, full_resolution: bool | None = None, with_content: bool | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.ReportingWebhook
: Creates a new reporting webhook to receive event notifications at the specified endpoint.
Args: name: Webhook display name endpoint: The URL to receive webhook notifications events: Event 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)
disabled: Whether the webhook should be disabled initially full_resolution: Send all events instead of only unique events with_content: Include the message body in sent events **kwargs: Additional parameters
Returns: ReportingWebhook
get(self, webhook_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.ReportingWebhook
: Returns a single reporting webhook by ID.
Args: webhook_id: The reporting webhook identifier **kwargs: Additional parameters
Returns: ReportingWebhook
list(self, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[ReportingWebhook]]
: Returns all reporting webhooks in the workspace.
Returns: ReportingWebhooksListResult
update(self, name: str, endpoint: str, events: list[str], webhook_id: str, disabled: bool | None = None, full_resolution: bool | None = None, with_content: bool | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.ReportingWebhook
: Updates an existing reporting webhook's configuration.
Args: name: Webhook display name endpoint: The URL to receive webhook notifications events: Event types to report disabled: Whether the webhook is disabled full_resolution: Send all events instead of only unique events with_content: Include the message body in sent events webhook_id: The reporting webhook identifier **kwargs: Additional parameters
Returns: ReportingWebhook
SegmentsQuery(connector: CustomerIoConnector)
: Query class for Segments entity operations.
Initialize query with connector reference.
Methods
create(self, segment: SegmentsCreateParamsSegment, **kwargs) ‑> dict[str, typing.Any]
: Creates a new empty manual segment. People can be added to it separately.
Args: segment: Parameter segment **kwargs: Additional parameters
Returns: dict[str, Any]
get(self, segment_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.Segment
: Returns a single segment by ID.
Args: segment_id: The segment identifier **kwargs: Additional parameters
Returns: Segment
list(self, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[Segment]]
: Returns all segments in the workspace.
Returns: SegmentsListResult
SenderIdentitiesQuery(connector: CustomerIoConnector)
: Query class for SenderIdentities entity operations.
Initialize query with connector reference.
Methods
get(self, sender_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.SenderIdentity
: Returns a single sender identity by ID.
Args: sender_id: The sender identity identifier **kwargs: Additional parameters
Returns: SenderIdentity
list(self, start: str | None = None, limit: int | None = None, sort: str | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResultWithMeta[list[SenderIdentity], SenderIdentitiesListResultMeta]
: Returns a paginated list of sender identities.
Args: start: Pagination cursor for the next page limit: Maximum number of sender identities to return sort: Sort order **kwargs: Additional parameters
Returns: SenderIdentitiesListResult
SnippetsQuery(connector: CustomerIoConnector)
: Query class for Snippets entity operations.
Initialize query with connector reference.
Methods
create(self, name: str, value: str, **kwargs) ‑> dict[str, typing.Any]
: Creates a new reusable content snippet. Returns 422 if a snippet with the same name already exists.
Args: name: Unique snippet name (used as the liquid tag identifier) value: Snippet content (plain text, HTML, or Liquid) **kwargs: Additional parameters
Returns: dict[str, Any]
list(self, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[Snippet]]
: Returns all snippets in the workspace.
Returns: SnippetsListResult
update(self, name: str, value: str, **kwargs) ‑> dict[str, typing.Any]
: Updates an existing snippet by name, or creates it if it does not exist (upsert behavior).
Args: name: Snippet name to update (or create if it does not exist) value: New snippet content (plain text, HTML, or Liquid) **kwargs: Additional parameters
Returns: dict[str, Any]
TransactionalEmailQuery(connector: CustomerIoConnector)
: Query class for TransactionalEmail entity operations.
Initialize query with connector reference.
Methods
create(self, to: str, identifiers: dict[str, Any], transactional_message_id: Any | None = None, message_data: dict[str, Any] | None = None, from_: str | None = None, subject: str | None = None, body: str | None = None, body_plain: str | None = None, reply_to: str | None = None, bcc: str | None = None, headers: dict[str, Any] | None = None, preheader_text: str | None = None, attachments: dict[str, Any] | None = None, disable_message_retention: bool | None = None, send_to_unsubscribed: bool | None = None, tracked: bool | None = None, queue_draft: bool | None = None, send_at: int | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.TransactionalSendResponse
: 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.
Args: transactional_message_id: Template ID (number) or trigger name (string). Required if not providing inline body/subject/from. to: Recipient email address. Supports display name format: "Name <email>" identifiers: Recipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."} message_data: Key-value pairs available as {{trigger.<key>}} in templates from_: Sender address (must be verified domain). Overrides template if provided. subject: Email subject line. Overrides template if provided. body: HTML email body. Overrides template if provided. body_plain: Plaintext email body reply_to: Reply-to email address bcc: BCC address(es), comma-separated. Max 15 total recipients. headers: Custom email headers (ASCII only) preheader_text: Email preview text attachments: Map of filename to base64 content: {"file.pdf": "<base64>"}. Max 2MB total. disable_message_retention: Do not store message body (for sensitive data) send_to_unsubscribed: Send even if person is unsubscribed tracked: Enable open and click tracking queue_draft: Queue as draft instead of sending immediately send_at: Unix timestamp for scheduled delivery (up to 90 days in the future) **kwargs: Additional parameters
Returns: TransactionalSendResponse
TransactionalInboxMessageQuery(connector: CustomerIoConnector)
: Query class for TransactionalInboxMessage entity operations.
Initialize query with connector reference.
Methods
create(self, transactional_message_id: Any, identifiers: dict[str, Any], message_data: dict[str, Any] | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.TransactionalSendResponse
: 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.
Args: transactional_message_id: Template ID or trigger name. Must reference an Inbox-type transactional message. identifiers: Recipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."} message_data: Key-value pairs available as {{trigger.<key>}} in the inbox message template **kwargs: Additional parameters
Returns: TransactionalSendResponse
TransactionalMessageContentsQuery(connector: CustomerIoConnector)
: Query class for TransactionalMessageContents entity operations.
Initialize query with connector reference.
Methods
list(self, transactional_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[TransactionalMessageContent]]
: Returns all content variants (including language translations) for a transactional message template.
Args: transactional_id: The transactional message identifier **kwargs: Additional parameters
Returns: TransactionalMessageContentsListResult
update(self, transactional_id: str, content_id: str, body: str | None = None, from_id: int | None = None, reply_to_id: int | None | None = None, recipient: str | None = None, subject: str | None = None, preheader_text: str | None = None, body_amp: str | None = None, headers: list[TransactionalMessageContentsUpdateParamsHeadersItem] | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.TransactionalMessageContent
: Updates the content of a specific variant of a transactional message template by content ID.
Args: body: HTML body content of the message from_id: Sender identity ID reply_to_id: Reply-to sender identity ID recipient: Recipient expression (e.g. "{{customer.email}}") subject: Email subject line preheader_text: Email preheader/preview text body_amp: AMP HTML body content headers: Custom email headers as an array of name-value objects transactional_id: The transactional message identifier content_id: The content variant identifier **kwargs: Additional parameters
Returns: TransactionalMessageContent
TransactionalMessagesQuery(connector: CustomerIoConnector)
: Query class for TransactionalMessages entity operations.
Initialize query with connector reference.
Methods
get(self, transactional_id: str, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.TransactionalMessage
: Returns a single transactional message template by ID.
Args: transactional_id: The transactional message identifier **kwargs: Additional parameters
Returns: TransactionalMessage
list(self, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.CustomerIoExecuteResult[list[TransactionalMessage]]
: Returns a list of all transactional message templates in the workspace.
Returns: TransactionalMessagesListResult
TransactionalPushQuery(connector: CustomerIoConnector)
: Query class for TransactionalPush entity operations.
Initialize query with connector reference.
Methods
create(self, identifiers: dict[str, Any], transactional_message_id: Any | None = None, to: str | None = None, message_data: dict[str, Any] | None = None, title: str | None = None, message: str | None = None, link: str | None = None, image_url: str | None = None, custom_data: dict[str, Any] | None = None, custom_payload: dict[str, Any] | None = None, sound: str | None = None, send_to_unsubscribed: bool | None = None, queue_draft: bool | None = None, disable_message_retention: bool | None = None, send_at: int | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.TransactionalSendResponse
: 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.
Args: transactional_message_id: Template ID or trigger name. Required if not providing inline title/message. to: Device target: "last_used" for most recent device, or a specific device token. Defaults to all devices. identifiers: Recipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."} message_data: Key-value pairs available as {{trigger.<key>}} in templates title: Push notification title (overrides template) message: Push notification body (overrides template) link: Deep link URL image_url: Image URL to display in the notification custom_data: Custom key-value data included in the push payload custom_payload: Platform-specific payload overrides (iOS/Android) sound: Notification sound name send_to_unsubscribed: Send even if person is unsubscribed queue_draft: Queue as draft instead of sending immediately disable_message_retention: Do not store message content send_at: Unix timestamp for scheduled delivery **kwargs: Additional parameters
Returns: TransactionalSendResponse
TransactionalSmsQuery(connector: CustomerIoConnector)
: Query class for TransactionalSms entity operations.
Initialize query with connector reference.
Methods
create(self, transactional_message_id: Any, to: str, identifiers: dict[str, Any], message_data: dict[str, Any] | None = None, from_: str | None = None, send_to_unsubscribed: bool | None = None, tracked: bool | None = None, queue_draft: bool | None = None, disable_message_retention: bool | None = None, **kwargs) ‑> airbyte_agent_sdk.connectors.customer_io.models.TransactionalSendResponse
: 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.
Args: transactional_message_id: Template ID (number) or trigger name (string). Always required for SMS. to: Phone number in E.164 format (e.g. +15551234567) identifiers: Recipient identity. One of: {"id": "..."}, {"email": "..."}, or {"cio_id": "..."} message_data: Key-value pairs available as {{trigger.<key>}} in templates from_: Override sender phone number (must be verified in Twilio) send_to_unsubscribed: Send even if person is unsubscribed tracked: Enable link tracking queue_draft: Queue as draft instead of sending immediately disable_message_retention: Do not store message content **kwargs: Additional parameters
Returns: TransactionalSendResponse