MCP 서버

Courier

io.github.trycourier/courier
커뮤니케이션 개발자 도구 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Provides notification delivery infrastructure for users, tenants, lists, templates, preferences, journeys, automations, brands, and multi-channel messaging.

add_bulk_users
Add users to an existing bulk job.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id', 'users'], 'properties': {'users': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Array of user objects to add'}, 'job_id': {'type': 'string', 'description': 'The bulk job ID'}}, 'additionalProperties': False}
add_subscribers_to_list
Append subscribers to a list without removing existing subscribers.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'recipients'], 'properties': {'list_id': {'type': 'string', 'description': 'The list ID'}, 'recipients': {'type': 'array', 'items': {'type': 'object', 'required': ['recipientId'], 'properties': {'recipientId': {'type': 'string', 'description': 'Recipient ID'}}, 'additionalProperties': False}, 'description': 'Recipients to set on the list'}}, 'additionalProperties': False}
add_user_to_tenant
Add a user to a tenant.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'tenant_id'], 'properties': {'profile': {'type': 'object', 'description': 'Tenant-scoped profile overrides', 'additionalProperties': {}}, 'user_id': {'type': 'string', 'description': 'The user ID'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}}, 'additionalProperties': False}
archive_journey
Archive a journey. Archived journeys cannot be invoked but existing runs continue to completion.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['journey_id'], 'properties': {'journey_id': {'type': 'string', 'description': 'The journey template ID to archive'}}, 'additionalProperties': False}
archive_journey_template
Archive a journey-scoped notification template. Archived templates cannot be sent.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id'], 'properties': {'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
archive_notification
Archive a notification template by ID.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id'], 'properties': {'notification_id': {'type': 'string', 'description': 'The notification template ID to archive'}}, 'additionalProperties': False}
archive_preference_section
Archive a preference section. The section must be empty: delete its topics first, otherwise the request fails with 409.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id'], 'properties': {'section_id': {'type': 'string', 'description': 'Id of the preference section to archive'}}, 'additionalProperties': False}
archive_preference_topic
Archive a topic within a section.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id', 'topic_id'], 'properties': {'topic_id': {'type': 'string', 'description': 'Id of the subscription preference topic to archive'}, 'section_id': {'type': 'string', 'description': 'Id of the preference section'}}, 'additionalProperties': False}
archive_preview_device_set
Archive a preview device set. Runs that used it keep their own copy of its devices. The Courier Recommended set cannot be archived.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['device_set_id'], 'properties': {'device_set_id': {'type': 'string', 'description': 'The device set id (pvs_...)'}}, 'additionalProperties': False}
archive_request
Archive a send request and all its associated messages by request ID.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['request_id'], 'properties': {'request_id': {'type': 'string', 'description': 'The request ID (requestId returned from /send)'}}, 'additionalProperties': False}
archive_routing_strategy
Archive a routing strategy. The strategy must not have associated notification templates; unlink all templates before archiving.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['routing_strategy_id'], 'properties': {'routing_strategy_id': {'type': 'string', 'description': 'The routing strategy ID to archive'}}, 'additionalProperties': False}
bulk_add_user_tenants
Add a user to multiple tenants at once. A custom profile can be supplied per tenant.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'tenants'], 'properties': {'tenants': {'type': 'array', 'items': {'type': 'object', 'required': ['tenant_id'], 'properties': {'profile': {'type': 'object', 'description': 'Tenant-scoped profile overrides', 'additionalProperties': {}}, 'tenant_id': {'type': 'string', 'description': 'Tenant ID'}}, 'additionalProperties': False}, 'description': 'Array of tenant associations'}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
bulk_add_user_tokens
Add multiple push/device tokens for a user in one request. Overwrites matching existing tokens.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'tokens'], 'properties': {'tokens': {'type': 'array', 'items': {'type': 'object', 'required': ['token', 'provider_key'], 'properties': {'token': {'type': 'string', 'description': 'The token string'}, 'device': {'type': 'object', 'properties': {'ad_id': {'type': 'string'}, 'model': {'type': 'string'}, 'app_id': {'type': 'string'}, 'platform': {'type': 'string'}, 'device_id': {'type': 'string'}, 'manufacturer': {'type': 'string'}}, 'description': 'Device metadata', 'additionalProperties': False}, 'tracking': {}, 'properties': {}, 'expiry_date': {'type': ['string', 'boolean'], 'description': 'Expiry as ISO string, false to disable, or omit for default'}, 'provider_key': {'enum': ['firebase-fcm', 'apn', 'expo', 'onesignal'], 'type': 'string', 'description': 'Push provider'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'Token records to upsert'}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
bulk_replace_user_preferences
Replace a user's complete set of preference overrides in one request. The topics in the body become the recipient's entire override set: listed topics are created or updated, and every existing override not included is reset to its topic default. An empty `topics` array clears all overrides. Validation-atomic (all-or-nothing).
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'topics'], 'properties': {'topics': {'type': 'array', 'items': {'type': 'object', 'required': ['topic_id', 'status'], 'properties': {'status': {'enum': ['OPTED_IN', 'OPTED_OUT', 'REQUIRED'], 'type': 'string', 'description': 'Preference status'}, 'topic_id': {'type': 'string', 'description': 'The subscription topic ID'}, 'custom_routing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Custom channel routing order (e.g. inbox, email)'}, 'has_custom_routing': {'type': 'boolean', 'description': 'Whether custom channel routing is set'}}, 'additionalProperties': False}, 'description': 'The complete set of topic overrides. An empty array resets every existing override.'}, 'user_id': {'type': 'string', 'description': 'The user ID'}, 'tenant_id': {'type': 'string', 'description': 'Scope the replacement to a specific tenant context'}}, 'additionalProperties': False}
bulk_subscribe_to_list
Replace all subscribers on a list with the given recipients.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'recipients'], 'properties': {'list_id': {'type': 'string', 'description': 'The list ID'}, 'recipients': {'type': 'array', 'items': {'type': 'object', 'required': ['recipientId'], 'properties': {'recipientId': {'type': 'string', 'description': 'Recipient ID'}}, 'additionalProperties': False}, 'description': 'Recipients to set on the list'}}, 'additionalProperties': False}
bulk_update_user_preferences
Additively create or update a user's preferences for one or more topics in a single request. Only the topics in the body are touched; existing overrides for other topics are left untouched. Partial-success: valid topics are written and returned in `items`, unapplicable ones collected in `errors`.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'topics'], 'properties': {'topics': {'type': 'array', 'items': {'type': 'object', 'required': ['topic_id', 'status'], 'properties': {'status': {'enum': ['OPTED_IN', 'OPTED_OUT', 'REQUIRED'], 'type': 'string', 'description': 'Preference status'}, 'topic_id': {'type': 'string', 'description': 'The subscription topic ID'}, 'custom_routing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Custom channel routing order (e.g. inbox, email)'}, 'has_custom_routing': {'type': 'boolean', 'description': 'Whether custom channel routing is set'}}, 'additionalProperties': False}, 'description': 'Topics to create or update'}, 'user_id': {'type': 'string', 'description': 'The user ID'}, 'tenant_id': {'type': 'string', 'description': 'Scope the update to a specific tenant context'}}, 'additionalProperties': False}
cancel_automation
Cancel a running automation by its cancelation_token. This invokes a second ad-hoc automation with a single cancel step. The token must match the cancelation_token set when the original automation was started. Note: spelling is "cancelation_token" (single "l").
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['cancelation_token'], 'properties': {'cancelation_token': {'type': 'string', 'description': 'The cancelation_token that was set when the automation was originally invoked'}}, 'additionalProperties': False}
cancel_broadcast_schedule
Cancel a broadcast's scheduled send. The broadcast itself is kept.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id'], 'properties': {'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}}, 'additionalProperties': False}
cancel_journey
Cancel journey runs. Supply EXACTLY ONE of cancelation_token (cancels every run associated with the token) or run_id (cancels a single run). Cancelation is idempotent: a run that already finished or was already canceled is left unchanged.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'run_id': {'type': 'string', 'description': 'Cancels a single run by id. Mutually exclusive with cancelation_token.'}, 'cancelation_token': {'type': 'string', 'description': 'Cancels every run associated with this token. Mutually exclusive with run_id.'}}, 'additionalProperties': False}
cancel_message
Cancel a message that is currently being delivered. Returns the message details with updated status.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message_id'], 'properties': {'message_id': {'type': 'string', 'description': 'The message ID to cancel'}}, 'additionalProperties': False}
cancel_notification_submission
Cancel a notification template submission.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'submission_id'], 'properties': {'submission_id': {'type': 'string', 'description': 'The submission ID to cancel'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
courier_installation_guide
Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to "how do I integrate Courier" or "how do I get started". Client-side platforms need a JWT to authenticate; each guide says so and names the tool that issues one.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['platform'], 'properties': {'platform': {'enum': ['nodejs', 'python', 'react', 'ios', 'android', 'flutter', 'react native'], 'type': 'string', 'description': 'Which SDK to return the installation guide for.'}}, 'additionalProperties': False}
create_brand
Create a new brand. The API requires settings — omitting it returns a 400. If you do not have specific brand colors, omit settings and a safe default will be used automatically (black primary, white secondary). Example: { name: "Acme", settings: { colors: { primary: "#1a73e8", secondary: "#ffffff" } } }.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Optional brand ID; auto-generated if omitted'}, 'name': {'type': 'string', 'description': 'Brand display name'}, 'settings': {'type': 'object', 'properties': {'email': {'type': 'object', 'description': 'Email template settings (header, footer)', 'additionalProperties': {}}, 'inapp': {'type': 'object', 'description': 'In-app notification settings', 'additionalProperties': {}}, 'colors': {'type': 'object', 'required': ['primary', 'secondary'], 'properties': {'primary': {'type': 'string', 'description': 'Primary brand color (hex, e.g. "#1a73e8")'}, 'tertiary': {'type': 'string', 'description': 'Tertiary brand color (hex)'}, 'secondary': {'type': 'string', 'description': 'Secondary brand color (hex, e.g. "#ffffff")'}}, 'description': 'Brand colors', 'additionalProperties': False}}, 'description': 'Brand appearance settings. If omitted, defaults to { colors: { primary: "#000000", secondary: "#ffffff" } }.', 'additionalProperties': False}, 'snippets': {'type': 'object', 'description': 'Brand snippets', 'additionalProperties': {}}}, 'additionalProperties': False}
create_broadcast
Create a broadcast: a one-off message to a list or audience on a single channel. It starts as a draft with no content; add content with put_broadcast_content, then send_broadcast or schedule_broadcast.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'channel'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name'}, 'channel': {'enum': ['email', 'sms', 'push', 'inbox', 'slack', 'msteams'], 'type': 'string', 'description': 'The single delivery channel for this broadcast'}}, 'additionalProperties': False}
create_bulk_job
Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message'], 'properties': {'message': {'type': 'object', 'description': 'Bulk message definition with event/template and content', 'additionalProperties': {}}}, 'additionalProperties': False}
create_journey
Create a new journey. Always created as a draft; making it live is a separate step this tool cannot perform. Send two nodes: the trigger, and an exit node last. Both are required — a create with no exit node is rejected, and the API reports that as "exit node must be the last node in the journey" even when no exit was sent at all. Send and delay nodes are added afterwards by replace_journey, once journey-scoped templates exist. Node ids are server-generated; do NOT include an id field. Example: { name: "Welcome Journey", nodes: [{ type: "trigger", trigger_type: "api-invoke" }, { type: "exit" }], enabled: true }. The result carries a "verification" object read back from the server after the write — check it every time. verified:true means what you asked for is what saved. verified:false names what did not: "fieldMismatches" for node fields that failed to land, "nodeCountMismatch" for a node dropped or added, and "unknownTemplateReferences" for a send node pointing at a template id this journey does not have — almost always a mistyped id, so re-copy it from the create_journey_template or get_journey response it came from. Fix the specific thing named and send the corrected document. Re-sending an identical call changes nothing, and every replace_journey overwrites the whole draft again. An "errorKind" of "unauthorized" means the write itself succeeded and only the read-back was refused: report that as unconfirmed, never as a failed write.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'nodes'], 'properties': {'name': {'type': 'string', 'description': 'Journey display name'}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'The trigger node, then a terminal exit node â\x80\x94 both required. Send and delay nodes are added later by replace_journey. Node ids are server-generated â\x80\x94 do NOT include an id field. Example: [{ type: "trigger", trigger_type: "api-invoke" }, { type: "exit" }].'}, 'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'enabled': {'type': 'boolean', 'description': 'Whether the journey is active. Defaults to true.'}}, 'additionalProperties': False}
create_journey_template
Create a notification template scoped to a journey. Always created as a draft; making it live is a separate step this tool cannot perform. The template can then be referenced in journey send nodes. content.elements must be wrapped in a channel block — the API rejects bare elements. Example: { journey_id: "j-abc", channel: "email", notification: { name: "Welcome Email", tags: [], brand: null, subscription: null, content: { version: "2022-01-01", elements: [{ type: "channel", channel: "email", elements: [{ type: "text", content: "Hello!" }] }] } } }. The result carries a "verification" object confirming the new id is really present on the journey. verified:true means the id in this response is safe to reference from a send node. verified:false means it is not visible yet — re-read the journey before referencing it, and do not create a second template to work around it. An "errorKind" of "unauthorized" means the template was created and only the check was refused.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['journey_id', 'channel', 'notification'], 'properties': {'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'channel': {'type': 'string', 'description': 'Channel for this template (e.g. "email", "push", "sms", "inbox")'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}, 'notification': {'type': 'object', 'required': ['name', 'tags', 'brand', 'subscription', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Template display name'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tag list (use [] if none)'}, 'brand': {'anyOf': [{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Brand to apply, or null'}, 'content': {'type': 'object', 'required': ['version', 'elements'], 'properties': {'scope': {'enum': ['default', 'strict'], 'type': 'string'}, 'version': {'type': 'string', 'const': '2022-01-01'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Elemental content nodes. Must be wrapped in a channel block â\x80\x94 the API rejects bare elements. Example: [{ type: "channel", channel: "email", elements: [{ type: "text", content: "Hello!" }] }].'}}, 'additionalProperties': False}, 'subscription': {'anyOf': [{'type': 'object', 'required': ['topic_id'], 'properties': {'topic_id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Subscription topic, or null'}}, 'description': 'Notification template definition', 'additionalProperties': False}, 'provider_key': {'type': 'string', 'description': 'Specific provider key to target'}}, 'additionalProperties': False}
create_list
Create or update a list by list ID.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'Display name for the list'}, 'list_id': {'type': 'string', 'description': 'The list ID'}}, 'additionalProperties': False}
create_notification
Create a V2 notification template. name is required. Content may be provided inline or set separately afterwards. A newly created template is a draft; making it live is a separate step this tool cannot perform. Link a routing strategy via notification.routing.strategy_id to control which channels are used. Example: { notification: { name: 'welcome-email', tags: [], brand: null, subscription: null, routing: { strategy_id: 'rs_01abc' }, content: { version: '2022-01-01', elements: [] } } }.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification'], 'properties': {'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'notification': {'type': 'object', 'required': ['name', 'tags', 'brand', 'subscription', 'routing', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Template display name'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tag list (use [] if none)'}, 'brand': {'anyOf': [{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Brand to apply, or null for none. Required on every call â\x80\x94 never omit this key, and never send {}.'}, 'content': {'type': 'object', 'required': ['version', 'elements'], 'properties': {'version': {'type': 'string', 'description': 'Content version identifier, e.g. "2022-01-01"'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Elemental content nodes'}}, 'description': 'Elemental content, required on every call. Example: { version: "2022-01-01", elements: [{ type: "text", content: "Hello!" }] }.', 'additionalProperties': False}, 'routing': {'anyOf': [{'type': 'object', 'required': ['strategy_id'], 'properties': {'strategy_id': {'type': 'string', 'description': "From a get_routing_strategy or list_notifications/get_notification response for THIS template's own intended strategy â\x80\x94 never an id borrowed from an unrelated template found while searching for one."}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Routing strategy reference, or null to use the workspace default. Required on every call â\x80\x94 never omit this key, and never send {}: the API rejects both an absent routing key and an empty object; if you have no strategy id, send null explicitly.'}, 'subscription': {'anyOf': [{'type': 'object', 'required': ['topic_id'], 'properties': {'topic_id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Subscription topic reference, or null for none. Required on every call â\x80\x94 never omit this key, and never send {}.'}}, 'description': 'Notification template payload', 'additionalProperties': False}}, 'additionalProperties': False}
create_or_merge_user
Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'profile': {'type': 'object', 'default': {}, 'description': 'Profile data to create or merge (e.g. { email: "...", phone_number: "..." })', 'additionalProperties': {}}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
create_or_replace_user_push_token
Create or replace a push/device token for a user.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'token', 'provider_key'], 'properties': {'token': {'type': 'string', 'description': 'The token string'}, 'device': {'type': 'object', 'properties': {'ad_id': {'type': 'string'}, 'model': {'type': 'string'}, 'app_id': {'type': 'string'}, 'platform': {'type': 'string'}, 'device_id': {'type': 'string'}, 'manufacturer': {'type': 'string'}}, 'description': 'Device metadata', 'additionalProperties': False}, 'user_id': {'type': 'string', 'description': 'The user ID'}, 'provider_key': {'enum': ['firebase-fcm', 'apn', 'expo', 'onesignal'], 'type': 'string', 'description': 'Push provider'}}, 'additionalProperties': False}
create_or_update_tenant
Create or replace a tenant. Tenants represent organizations or groups that users belong to.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'Display name for the tenant'}, 'brand_id': {'type': 'string', 'description': 'Brand ID to associate with this tenant'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}, 'properties': {'type': 'object', 'description': 'Custom properties for the tenant', 'additionalProperties': {}}, 'user_profile': {'type': 'object', 'description': 'Default profile data for users in this tenant', 'additionalProperties': {}}, 'parent_tenant_id': {'type': 'string', 'description': 'Parent tenant ID for hierarchical tenants'}, 'default_preferences': {'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'status'], 'properties': {'id': {'type': 'string', 'description': 'Subscription topic ID this default applies to'}, 'type': {'type': 'string', 'const': 'subscription_topic', 'description': 'Always "subscription_topic" when provided'}, 'status': {'enum': ['OPTED_IN', 'OPTED_OUT', 'REQUIRED'], 'type': 'string', 'description': 'Default status for the topic. "REQUIRED" prevents users from opting out'}, 'custom_routing': {'type': 'array', 'items': {'enum': ['direct_message', 'email', 'push', 'sms', 'webhook', 'inbox'], 'type': 'string'}, 'description': 'Channels this topic delivers on when has_custom_routing is true'}, 'has_custom_routing': {'type': 'boolean', 'description': "Whether custom_routing overrides the topic's default channels"}}, 'additionalProperties': False}, 'description': 'One entry per subscription topic'}}, 'description': 'Default notification preferences applied to users in this tenant. Example: { "items": [{ "id": "topic_abc", "status": "OPTED_IN", "type": "subscription_topic" }] }', 'additionalProperties': False}}, 'additionalProperties': False}
create_preference_section
Create a preference section in your workspace. The section id is generated and returned. Add topics afterwards with create_preference_topic.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name for the section'}, 'routing_options': {'type': 'array', 'items': {'enum': ['direct_message', 'email', 'push', 'sms', 'webhook', 'inbox'], 'type': 'string'}, 'description': 'Default channels for the section. Defaults to empty if omitted.'}, 'has_custom_routing': {'type': 'boolean', 'description': 'Whether the section defines custom routing for its topics'}}, 'additionalProperties': False}
create_preference_topic
Create a subscription preference topic inside a section. The topic id is generated and returned. Fails with 404 if the section does not exist.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id', 'name', 'default_status'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name for the preference topic'}, 'digest': {'anyOf': [{'type': 'object', 'required': ['template_id', 'schedules'], 'properties': {'schedules': {'type': 'array', 'items': {'type': 'object', 'required': ['frequency'], 'properties': {'time': {'type': 'string', 'description': '24-hour local delivery time, HH:MM. Required for every frequency except instant.'}, 'disabled': {'type': 'boolean', 'description': 'Whether the schedule is disabled'}, 'timezone': {'type': 'string', 'description': 'IANA timezone for `time` and the day fields, e.g. America/New_York'}, 'frequency': {'enum': ['instant', 'daily', 'weekdays', 'weekly', 'custom_days', 'monthly'], 'type': 'string', 'description': 'How often the digest delivers. `instant` delivers each event immediately.'}, 'is_default': {'type': 'boolean', 'description': 'The schedule recipients are placed on when they have not chosen one'}, 'day_of_week': {'enum': ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'], 'type': 'string', 'description': 'Required when frequency is weekly'}, 'schedule_id': {'type': 'string', 'description': 'Id of an existing schedule to update. Omit to create a new one.'}, 'day_of_month': {'type': 'integer', 'description': 'Required when frequency is monthly'}, 'days_of_week': {'type': 'array', 'items': {'enum': ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'], 'type': 'string'}, 'description': 'Required when frequency is custom_days'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'The cadences this digest delivers on. At least one is required.'}, 'categories': {'type': 'array', 'items': {'type': 'object', 'required': ['category_key'], 'properties': {'limit': {'type': 'integer', 'description': 'How many collected events reach the rendered digest. Defaults to 10.'}, 'retain': {'enum': ['FIRST', 'LAST', 'HIGHEST', 'LOWEST', 'NONE'], 'type': 'string', 'description': 'Which collected events survive the limit'}, 'sort_key': {'type': 'string', 'description': 'Data key to rank events by. Required when retain is HIGHEST or LOWEST.'}, 'category_key': {'type': 'string', 'description': 'Key identifying the category within the digest'}}, 'additionalProperties': False}, 'description': 'Retention rules per category key. Defaults to a single `digest` category.'}, 'audience_id': {'type': 'string', 'description': 'Optional audience the digest is scoped to'}, 'template_id': {'type': 'string', 'description': 'The notification template that renders the digest'}, 'trigger_empty': {'type': 'boolean', 'description': 'Deliver the digest even when nothing was collected'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': "Batch this topic's notifications into a scheduled digest. Omit to leave any existing digest untouched; pass null to turn it off."}, 'section_id': {'type': 'string', 'description': 'Id of the preference section to create the topic in'}, 'topic_data': {'type': 'object', 'description': 'Arbitrary metadata associated with the topic', 'additionalProperties': {}}, 'default_status': {'enum': ['OPTED_OUT', 'OPTED_IN', 'REQUIRED'], 'type': 'string', 'description': 'Default subscription status applied when a recipient has not set their own'}, 'routing_options': {'type': 'array', 'items': {'enum': ['direct_message', 'email', 'push', 'sms', 'webhook', 'inbox'], 'type': 'string'}, 'description': 'Default channels delivered for this topic. Defaults to empty if omitted.'}, 'allowed_preferences': {'type': 'array', 'items': {'enum': ['snooze', 'channel_preferences'], 'type': 'string'}, 'description': 'Preference controls a recipient may customize for this topic'}, 'include_unsubscribe_header': {'type': 'boolean', 'description': 'Whether to include a list-unsubscribe header on emails for this topic'}}, 'additionalProperties': False}
create_preview_device_set
Create a named, reusable set of preview devices.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'device_ids'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'Human-readable name for the set'}, 'device_ids': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Device ids (pvd_...) from list_preview_devices. An id the catalog does not list is rejected.'}}, 'additionalProperties': False}
create_preview_run
Render a template's email on real email clients and capture screenshots. Pass exactly one of device_set_id or device_ids. Each run is billed to the workspace's previews add-on. The run starts PENDING, so poll get_preview_run for the results.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['template_id'], 'properties': {'data': {'type': 'object', 'description': 'Variables for the template, the same shape as the data a send would carry', 'additionalProperties': {}}, 'locale': {'type': 'string', 'description': 'Locale to render, e.g. "en-US"'}, 'device_ids': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Device ids (pvd_...) from list_preview_devices. An id the catalog does not list is rejected.'}, 'template_id': {'type': 'string', 'description': 'The notification template id (nt_...). It must be a Design Studio template with an email channel.'}, 'device_set_id': {'type': 'string', 'description': 'A saved device set id (pvs_...). Use the Courier Recommended set from list_preview_device_sets for a sensible default.'}, 'template_version': {'type': 'string', 'description': 'Which version renders: omit for the latest draft, "published" for the live version, or a publish such as "v002".'}}, 'additionalProperties': False}
create_provider
Create a new provider (integration) configuration. Once routing strategies or notification templates reference this config, credential or settings mistakes can affect live sends—confirm provider key and settings against list_provider_catalog before saving. The provider field must be a known Courier provider key.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['provider'], 'properties': {'alias': {'type': 'string', 'description': 'Short alias for referencing this provider'}, 'title': {'type': 'string', 'description': 'Display name for this provider configuration'}, 'provider': {'type': 'string', 'description': 'Provider key from the catalog (e.g. sendgrid, twilio, firebase-fcm)'}, 'settings': {'type': 'object', 'description': 'Provider-specific settings (API keys, credentials, etc.)', 'additionalProperties': {}}}, 'additionalProperties': False}
create_routing_strategy
Create a routing strategy defining how notifications are delivered across channels and providers.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'routing'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name for the routing strategy'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags for categorization'}, 'routing': {'type': 'object', 'required': ['method', 'channels'], 'properties': {'method': {'enum': ['all', 'single'], 'type': 'string', 'description': 'Deliver to all channels or stop after first success'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ordered list of channel names'}}, 'description': 'Routing tree defining channel selection method and order', 'additionalProperties': False}, 'channels': {'type': 'object', 'description': 'Per-channel delivery configuration', 'additionalProperties': {}}, 'providers': {'type': 'object', 'description': 'Per-provider delivery configuration', 'additionalProperties': {}}, 'description': {'type': 'string', 'description': 'Description of the routing strategy'}}, 'additionalProperties': False}
delete_audience
Delete an audience by its ID.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['audience_id'], 'properties': {'audience_id': {'type': 'string', 'description': 'The audience ID to delete'}}, 'additionalProperties': False}
delete_brand
Delete a brand by its ID.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'brand_id': {'type': 'string', 'description': 'The brand ID to delete'}}, 'additionalProperties': False}
delete_broadcast
Delete a broadcast.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id'], 'properties': {'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}}, 'additionalProperties': False}
delete_list
Delete a list by its ID.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'The list ID'}}, 'additionalProperties': False}
delete_profile
Delete a user profile permanently.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID to delete'}}, 'additionalProperties': False}
delete_provider
Delete a provider configuration. Returns 409 if the provider is still referenced by routing or notifications.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['provider_id'], 'properties': {'provider_id': {'type': 'string', 'description': 'The provider configuration ID to delete'}}, 'additionalProperties': False}
delete_tenant
Delete a tenant by its ID.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id'], 'properties': {'tenant_id': {'type': 'string', 'description': 'The tenant ID to delete'}}, 'additionalProperties': False}
delete_tenant_preference
Remove default notification preference for a topic from a tenant.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'topic_id'], 'properties': {'topic_id': {'type': 'string', 'description': 'The subscription topic ID'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}}, 'additionalProperties': False}
delete_tenant_template
Delete a tenant notification template. Returns 204 on success, 404 if the template does not exist for this tenant.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'template_id'], 'properties': {'tenant_id': {'type': 'string', 'description': 'The tenant ID that owns the template'}, 'template_id': {'type': 'string', 'description': 'The notification template ID to delete'}}, 'additionalProperties': False}
delete_user_list_subscriptions
Delete all list subscriptions for a user.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
delete_user_preference_topic
Delete a user's preference for a specific subscription topic, reverting it to the topic's default status.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'topic_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID'}, 'topic_id': {'type': 'string', 'description': 'The subscription topic ID'}}, 'additionalProperties': False}
delete_user_token
Delete a specific push token for a user.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'token'], 'properties': {'token': {'type': 'string', 'description': 'The token identifier to delete'}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
duplicate_broadcast
Copy a broadcast into a new draft. The original is left unchanged.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id'], 'properties': {'broadcast_id': {'type': 'string', 'description': 'The broadcast to copy'}}, 'additionalProperties': False}
generate_jwt_for_user
Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.).
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'scopes': {'type': 'array', 'items': {'type': 'string'}, 'default': ['write:user-tokens', 'inbox:read:messages', 'inbox:write:events', 'read:preferences', 'write:preferences', 'read:brands'], 'description': 'Permission scopes for the token'}, 'user_id': {'type': 'string', 'description': 'The user ID to scope the token to'}, 'expires_in': {'type': 'string', 'default': '1h', 'description': 'Token expiry duration (e.g. "1h", "2 days")'}}, 'additionalProperties': False}
get_audience
Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule, not a stored member list. Use list_audience_members for who currently matches.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['audience_id'], 'properties': {'audience_id': {'type': 'string', 'description': 'The audience ID'}}, 'additionalProperties': False}
get_audit_event
Get a specific audit event by its ID.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['audit_event_id'], 'properties': {'audit_event_id': {'type': 'string', 'description': 'The audit event ID'}}, 'additionalProperties': False}
get_brand
Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'brand_id': {'type': 'string', 'description': 'The brand ID'}}, 'additionalProperties': False}
get_broadcast
Get a broadcast by id, including its channel and send or schedule state.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id'], 'properties': {'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}}, 'additionalProperties': False}
get_broadcast_content
Get a broadcast's Elemental content.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id'], 'properties': {'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}}, 'additionalProperties': False}
get_bulk_job
Get the status of a bulk job.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'The bulk job ID'}}, 'additionalProperties': False}
get_journey
Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['journey_id'], 'properties': {'version': {'type': 'string', 'description': 'Version to retrieve: "draft", "published" (default), or a version string like "v001"'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
get_journey_run
Get one journey run by id: its journey, status, and timestamps.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['run_id'], 'properties': {'run_id': {'type': 'string', 'description': 'The journey run id'}}, 'additionalProperties': False}
get_journey_template
Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published). Defaults to published.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id'], 'properties': {'version': {'type': 'string', 'description': 'Version to retrieve: "draft", "published" (default), or "vN"'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
get_journey_template_content
Fetch the elemental content of a journey-scoped notification template. Pass version=draft for the working draft, or vN for a historical version. Defaults to published.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id'], 'properties': {'version': {'type': 'string', 'description': 'Version to retrieve: "draft", "published" (default), or a version string like "v001"'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
get_list
Get one list by its ID, including its name and current state.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'The list ID'}}, 'additionalProperties': False}
get_list_subscribers
List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send reached them.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id'], 'properties': {'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'list_id': {'type': 'string', 'description': 'The list ID'}}, 'additionalProperties': False}
get_message
Get the full details and status of a single message by its ID.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message_id'], 'properties': {'message_id': {'type': 'string', 'description': 'The message ID to retrieve'}}, 'additionalProperties': False}
get_message_content
Get the rendered content (HTML, text, subject) of a previously sent message.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message_id'], 'properties': {'message_id': {'type': 'string', 'description': 'The message ID'}}, 'additionalProperties': False}
get_message_history
Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.).
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message_id'], 'properties': {'type': {'type': 'string', 'description': 'Filter by event type'}, 'message_id': {'type': 'string', 'description': 'The message ID'}}, 'additionalProperties': False}
get_notification
Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id'], 'properties': {'version': {'type': 'string', 'description': 'Version to retrieve: "draft", "published" (default â\x80\x94 omit this to get it), or a version string like "v001"'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
get_notification_content
Get the published content blocks of a notification template.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id'], 'properties': {'notification_id': {'type': 'string', 'description': 'The notification template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
get_notification_draft_content
Get the draft (unpublished) content blocks of a notification template.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id'], 'properties': {'notification_id': {'type': 'string', 'description': 'The notification template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
get_notification_metrics
Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked, errors and undeliverable, per provider and channel, in time buckets. Choosing the window — supply EITHER `lookback` OR `start` and `end` together, NEVER both. Supplying both is rejected. For a relative window like 'the last week', `lookback` alone is the whole answer: do not also pin `start` and `end`. Default is the last 30 days by day. Fine granularities cover shorter windows: HOUR spans at most 7 days and DAY at most 90. How far back a workspace may look also depends on its plan; a request reaching further back is refused with a payment error, which means the plan does not cover that window, NOT that there is no data. A coarser granularity can reach further back than a fine one. Reading the numbers correctly: - The first four counters are NESTED, not separate groups. Every delivered message is also counted in sent, every opened one in delivered, every clicked one in opened. So sent >= delivered >= opened >= clicked always. Report rates (delivered/sent) or the counters themselves. Do NOT add them together — the total is meaningless. And sent minus delivered is NOT a failure count; it is only 'did not reach the delivered stage', for any reason. - errors and undeliverable are counted separately and OVERLAP the funnel: a message that failed on one provider and succeeded on a retry appears in both errors and sent. They are not a remainder and do not complete a total. - Every counter is a count of distinct MESSAGES, not of events. A message that errored three times counts once in errors. - A bucket's `data` array holds one entry per provider and channel. To get a bucket total, add up the entries in that array — that is the only sum that means anything here. Note that rows for Courier's own built-in email sender are excluded, so these entries can add up to less than the workspace's true volume. What the buckets mean: - A message is counted in the bucket it was ENQUEUED in, not when the event happened. An open today of a message sent last Tuesday is counted in last Tuesday's bucket. So a past bucket can still change: yesterday's `opened` may be higher when you ask again tomorrow. - Results are cached for up to an hour and the pipeline adds its own lag, so a message sent minutes ago is expected NOT to appear yet. Never tell a user a just-sent message is missing; say the data has not caught up. - Read the window off the response's `start` and `end`, not off what you asked for. The API widens the window to whole buckets and returns the boundaries it actually used. - Quiet buckets are returned with an empty `data` array, so the series has no gaps. - An unknown template id returns an all-empty series rather than an error, and messages sent without a template never appear here at all. An empty result is not proof a template is unused — check that the id is right before concluding anything from it. - Because of that, a NOT FOUND / 404 error is never about the template id. It means the metrics endpoint itself could not be reached, which is an infrastructure or configuration problem on Courier's side. Say that the metrics service is unreachable and that someone should be told; do NOT tell the user to check or correct their template id, which sends them to fix something that was never wrong.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id'], 'properties': {'end': {'type': 'string', 'maxLength': 64, 'description': 'Window end, ISO 8601 with offset. Requires start. Must not be combined with lookback.'}, 'start': {'type': 'string', 'maxLength': 64, 'description': 'Inclusive window start, ISO 8601 with offset (2026-04-01T00:00:00Z). Requires end. Must not be combined with lookback.'}, 'lookback': {'type': 'string', 'maxLength': 32, 'description': 'Window length counted back from now, as an ISO 8601 duration (P30D, P12W, PT12H). Defaults to P30D. Must not be combined with start/end.'}, 'granularity': {'enum': ['HOUR', 'DAY', 'WEEK', 'MONTH'], 'type': 'string', 'default': 'DAY', 'description': 'Bucket size. HOUR covers at most 7 days, DAY at most 90. Defaults to DAY.'}, 'notification_id': {'type': 'string', 'minLength': 1, 'description': 'The notification template ID to report on (no commas or whitespace)'}}, 'additionalProperties': False}
get_preference_section
Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section with its topics in one call.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id'], 'properties': {'section_id': {'type': 'string', 'description': 'Id of the preference section'}}, 'additionalProperties': False}
get_preference_topic
Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to a different section — so a 404 here can mean the pairing is wrong rather than the topic missing.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id', 'topic_id'], 'properties': {'topic_id': {'type': 'string', 'description': 'Id of the subscription preference topic'}, 'section_id': {'type': 'string', 'description': 'Id of the preference section'}}, 'additionalProperties': False}
get_preview_device_set
Get a preview device set by id.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['device_set_id'], 'properties': {'device_set_id': {'type': 'string', 'description': 'The device set id (pvs_...)'}}, 'additionalProperties': False}
get_preview_run
Get a preview run with its per-device results and screenshot URLs. Poll until status is COMPLETED or FAILED. The URLs are short-lived and re-signed on every read, so fetch them rather than storing them.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['template_id', 'preview_run_id'], 'properties': {'template_id': {'type': 'string', 'description': 'The notification template id (nt_...) the run previewed'}, 'preview_run_id': {'type': 'string', 'description': 'The preview run id (pvr_...)'}}, 'additionalProperties': False}
get_provider
Fetch a single provider configuration by ID.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['provider_id'], 'properties': {'provider_id': {'type': 'string', 'description': 'The provider configuration ID'}}, 'additionalProperties': False}
get_routing_strategy
Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['routing_strategy_id'], 'properties': {'routing_strategy_id': {'type': 'string', 'description': 'The routing strategy ID (rs_ prefix)'}}, 'additionalProperties': False}
get_tenant
Get a tenant by its ID.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id'], 'properties': {'tenant_id': {'type': 'string', 'description': 'The tenant ID'}}, 'additionalProperties': False}
get_tenant_template
Get a tenant notification template association by template ID.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'template_id'], 'properties': {'tenant_id': {'type': 'string', 'description': 'The tenant ID'}, 'template_id': {'type': 'string', 'description': 'The template ID'}}, 'additionalProperties': False}
get_tenant_template_version
Get a specific version of a tenant notification template (e.g. latest, published, or v1).
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'template_id', 'version'], 'properties': {'version': {'type': 'string', 'description': 'Version identifier (latest, published, or v-prefixed)'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}, 'template_id': {'type': 'string', 'description': 'The template ID'}}, 'additionalProperties': False}
get_translation
Get a translation for a specific locale (e.g. "en_US", "fr_FR").
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['locale'], 'properties': {'domain': {'type': 'string', 'default': 'default', 'description': 'Translation domain (only "default" is supported currently)'}, 'locale': {'type': 'string', 'description': 'Locale code (e.g. en_US, fr_FR)'}}, 'additionalProperties': False}
get_user_list_subscriptions
List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reached them, and its absence rules that path out.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
get_user_preferences
Get a user's notification preferences (subscriptions, opt-outs, channel preferences).
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID'}, 'tenant_id': {'type': 'string', 'description': "Omit this to get the user's workspace-level preferences â\x80\x94 that answers most preference questions. Only pass it when you need the tenant-scoped overrides for one specific tenant instead."}}, 'additionalProperties': False}
get_user_preference_topic
Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question; get_user_preferences returns all of them at once.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'topic_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID'}, 'topic_id': {'type': 'string', 'description': 'The subscription topic ID'}, 'tenant_id': {'type': 'string', 'description': "Omit this for the user's workspace-level choice, which answers most questions. Only pass it when you need this topic as scoped to one specific tenant."}}, 'additionalProperties': False}
get_user_profile_by_id
Get a user profile by their ID. Returns profile data including email, phone, and custom properties.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID to look up'}}, 'additionalProperties': False}
get_user_push_token
Get a specific push/device token for a user.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'token'], 'properties': {'token': {'type': 'string', 'description': 'The token identifier'}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
invoke_ad_hoc_automation
Invoke an ad-hoc automation with inline steps. Valid step actions: send, send-list, delay, cancel, update-profile, invoke, fetch-data. To cancel a previously started automation, use the cancel_automation tool instead.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['automation'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'brand': {'type': 'string'}, 'profile': {'type': 'object', 'additionalProperties': {}}, 'template': {'type': 'string'}, 'recipient': {'type': 'string'}, 'automation': {'type': 'object', 'required': ['steps'], 'properties': {'steps': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['action'], 'properties': {'if': {'type': 'string', 'description': 'Condition expression'}, 'data': {'type': 'object', 'additionalProperties': {}}, 'brand': {'type': 'string'}, 'action': {'type': 'string', 'const': 'send'}, 'profile': {'type': 'object', 'additionalProperties': {}}, 'template': {'type': 'string', 'description': 'Notification template ID or key'}, 'recipient': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['action', 'list'], 'properties': {'if': {'type': 'string'}, 'data': {'type': 'object', 'additionalProperties': {}}, 'list': {'type': 'string', 'description': 'List ID to send to'}, 'brand': {'type': 'string'}, 'action': {'type': 'string', 'const': 'send-list'}, 'template': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['action'], 'properties': {'if': {'type': 'string'}, 'until': {'type': 'string', 'description': 'ISO 8601 timestamp to wait until'}, 'action': {'type': 'string', 'const': 'delay'}, 'duration': {'type': 'string', 'description': 'ISO 8601 duration (e.g. "PT1H" for 1 hour)'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['action', 'cancelation_token'], 'properties': {'if': {'type': 'string'}, 'action': {'type': 'string', 'const': 'cancel'}, 'cancelation_token': {'type': 'string', 'description': 'The token set when the original automation was invoked (single "l" spelling)'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['action'], 'properties': {'if': {'type': 'string'}, 'merge': {'enum': ['none', 'overwrite', 'soft-merge', 'replace'], 'type': 'string'}, 'action': {'type': 'string', 'const': 'update-profile'}, 'profile': {'type': 'object', 'additionalProperties': {}}, 'recipient_id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['action', 'template'], 'properties': {'if': {'type': 'string'}, 'action': {'type': 'string', 'const': 'invoke'}, 'template': {'type': 'string', 'description': 'Automation template ID to invoke'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['action', 'webhook'], 'properties': {'if': {'type': 'string'}, 'action': {'type': 'string', 'const': 'fetch-data'}, 'webhook': {'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string'}, 'body': {'type': 'object', 'additionalProperties': {}}, 'method': {'enum': ['GET', 'POST', 'PUT', 'PATCH'], 'type': 'string'}, 'headers': {'type': 'object', 'additionalProperties': {'type': 'string'}}}, 'description': 'HTTP request configuration', 'additionalProperties': False}, 'merge_strategy': {'enum': ['replace', 'overwrite', 'soft-merge'], 'type': 'string'}}, 'additionalProperties': False}]}, 'description': 'Ordered array of automation steps'}, 'cancelation_token': {'type': 'string', 'description': 'Token for cancelling this automation later (single "l" spelling)'}}, 'description': 'The automation definition with typed steps', 'additionalProperties': False}}, 'additionalProperties': False}
invoke_automation_template
Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: "auto-onboarding", recipient: "user-123", data: { plan: "pro" } }.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['template_id', 'recipient'], 'properties': {'data': {'type': 'object', 'description': 'Data to pass to the automation', 'additionalProperties': {}}, 'brand': {'type': 'string', 'description': 'Brand ID override'}, 'profile': {'type': 'object', 'description': 'Profile data for the recipient', 'additionalProperties': {}}, 'template': {'type': 'string', 'description': 'Notification template override'}, 'recipient': {'type': 'string', 'description': 'Recipient user ID'}, 'template_id': {'type': 'string', 'description': 'The automation template ID'}}, 'additionalProperties': False}
invoke_journey
Invoke a journey run from a journey template. template_id refers to an existing journey template in the workspace. Example: { template_id: "j-onboarding", user_id: "user-123", data: { plan: "pro" } }.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['template_id'], 'properties': {'data': {'type': 'object', 'description': 'Data payload passed to the journey for conditions and template variables', 'additionalProperties': {}}, 'profile': {'type': 'object', 'description': 'Profile data for the user (email, phone, custom fields)', 'additionalProperties': {}}, 'user_id': {'type': 'string', 'description': 'Recipient user ID. Can also be resolved from profile or data.'}, 'template_id': {'type': 'string', 'description': 'The journey template ID'}}, 'additionalProperties': False}
list_audience_members
List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move someone in or out without the audience itself being edited.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['audience_id'], 'properties': {'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'audience_id': {'type': 'string', 'description': 'The audience ID'}}, 'additionalProperties': False}
list_audiences
List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers "who can I target" and gives you the audience IDs that journey audience triggers and send requests refer to.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}}, 'additionalProperties': False}
list_audit_events
List audit events in the workspace. Useful for tracking API usage and changes.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': 'Pagination cursor'}}, 'additionalProperties': False}
list_automation_runs
List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps with list_automation_run_steps. Journey runs are listed by list_journey_runs instead.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Runs per page, 1 to 50. Defaults to 20.'}, 'cursor': {'type': 'string', 'description': 'next_cursor from a previous response'}, 'status': {'type': 'string', 'description': 'Comma-separated run statuses to filter on, e.g. PROCESSED,ERROR'}, 'end_date': {'type': 'string', 'description': 'Inclusive upper bound on created_at, ISO 8601 date or timestamp'}, 'start_date': {'type': 'string', 'description': 'Inclusive lower bound on created_at, ISO 8601 date or timestamp'}, 'template_id': {'type': 'string', 'description': 'Comma-separated automation template ids to filter on'}}, 'additionalProperties': False}
list_automation_run_steps
List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['run_id'], 'properties': {'run_id': {'type': 'string', 'description': 'The automation run id'}}, 'additionalProperties': False}
list_automations
List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers "what automations already exist here" — this only reads the catalog, it never runs one.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'version': {'enum': ['published', 'draft'], 'type': 'string', 'description': 'Return only templates in this state. Omit to return every automation template regardless of state.'}}, 'additionalProperties': False}
list_brands
List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a template's brand reference points at.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}}, 'additionalProperties': False}
list_broadcasts
List broadcasts in the workspace.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'description': 'Max broadcasts per page'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous response'}}, 'additionalProperties': False}
list_bulk_users
List the users in a bulk job.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'cursor': {'type': 'string', 'description': 'Pagination cursor'}, 'job_id': {'type': 'string', 'description': 'The bulk job ID'}}, 'additionalProperties': False}
list_digest_instances
List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waiting to go out and answers why a digest has not arrived yet — it is still accumulating, or it has nothing in it.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schedule_id'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum instances to return. Defaults to 20; the API caps this at 100.'}, 'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'schedule_id': {'type': 'string', 'description': 'The digest schedule id, in the form "sch/{uuid}"'}}, 'additionalProperties': False}
list_journey_runs
List journey runs, newest first. Filter by journey, status, or a created_at window to find a run that stalled or errored, then read its steps with list_journey_run_steps.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Runs per page, 1 to 50. Defaults to 20.'}, 'cursor': {'type': 'string', 'description': 'next_cursor from a previous response'}, 'status': {'type': 'string', 'description': 'Comma-separated run statuses to filter on, e.g. PROCESSED,ERROR'}, 'end_date': {'type': 'string', 'description': 'Inclusive upper bound on created_at, ISO 8601 date or timestamp'}, 'start_date': {'type': 'string', 'description': 'Inclusive lower bound on created_at, ISO 8601 date or timestamp'}, 'template_id': {'type': 'string', 'description': 'Comma-separated journey ids to filter on'}}, 'additionalProperties': False}
list_journey_run_steps
List the steps of a journey run in order, with each node and what happened at it. This is how to see where a run stopped and why.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['run_id'], 'properties': {'run_id': {'type': 'string', 'description': 'The journey run id'}}, 'additionalProperties': False}
list_journeys
List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft).
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': "If a response has no cursor, every journey already came back â\x80\x94 calling this again with the same arguments returns the same page, not new data. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'version': {'enum': ['published', 'draft'], 'type': 'string', 'description': "Filter by version state. Defaults to published, and the two are never combined in one call. If you don't know whether the journey you want is published or still a draft, calling this twice â\x80\x94 once per value â\x80\x94 is the correct way to check both, not a repeat."}}, 'additionalProperties': False}
list_journey_templates
List notification templates scoped to a journey. Journey-scoped templates can only be used by send nodes within the same journey. Call this to discover template IDs before wiring send nodes in replace_journey.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['journey_id'], 'properties': {'limit': {'type': 'number', 'description': 'Page size (1â\x80\x93100)'}, 'cursor': {'type': 'string', 'description': "Check the response's paging.more before calling again â\x80\x94 false means every template already came back, and calling again with the same arguments returns the same page, not new data. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'journey_id': {'type': 'string', 'description': 'The journey template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
list_journey_template_versions
List published versions of a journey-scoped notification template, ordered most recent first.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id'], 'properties': {'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
list_journey_versions
List published versions of a journey, ordered most recent first.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['journey_id'], 'properties': {'journey_id': {'type': 'string', 'description': 'The journey template ID'}}, 'additionalProperties': False}
list_lists
List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a rule. Optionally filter by an id pattern such as "example.list.*".
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'pattern': {'type': 'string', 'description': 'Filter by list id pattern, where * matches a segment â\x80\x94 for example "example.list.*". Omit to return every list.'}}, 'additionalProperties': False}
list_messages
List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tag': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by metadata tags'}, 'list': {'type': 'string', 'description': 'Filter by list ID'}, 'tags': {'type': 'string', 'description': 'Comma-delimited list of tags'}, 'event': {'type': 'string', 'description': 'Filter by event ID'}, 'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'status': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by status (e.g. DELIVERED, UNDELIVERABLE)'}, 'traceId': {'type': 'string', 'description': 'Filter by trace ID'}, 'archived': {'type': 'boolean', 'description': 'This NARROWS, it does not widen: true returns ONLY archived messages, excluding every active one. Omit it entirely to search active messages â\x80\x94 the default view for a normal delivery question. Setting it true is not the thorough or safe choice; it is a different, much smaller result set.'}, 'provider': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by provider key (e.g. sendgrid, twilio)'}, 'messageId': {'type': 'string', 'description': 'Filter by message ID'}, 'recipient': {'type': 'string', 'description': 'Filter by recipient user ID'}, 'tenant_id': {'type': 'string', 'description': 'Filter by tenant ID'}, 'notification': {'type': 'string', 'description': 'Filter by notification ID'}, 'enqueued_after': {'type': 'string', 'description': 'ISO 8601 timestamp; only return messages enqueued after this time'}}, 'additionalProperties': False}
list_notification_checks
List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the reason a template is stuck rather than live.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'submission_id'], 'properties': {'submission_id': {'type': 'string', 'description': 'The submission ID whose checks to list'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
list_notifications
List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tags': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'description': 'Only return templates carrying ALL of these tags, matched case-insensitively on the tag name shown in a template\'s tags field (e.g. ["onboarding"]). Omit to list every template.'}, 'cursor': {'type': 'string', 'description': "This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}}, 'additionalProperties': False}
list_notification_versions
List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the version string get_notification accepts.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum versions to return per page. Defaults to 10, which is also the maximum.'}, 'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
list_preference_logs
List preference changes, newest first. Each entry is one change a user made to one subscription topic, with the value before it where there was one. Pass user_id to answer "when did this user opt out, and of what?"; omit it to read the whole environment. Page with paging.cursor while paging.more is true.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page, 1 to 100. Defaults to 25.'}, 'since': {'type': 'string', 'description': 'Only changes at or after this time, as an ISO 8601 date or date-time. A date alone is the start of that day in UTC.'}, 'cursor': {'type': 'string', 'description': 'paging.cursor from a previous response'}, 'user_id': {'type': 'string', 'description': "Return only this user's changes. Omit to read every change in the environment."}, 'tenant_id': {'type': 'string', 'description': 'Narrow to the changes the user made in one tenant context. Requires user_id.'}}, 'additionalProperties': False}
list_preference_sections
List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt out of. This is what the workspace DEFINES — use get_user_preferences for what a particular person actually chose.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_preference_topics
List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_topic takes.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id'], 'properties': {'section_id': {'type': 'string', 'description': 'Id of the preference section'}}, 'additionalProperties': False}
list_preview_devices
List the email clients a preview can render on. Each device has a pvd_ id, a display name, and fields to filter by: category, app, platform, os, os_version and theme. Use these ids in a device set or in create_preview_run.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_preview_device_sets
List saved preview device sets. Every workspace has a read-only Courier Recommended set that runs can use without creating a set first.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_preview_runs
List a template's preview runs, newest first.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['template_id'], 'properties': {'limit': {'type': 'integer', 'description': 'Max runs per page', 'exclusiveMinimum': 0}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous response'}, 'template_id': {'type': 'string', 'description': 'The notification template id (nt_...)'}}, 'additionalProperties': False}
list_provider_catalog
List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace has configured — use list_providers for that. Answers "what can I connect Courier to" and "what do I need in order to set up this provider".
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'keys': {'type': 'string', 'description': 'Comma-separated provider keys to return, for example "sendgrid,twilio".'}, 'name': {'type': 'string', 'description': "Substring match against the provider's display name."}, 'channel': {'type': 'string', 'description': 'Return only providers serving this channel, for example email, sms or push.'}}, 'additionalProperties': False}
list_providers
List configured provider integrations for the workspace.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': "This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}}, 'additionalProperties': False}
list_routing_strategies
List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to find the rs_-prefixed strategy ID that get_routing_strategy needs for the full definition.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'number', 'description': 'Maximum strategies to return per page. Defaults to 20; the API caps this at 100.'}, 'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}}, 'additionalProperties': False}
list_routing_strategy_notifications
List notification templates associated with a routing strategy. Useful for checking linked templates before archiving.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['routing_strategy_id'], 'properties': {'limit': {'type': 'number', 'description': 'Max results per page (default 20, max 100)'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor'}, 'routing_strategy_id': {'type': 'string', 'description': 'The routing strategy ID (rs_ prefix)'}}, 'additionalProperties': False}
list_tenants
List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers "what tenants do I have" and gives you the tenant IDs get_tenant needs.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'number', 'description': 'Maximum tenants to return per page.'}, 'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}}, 'additionalProperties': False}
list_tenant_templates
List notification templates configured for a tenant.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id'], 'properties': {'limit': {'type': 'number', 'description': 'Max results per page (default 20, max 100)'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}}, 'additionalProperties': False}
list_tenant_users
List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning about.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum users to return per page. Defaults to 20; the API caps this at 100.'}, 'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}}, 'additionalProperties': False}
list_user_push_tokens
List all push/device tokens for a user.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
list_user_tenants
List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user at all before you go looking for them.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum tenants to return per page.'}, 'cursor': {'type': 'string', 'description': "For fetching the next page. This is an opaque token â\x80\x94 never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this entirely when you don't have one from a prior response of this exact call."}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
patch_profile
Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'patch'], 'properties': {'patch': {'type': 'array', 'items': {'type': 'object', 'required': ['op', 'path'], 'properties': {'op': {'type': 'string', 'description': 'Patch operation (add, remove, replace, move, copy, test)'}, 'path': {'type': 'string', 'description': 'JSON pointer path (e.g. /email, /phone_number)'}, 'value': {'description': 'Value for the operation (any JSON type)'}}, 'additionalProperties': False}, 'description': 'Array of JSON Patch operations to apply to the profile'}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
patch_user_token
Apply a JSON Patch (RFC 6902) to a specific push token.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'token', 'patch'], 'properties': {'patch': {'type': 'array', 'items': {'type': 'object', 'required': ['op', 'path'], 'properties': {'op': {'type': 'string', 'description': 'Patch operation (add, remove, replace, move, copy, test)'}, 'path': {'type': 'string', 'description': 'JSON pointer path'}, 'value': {'description': 'Value for the operation (any JSON type)'}}, 'additionalProperties': False}, 'description': 'Array of JSON Patch operations'}, 'token': {'type': 'string', 'description': 'The token identifier'}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
publish_journey
Publish the current draft of a journey, making it live and invokable. Pass version to roll back to a prior published version instead of publishing the draft. Returns 404 if there is no draft to publish.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['journey_id'], 'properties': {'version': {'type': 'string', 'description': 'Historical version to roll back to (e.g. "v001"). Omit to publish the current draft.'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID to publish'}}, 'additionalProperties': False}
publish_journey_template
Publish the current draft of a journey-scoped notification template. Optionally pass version to roll back to a prior version.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id'], 'properties': {'version': {'type': 'string', 'description': 'Version to roll back to (e.g. "v1"). Omit to publish current draft.'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
publish_notification
Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLISHED'. Publishes the current draft by default; pass version (e.g. 'v001') to publish a specific historical version. Returns 204 on success.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id'], 'properties': {'version': {'type': 'string', 'description': 'Historical version to publish (e.g. v001); omit to publish current draft'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID to publish'}}, 'additionalProperties': False}
publish_preferences
Publish the workspace's preferences page. Takes a snapshot of every section with its topics under a new published version, making the current state visible on the hosted preferences page.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
publish_tenant_template
Publish a version of a tenant notification template.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'template_id'], 'properties': {'version': {'type': 'string', 'description': 'Version to publish (e.g. v1, latest); defaults to latest if omitted'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}, 'template_id': {'type': 'string', 'description': 'The template ID'}}, 'additionalProperties': False}
put_broadcast_content
Replace a broadcast's content with an Elemental document. Saved as a draft unless state is PUBLISHED.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id', 'content'], 'properties': {'state': {'enum': ['DRAFT', 'PUBLISHED'], 'type': 'string', 'description': 'Template state. Defaults to DRAFT.'}, 'content': {'type': 'object', 'description': 'Elemental content, e.g. { "version": "2022-01-01", "elements": [...] }. version defaults when omitted.', 'additionalProperties': {}}, 'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}}, 'additionalProperties': False}
put_journey_template_content
Replace the elemental content of a journey-scoped notification template. Overwrites all elements. The template stays a draft; making it live is a separate step this tool cannot perform.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id', 'elements'], 'properties': {'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Template state after update. Must be "DRAFT". These tools cannot publish.'}, 'version': {'type': 'string', 'description': 'Content version string (e.g. "2022-01-01"). Server defaults when omitted.'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Array of elemental content nodes. Likely must be wrapped in a channel block, the same way create_journey_template\'s content requires â\x80\x94 not independently confirmed for this call, but they write the same field. Example: [{ type: "channel", channel: "email", elements: [{ type: "text", content: "Hello!" }] }].'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
put_journey_template_locale
Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The template stays a draft; making it live is a separate step this tool cannot perform.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id', 'locale_id', 'elements'], 'properties': {'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Template state after update. Must be "DRAFT". These tools cannot publish.'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Target element ID to override, from a prior get_journey_template or get_journey_template_content response. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': {}}, 'description': 'Array of element overrides with id and locale-specific content'}, 'locale_id': {'type': 'string', 'description': 'Locale identifier (e.g. es, fr, pt-BR)'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
put_notification_content
Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: elements: [{ type: "channel", channel: "email", elements: [{ type: "meta", title: "Hello" }, { type: "text", content: "Email body" }] }, { type: "channel", channel: "push", elements: [{ type: "meta", title: "Hello" }, { type: "text", content: "Push body" }] }, { type: "channel", channel: "inbox", elements: [{ type: "text", content: "Inbox plain text only" }] }]. The template stays a draft; making it live is a separate step this tool cannot perform.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'elements'], 'properties': {'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'version': {'type': 'string', 'description': 'Content version string (e.g. "2022-01-01"). Server defaults when omitted.'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Array of elemental content nodes'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID (nt_ prefix). Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
put_notification_element
Update a single element within a V2 notification template. The template stays a draft; making it live is a separate step this tool cannot perform.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'element_id', 'type'], 'properties': {'if': {'type': 'string', 'description': 'Conditional expression for element visibility'}, 'ref': {'type': 'string', 'description': 'Reference identifier'}, 'data': {'type': 'object', 'description': 'Element data payload', 'additionalProperties': {}}, 'loop': {'type': 'string', 'description': 'Loop expression for repeating elements'}, 'type': {'type': 'string', 'description': 'Element type (e.g. text, action, image, divider, meta)'}, 'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Channels this element applies to'}, 'element_id': {'type': 'string', 'description': 'The element ID to update, from a prior get_notification or get_notification_draft_content response. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID (nt_ prefix). Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
put_notification_locale
Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish locale: { notification_id: "nt_01abc", locale_id: "es", elements: [{ id: "elem_meta_1", title: "Restablecer contraseña" }, { id: "elem_text_1", content: "Haga clic en el enlace para restablecer su contraseña." }] }. The template stays a draft; making it live is a separate step this tool cannot perform.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'locale_id', 'elements'], 'properties': {'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Target element ID to override, from a prior get_notification or get_notification_draft_content response. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': {}}, 'description': 'Array of element overrides with id and locale-specific content'}, 'locale_id': {'type': 'string', 'description': 'Locale identifier (e.g. es, fr, pt-BR)'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID (nt_ prefix). Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
release_digest
Release a digest schedule early — send what users have collected so far now instead of waiting for the scheduled time. A 204 is also returned when the schedule has no in-progress instances to release.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schedule_id'], 'properties': {'schedule_id': {'type': 'string', 'description': 'The digest schedule id, in the form "sch/{uuid}"'}}, 'additionalProperties': False}
release_user_digest
Release one recipient's held digest for a topic now, instead of waiting for its schedule. Use it to preview a digest, or to let a user flush their own, without releasing everyone else on the schedule. There is no release-everyone form of this call; use release_digest with a schedule id for that.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id', 'topic_id', 'user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The recipient whose digest to release'}, 'topic_id': {'type': 'string', 'description': 'Id of the digest topic'}, 'tenant_id': {'type': 'string', 'description': "The recipient's tenant, when they were sent to as part of one"}, 'section_id': {'type': 'string', 'description': 'Id of the preference section the topic belongs to'}}, 'additionalProperties': False}
remove_all_user_tenants
Remove a user from all tenants.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
remove_user_from_tenant
Remove a user from a tenant.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'tenant_id'], 'properties': {'user_id': {'type': 'string', 'description': 'The user ID'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}}, 'additionalProperties': False}
rename_broadcast
Rename a broadcast. Content and channel are unchanged.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'The new name'}, 'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}}, 'additionalProperties': False}
replace_journey
Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. The journey stays a draft; making the change live is a separate step this tool cannot perform. This is where send, delay, branch and exit nodes are added, and send node template IDs must already be scoped to this journey. The result carries a "verification" object read back from the server after the write — check it every time. verified:true means what you asked for is what saved. verified:false names what did not: "fieldMismatches" for node fields that failed to land, "nodeCountMismatch" for a node dropped or added, and "unknownTemplateReferences" for a send node pointing at a template id this journey does not have — almost always a mistyped id, so re-copy it from the create_journey_template or get_journey response it came from. Fix the specific thing named and send the corrected document. Re-sending an identical call changes nothing, and every replace_journey overwrites the whole draft again. An "errorKind" of "unauthorized" means the write itself succeeded and only the read-back was refused: report that as unconfirmed, never as a failed write.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['journey_id', 'name', 'nodes'], 'properties': {'name': {'type': 'string', 'description': 'Journey display name'}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Complete array of journey nodes: the trigger first, a terminal exit last, and everything else between them. Use server-assigned node ids from get_journey â\x80\x94 do NOT invent new ids. Send node example: { type: "send", channel: "email", message: { template: "nt_journey_1" } } â\x80\x94 the template goes inside message, never at node level, and the id is a journey-scoped one returned by create_journey_template rather than a workspace template id. Copy that id character-for-character from the create_journey_template or get_journey response you got it from â\x80\x94 never retype or reconstruct it from memory, since a single dropped or altered character produces a different, non-existent id and the reference silently fails to resolve. channel must always be set to one of "email", "sms", "push", "inbox", "slack", or "msteams" on every send node â\x80\x94 do not omit it even though the field is optional. An unset channel makes Studio silently render the node as email: for sms, push, and inbox sends this means the wrong title, an Email Address field shown instead of the real recipient field, no provider picker, and a hard-blocked "+Create message" button, with nothing shown to warn the user. The stored recipient data is not lost and delivery is not affected â\x80\x94 this only breaks how the journey looks and works for a human editing it in Studio. Delay node example: { type: "delay", mode: "duration", duration: "PT1H" }. Branch node example: { type: "branch", paths: [{ conditions: ["data.plan", "is equal", "pro"], nodes: [] }], default: { nodes: [] } } â\x80\x94 paths and default are both required, and the key inside a path is "conditions", not "condition".'}, 'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'enabled': {'type': 'boolean', 'description': 'Whether the journey is active.'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID to update. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
replace_journey_template
Replace the draft of a journey-scoped notification template. Full document replacement. Call publish_journey_template afterwards to make it live.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'journey_id', 'notification'], 'properties': {'state': {'type': 'string', 'description': '"PUBLISHED" to publish immediately after replace'}, 'journey_id': {'type': 'string', 'description': 'The journey template ID that owns this notification'}, 'notification': {'type': 'object', 'required': ['name', 'tags', 'brand', 'subscription', 'content'], 'properties': {'name': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'brand': {'anyOf': [{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'content': {'type': 'object', 'required': ['version', 'elements'], 'properties': {'scope': {'enum': ['default', 'strict'], 'type': 'string'}, 'version': {'type': 'string', 'const': '2022-01-01'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'additionalProperties': False}, 'subscription': {'anyOf': [{'type': 'object', 'required': ['topic_id'], 'properties': {'topic_id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}]}}, 'description': 'Full notification template definition', 'additionalProperties': False}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
replace_notification
Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'notification'], 'properties': {'state': {'enum': ['DRAFT'], 'type': 'string', 'description': 'Must be "DRAFT". These tools cannot publish.'}, 'notification': {'type': 'object', 'required': ['name', 'tags', 'brand', 'subscription', 'routing', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Template display name'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tag list (use [] if none)'}, 'brand': {'anyOf': [{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Brand to apply, or null for none. Required on every call â\x80\x94 never omit this key, and never send {}.'}, 'content': {'type': 'object', 'required': ['version', 'elements'], 'properties': {'version': {'type': 'string', 'description': 'Content version identifier, e.g. "2022-01-01"'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Elemental content nodes'}}, 'description': 'Elemental content, required on every call. Example: { version: "2022-01-01", elements: [{ type: "text", content: "Hello!" }] }.', 'additionalProperties': False}, 'routing': {'anyOf': [{'type': 'object', 'required': ['strategy_id'], 'properties': {'strategy_id': {'type': 'string', 'description': "From a get_routing_strategy or list_notifications/get_notification response for THIS template's own intended strategy â\x80\x94 never an id borrowed from an unrelated template found while searching for one."}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Routing strategy reference, or null to use the workspace default. Required on every call â\x80\x94 never omit this key, and never send {}: the API rejects both an absent routing key and an empty object; if you have no strategy id, send null explicitly.'}, 'subscription': {'anyOf': [{'type': 'object', 'required': ['topic_id'], 'properties': {'topic_id': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Subscription topic reference, or null for none. Required on every call â\x80\x94 never omit this key, and never send {}.'}}, 'description': 'Full notification template payload', 'additionalProperties': False}, 'notification_id': {'type': 'string', 'description': 'The notification template ID to replace. Copy it exactly, character for character, from the response that returned it â\x80\x94 never retype it from memory or reconstruct it.'}}, 'additionalProperties': False}
replace_preference_section
Replace a preference section. Full document replacement; missing optional fields are cleared. Topics attached to the section are unaffected.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name for the section'}, 'section_id': {'type': 'string', 'description': 'Id of the preference section'}, 'routing_options': {'type': 'array', 'items': {'enum': ['direct_message', 'email', 'push', 'sms', 'webhook', 'inbox'], 'type': 'string'}, 'description': 'Default channels for the section. Omit to clear.'}, 'has_custom_routing': {'type': 'boolean', 'description': 'Whether the section defines custom routing for its topics'}}, 'additionalProperties': False}
replace_preference_topic
Replace a topic within a section. Full document replacement: omitted optional fields are cleared, except `digest`, which is left untouched when omitted. Pass `digest: null` to turn a digest off.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['section_id', 'topic_id', 'name', 'default_status'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name for the preference topic'}, 'digest': {'anyOf': [{'type': 'object', 'required': ['template_id', 'schedules'], 'properties': {'schedules': {'type': 'array', 'items': {'type': 'object', 'required': ['frequency'], 'properties': {'time': {'type': 'string', 'description': '24-hour local delivery time, HH:MM. Required for every frequency except instant.'}, 'disabled': {'type': 'boolean', 'description': 'Whether the schedule is disabled'}, 'timezone': {'type': 'string', 'description': 'IANA timezone for `time` and the day fields, e.g. America/New_York'}, 'frequency': {'enum': ['instant', 'daily', 'weekdays', 'weekly', 'custom_days', 'monthly'], 'type': 'string', 'description': 'How often the digest delivers. `instant` delivers each event immediately.'}, 'is_default': {'type': 'boolean', 'description': 'The schedule recipients are placed on when they have not chosen one'}, 'day_of_week': {'enum': ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'], 'type': 'string', 'description': 'Required when frequency is weekly'}, 'schedule_id': {'type': 'string', 'description': 'Id of an existing schedule to update. Omit to create a new one.'}, 'day_of_month': {'type': 'integer', 'description': 'Required when frequency is monthly'}, 'days_of_week': {'type': 'array', 'items': {'enum': ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'], 'type': 'string'}, 'description': 'Required when frequency is custom_days'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'The cadences this digest delivers on. At least one is required.'}, 'categories': {'type': 'array', 'items': {'type': 'object', 'required': ['category_key'], 'properties': {'limit': {'type': 'integer', 'description': 'How many collected events reach the rendered digest. Defaults to 10.'}, 'retain': {'enum': ['FIRST', 'LAST', 'HIGHEST', 'LOWEST', 'NONE'], 'type': 'string', 'description': 'Which collected events survive the limit'}, 'sort_key': {'type': 'string', 'description': 'Data key to rank events by. Required when retain is HIGHEST or LOWEST.'}, 'category_key': {'type': 'string', 'description': 'Key identifying the category within the digest'}}, 'additionalProperties': False}, 'description': 'Retention rules per category key. Defaults to a single `digest` category.'}, 'audience_id': {'type': 'string', 'description': 'Optional audience the digest is scoped to'}, 'template_id': {'type': 'string', 'description': 'The notification template that renders the digest'}, 'trigger_empty': {'type': 'boolean', 'description': 'Deliver the digest even when nothing was collected'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': "Batch this topic's notifications into a scheduled digest. Omit to leave any existing digest untouched; pass null to turn it off."}, 'topic_id': {'type': 'string', 'description': 'Id of the subscription preference topic'}, 'section_id': {'type': 'string', 'description': 'Id of the preference section'}, 'topic_data': {'type': 'object', 'description': 'Arbitrary metadata associated with the topic. Omit to clear.', 'additionalProperties': {}}, 'default_status': {'enum': ['OPTED_OUT', 'OPTED_IN', 'REQUIRED'], 'type': 'string', 'description': 'Default subscription status applied when a recipient has not set their own'}, 'routing_options': {'type': 'array', 'items': {'enum': ['direct_message', 'email', 'push', 'sms', 'webhook', 'inbox'], 'type': 'string'}, 'description': 'Default channels delivered for this topic. Omit to clear.'}, 'allowed_preferences': {'type': 'array', 'items': {'enum': ['snooze', 'channel_preferences'], 'type': 'string'}, 'description': 'Preference controls a recipient may customize. Omit to clear.'}, 'include_unsubscribe_header': {'type': 'boolean', 'description': 'Whether to include a list-unsubscribe header on emails for this topic'}}, 'additionalProperties': False}
replace_preview_device_set
Replace a preview device set's name and devices. This is a full replace, so send every device the set should keep. The Courier Recommended set cannot be changed.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['device_set_id', 'name', 'device_ids'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'The new name'}, 'device_ids': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Device ids (pvd_...) from list_preview_devices. An id the catalog does not list is rejected.'}, 'device_set_id': {'type': 'string', 'description': 'The device set id (pvs_...)'}}, 'additionalProperties': False}
replace_profile
Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'profile'], 'properties': {'profile': {'type': 'object', 'description': 'Complete profile data to replace with', 'additionalProperties': {}}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
replace_routing_strategy
Replace a routing strategy. Full document replacement; missing optional fields are cleared.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['routing_strategy_id', 'name', 'routing'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags. Omit to clear.'}, 'routing': {'type': 'object', 'required': ['method', 'channels'], 'properties': {'method': {'enum': ['all', 'single'], 'type': 'string', 'description': 'Deliver to all channels or stop after first success'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ordered list of channel names'}}, 'description': 'Routing tree', 'additionalProperties': False}, 'channels': {'type': 'object', 'description': 'Per-channel delivery configuration. Omit to clear.', 'additionalProperties': {}}, 'providers': {'type': 'object', 'description': 'Per-provider delivery configuration. Omit to clear.', 'additionalProperties': {}}, 'description': {'type': 'string', 'description': 'Description. Omit to clear.'}, 'routing_strategy_id': {'type': 'string', 'description': 'The routing strategy ID'}}, 'additionalProperties': False}
replace_tenant_template
Create or replace a tenant notification template (draft unless published is true).
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'template_id', 'content'], 'properties': {'title': {'type': 'string', 'description': 'Optional title merged into template content when provided'}, 'content': {'type': 'object', 'required': ['version', 'elements'], 'properties': {'scope': {'enum': ['default', 'strict'], 'type': 'string', 'description': '"strict" reads send data only under the `data.` prefix, e.g. {{data.name}}. Under "default", data is spread to the root and {{data.name}} renders empty'}, 'version': {'type': 'string', 'const': '2022-01-01', 'description': 'Elemental schema version'}, 'elements': {'type': 'array', 'items': {'anyOf': [{'anyOf': [{'type': 'object', 'required': ['type'], 'properties': {'if': {'type': 'string', 'description': 'Expression; the element renders only when truthy'}, 'ref': {'type': 'string', 'description': 'Reference name for this element'}, 'loop': {'type': 'string', 'description': 'Expression resolving to a list to repeat this element over'}, 'type': {'type': 'string', 'const': 'text'}, 'align': {'enum': ['center', 'left', 'right', 'full'], 'type': 'string'}, 'format': {'type': 'string', 'const': 'markdown', 'description': 'Set to "markdown" to render markdown'}, 'content': {'type': 'string', 'description': 'The text to render'}, 'locales': {'type': 'object', 'description': 'Overrides keyed by locale code', 'additionalProperties': {'type': 'object', 'properties': {'content': {'type': 'string'}}, 'additionalProperties': False}}, 'padding': {'type': 'string'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Restrict this element to these channels'}, 'font_size': {'type': 'string', 'description': 'CSS px size, e.g. "16px"'}, 'text_style': {'enum': ['text', 'h1', 'h2', 'h3', 'subtext'], 'type': 'string'}, 'border_size': {'type': 'string'}, 'line_height': {'type': 'string'}, 'border_color': {'type': 'string'}, 'background_color': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'meta'}, 'title': {'type': 'string', 'description': 'Message title (email subject, push title, etc.)'}, 'locales': {'type': 'object', 'description': 'Overrides keyed by locale code', 'additionalProperties': {'type': 'object', 'properties': {'title': {'type': 'string'}}, 'additionalProperties': False}}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'src'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'src': {'type': 'string', 'description': 'Image URL'}, 'href': {'type': 'string', 'description': 'Link the image points to'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'image'}, 'align': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/align'}, 'width': {'type': 'string', 'description': 'Rendered width, e.g. "300px"'}, 'locales': {'type': 'object', 'description': 'Overrides keyed by locale code', 'additionalProperties': {'type': 'object', 'properties': {'src': {'type': 'string'}, 'href': {'type': 'string'}}, 'additionalProperties': False}}, 'padding': {'type': 'string'}, 'alt_text': {'type': 'string'}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}, 'border_size': {'type': 'string'}, 'border_color': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'content', 'href'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'href': {'type': 'string', 'description': 'URL the action opens'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'action'}, 'align': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/align'}, 'style': {'enum': ['button', 'secondary', 'tertiary', 'link'], 'type': 'string', 'description': 'How prominent the action is. `button` (default) is filled, `secondary` and `tertiary` are the other two button styles, and `link` is inline text'}, 'content': {'type': 'string', 'description': 'Button or link label'}, 'locales': {'type': 'object', 'description': 'Overrides keyed by locale code', 'additionalProperties': {'type': 'object', 'properties': {'href': {'type': 'string'}, 'content': {'type': 'string'}}, 'additionalProperties': False}}, 'padding': {'type': 'string'}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}, 'action_id': {'type': 'string', 'description': 'Identifier reported with click tracking'}, 'font_size': {'type': 'string'}, 'border_size': {'type': 'string'}, 'border_radius': {'type': 'string'}, 'background_color': {'type': 'string', 'description': 'Fill for `button`; border and label color for `secondary`'}, 'disable_tracking': {'type': 'boolean', 'description': 'Skip click tracking for this href'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'divider'}, 'color': {'type': 'string'}, 'width': {'type': 'string'}, 'padding': {'type': 'string'}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}, 'border_width': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'content'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'quote'}, 'align': {'enum': ['center', 'left', 'right', 'full', 'justify'], 'type': 'string'}, 'content': {'type': 'string'}, 'locales': {'type': 'object', 'description': 'Overrides keyed by locale code', 'additionalProperties': {'type': 'object', 'properties': {'content': {'type': 'string'}}, 'additionalProperties': False}}, 'padding': {'type': 'string'}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}, 'font_size': {'type': 'string'}, 'text_style': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/text_style'}, 'border_size': {'type': 'string'}, 'line_height': {'type': 'string'}, 'border_color': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'content'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'html'}, 'content': {'type': 'string', 'description': 'Raw HTML, rendered as-is'}, 'locales': {'type': 'object', 'description': 'Overrides keyed by locale code', 'additionalProperties': {'type': 'object', 'properties': {'content': {'type': 'string'}}, 'additionalProperties': False}}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}}, 'additionalProperties': False}]}, {'type': 'object', 'required': ['type', 'channel'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'raw': {'type': 'object', 'description': 'Channel-native payload passed through untouched', 'additionalProperties': {}}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'channel'}, 'channel': {'type': 'string', 'description': 'Channel these elements target, e.g. "email", "push", "inbox"'}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}, 'elements': {'type': 'array', 'items': {'$ref': '#/properties/content/properties/elements/items'}, 'description': 'Elements rendered for this channel'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'elements'], 'properties': {'if': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if'}, 'ref': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref'}, 'loop': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop'}, 'type': {'type': 'string', 'const': 'group'}, 'channels': {'$ref': '#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels'}, 'elements': {'type': 'array', 'items': {'$ref': '#/properties/content/properties/elements/items'}, 'description': 'Grouped elements'}}, 'additionalProperties': False}]}, 'description': 'Elemental nodes. Channel and group containers nest to any depth'}}, 'description': 'Elemental content document. Example: { "version": "2022-01-01", "elements": [{ "type": "meta", "title": "Welcome" }, { "type": "text", "content": "Thanks for signing up." }] }', 'additionalProperties': False}, 'routing': {'type': 'object', 'required': ['method', 'channels'], 'properties': {'method': {'enum': ['all', 'single'], 'type': 'string', 'description': '"all" delivers to every channel; "single" stops after the first success'}, 'channels': {'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'object', 'required': ['channel'], 'properties': {'if': {'type': 'string'}, 'config': {'type': 'object', 'additionalProperties': {}}, 'method': {'enum': ['all', 'single'], 'type': 'string'}, 'channel': {'type': 'string', 'description': 'Channel name'}, 'providers': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['name'], 'properties': {'if': {'type': 'string'}, 'name': {'type': 'string', 'description': 'Provider name'}, 'config': {'type': 'object', 'additionalProperties': {}}, 'metadata': {'type': 'object', 'properties': {'utm': {'$ref': '#/properties/channels/additionalProperties/properties/metadata/properties/utm'}}, 'additionalProperties': False}}, 'additionalProperties': False}, {'type': 'string'}]}}}, 'additionalProperties': False}, {'$ref': '#/properties/routing/properties/channels/items/anyOf/1/properties/providers/items/anyOf/0'}]}, 'description': 'Channels to attempt, in order. Entries may be names or config objects'}}, 'description': 'Message routing tree. Example: { "method": "single", "channels": ["email", "sms"] }', 'additionalProperties': False}, 'channels': {'type': 'object', 'description': 'Per-channel delivery configuration, keyed by channel name. Example: { "email": { "providers": ["sendgrid"], "routing_method": "single" } }', 'additionalProperties': {'type': 'object', 'properties': {'if': {'type': 'string', 'description': 'Expression; the channel is used only when truthy'}, 'brand_id': {'type': 'string', 'description': 'Brand applied when delivering on this channel'}, 'metadata': {'type': 'object', 'properties': {'utm': {'type': 'object', 'properties': {'term': {'type': 'string'}, 'medium': {'type': 'string'}, 'source': {'type': 'string'}, 'content': {'type': 'string'}, 'campaign': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'override': {'type': 'object', 'description': 'Channel-specific overrides, e.g. email subject/from or push title/icon', 'additionalProperties': {}}, 'timeouts': {'type': 'object', 'properties': {'channel': {'type': 'number', 'description': 'Whole-channel timeout in ms'}, 'provider': {'type': 'number', 'description': 'Per-provider timeout in ms'}}, 'additionalProperties': False}, 'providers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Providers eligible for this channel, in preference order'}, 'routing_method': {'enum': ['all', 'single'], 'type': 'string', 'description': '"all" delivers via every provider; "single" stops after the first success'}}, 'additionalProperties': False}}, 'providers': {'type': 'object', 'description': 'Per-provider configuration, keyed by provider name. Example: { "sendgrid": { "override": { "from": "noreply@example.com" } } }', 'additionalProperties': {'type': 'object', 'properties': {'if': {'type': 'string', 'description': 'Expression; the provider is used only when truthy'}, 'override': {'type': 'object', 'description': 'Provider-native payload fields merged into the request', 'additionalProperties': {}}, 'timeouts': {'type': 'number', 'description': 'Provider timeout in ms'}}, 'additionalProperties': False}}, 'published': {'type': 'boolean', 'description': 'When true, publish immediately after save'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}, 'template_id': {'type': 'string', 'description': 'The template ID'}}, 'additionalProperties': False}
resend_message
Resend a previously sent message. Loads the original send request and enqueues a brand-new send to the same recipient with the same content, producing a new messageId; the original message is unchanged. Rate limited per message (429 on rapid repeats).
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message_id'], 'properties': {'message_id': {'type': 'string', 'description': 'The message ID of the original message to resend'}}, 'additionalProperties': False}
restore_list
Restore a previously deleted list.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'The list ID'}}, 'additionalProperties': False}
run_bulk_job
Run a bulk job, triggering delivery to all added users.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'The bulk job ID to run'}}, 'additionalProperties': False}
schedule_broadcast
Schedule a broadcast to send later to a list or audience. Cancel with cancel_broadcast_schedule.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id', 'recipient_type', 'recipient_id', 'scheduled_to'], 'properties': {'timezone': {'type': 'string', 'description': 'IANA timezone scheduled_to is expressed in, e.g. America/New_York'}, 'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}, 'recipient_id': {'type': 'string', 'description': 'The list or audience id'}, 'scheduled_to': {'type': 'string', 'description': 'Wall-clock time of the send with no timezone offset, e.g. 2026-10-01T09:00:00'}, 'recipient_type': {'enum': ['list', 'audience'], 'type': 'string', 'description': 'Whether to send to a list or an audience'}}, 'additionalProperties': False}
send_broadcast
Send a broadcast now to every member of a list or audience. This delivers real messages.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['broadcast_id', 'recipient_type', 'recipient_id'], 'properties': {'broadcast_id': {'type': 'string', 'description': 'The broadcast id'}, 'recipient_id': {'type': 'string', 'description': 'The list or audience id'}, 'recipient_type': {'enum': ['list', 'audience'], 'type': 'string', 'description': 'Whether to send to a list or an audience'}}, 'additionalProperties': False}
send_message
Send a message to a user using inline title and body content (no template). Optionally specify routing channels. API reference: https://www.courier.com/docs/api-reference/send/send-a-message.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'title', 'body'], 'properties': {'body': {'type': 'string', 'description': 'Message body'}, 'data': {'type': 'object', 'description': 'Key-value data to include with the message', 'additionalProperties': {}}, 'title': {'type': 'string', 'description': 'Message title'}, 'method': {'enum': ['all', 'single'], 'type': 'string', 'default': 'all', 'description': 'Routing method: deliver to all channels or stop after first success'}, 'user_id': {'type': 'string', 'description': 'The recipient user ID'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Channel names to route through (e.g. email, sms, push). Omit to use default routing.'}}, 'additionalProperties': False}
send_message_template
Send a message to a user using a published notification template. Only published templates can be sent; publishing a draft is a separate operation. Example: { user_id: "user-123", template: "nt_01abc123", data: { name: "Alex", resetUrl: "https://app.example.com/reset" } }.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'template'], 'properties': {'data': {'type': 'object', 'description': 'Key-value data for template variables', 'additionalProperties': {}}, 'method': {'enum': ['all', 'single'], 'type': 'string', 'default': 'all', 'description': 'Routing method'}, 'user_id': {'type': 'string', 'description': 'The recipient user ID'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Channel names to route through. Omit to use template routing config.'}, 'template': {'type': 'string', 'description': 'Template ID or notification slug'}}, 'additionalProperties': False}
send_message_to_list
Send a message to all subscribers of a list using inline title and body content. API reference: https://www.courier.com/docs/api-reference/send/send-a-message.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'title', 'body'], 'properties': {'body': {'type': 'string', 'description': 'Message body'}, 'data': {'type': 'object', 'description': 'Key-value data to include', 'additionalProperties': {}}, 'title': {'type': 'string', 'description': 'Message title'}, 'method': {'enum': ['all', 'single'], 'type': 'string', 'default': 'all', 'description': 'Routing method'}, 'list_id': {'type': 'string', 'description': 'The list ID to send to'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Channel names to route through. Omit to use default routing.'}}, 'additionalProperties': False}
send_message_to_list_template
Send a message to all subscribers of a list using a notification template.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'template'], 'properties': {'data': {'type': 'object', 'description': 'Key-value data for template variables', 'additionalProperties': {}}, 'method': {'enum': ['all', 'single'], 'type': 'string', 'default': 'all', 'description': 'Routing method'}, 'list_id': {'type': 'string', 'description': 'The list ID to send to'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Channel names to route through. Omit to use template routing config.'}, 'template': {'type': 'string', 'description': 'Template ID or notification slug'}}, 'additionalProperties': False}
subscribe_user_to_list
Subscribe a user to a list. Creates the list if it doesn't exist.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'user_id'], 'properties': {'list_id': {'type': 'string', 'description': 'The list ID'}, 'user_id': {'type': 'string', 'description': 'The user ID to subscribe'}, 'preferences': {'type': 'object', 'properties': {'categories': {'type': 'object', 'additionalProperties': {}}, 'notifications': {'type': 'object', 'additionalProperties': {}}}, 'description': 'Optional notification preferences', 'additionalProperties': False}}, 'additionalProperties': False}
subscribe_user_to_lists
Subscribe a user to one or more lists. Creates lists that do not exist.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'lists'], 'properties': {'lists': {'type': 'array', 'items': {'type': 'object', 'required': ['listId'], 'properties': {'listId': {'type': 'string', 'description': 'List ID to subscribe to'}, 'preferences': {'description': 'Optional notification preferences for this list'}}, 'additionalProperties': False}, 'description': 'Array of lists to subscribe to'}, 'user_id': {'type': 'string', 'description': 'The user ID'}}, 'additionalProperties': False}
trace_message
Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages). Returns each matching message with its event history, which carries the status reason when a message is undeliverable. Set include_output to also return the rendered content each provider received.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Max messages to trace for a trace_id. Defaults to 10.'}, 'trace_id': {'type': 'string', 'description': 'The metadata.trace_id set on the send. Mutually exclusive with message_id.'}, 'message_id': {'type': 'string', 'description': 'A message id, as returned by send. Mutually exclusive with trace_id.'}, 'include_output': {'type': 'boolean', 'description': 'Also return rendered content per provider. Off by default, since rendered email can be large.'}}, 'additionalProperties': False}
track_inbound_event
Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['event', 'messageId', 'properties'], 'properties': {'event': {'type': 'string', 'description': 'The event name (appears as trigger in Automation Trigger node)'}, 'userId': {'type': 'string', 'description': 'User ID associated with the event'}, 'messageId': {'type': 'string', 'description': 'Unique ID for deduplication (returns 409 if not unique)'}, 'properties': {'type': 'object', 'description': 'Event properties payload', 'additionalProperties': {}}}, 'additionalProperties': False}
unsubscribe_user_from_list
Unsubscribe a user from a list.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'user_id'], 'properties': {'list_id': {'type': 'string', 'description': 'The list ID'}, 'user_id': {'type': 'string', 'description': 'The user ID to unsubscribe'}}, 'additionalProperties': False}
update_audience
Create or update an audience with a filter definition.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['audience_id'], 'properties': {'name': {'type': 'string', 'description': 'Display name'}, 'filter': {'anyOf': [{'type': 'object', 'required': ['operator', 'path'], 'properties': {'path': {'type': 'string', 'description': 'Dot-notation path into the user profile, e.g. "title" or "location.city"'}, 'value': {'type': ['string', 'number', 'boolean'], 'description': 'Value to compare against. Omit for existence checks like "EXISTS"'}, 'operator': {'enum': ['ENDS_WITH', 'EQ', 'EXISTS', 'GT', 'GTE', 'INCLUDES', 'IS_AFTER', 'IS_BEFORE', 'LT', 'LTE', 'MEMBER_OF', 'NEQ', 'OMIT', 'STARTS_WITH'], 'type': 'string', 'description': 'Comparison to apply, e.g. "EQ", "INCLUDES", "IS_AFTER"'}}, 'description': 'A single condition evaluated against one user profile field', 'additionalProperties': False}, {'type': 'object', 'required': ['operator', 'filters'], 'properties': {'filters': {'type': 'array', 'items': {'$ref': '#/properties/filter'}, 'description': 'Conditions and/or nested groups to combine'}, 'operator': {'enum': ['AND', 'OR'], 'type': 'string', 'description': 'How the nested filters combine. The combinator lives on the group itself'}}, 'description': 'A group combining nested filters with AND/OR', 'additionalProperties': False}], 'description': 'Audience membership filter. Either a single condition ({ operator, path, value }) or a group ({ operator: "AND" | "OR", filters: [...] }) nesting to any depth. Example: { "operator": "AND", "filters": [{ "operator": "EQ", "path": "title", "value": "Engineer" }, { "operator": "INCLUDES", "path": "tags", "value": "beta" }] }'}, 'audience_id': {'type': 'string', 'description': 'The audience ID'}, 'description': {'type': 'string', 'description': 'Description'}}, 'additionalProperties': False}
update_brand
Replace an existing brand with new values.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'Brand display name'}, 'brand_id': {'type': 'string', 'description': 'The brand ID to update'}, 'settings': {'type': 'object', 'properties': {'email': {'type': 'object', 'additionalProperties': {}}, 'inapp': {'type': 'object', 'additionalProperties': {}}, 'colors': {'type': 'object', 'additionalProperties': {}}}, 'description': 'Brand settings (colors, email, inapp)', 'additionalProperties': False}, 'snippets': {'type': 'object', 'description': 'Brand snippets', 'additionalProperties': {}}}, 'additionalProperties': False}
update_notification_checks
Update check statuses for a notification submission.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notification_id', 'submission_id', 'checks'], 'properties': {'checks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'status', 'type'], 'properties': {'id': {'type': 'string', 'description': 'Check ID'}, 'type': {'type': 'string', 'const': 'custom', 'description': 'Check type'}, 'status': {'enum': ['RESOLVED', 'FAILED', 'PENDING'], 'type': 'string', 'description': 'Check status'}}, 'additionalProperties': False}, 'description': 'Checks to update'}, 'submission_id': {'type': 'string', 'description': 'The submission ID for the checks resource'}, 'notification_id': {'type': 'string', 'description': 'The notification template ID'}}, 'additionalProperties': False}
update_provider
Replace an existing provider configuration. Full replacement — retrieve current config with get_provider first; omitted optional fields are cleared. Changing API keys or settings affects live delivery if this integration is in use.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['provider_id', 'provider'], 'properties': {'alias': {'type': 'string', 'description': 'Short alias'}, 'title': {'type': 'string', 'description': 'Display name'}, 'provider': {'type': 'string', 'description': 'Provider key (must match existing; changing provider type is not supported)'}, 'settings': {'type': 'object', 'description': 'Provider-specific settings', 'additionalProperties': {}}, 'provider_id': {'type': 'string', 'description': 'The provider configuration ID'}}, 'additionalProperties': False}
update_tenant_preference
Set the default notification preference for a subscription topic on a tenant. This controls tenant-level defaults — it does NOT set per-user preferences (use the user preferences API for that). The topic_id must already exist as a subscription topic in the workspace; a 404 means the topic has not been created yet. Example: { tenant_id: "acme", topic_id: "marketing-updates", status: "OPTED_IN", has_custom_routing: true, custom_routing: ["email", "push"] }.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tenant_id', 'topic_id', 'status'], 'properties': {'status': {'enum': ['OPTED_IN', 'OPTED_OUT', 'REQUIRED'], 'type': 'string', 'description': 'Subscription status for the topic'}, 'topic_id': {'type': 'string', 'description': 'The subscription topic ID â\x80\x94 must already exist in the workspace. A 404 response means the topic does not exist; create it in the Preferences Editor first.'}, 'tenant_id': {'type': 'string', 'description': 'The tenant ID'}, 'custom_routing': {'type': 'array', 'items': {'enum': ['direct_message', 'email', 'push', 'sms', 'webhook', 'inbox'], 'type': 'string'}, 'description': 'Default channels when has_custom_routing is enabled'}, 'has_custom_routing': {'type': 'boolean', 'description': 'When true, use custom_routing instead of template defaults'}}, 'additionalProperties': False}
update_translation
Create or update a translation for a specific locale. API reference: https://www.courier.com/docs/api-reference/translations/update-translations-by-locale.
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['locale', 'body'], 'properties': {'body': {'type': 'string', 'description': 'Translation content (PO file format)'}, 'domain': {'type': 'string', 'default': 'default', 'description': 'Translation domain'}, 'locale': {'type': 'string', 'description': 'Locale code (e.g. en_US, fr_FR)'}}, 'additionalProperties': False}
update_user_preference_topic
Update a user's preference for a specific subscription topic (opt in, opt out, or set channel preferences).
멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['user_id', 'topic_id', 'status'], 'properties': {'status': {'enum': ['OPTED_IN', 'OPTED_OUT', 'REQUIRED'], 'type': 'string', 'description': 'Preference status'}, 'user_id': {'type': 'string', 'description': 'The user ID'}, 'topic_id': {'type': 'string', 'description': 'The subscription topic ID'}, 'tenant_id': {'type': 'string', 'description': 'Update the preference for this tenant context only'}, 'custom_routing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Custom channel routing order'}, 'digest_schedule_id': {'type': ['string', 'null'], 'description': "Put the user on one of the topic's digest schedules. Pass null to clear their choice and fall back to the default schedule."}, 'has_custom_routing': {'type': 'boolean', 'description': 'Whether custom channel routing is set'}}, 'additionalProperties': False}
추가됨
list_preference_logs
2026년 9월 29일 2:58 AM
변경됨
replace_tenant_template
2026년 9월 29일 2:58 AM
추가됨
list_automation_run_steps
2026년 9월 29일 2:58 AM
추가됨
list_automation_runs
2026년 9월 29일 2:58 AM
추가됨
get_preview_run
2026년 9월 27일 2:49 AM
추가됨
list_preview_runs
2026년 9월 27일 2:49 AM
추가됨
create_preview_run
2026년 9월 27일 2:49 AM
추가됨
archive_preview_device_set
2026년 9월 27일 2:49 AM
추가됨
replace_preview_device_set
2026년 9월 27일 2:49 AM
추가됨
get_preview_device_set
2026년 9월 27일 2:49 AM
추가됨
create_preview_device_set
2026년 9월 27일 2:49 AM
추가됨
list_preview_device_sets
2026년 9월 27일 2:49 AM
추가됨
list_preview_devices
2026년 9월 27일 2:49 AM
추가됨
duplicate_broadcast
2026년 9월 25일 2:58 AM
추가됨
cancel_broadcast_schedule
2026년 9월 25일 2:58 AM
추가됨
schedule_broadcast
2026년 9월 25일 2:58 AM
추가됨
send_broadcast
2026년 9월 25일 2:58 AM
추가됨
put_broadcast_content
2026년 9월 25일 2:58 AM
추가됨
get_broadcast_content
2026년 9월 25일 2:58 AM
추가됨
delete_broadcast
2026년 9월 25일 2:58 AM
추가됨
rename_broadcast
2026년 9월 25일 2:58 AM
추가됨
get_broadcast
2026년 9월 25일 2:58 AM
추가됨
create_broadcast
2026년 9월 25일 2:58 AM
추가됨
list_broadcasts
2026년 9월 25일 2:58 AM
추가됨
release_user_digest
2026년 9월 25일 2:58 AM
변경됨
replace_preference_topic
2026년 9월 25일 2:58 AM
변경됨
create_preference_topic
2026년 9월 25일 2:58 AM
추가됨
list_journey_run_steps
2026년 9월 25일 2:58 AM
추가됨
get_journey_run
2026년 9월 25일 2:58 AM
추가됨
list_journey_runs
2026년 9월 25일 2:58 AM