Download OpenAPI specification:
This is the API documentation for the Doxie API.
Initiate consent for a contact. Initiates a new consent if the contact is known or creates a new contact.
| tenant required | string Example: ts The tenant slug |
Initiate consent payload
| customer_id required | string The ID of the contact |
| consent_slug required | string The slug of the consent purpose |
| phone | string The phone number for the consent. Only one contact channel is allowed. |
string The email for the consent. Only one contact channel is allowed. |
{- "customer_id": "1234567890",
- "consent_slug": "marketing",
- "phone": "+491234567890",
- "email": null
}{- "success": true,
- "error_message": null,
- "process_uuid": "1234567890",
- "data": {
- "customer_id": "1234567890",
- "consent_slug": "marketing",
- "contact_channel": "+491234567890",
- "process_uuid": "1234567890"
}
}Revokes one or all consents for a contact.
| tenant required | string Example: ts The tenant slug |
Revoke consent payload
| customer_id required | string The ID of the contact |
| consent_slug | string The slug of the consent purpose |
| revoke_all | boolean Whether to revoke all consents for the contact or only the consent for the consent slug |
{- "customer_id": "1234567890",
- "consent_slug": "marketing",
- "revoke_all": false
}{- "success": true,
- "error_message": null,
- "data": {
- "revoked_consents": [
- {
- "customer_id": "1234567890",
- "consent_slug": "marketing",
- "contact_channel": "+491234567890",
- "process_uuid": "1234567890"
}
]
}
}Triggers all message templates (emails, SMS, RCS) configured for the given event in a single call. If the event has multiple templates, all of them are sent. Use this endpoint when you want to send transactional messages without creating a journey.
| tenant required | string Example: ts The tenant slug |
| event_slug required | string Example: welcome_email The event slug |
Email payload
| any_keys | string The needed payload for the event. The payload is free to choose. The parameters should fit the configured event parameters in the application. |
{- "any_keys": "any value"
}{- "success": true,
- "process_uuid": "9a5d8c73-fcb4-4a8a-9fd2-fbabb3c99838",
- "sent_email_templates": [
- {
- "template_name": "Willkommensmail",
- "success": true,
- "message_id": 1234,
- "error_message": "Error message"
}
], - "sent_sms_templates": [
- {
- "template_name": "Willkommenssms",
- "success": true,
- "message_id": 1234,
- "error_message": "Error message"
}
]
}Creates a pre-filled embedded journey (Bestellstrecke) for the recipient. Use this endpoint when a recipient should be directed into a pre-populated order or checkout flow. If you only want to send the event's message templates (emails, SMS, RCS), use POST /{tenant}/api/v1/send_mail/{event_slug} instead.
| tenant required | string Example: ts The tenant slug |
| event_slug required | string Example: event_slug The event slug |
Email payload
| any_keys | string The needed payload for the injection event. The payload is free to choose. The parameters should fit the configured event parameters in the application. |
{- "any_keys": "any value"
}{- "success": true,
- "error_message": null,
- "process_uuid": "9a5d8c73-fcb4-4a8a-9fd2-fbabb3c99838",
- "data": null
}Creates an inquiry for a survey response
| tenant required | string Example: ts The tenant slug |
| event_slug required | string Example: event_slug The event slug of the survey campaign |
Survey payload
string The email of the respondent, required if phone is not provided | |
| phone | string The phone number of the respondent, required if email is not provided |
| any_keys | string The needed payload for the survey event. The payload is free to choose. The parameters should fit the configured messaging event parameters in the application. |
{- "email": "test@example.com",
- "phone": "+491771234567",
- "any_keys": "any value"
}{- "success": true,
- "error_message": null,
- "process_uuid": "9a5d8c73-fcb4-4a8a-9fd2-fbabb3c99838",
- "data": null
}Creates a QR code for a QR code event.
| tenant required | string Example: ts The tenant slug |
| event_slug required | string Example: event_slug The event slug |
QR code payload
| any_keys | string Additional payload parameters for the QR code event. The payload is free to choose. The parameters should fit the configured event parameters (target_url, valid_until) in the application. |
{- "any_keys": "any value"
}{- "success": true,
- "error_message": "null",
- "process_uuid": "9a5d8c73-fcb4-4a8a-9fd2-fbabb3c99838",
- "data": {
- "uuid": "9a5d8c73-fcb4-4a8a-9fd2-fbabb3c99838",
- "valid_until": "2024-12-31T23:59:59Z",
}
}Notify the registered URL with details of a sent email or SMS
| process_id | string The UUID of the process |
| message_type | string Enum: "email" "sms" The type of message (email or sms) |
| message_id | string The ID of the message |
| recipient_specific_message_ids | Array of arrays The IDs of the recipient specific messages |
| recipient | string The recipient of the message |
| subject | string The subject of the message |
| text | string The text of the message |
| html | string The HTML of the message |
| original_brand_slug | string The slug of the brand |
| original_tenant_slug | string The slug of the tenant |
| original_event_slug | string The slug of the event |
| timestamp | string The timestamp of the message |
| original_payload | object The original payload sent for the event, that belongs to the sent message |
{- "process_id": "123e4567-e89b-12d3-a456-426614174000",
- "message_type": "email",
- "message_id": 1234567890,
- "recipient_specific_message_ids": [
- 1234567890,
- 1234567891
], - "recipient": "john.doe@example.com",
- "subject": "Hello, world!",
- "text": "Hello, world!",
- "html": "<p>Hello, world!</p>",
- "original_brand_slug": "ts",
- "original_tenant_slug": "ts",
- "original_event_slug": "concert",
- "timestamp": "2021-01-01T00:00:00Z",
- "original_payload": {
- "email": "john.doe@example.com",
- "event_slug": "concert",
- "phone": "0123456789"
}
}Notify the registered URL with details of a message status update
| process_id | string The UUID of the process |
| message_type | string Enum: "email" "sms" The type of message (email or sms) |
| message_id | string The ID of the message |
| recipient_specific_message_id | string The ID of the recipient specific message |
| recipient | string The recipient of the message |
| status | string The status of the message |
| timestamp | string The timestamp of the message |
| original_payload | object The original payload sent for the event, that belongs to the sent message |
{- "process_id": "123e4567-e89b-12d3-a456-426614174000",
- "message_type": "email",
- "message_id": 1234567890,
- "recipient_specific_message_id": 1234567890,
- "recipient": "john.doe@example.com",
- "status": "sent",
- "timestamp": "2021-01-01T00:00:00Z",
- "original_payload": {
- "email": "john.doe@example.com",
- "event_slug": "concert",
- "phone": "0123456789"
}
}Notify the registered URL with details of a link clicked
| process_id | string The UUID of the process |
| url | string The URL that was clicked |
| recipients | string The recipients who received the link and could have clicked it |
| original_tenant_slug | string The slug of the tenant |
| original_event_slug | string The slug of the event |
| timestamp | string The timestamp of the link clicked |
| original_payload | object The original payload sent for the event, that belongs to the clicked link |
{- "process_id": "123e4567-e89b-12d3-a456-426614174000",
- "recipients": "john.doe@example.com, jane.doe@example.com, 0123456789",
- "original_tenant_slug": "ts",
- "original_event_slug": "concert",
- "timestamp": "2021-01-01T00:00:00Z",
- "original_payload": {
- "email": "john.doe@example.com",
- "event_slug": "concert",
- "phone": "0123456789"
}
}Notify the registered URL with details of a DOI confirmation
| identifier | string The identifier of the DOI consent |
| timestamp | string The timestamp of the DOI confirmation |
| ipAddress | string The IP address which consented to the DOI |
{- "identifier": "123e4567",
- "timestamp": "2021-01-01T00:00:00Z",
- "ipAddress": "123.123.123.123"
}Notify the registered URL with details of a process cancellation
| process_uuid | string The UUID of the process |
| cancellation_timestamp | string The timestamp of the process cancellation |
| original_payload | object The original payload sent for the event, that belongs to the process (optional) |
{- "process_uuid": "123e4567-e89b-12d3-a456-426614174000",
- "cancellation_timestamp": "2021-01-01T00:00:00Z",
- "original_payload": {
- "email": "john.doe@example.com",
- "event_slug": "concert",
- "phone": "0123456789"
}
}Notify the registered URL when a QR code is scanned
| process_id | string The UUID of the process |
| target_url | string The target URL the QR code redirects to |
| valid_until | string or null <date-time> The expiration date of the QR code |
| qr_code_uuid | string The UUID of the QR code that was scanned |
| timestamp | string <date-time> The timestamp when the QR code was scanned and opened in the browser |
| status | string Enum: "active" "expired" The status of the QR code when it was scanned |
| original_payload | object or null The original payload sent for the event, that belongs to the scanned QR code |
{- "process_id": "123e4567-e89b-12d3-a456-426614174000",
- "valid_until": "2024-12-31T23:59:59Z",
- "qr_code_uuid": "123e4567-e89b-12d3-a456-426614174000",
- "timestamp": "2021-01-01T00:00:00Z",
- "status": "active",
- "original_payload": {
- "valid_until": "2024-12-31T23:59:59Z"
}
}Notify the registered URL when a RCS message is responded to. The process ID is the last process that was sent to the recipient.
| process_id | string The UUID of the process |
| message_id | string The ID of the RCS message that was (most likely) responded to |
| agent_id | string The agent ID of the RCS message that was (most likely) responded to |
| sender | string The sender of the response |
| timestamp | string <date-time> The timestamp when the RCS message was responded to |
| message_content | object The content of the RCS message that was responded to. It only includes one of the keys. |
| original_payload | object or null The original payload sent for the event, that belongs to the scanned QR code |
{- "process_id": "123e4567-e89b-12d3-a456-426614174000",
- "message_id": 1234567890,
- "agent_id": "doxie_agent",
- "sender": "491234567890",
- "timestamp": "2026-03-26T13:17:43+01:00",
- "message_content": {
- "text": "This is a test RCS message.",
- "suggestion_response": {
- "postback_data": "1234567890",
- "text": "This is a test suggestion response.",
- "type": "button"
}, - "user_file": {
- "thumbnail": {
- "mime_type": "image/jpeg",
- "file_size": 1000,
}, - "payload": {
- "mime_type": "image/jpeg",
- "file_size": 1000,
- "file_name": "test.jpg",
}
}, - "location": {
- "latitude": 48.137154,
- "longitude": 11.576124
}
}, - "original_payload": {
- "valid_until": "2024-12-31T23:59:59Z"
}
}General Admin API for foundational resources. OAuth2 bearer authentication only.
Setup options for foundational configuration:
List brands for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "brands": [
- {
- "id": 1,
- "name": "Example Brand",
- "slug": "example-brand",
- "possible_sender_emails": [
- "noreply@example.com"
], - "sender_phone_number": "+491234567890",
- "rcs_possible_senders": [
- "SenderName"
], - "pseudonymization_duration_of_sent_messages_in_days": 7,
- "storage_duration_of_sent_messages_in_days": 90,
- "mail_provider": "mailjet",
- "mailjet_sandbox_mode": true,
- "sms77_api_key": "********",
- "rcs_api_key": "********",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z",
- "mailjet_api_user": {
- "id": 1,
- "public_api_key": "mailjet-public-key",
- "private_api_key": "********"
}, - "ses_api_user": {
- "id": 1,
- "access_key_id": "AKIAIOSFODNN7EXAMPLE",
- "region": "eu-central-1",
- "secret_access_key": "********"
}, - "smtp_config": {
- "id": 1,
- "address": "smtp.example.com",
- "port": 587,
- "user_name": "smtp-user",
- "authentication": "plain",
- "enable_starttls_auto": true,
- "enable_ssl": false,
- "openssl_verify_mode": null,
- "domain": "example.com",
- "envelope_from": "noreply@example.com",
- "password": "********"
}, - "style": {
- "id": 1,
- "primary_color": "#111111",
- "secondary_color": "#222222",
- "light_accent_color": "#333333",
- "dark_accent_color": "#444444",
- "border_radius": "6px",
- "font_family": "Arial",
- "fallback_font_family": "sans-serif",
- "pages_font_family": "Poppins",
- "pages_font_family_path": "poppins",
- "pages_font_family_weight": [
- "400",
- "700"
], - "pages_headline_font_family": "Poppins",
- "pages_headline_font_family_path": "poppins",
- "pages_headline_font_family_weight": [
- "400",
- "700"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 1
}
}
}Create a brand for the given tenant. Requires write permission. Secret fields are masked in the response.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object (brand_input_schema) Brand attributes for create and update. Nested objects depend on |
{- "brand": {
- "name": "Example Brand",
- "slug": "example-brand",
- "sender_phone_number": "+491234567890",
- "possible_sender_emails": [
- "noreply@example.com"
], - "rcs_possible_senders": [
- "SenderName"
], - "pseudonymization_duration_of_sent_messages_in_days": 7,
- "storage_duration_of_sent_messages_in_days": 90,
- "mail_provider": "mailjet",
- "mailjet_sandbox_mode": true,
- "sms77_api_key": "1234567890",
- "rcs_api_key": "1234567890",
- "mailjet_api_user_attributes": {
- "public_api_key": "1234567890",
- "private_api_key": "1234567890"
}, - "ses_api_user_attributes": {
- "access_key_id": "1234567890",
- "secret_access_key": "1234567890",
- "region": "eu-central-1"
}, - "smtp_config_attributes": {
- "address": "smtp.example.com",
- "port": 587,
- "user_name": "smtp-user",
- "password": "1234567890",
- "authentication": "plain",
- "enable_starttls_auto": true,
- "enable_ssl": true,
- "openssl_verify_mode": "none",
- "domain": "example.com",
- "envelope_from": "string"
}, - "style_attributes": {
- "primary_color": "#111111",
- "secondary_color": "#222222",
- "light_accent_color": "#333333",
- "dark_accent_color": "#444444",
- "border_radius": "6px",
- "font_family": "Arial",
- "pages_font_family": "poppins",
- "pages_font_family_path": "poppins",
- "pages_headline_font_family": "poppins",
- "pages_headline_font_family_path": "poppins"
}
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "Example Brand",
- "slug": "example-brand",
- "possible_sender_emails": [
- "noreply@example.com"
], - "sender_phone_number": "+491234567890",
- "rcs_possible_senders": [
- "SenderName"
], - "pseudonymization_duration_of_sent_messages_in_days": 7,
- "storage_duration_of_sent_messages_in_days": 90,
- "mail_provider": "mailjet",
- "mailjet_sandbox_mode": true,
- "sms77_api_key": "********",
- "rcs_api_key": "********",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z",
- "mailjet_api_user": {
- "id": 1,
- "public_api_key": "mailjet-public-key",
- "private_api_key": "********"
}, - "ses_api_user": {
- "id": 1,
- "access_key_id": "AKIAIOSFODNN7EXAMPLE",
- "region": "eu-central-1",
- "secret_access_key": "********"
}, - "smtp_config": {
- "id": 1,
- "address": "smtp.example.com",
- "port": 587,
- "user_name": "smtp-user",
- "authentication": "plain",
- "enable_starttls_auto": true,
- "enable_ssl": false,
- "openssl_verify_mode": null,
- "domain": "example.com",
- "envelope_from": "noreply@example.com",
- "password": "********"
}, - "style": {
- "id": 1,
- "primary_color": "#111111",
- "secondary_color": "#222222",
- "light_accent_color": "#333333",
- "dark_accent_color": "#444444",
- "border_radius": "6px",
- "font_family": "Arial",
- "fallback_font_family": "sans-serif",
- "pages_font_family": "Poppins",
- "pages_font_family_path": "poppins",
- "pages_font_family_weight": [
- "400",
- "700"
], - "pages_headline_font_family": "Poppins",
- "pages_headline_font_family_path": "poppins",
- "pages_headline_font_family_weight": [
- "400",
- "700"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Returns a single brand for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The brand ID |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "Example Brand",
- "slug": "example-brand",
- "possible_sender_emails": [
- "noreply@example.com"
], - "sender_phone_number": "+491234567890",
- "rcs_possible_senders": [
- "SenderName"
], - "pseudonymization_duration_of_sent_messages_in_days": 7,
- "storage_duration_of_sent_messages_in_days": 90,
- "mail_provider": "mailjet",
- "mailjet_sandbox_mode": true,
- "sms77_api_key": "********",
- "rcs_api_key": "********",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z",
- "mailjet_api_user": {
- "id": 1,
- "public_api_key": "mailjet-public-key",
- "private_api_key": "********"
}, - "ses_api_user": {
- "id": 1,
- "access_key_id": "AKIAIOSFODNN7EXAMPLE",
- "region": "eu-central-1",
- "secret_access_key": "********"
}, - "smtp_config": {
- "id": 1,
- "address": "smtp.example.com",
- "port": 587,
- "user_name": "smtp-user",
- "authentication": "plain",
- "enable_starttls_auto": true,
- "enable_ssl": false,
- "openssl_verify_mode": null,
- "domain": "example.com",
- "envelope_from": "noreply@example.com",
- "password": "********"
}, - "style": {
- "id": 1,
- "primary_color": "#111111",
- "secondary_color": "#222222",
- "light_accent_color": "#333333",
- "dark_accent_color": "#444444",
- "border_radius": "6px",
- "font_family": "Arial",
- "fallback_font_family": "sans-serif",
- "pages_font_family": "Poppins",
- "pages_font_family_path": "poppins",
- "pages_font_family_weight": [
- "400",
- "700"
], - "pages_headline_font_family": "Poppins",
- "pages_headline_font_family_path": "poppins",
- "pages_headline_font_family_weight": [
- "400",
- "700"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Update a brand. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The brand ID |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object (brand_input_schema) Brand attributes for create and update. Nested objects depend on |
{- "brand": {
- "name": "Example Brand",
- "slug": "example-brand",
- "sender_phone_number": "+491234567890",
- "possible_sender_emails": [
- "noreply@example.com"
], - "rcs_possible_senders": [
- "SenderName"
], - "pseudonymization_duration_of_sent_messages_in_days": 7,
- "storage_duration_of_sent_messages_in_days": 90,
- "mail_provider": "mailjet",
- "mailjet_sandbox_mode": true,
- "sms77_api_key": "1234567890",
- "rcs_api_key": "1234567890",
- "mailjet_api_user_attributes": {
- "public_api_key": "1234567890",
- "private_api_key": "1234567890"
}, - "ses_api_user_attributes": {
- "access_key_id": "1234567890",
- "secret_access_key": "1234567890",
- "region": "eu-central-1"
}, - "smtp_config_attributes": {
- "address": "smtp.example.com",
- "port": 587,
- "user_name": "smtp-user",
- "password": "1234567890",
- "authentication": "plain",
- "enable_starttls_auto": true,
- "enable_ssl": true,
- "openssl_verify_mode": "none",
- "domain": "example.com",
- "envelope_from": "string"
}, - "style_attributes": {
- "primary_color": "#111111",
- "secondary_color": "#222222",
- "light_accent_color": "#333333",
- "dark_accent_color": "#444444",
- "border_radius": "6px",
- "font_family": "Arial",
- "pages_font_family": "poppins",
- "pages_font_family_path": "poppins",
- "pages_headline_font_family": "poppins",
- "pages_headline_font_family_path": "poppins"
}
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "Example Brand",
- "slug": "example-brand",
- "possible_sender_emails": [
- "noreply@example.com"
], - "sender_phone_number": "+491234567890",
- "rcs_possible_senders": [
- "SenderName"
], - "pseudonymization_duration_of_sent_messages_in_days": 7,
- "storage_duration_of_sent_messages_in_days": 90,
- "mail_provider": "mailjet",
- "mailjet_sandbox_mode": true,
- "sms77_api_key": "********",
- "rcs_api_key": "********",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z",
- "mailjet_api_user": {
- "id": 1,
- "public_api_key": "mailjet-public-key",
- "private_api_key": "********"
}, - "ses_api_user": {
- "id": 1,
- "access_key_id": "AKIAIOSFODNN7EXAMPLE",
- "region": "eu-central-1",
- "secret_access_key": "********"
}, - "smtp_config": {
- "id": 1,
- "address": "smtp.example.com",
- "port": 587,
- "user_name": "smtp-user",
- "authentication": "plain",
- "enable_starttls_auto": true,
- "enable_ssl": false,
- "openssl_verify_mode": null,
- "domain": "example.com",
- "envelope_from": "noreply@example.com",
- "password": "********"
}, - "style": {
- "id": 1,
- "primary_color": "#111111",
- "secondary_color": "#222222",
- "light_accent_color": "#333333",
- "dark_accent_color": "#444444",
- "border_radius": "6px",
- "font_family": "Arial",
- "fallback_font_family": "sans-serif",
- "pages_font_family": "Poppins",
- "pages_font_family_path": "poppins",
- "pages_font_family_weight": [
- "400",
- "700"
], - "pages_headline_font_family": "Poppins",
- "pages_headline_font_family_path": "poppins",
- "pages_headline_font_family_weight": [
- "400",
- "700"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Delete a brand. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The brand ID |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "name": "Example Brand",
- "slug": "example-brand",
- "possible_sender_emails": [
- "noreply@example.com"
], - "sender_phone_number": "+491234567890",
- "rcs_possible_senders": [
- "SenderName"
], - "pseudonymization_duration_of_sent_messages_in_days": 7,
- "storage_duration_of_sent_messages_in_days": 90,
- "mail_provider": "mailjet",
- "mailjet_sandbox_mode": true,
- "sms77_api_key": "********",
- "rcs_api_key": "********",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z",
- "mailjet_api_user": {
- "id": 1,
- "public_api_key": "mailjet-public-key",
- "private_api_key": "********"
}, - "ses_api_user": {
- "id": 1,
- "access_key_id": "AKIAIOSFODNN7EXAMPLE",
- "region": "eu-central-1",
- "secret_access_key": "********"
}, - "smtp_config": {
- "id": 1,
- "address": "smtp.example.com",
- "port": 587,
- "user_name": "smtp-user",
- "authentication": "plain",
- "enable_starttls_auto": true,
- "enable_ssl": false,
- "openssl_verify_mode": null,
- "domain": "example.com",
- "envelope_from": "noreply@example.com",
- "password": "********"
}, - "style": {
- "id": 1,
- "primary_color": "#111111",
- "secondary_color": "#222222",
- "light_accent_color": "#333333",
- "dark_accent_color": "#444444",
- "border_radius": "6px",
- "font_family": "Arial",
- "fallback_font_family": "sans-serif",
- "pages_font_family": "Poppins",
- "pages_font_family_path": "poppins",
- "pages_font_family_weight": [
- "400",
- "700"
], - "pages_headline_font_family": "Poppins",
- "pages_headline_font_family_path": "poppins",
- "pages_headline_font_family_weight": [
- "400",
- "700"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Returns whether Mailjet event webhooks are registered for the given brand and which event types are active. Requires read permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": true,
- "registered_event_types": [
- "sent",
- "open",
- "bounce",
- "spam",
- "blocked",
- "unsub"
], - "error_message": null
}
}Registers Mailjet event webhooks for the given brand. Requires read and write permissions for the tenant.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": true,
- "registered_event_types": [
- "sent",
- "open",
- "bounce",
- "spam",
- "blocked",
- "unsub"
], - "error_message": null
}
}Deletes all Mailjet event webhooks registered for the given brand. Requires read and write permissions for the tenant.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": false,
- "registered_event_types": [ ],
- "error_message": null
}
}Returns whether an RCS event webhook is registered for the given brand. Requires read permission for the tenant. RCS webhooks give information about the status of the RCS messages as well as allow to receive responses from the recipient.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": true
}
}Registers an RCS event webhook for the given brand. Requires read and write permissions for the tenant. RCS webhooks give information about the status of the RCS messages as well as allow to receive responses from the recipient.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": true
}
}Deletes the RCS event webhook registered for the given brand. Requires read and write permissions for the tenant.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": false
}
}Returns whether an SMS delivery report (DLR) webhook is registered for the given brand. Requires read permission for the tenant. SMS webhooks provide delivery status updates for SMS messages sent via seven.io.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": true
}
}Registers an SMS delivery report (DLR) webhook for the given brand. Requires read and write permissions for the tenant. SMS webhooks provide delivery status updates for SMS messages sent via seven.io.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": true
}
}Deletes the SMS delivery report (DLR) webhook registered for the given brand. Requires read and write permissions for the tenant.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "webhooks_present": false
}
}Runs the AWS SES configuration setup for the given brand. This creates or updates the SES configuration set, SNS topic, topic policy, SNS subscription, and event destination. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "setup_success": true
}
}Runs a live SMTP connection test for the given brand using its configured SMTP credentials. Returns whether the connection succeeded along with the connection settings used. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| brand_id required | string Example: 1 The ID of the brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "brand_id": 1,
- "connection_success": true,
- "settings": {
- "address": "smtp.example.com",
- "port": 587,
- "enable_ssl": false,
- "authentication": "plain",
- "enable_starttls_auto": true,
- "open_timeout": 10,
- "read_timeout": 10,
- "user_name": "smtp-user",
- "password": "[REDACTED]",
- "domain": "example.com",
- "openssl_verify_mode": "none",
- "envelope_from": "noreply@example.com",
- "ssl": false
}
}
}List API users for the given tenant. API users can be used for API endpoints that use the basic_auth_api_user authentication.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "api_users": [
- {
- "id": 1,
- "username": "api-client",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 1
}
}
}Create an API user for the given tenant. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object API user attributes. |
{- "api_user": {
- "username": "api-client",
- "password": "TestPassword12!",
- "password_confirmation": "TestPassword12!"
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "username": "api-client",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Delete an API user. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The API user ID |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "API-Zugang erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "username": "api-client",
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Returns tenant-wide configuration for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "slug": "ts",
- "activated_at": "2026-05-08T08:00:00.000Z",
- "webhook_interaction_storage_duration_in_days": 7,
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Update tenant-wide configuration. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "tenant_params": {
- "webhook_interaction_storage_duration_in_days": 14
}
}{- "success": true,
- "message": "Mandant erfolgreich aktualisiert",
- "error": null,
- "data": {
- "slug": "ts",
- "activated_at": "2026-05-08T08:00:00.000Z",
- "webhook_interaction_storage_duration_in_days": 14,
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Returns overview chart statistics for all product areas on the main admin dashboard. Each chart covers the last 4 weeks (one entry per calendar day), ordered chronologically.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "doi_chart_stats": [
- {
- "label": "07.05.2023",
- "data": { }
}
], - "injector_chart_stats": [
- {
- "label": "07.05.2023",
- "data": { }
}
], - "survey_chart_stats": [
- {
- "label": "07.05.2023",
- "data": { }
}
], - "email_chart_stats": [
- {
- "label": "07.05.2023",
- "data": { }
}
], - "sms_chart_stats": [
- {
- "label": "07.05.2023",
- "data": { }
}
], - "rcs_chart_stats": [
- {
- "label": "07.05.2023",
- "data": { }
}
], - "shared_chart_stats": [
- {
- "label": "07.05.2023",
- "data": {
- "total": 42,
- "successful": 40,
- "failed": 2
}
}
]
}
}Admin API for mailer and messaging resources. OAuth2 bearer authentication only.
Setup order to send messages (emails, SMS, RCS):
Returns messaging dashboard statistics for the given tenant. Includes per-channel (email, SMS, RCS) overview charts covering the last 4 weeks (one entry per day) and filtered statistics aggregated by month for the selected time range. The time range can be controlled via the time_range parameter. If omitted, the current month is used. Pass time_range=custom together with start_date and end_date to specify an arbitrary range. Optionally filter by event_id to restrict stats to a single mailer event.
| tenant required | string Example: ts The tenant slug |
| time_range | string Example: time_range=2024-01-01 Selects the time range for the filtered overview chart. Omit or leave blank for the current month. Pass a date string (e.g. |
| start_date | string <date> Example: start_date=2024-01-01 Start date for a custom time range. Only used when |
| end_date | string <date> Example: end_date=2024-01-31 End date for a custom time range. Only used when |
| event_id | integer Example: event_id=42 Restricts filtered statistics to a specific mailer event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "overview_chart_stats": {
- "email": [
- {
- "label": "01.05.2026",
- "data": {
- "successful": 38,
- "unsuccessful": 2,
- "mapped_latest_status_updates": {
- "transmitted": 10,
- "sent": 20,
- "opened": 5,
- "soft_bounce": 1,
- "hard_bounce": 1,
- "spam": 0,
- "blocked": 0,
- "unsubscribed": 0
}
}
}
], - "sms": [
- {
- "label": "01.05.2026",
- "data": {
- "successful": 15,
- "unsuccessful": 1,
- "mapped_latest_status_updates": {
- "transmitted": 5,
- "sent": 8,
- "opened": 0,
- "soft_bounce": 0,
- "hard_bounce": 1,
- "spam": 0,
- "blocked": 0,
- "unsubscribed": 0
}
}
}
], - "rcs": [
- {
- "label": "01.05.2026",
- "data": {
- "successful": 10,
- "unsuccessful": 0,
- "mapped_latest_status_updates": {
- "transmitted": 3,
- "sent": 5,
- "opened": 2,
- "soft_bounce": 0,
- "hard_bounce": 0,
- "spam": 0,
- "blocked": 0,
- "unsubscribed": 0
}
}
}
]
}, - "filtered_overview_chart_stats": {
- "email": [
- {
- "label": "05/2026",
- "data": {
- "successful": 480,
- "unsuccessful": 20,
- "mapped_latest_status_updates": {
- "transmitted": 100,
- "sent": 200,
- "opened": 50,
- "soft_bounce": 10,
- "hard_bounce": 5,
- "spam": 2,
- "blocked": 1,
- "unsubscribed": 3
}, - "events_stats": {
- "property1": {
- "successful": 40,
- "unsuccessful": 5
}, - "property2": {
- "successful": 40,
- "unsuccessful": 5
}
}
}
}
], - "sms": [
- {
- "label": "05/2026",
- "data": {
- "successful": 150,
- "unsuccessful": 10,
- "mapped_latest_status_updates": {
- "transmitted": 50,
- "sent": 80,
- "opened": 0,
- "soft_bounce": 0,
- "hard_bounce": 5,
- "spam": 0,
- "blocked": 2,
- "unsubscribed": 1
}, - "events_stats": {
- "property1": {
- "successful": 20,
- "unsuccessful": 2
}, - "property2": {
- "successful": 20,
- "unsuccessful": 2
}
}
}
}
], - "rcs": [
- {
- "label": "05/2026",
- "data": {
- "successful": 90,
- "unsuccessful": 5,
- "mapped_latest_status_updates": {
- "transmitted": 30,
- "sent": 40,
- "opened": 15,
- "soft_bounce": 0,
- "hard_bounce": 2,
- "spam": 0,
- "blocked": 1,
- "unsubscribed": 0
}, - "events_stats": {
- "property1": {
- "successful": 15,
- "unsuccessful": 1
}, - "property2": {
- "successful": 15,
- "unsuccessful": 1
}
}
}
}
]
}
}
}List mailer events for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "events": [
- {
- "id": 1,
- "name": "Welcome Email",
- "slug": "welcome-email",
- "preview_payload": "{\"data\": [{\"_key\": \"personalInformation\", \"firstName\": \"John\", \"lastName\": \"Doe\"}, {\"_key\": \"contact\", \"email\": \"john@example.com\"}], \"name\": \"My Journey\"}",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "first_name",
- "json_path": "$.firstName",
- "required": false,
- "position": 1,
- "purpose": "general"
}
]
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Create a mailer event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_event": {
- "name": "Welcome Email",
- "slug": "welcome-email",
- "preview_payload": "{\"data\": [{\"_key\": \"personalInformation\", \"firstName\": \"John\", \"lastName\": \"Doe\"}, {\"_key\": \"contact\", \"email\": \"john@example.com\"}], \"name\": \"My Journey\"}"
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email",
- "slug": "welcome-email",
- "preview_payload": "{\"data\": [{\"_key\": \"personalInformation\", \"firstName\": \"John\", \"lastName\": \"Doe\"}, {\"_key\": \"contact\", \"email\": \"john@example.com\"}], \"name\": \"My Journey\"}",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "first_name",
- "json_path": "$.firstName",
- "required": false,
- "position": 1,
- "purpose": "general"
}
]
}
}Show a mailer event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email",
- "slug": "welcome-email",
- "preview_payload": "{\"data\": [{\"_key\": \"personalInformation\", \"firstName\": \"John\", \"lastName\": \"Doe\"}, {\"_key\": \"contact\", \"email\": \"john@example.com\"}], \"name\": \"My Journey\"}",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "first_name",
- "json_path": "first_name",
- "required": false,
- "position": 1,
- "purpose": "general"
}
], - "imports": {
- "list": [
- {
- "id": 1,
- "type": "Mailer::EventImport",
- "status": "completed",
- "created_at": "2024-01-01T00:00:00.000Z",
- "filename": "contacts.xlsx"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 3
}
}
}
}Update a mailer event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_event": {
- "name": "Welcome Email Updated",
- "slug": "welcome-email-updated",
- "preview_payload": "{\"data\": [{\"_key\": \"personalInformation\", \"firstName\": \"John\", \"lastName\": \"Doe\"}, {\"_key\": \"contact\", \"email\": \"john@example.com\"}], \"name\": \"My Journey\"}"
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email Updated",
- "slug": "welcome-email-updated",
- "preview_payload": "{\"data\": [{\"_key\": \"personalInformation\", \"firstName\": \"Jane\", \"lastName\": \"Doe\"}, {\"_key\": \"contact\", \"email\": \"jane@example.com\"}], \"name\": \"My Journey\"}",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "first_name",
- "json_path": "first_name",
- "required": false,
- "position": 1,
- "purpose": "general"
}
]
}
}Delete a mailer event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email",
- "slug": "welcome-email",
- "preview_payload": "{\"data\": [{\"_key\": \"personalInformation\", \"firstName\": \"John\", \"lastName\": \"Doe\"}, {\"_key\": \"contact\", \"email\": \"john@example.com\"}], \"name\": \"My Journey\"}",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "first_name",
- "json_path": "first_name",
- "required": false,
- "position": 1,
- "purpose": "general"
}
]
}
}Returns an XLSX file containing the import template for the given event. The file includes one header column per placeholder defined on the event. A valid OAuth bearer token is required. Requires the format to be specified as .xlsx either via the URL suffix or the Accept header.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the event. |
| Accept required | string Example: application/xlsx The accept header, only application/xlsx is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Creates a new placeholder for the given event. Placeholders define the column headers for the import file and map to JSON paths in the import payload. Requires write permission for the tenant.
Placeholder can be used in email templates, SMS templates, RCS templates, and landing pages in the following format:
{{ label }}.
Furthermore, they support liquid filters. Example: {{ label | upcase }}.
See https://shopify.github.io/liquid/filters/ for more information.
Custom filters that are available are:
waehrung: formats a number as a currency string. Example: {{ amount | waehrung }}waehrung_cent: formats a number as a currency string in cents. Example: {{ amount | waehrung_cent }}datum_kurz: formats a date as a short date string. Example: {{ date | datum_kurz }}datum_lang: formats a date as a long date string. Example: {{ date | datum_lang }}sparte: formats a string as a sparte string. Example: {{ sparte | sparte }}vertragsart: formats a string as a vertragsart string. Example: {{ vertragsart | vertragsart }}| tenant required | string Example: ts The tenant slug |
| event_id required | integer Example: 1 The ID of the event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "shared_placeholder": {
- "label": "first_name",
- "json_path": "$.firstName",
- "required": false
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "event_id": 1,
- "id": 5,
- "label": "first_name",
- "json_path": "$.firstName",
- "required": false,
- "position": null,
- "purpose": "general"
}
}Updates the given placeholder on an event. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| event_id required | integer Example: 1 The ID of the event. |
| id required | integer Example: 5 The ID of the placeholder. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "shared_placeholder": {
- "label": "last_name",
- "json_path": "$.lastName",
- "required": true
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "event_id": 1,
- "id": 5,
- "label": "last_name",
- "json_path": "$.lastName",
- "required": true,
- "position": 1,
- "purpose": "general"
}
}Deletes the given placeholder from an event. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| event_id required | integer Example: 1 The ID of the event. |
| id required | integer Example: 5 The ID of the placeholder. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "event_id": 1,
- "id": 5,
- "label": "first_name",
- "json_path": "$.firstName",
- "required": false,
- "position": 1,
- "purpose": "general"
}
}Creates a deep clone of the given mailer event, including its placeholders. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| event_id required | integer Example: 1 The ID of the event to duplicate. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_event": {
- "name": "Welcome Email (Kopie)",
- "slug": "welcome-email-copy"
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 2,
- "name": "Welcome Email (Kopie)",
- "slug": "welcome-email-copy",
- "preview_payload": null,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 10,
- "label": "first_name",
- "json_path": "$.firstName",
- "required": false,
- "position": null,
- "purpose": "general"
}
]
}
}List sent emails for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "sent_emails": [
- {
- "id": 1,
- "brand_id": 1,
- "email_template_id": 1,
- "receipient": [
- "recipient@example.com"
], - "carbon_copy": [
- "cc@example.com"
], - "blind_carbon_copy": [
- "bcc@example.com"
], - "subject": "Welcome to our service",
- "sender": "no-reply@example.com",
- "sent_at": "2024-01-01T00:00:00.000Z",
- "error_message": null,
- "pseudonymized_at": null,
- "mail_provider": "ses",
- "mail_header_message_id": "<abc123@example.com>",
- "brand_name": "My Brand",
- "email_template_name": "Welcome Email Template",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Returns a single sent email record for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the sent email. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "brand_id": 1,
- "email_template_id": 1,
- "receipient": [
- "recipient@example.com"
], - "carbon_copy": [ ],
- "blind_carbon_copy": [ ],
- "subject": "Welcome to our service",
- "sender": "no-reply@example.com",
- "sent_at": "2024-01-01T00:00:00.000Z",
- "error_message": null,
- "pseudonymized_at": null,
- "mail_provider": "ses",
- "mail_header_message_id": "<abc123@example.com>",
- "brand_name": "My Brand",
- "email_template_name": "Welcome Email Template",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}List sent SMS messages for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "sent_sms_messages": [
- {
- "id": 1,
- "brand_id": 1,
- "sms_template_id": 1,
- "receipient": "+49123456789",
- "sender": "MyBrand",
- "sent_at": "2024-01-01T00:00:00.000Z",
- "error_message": null,
- "pseudonymized_at": null,
- "brand_name": "My Brand",
- "sms_template_name": "Welcome SMS Template",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Returns a single sent SMS message record for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the sent SMS message. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "brand_id": 1,
- "sms_template_id": 1,
- "receipient": "+49123456789",
- "sender": "MyBrand",
- "sent_at": "2024-01-01T00:00:00.000Z",
- "error_message": null,
- "pseudonymized_at": null,
- "brand_name": "My Brand",
- "sms_template_name": "Welcome SMS Template",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}List sent RCS messages for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "sent_rcs_messages": [
- {
- "id": 1,
- "brand_id": 1,
- "rcs_template_id": 1,
- "recipient": "+49123456789",
- "sender": "TestSender",
- "sent_at": "2024-01-01T00:00:00.000Z",
- "error_message": null,
- "pseudonymized_at": null,
- "unified_recipient_format": "+49123456789",
- "brand_name": "My Brand",
- "rcs_template_name": "Welcome RCS Template",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Returns a single sent RCS message record for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the sent RCS message. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "brand_id": 1,
- "rcs_template_id": 1,
- "recipient": "+49123456789",
- "sender": "TestSender",
- "sent_at": "2024-01-01T00:00:00.000Z",
- "error_message": null,
- "pseudonymized_at": null,
- "unified_recipient_format": "+49123456789",
- "brand_name": "My Brand",
- "rcs_template_name": "Welcome RCS Template",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}List email layouts for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "email_layouts": [
- {
- "id": 1,
- "name": "Default Layout",
- "brand_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Create an email layout for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_email_layout": {
- "name": "Default Layout",
- "brand_id": 1
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "Default Layout",
- "brand_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Show an email layout for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email layout. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "Default Layout",
- "brand_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Update an email layout for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email layout. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_email_layout": {
- "name": "Updated Layout",
- "brand_id": 1
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "Updated Layout",
- "brand_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Delete an email layout for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email layout. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "name": "Default Layout",
- "brand_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}List SMS templates for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| show_inactive | boolean Include inactive templates in the response. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "sms_templates": [
- {
- "id": 1,
- "name": "Welcome SMS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "+4922822743510",
- "receipient": "+491234567890",
- "text": "Hello {{ first_name }}",
- "active": true,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Create an SMS template for the given tenant. Any free text field may use placeholders in the format {{ label }}.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_sms_template": {
- "name": "Welcome SMS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "+4922822743510",
- "receipient": "+491234567890",
- "text": "Hello {{ first_name }}",
- "active": true
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome SMS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "+4922822743510",
- "receipient": "+491234567890",
- "text": "Hello {{ first_name }}",
- "active": true,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Show an SMS template for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the SMS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome SMS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "+4922822743510",
- "receipient": "+491234567890",
- "text": "Hello {{ first_name }}",
- "active": true,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Update an SMS template for the given tenant. Any free text field may use placeholders in the format {{ label }}.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the SMS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_sms_template": {
- "name": "Updated SMS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "+4922822743510",
- "receipient": "+491234567890",
- "text": "Hello {{ first_name }}, welcome back!",
- "active": true
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "Updated SMS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "+4922822743510",
- "receipient": "+491234567890",
- "text": "Hello {{ first_name }}, welcome back!",
- "active": true,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Delete an SMS template for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the SMS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome SMS",
- "brand_id": 1,
- "event_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}List RCS templates for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| show_inactive | boolean Include inactive templates in the response. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "rcs_templates": [
- {
- "id": 1,
- "name": "Welcome RCS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "TestSender",
- "recipient": "+491234567890",
- "active": true,
- "last_published_at": "2024-01-01T00:00:00.000Z",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Create an RCS template for the given tenant. Any free text field may use placeholders in the format {{ label }}.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_rcs_template": {
- "name": "Welcome RCS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "TestSender",
- "recipient": "+491234567890",
- "active": true
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome RCS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "TestSender",
- "recipient": "+491234567890",
- "active": true,
- "last_published_at": null,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Show an RCS template for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the RCS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome RCS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "TestSender",
- "recipient": "+491234567890",
- "active": true,
- "last_published_at": "2024-01-01T00:00:00.000Z",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Update an RCS template for the given tenant. Any free text field may use placeholders in the format {{ label }}.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the RCS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_rcs_template": {
- "name": "Updated RCS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "TestSender",
- "recipient": "+491234567890",
- "active": true
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "Updated RCS",
- "brand_id": 1,
- "event_id": 1,
- "sender": "TestSender",
- "recipient": "+491234567890",
- "active": true,
- "last_published_at": null,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Delete an RCS template for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the RCS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome RCS",
- "brand_id": 1,
- "event_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}List email templates for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=20 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "email_templates": [
- {
- "id": 1,
- "name": "Welcome Email",
- "sender": "noreply@example.com",
- "receipient": [
- "customer@example.com"
], - "carbon_copy": [ ],
- "blind_carbon_copy": [ ],
- "subject": "Welcome to our platform",
- "active": true,
- "event_id": 1,
- "email_layout_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 20,
- "total_pages": 1,
- "total_count": 5
}
}
}Create an email template for the given tenant. Any free text field may use placeholders in the format {{ label }}.
Placeholder format: Use {{ label }} (with spaces) in text fields such as subject. Variants without spaces ({{label}}) are not resolved.
HTML content: Do not set html_mail directly. Use the editor endpoint PUT /admin/api/v2/editor/email_templates/{id} to update the content state, then call the publish endpoint. Content set via html_mail will be overwritten when the template is published through the editor workflow.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_email_template": {
- "name": "Welcome Email",
- "sender": "noreply@example.com",
- "receipient": "customer@example.com, {{ email }}",
- "carbon_copy": "cc@example.com, {{ email }}",
- "blind_carbon_copy": "bcc@example.com, {{ email }}",
- "subject": "Welcome, {{ first_name }}",
- "event_id": 1,
- "email_layout_id": 1,
- "active": true
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email",
- "sender": "noreply@example.com",
- "receipient": [
- "customer@example.com"
], - "carbon_copy": [ ],
- "blind_carbon_copy": [ ],
- "subject": "Welcome to our platform",
- "active": true,
- "event_id": 1,
- "email_layout_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Show an email template for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email",
- "sender": "noreply@example.com",
- "receipient": [
- "customer@example.com"
], - "carbon_copy": [ ],
- "blind_carbon_copy": [ ],
- "subject": "Welcome to our platform",
- "active": true,
- "event_id": 1,
- "email_layout_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Update an email template for the given tenant. Any free text field may use placeholders in the format {{ label }}.
Placeholder format: Use {{ label }} (with spaces) in text fields such as subject. Variants without spaces ({{label}}) are not resolved.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_email_template": {
- "name": "Welcome Email Updated",
- "sender": "noreply@example.com",
- "receipient": "customer@example.com, {{ email }}",
- "carbon_copy": "cc@example.com, {{ email }}",
- "blind_carbon_copy": "bcc@example.com, {{ email }}",
- "subject": "Welcome to our platform, {{ first_name }} - Updated",
- "event_id": 1,
- "active": true
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email Updated",
- "sender": "noreply@example.com",
- "receipient": [
- "customer@example.com"
], - "carbon_copy": [ ],
- "blind_carbon_copy": [ ],
- "subject": "Welcome to our platform - Updated",
- "active": true,
- "event_id": 1,
- "email_layout_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Delete an email template for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "name": "Welcome Email",
- "active": true
}
}Creates a deep clone of the given email template, including its filters and attachments. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template to duplicate. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_email_template": {
- "name": "Welcome Email (Kopie)",
- "subject": "Welcome to our service",
- "event_id": 5
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 2,
- "name": "Welcome Email (Kopie)",
- "sender": "noreply@example.com",
- "receipient": [
- "{{ email }}"
], - "carbon_copy": [ ],
- "blind_carbon_copy": [ ],
- "subject": "Welcome to our service",
- "active": true,
- "event_id": 5,
- "email_layout_id": 1,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Renders the email template using the event's preview_payload and returns the filled fields (subject, HTML body, plain text, sender, recipients). Returns 422 when no preview payload is configured for the event.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "receipient": [
- "theo.tester@example.com"
], - "carbon_copy": [ ],
- "blind_carbon_copy": [ ],
- "sender": "no-reply@example.com",
- "subject": "Willkommen, Theo",
- "html_mail": "<html>...</html>",
- "plain_text_mail": "Willkommen, Theo",
- "attachments": [
- {
- "id": 1,
- "type": "Mailer::FileAttachment"
}
]
}
}Renders the SMS template using the event's preview_payload and returns the filled fields (text, sender, recipient). Returns 422 when no preview payload is configured for the event.
| tenant required | string Example: ts The tenant slug |
| sms_template_id required | integer Example: 1 The ID of the SMS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "receipient": "+49123456789",
- "sender": "MyBrand",
- "text": "Willkommen, Theo Tester!"
}
}Create an abstract email attachment for the given email template.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_abstract_email_attachment": {
- "type": "Mailer::FileAttachment",
- "link_url_placeholder_id": null,
- "filename_placeholder_id": null,
- "content_type_placeholder_id": null,
- "base64_content_placeholder_id": null,
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "email_template_id": 1,
- "id": 5,
- "type": "Mailer::FileAttachment",
- "link_url_placeholder_id": null,
- "filename_placeholder_id": null,
- "content_type_placeholder_id": null,
- "base64_content_placeholder_id": null,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Show an abstract email attachment for the given email template.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template. |
| id required | integer Example: 5 The ID of the attachment. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "email_template_id": 1,
- "id": 5,
- "type": "Mailer::FileAttachment",
- "link_url_placeholder_id": null,
- "filename_placeholder_id": null,
- "content_type_placeholder_id": null,
- "base64_content_placeholder_id": null,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Update an abstract email attachment for the given email template.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template. |
| id required | integer Example: 5 The ID of the attachment. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_abstract_email_attachment": {
- "type": "Mailer::FileAttachment",
- "link_url_placeholder_id": null,
- "filename_placeholder_id": null,
- "content_type_placeholder_id": null,
- "base64_content_placeholder_id": null,
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "email_template_id": 1,
- "id": 5,
- "type": "Mailer::FileAttachment",
- "link_url_placeholder_id": null,
- "filename_placeholder_id": null,
- "content_type_placeholder_id": null,
- "base64_content_placeholder_id": null,
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
}Delete an abstract email attachment for the given email template.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template. |
| id required | integer Example: 5 The ID of the attachment. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "email_template_id": 1,
- "id": 5,
- "type": "Mailer::FileAttachment"
}
}Creates a new filter for the given email template, SMS template, or RCS template. Filters restrict which processes receive a given template based on placeholder values. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template (use this path for email template filters). |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_filter": {
- "placeholder_id": 5,
- "operator": "equal",
- "value": "Theo"
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "operator": "equal",
- "value": "Theo",
- "placeholder_id": 5,
- "email_template_id": 1,
- "sms_template_id": null,
- "rcs_template_id": null
}
}Destroys the given filter belonging to the specified email template, SMS template, or RCS template. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| email_template_id required | integer Example: 1 The ID of the email template (use this path for email template filters). |
| id required | integer Example: 3 The ID of the filter to destroy. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 3,
- "operator": "equal",
- "value": "Theo",
- "placeholder_id": 5,
- "email_template_id": 1,
- "sms_template_id": null,
- "rcs_template_id": null
}
}Creates a new filter for the given email template, SMS template, or RCS template. Filters restrict which processes receive a given template based on placeholder values. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| sms_template_id required | integer Example: 1 The ID of the SMS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_filter": {
- "placeholder_id": 5,
- "operator": "equal",
- "value": "Theo"
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "operator": "equal",
- "value": "Theo",
- "placeholder_id": 5,
- "email_template_id": 1,
- "sms_template_id": null,
- "rcs_template_id": null
}
}Destroys the given filter belonging to the specified SMS template. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| sms_template_id required | integer Example: 1 The ID of the SMS template. |
| id required | integer Example: 3 The ID of the filter to destroy. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 3,
- "operator": "equal",
- "value": "Theo",
- "placeholder_id": 5,
- "email_template_id": 1,
- "sms_template_id": null,
- "rcs_template_id": null
}
}Creates a new filter for the given email template, SMS template, or RCS template. Filters restrict which processes receive a given template based on placeholder values. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| rcs_template_id required | integer Example: 1 The ID of the RCS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "mailer_filter": {
- "placeholder_id": 5,
- "operator": "equal",
- "value": "Theo"
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "operator": "equal",
- "value": "Theo",
- "placeholder_id": 5,
- "email_template_id": 1,
- "sms_template_id": null,
- "rcs_template_id": null
}
}Destroys the given filter belonging to the specified RCS template. Requires write permission for the tenant.
| tenant required | string Example: ts The tenant slug |
| rcs_template_id required | integer Example: 1 The ID of the RCS template. |
| id required | integer Example: 3 The ID of the filter to destroy. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 3,
- "operator": "equal",
- "value": "Theo",
- "placeholder_id": 5,
- "email_template_id": 1,
- "sms_template_id": null,
- "rcs_template_id": null
}
}Returns the event details including placeholders for use in the mailer editor. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 ID of the event |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "event_id": 1,
- "event_name": "Order Confirmation",
- "event_slug": "order_confirmation",
- "event_preview_payload": { },
- "event_placeholders": [
- {
- "placeholder_id": 10,
- "placeholder_label": "first_name",
- "placeholder_json_path": "$.first_name",
- "placeholder_required": true
}
]
}Admin API for webhook endpoint configuration. OAuth2 bearer authentication only.
Setup order to receive webhook notifications:
List webhook endpoints for the given tenant.
| tenant required | string Example: ts The tenant slug |
| show_inactive | boolean Example: show_inactive=true Whether to show inactive endpoints. If not provided, only active endpoints are returned. |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "endpoints": [
- {
- "id": "1",
- "type": "Webhook::MessageSentEndpoint",
- "basic_auth_username": "username",
- "basic_auth_password": "********",
- "is_active": true,
- "send_original_payload": false
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}Create a webhook endpoint for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "webhook_abstract_endpoint": {
- "type": "Webhook::MessageSentEndpoint",
- "basic_auth_username": "username",
- "basic_auth_password": "password",
- "is_active": true,
- "send_original_payload": false
}
}{- "success": true,
- "message": "Webhook erfolgreich erstellt",
- "error": null,
- "data": {
- "id": "1",
- "type": "Webhook::MessageSentEndpoint",
- "basic_auth_username": "username",
- "basic_auth_password": "********",
- "is_active": true,
- "send_original_payload": false
}
}Show a webhook endpoint and its interactions for the given tenant.
| tenant required | string Example: ts The tenant slug |
| endpoint_id required | string Example: 1 The ID of the webhook endpoint |
| limit | integer Example: limit=200 Number of interactions per page. |
| page | integer Example: page=1 Interaction page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": "1",
- "type": "Webhook::MessageSentEndpoint",
- "basic_auth_username": "username",
- "basic_auth_password": "********",
- "is_active": true,
- "send_original_payload": false,
- "interactions": {
- "list": [
- {
- "id": "1",
- "created_at": "2021-01-01T00:00:00Z",
- "process_id": "123e4567-e89b-12d3-a456-426614174000",
- "requested_method": "POST",
- "response_code": 200,
- "retry_count": 0,
- "sent_payload": {
- "event": "message_sent",
- "data": {
- "message_id": "1234567890",
- "recipient": "john.doe@example.com",
- "subject": "Hello, world!",
- "text": "Hello, world!"
}
}, - "transaction_payload": {
- "message_id": "1234567890",
- "recipient": "john.doe@example.com",
- "subject": "Hello, world!",
- "text": "Hello, world!"
}, - "response_payload": {
- "response": true
}
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}
}Update a webhook endpoint for the given tenant.
| tenant required | string Example: ts The tenant slug |
| endpoint_id required | string Example: 1 The ID of the webhook endpoint |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "webhook_abstract_endpoint": {
- "type": "Webhook::MessageSentEndpoint",
- "basic_auth_username": "username",
- "basic_auth_password": "password",
- "is_active": true,
- "send_original_payload": false
}
}{- "success": true,
- "message": "Webhook endpoint updated successfully",
- "error": null,
- "data": {
- "id": "1",
- "type": "Webhook::MessageSentEndpoint",
- "basic_auth_username": "username",
- "basic_auth_password": "********",
- "is_active": true,
- "send_original_payload": false
}
}Delete a webhook endpoint for the given tenant.
| tenant required | string Example: ts The tenant slug |
| endpoint_id required | string Example: 1 The ID of the webhook endpoint |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Webhook endpoint deleted successfully",
- "error": null,
- "data": {
- "id": "1",
- "type": "Webhook::MessageSentEndpoint",
- "basic_auth_username": "username",
- "basic_auth_password": "********",
- "is_active": true,
- "send_original_payload": false
}
}Admin API for the visual editor (email templates, landing pages, layouts, microsites, assets). OAuth2 bearer authentication only.
This API is used by the Doxie frontend editor. It provides low-level read/write access to editor content state and asset management.
Workflow for editing content:
GET request to the relevant editor endpoint (email template, email layout, landing page, landing page layout, or microsite).PUT request containing the new editor document./publish endpoint to make the content live (applies to email templates, landing pages, and microsites; layouts take effect immediately on save).Returns the visual editor payload for an email layout. Supports both session-based and OAuth bearer token authentication.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email layout. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Updates the content_state of an email layout. Requires write permission. Supports both session-based and OAuth bearer token authentication.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email layout. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object The new content state for the email layout. |
{- "content_state": { }
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns the visual editor payload for an email template. Supports both session-based and OAuth bearer token authentication.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Updates the content_state of an email template. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object The new content state for the email template. |
{- "content_state": { }
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Enqueues the email template for rendering and publishing. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the email template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns the visual editor payload for an RCS template. Supports both session-based and OAuth bearer token authentication.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the RCS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Updates the content_state of an RCS template. Requires write permission.
The content_state object must contain a roots array whose first element has type: "rcs-root". An rcs-root node typically wraps one child node of type rcs-richcard. A richcard that contains a file object (with fileUrl) is required for last_published_at to be updated when the template is published. Without a valid file, the publish endpoint returns success: true but last_published_at is not updated — verify last_published_at after publishing to confirm the template was actually published. If possible, fetch other templates first to find more examples for valid content states.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the RCS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object The new content state for the RCS template. Must follow the editor node tree format. Minimum structure: a |
{- "content_state": {
- "roots": [
- {
- "id": "node-root-1",
- "type": "rcs-root",
- "label": "RCS Nachricht",
- "props": { },
- "children": {
- "content": [
- {
- "id": "node-richcard-1",
- "type": "rcs-richcard",
- "label": "Richcard",
- "props": {
- "title": "Hello",
- "description": "Welcome message",
- "orientation": "vertical",
- "file": {
- "height": "tall"
}
}, - "children": {
- "suggestions": [ ]
}
}
]
}
}
], - "global": null,
- "appliedMigrations": { }
}
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Enqueues the RCS template for rendering and publishing. Requires write permission.
Important: This endpoint returns {"success": true} even when the template cannot actually be published (for example, when the content_state contains an rcs-richcard node without a valid file object). To confirm that publishing succeeded, fetch the template via GET /admin/mailer/rcs_templates/{id} and verify that last_published_at has been updated. The rendering and publishing process may take up to 1 minute.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the RCS template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns the editor payload for a landing page, including content state, brand, API endpoints, and editor configuration. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 15 ID of the landing page |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{ }Updates the content_state of a landing page. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 15 ID of the landing page |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
| content_state required | object Editor content state document. |
{- "content_state": { }
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Enqueues rendering/publishing of the landing page. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 15 ID of the landing page |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns the editor payload for a landing page layout, including content state. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 4 ID of the landing page layout |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Updates the content_state of a landing page layout. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 4 ID of the landing page layout |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
| content_state required | object Editor content state document. |
{- "content_state": { }
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns the editor payload for a microsite, including content state and API endpoints. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 ID of the microsite |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "id": 1,
- "projectName": "My Microsite",
- "environment": "staging",
- "tenant": "acme",
- "brand": {
- "id": 2
}, - "contentState": { },
- "apiEndpoints": {
- "loadAssets": "string",
- "saveAssets": "string",
- "deleteAssets": "string"
}, - "editorContentMode": {
- "rootCount": "multiple",
- "globalEnabled": true,
- "enablePlaceholderInsertion": false
}
}Updates the content_state of a microsite. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 ID of the microsite |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
| content_state required | object Editor content state document. |
{- "content_state": { }
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Publishes the microsite. Requires write permission. Returns an error if the microsite is not in a publishable state.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 ID of the microsite |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true
}Returns editor assets uploaded for the tenant. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
[- {
- "type": "file",
- "id": "string",
- "directory": "/",
- "src": "string",
- "previewSrc": "string",
- "mimeType": "string"
}
]Uploads a file for use in the editor. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
| filename | string The filename to use for the uploaded asset. |
| file | string <binary> The file to upload. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Deletes an editor asset by UUID. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | string Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 UUID of the editor asset |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Admin API for microsites (fully hosted, standalone websites) and landing page layouts (structural frames for module-internal single pages such as DOI confirmation, survey response, etc.). OAuth2 bearer authentication only.
Setup order for microsites:
Returns a paginated list of landing page layouts for the tenant. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| page | integer Example: page=1 Page number. |
| limit | integer Example: limit=200 Number of records per page. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Creates a landing page layout. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "pages_landing_page_layout": {
- "name": "Default layout",
- "brand_id": 3
}
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns a single landing page layout. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 4 The landing page layout ID |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Updates name or brand of a landing page layout. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 4 The landing page layout ID |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "pages_landing_page_layout": {
- "name": "string",
- "brand_id": 0
}
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Deletes a landing page layout. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 4 The landing page layout ID |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns a paginated list of microsites for the tenant. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| page | integer Example: page=1 Page number. |
| limit | integer Example: limit=200 Number of records per page. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "microsites": [
- {
- "id": 1,
- "brand_id": 2,
- "name": "My microsite",
- "last_published_at": "2024-01-01T00:00:00.000Z",
- "created_at": "2024-01-01T00:00:00.000Z",
- "updated_at": "2024-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 5
}
}
}Creates a fully hosted, standalone website (microsite) for the tenant. Microsites are independent web presences with their own editor and publish workflow — the correct starting point when you want to create a new website, web page, or hosted page. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "pages_microsite": {
- "name": "My microsite",
- "brand_id": 2
}
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Returns a single microsite. Requires read permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The microsite ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Updates a microsite. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The microsite ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "pages_microsite": {
- "name": "string",
- "brand_id": 0
}
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Deletes a microsite. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The microsite ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Creates a deep clone of the given microsite. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| microsite_id required | integer Example: 1 The source microsite ID to duplicate. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "pages_microsite": {
- "name": "Copy of My Microsite"
}
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Enqueues a job to add a hostname to the microsite via Bunny CDN. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| microsite_id required | integer Example: 1 The microsite ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "pages_hostname": {
- "value": "www.example.com"
}
}{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Sets the specified hostname as the canonical hostname for the microsite. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| microsite_id required | integer Example: 1 The microsite ID. |
| id required | integer Example: 3 The hostname ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Enqueues a job to remove a hostname from the microsite via Bunny CDN. Requires write permission.
| tenant required | string Example: ts The tenant slug |
| microsite_id required | integer Example: 1 The microsite ID. |
| id required | integer Example: 3 The hostname ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Admin API for QR code resources. OAuth2 bearer authentication only.
Setup order to create QR codes:
target_url purpose placeholder to set the URL each code points to, and optionally a valid_until placeholder to set an expiry date.List QR code event templates for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "events": [
- {
- "id": 1,
- "name": "My QR Code Campaign",
- "slug": "my-qr-code-campaign",
- "brand_id": 1,
- "tenant_id": 1,
- "created_at": "2026-01-01T00:00:00.000Z",
- "updated_at": "2026-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "target_url",
- "json_path": "$.target_url",
- "purpose": "target_url"
}
]
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}Create a QR code event template for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "qr_code_event": {
- "name": "My QR Code Campaign",
- "slug": "my-qr-code-campaign",
- "brand_id": 1,
- "placeholders_attributes": [
- {
- "label": "first_name",
- "json_path": "$.url",
- "purpose": "target_url"
}
]
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "My QR Code Campaign",
- "slug": "my-qr-code-campaign",
- "brand_id": 1,
- "tenant_id": 1,
- "created_at": "2026-01-01T00:00:00.000Z",
- "updated_at": "2026-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "target_url",
- "json_path": "$.target_url",
- "purpose": "target_url"
}
]
}
}Return a single QR code event template including its imports.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 ID of the QR code event. |
| limit | integer Example: limit=200 Number of imports per page. |
| page | integer Example: page=1 Page number for imports. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "My QR Code Campaign",
- "slug": "my-qr-code-campaign",
- "brand_id": 1,
- "tenant_id": 1,
- "created_at": "2026-01-01T00:00:00.000Z",
- "updated_at": "2026-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "target_url",
- "json_path": "$.target_url",
- "purpose": "target_url"
}
], - "imports": {
- "list": [
- {
- "id": 1,
- "type": "QrCode::EventImport",
- "status": "completed",
- "created_at": "2026-01-01T00:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 0
}
}
}
}Update a QR code event template.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 ID of the QR code event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "qr_code_event": {
- "name": "Updated Campaign Name",
- "slug": "updated-campaign-name",
- "brand_id": 1,
- "placeholders_attributes": [
- {
- "label": "first_name",
- "json_path": "$.url",
- "purpose": "target_url"
}
]
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "My QR Code Campaign",
- "slug": "my-qr-code-campaign",
- "brand_id": 1,
- "tenant_id": 1,
- "created_at": "2026-01-01T00:00:00.000Z",
- "updated_at": "2026-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "target_url",
- "json_path": "$.target_url",
- "purpose": "target_url"
}
]
}
}Delete a QR code event template.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 ID of the QR code event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "name": "My QR Code Campaign",
- "slug": "my-qr-code-campaign",
- "brand_id": 1,
- "tenant_id": 1,
- "created_at": "2026-01-01T00:00:00.000Z",
- "updated_at": "2026-01-01T00:00:00.000Z",
- "placeholders": [
- {
- "id": 1,
- "label": "target_url",
- "json_path": "$.target_url",
- "purpose": "target_url"
}
]
}
}Returns an XLSX file containing the import template for the given QR code event. The file includes one header column per placeholder defined on the event. A valid OAuth bearer token is required. Requires the format to be specified as .xlsx either via the URL suffix or the Accept header.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the QR code event. |
| Accept required | string Example: application/xlsx The accept header, only application/xlsx is supported. |
{- "success": false,
- "message": null,
- "error": "No read permission",
- "data": null
}Update the visual style configuration for a QR code event.
| tenant required | string Example: ts The tenant slug |
| event_id required | integer Example: 1 ID of the QR code event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "style": {
- "file_format": "svg",
- "width": 500,
- "height": 500,
- "dot_style": "square",
- "dot_color": "#000000",
- "background_color": "#ffffff",
- "corner_square_style": "square",
- "corner_square_color": "#000000",
- "corner_dot_style": "square",
- "corner_dot_color": "#000000",
- "logo_hide_background_dots": true,
- "logo_image_size": 0.4,
- "logo_margin": 0,
- "logo_signed_id": "eyJfcmFpbHMiOnsibWVzc2FnZSI6Ii..."
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "event_id": 1,
- "file_format": "svg",
- "width": 500,
- "height": 500,
- "dot_style": "square",
- "dot_color": "#000000",
- "background_color": "#ffffff",
- "corner_square_style": "square",
- "corner_square_color": "#000000",
- "corner_dot_style": "square",
- "corner_dot_color": "#000000",
- "logo_hide_background_dots": true,
- "logo_image_size": 0.4,
- "logo_margin": 0,
- "created_at": "2026-01-01T00:00:00.000Z",
- "updated_at": "2026-01-01T00:00:00.000Z"
}
}Upload a logo image (PNG, JPEG, or SVG) to use in a QR code style. Returns a signed_id that can be passed to the style update endpoint as logo_signed_id. SVG files must have explicit numeric width and height attributes.
| tenant required | string Example: ts The tenant slug |
| event_id required | integer Example: 1 ID of the QR code event. |
| logo required | string <binary> Image file (PNG, JPEG, or SVG with explicit width/height). |
{- "signed_id": "eyJfcmFpbHMiOnsibWVzc2FnZSI6Ii..."
}List QR codes for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "qr_codes": [
- {
- "id": 1,
- "uuid": "123e4567-e89b-12d3-a456-426614174000",
- "event_id": 1,
- "valid_until": "2026-12-31T23:59:59.000Z",
- "expired": false,
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}Create a QR code for the given tenant. The QR code is attached to a QR code event (template) and a process is created for traceability.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "qr_code_qr_code": {
- "event_id": 1,
- "valid_until": "2026-12-31T23:59:59.000Z"
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "uuid": "123e4567-e89b-12d3-a456-426614174000",
- "event_id": 1,
- "valid_until": "2026-12-31T23:59:59.000Z",
- "expired": false,
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Returns a single QR code for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the QR code |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "uuid": "123e4567-e89b-12d3-a456-426614174000",
- "event_id": 1,
- "valid_until": "2026-12-31T23:59:59.000Z",
- "expired": false,
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Update a QR code for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the QR code |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "qr_code_qr_code": {
- "event_id": 1,
- "valid_until": "2026-12-31T23:59:59.000Z"
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "uuid": "123e4567-e89b-12d3-a456-426614174000",
- "event_id": 1,
- "valid_until": "2026-12-31T23:59:59.000Z",
- "expired": false,
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Delete a QR code for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the QR code |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "uuid": "123e4567-e89b-12d3-a456-426614174000",
- "event_id": 1,
- "valid_until": "2026-12-31T23:59:59.000Z",
- "expired": false,
- "created_at": "2026-05-08T08:00:00.000Z",
- "updated_at": "2026-05-08T08:00:00.000Z"
}
}Admin API for DOI (double opt-in) consent and marketing permission management resources. OAuth2 bearer authentication only.
Setup order to create a DOI campaign:
email — the email address of the recipientphone — the phone number of the recipientconfirmation_url — the URL to the confirmation pageconfirmation_request_url — the URL to the confirmation request pageconsented_text — the text of the consent purposeSee detailed documentation for events and templates in Admin / Mailer. The templates should always have a filter to ensure the recipient is present.
Returns DOI dashboard statistics for the given tenant. Includes an overview chart covering the last 4 weeks (one entry per day) and filtered statistics aggregated by month for the selected time range. The time range can be controlled via the time_range parameter. If omitted, the current month is used. Pass time_range=custom together with start_date and end_date to specify an arbitrary range. Optionally filter by brand_id to restrict stats to a single brand.
| tenant required | string Example: ts The tenant slug |
| time_range | string Example: time_range=2024-01-01 Selects the time range for the filtered overview chart. Omit or leave blank for the current month. Pass a date string (e.g. |
| start_date | string <date> Example: start_date=2024-01-01 Start date for a custom time range. Only used when |
| end_date | string <date> Example: end_date=2024-01-31 End date for a custom time range. Only used when |
| brand_id | integer Example: brand_id=42 Restricts filtered statistics to a specific brand. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "overview_chart_stats": [
- {
- "label": "01.05.2026",
- "data": {
- "email_stats": {
- "total": 10,
- "confirmed": 8,
- "pending": 1,
- "cancelled": 1
}, - "sms_stats": {
- "total": 5,
- "confirmed": 4,
- "pending": 0,
- "cancelled": 1,
- "link_in_sms_clicked": 3
}
}
}
], - "filtered_overview_chart_stats": [
- {
- "label": "05/2026",
- "data": {
- "email_stats": {
- "total": 120,
- "confirmed": 100,
- "pending": 10,
- "cancelled": 10,
- "confirmed_percentage": 83.33,
- "pending_percentage": 8.33,
- "cancelled_percentage": 8.33,
- "confirmed_by_message_count": {
- "property1": 40,
- "property2": 40
}, - "confirmed_after_seconds_buckets": {
- "property1": 15,
- "property2": 15
}
}, - "sms_stats": {
- "total": 50,
- "confirmed": 40,
- "pending": 5,
- "cancelled": 5,
- "link_in_sms_clicked": 35,
- "link_in_sms_clicked_percentage": 70,
- "confirmed_percentage": 80,
- "pending_percentage": 10,
- "cancelled_percentage": 10,
- "confirmed_by_message_count": {
- "property1": 20,
- "property2": 20
}, - "confirmed_after_seconds_buckets": {
- "property1": 10,
- "property2": 10
}
}
}
}
]
}
}List confirmed DOI consents for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| search | string Example: search=some-identifier Search term to filter consents by cross-system identifier or MPM contact ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "consents": [
- {
- "id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "email": "contact@example.com",
- "phone_number": "+49123456789",
- "cross_system_identifier": "csi-abc-123",
- "status": "confirmed"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 5
}
}
}Show a single DOI consent with its associated email and SMS message history.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the DOI consent. |
| limit | integer Example: limit=200 Number of records per page for nested message collections. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "email": "contact@example.com",
- "phone_number": "+49123456789",
- "cross_system_identifier": "csi-abc-123",
- "status": "confirmed",
- "successful_emails": {
- "emails": [
- {
- "id": 1,
- "brand_id": 1,
- "email_template_id": 1,
- "receipient": "contact@example.com",
- "subject": "Please confirm your consent",
- "sender": "noreply@example.com",
- "sent_at": "2024-01-15T10:00:00.000Z",
- "error_message": null,
- "brand_name": "My Brand",
- "email_template_name": "DOI Confirmation Email"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 1
}
}, - "unsuccessful_emails": {
- "emails": [
- { }
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 0
}
}, - "successful_sms_messages": {
- "sms_messages": [
- {
- "id": 1,
- "brand_id": 1,
- "sms_template_id": 1,
- "receipient": "+49123456789",
- "sender": "MyBrand",
- "sent_at": "2024-01-15T10:00:00.000Z",
- "error_message": null,
- "brand_name": "My Brand",
- "sms_template_name": "DOI Confirmation SMS"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 1
}
}, - "unsuccessful_sms_messages": {
- "sms_messages": [
- { }
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 0
}
}
}
}List consent purposes for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| show_inactive | boolean Include inactive consent purposes in the result. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "consent_purposes": [
- {
- "id": 1,
- "slug": "newsletter-signup",
- "text": "I agree to receive the newsletter.",
- "brand_id": 1,
- "active": true,
- "scheduled_cancellation_duration_in_days": 30,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 5
}
}
}Create a new consent purpose for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "mpm_consent_purpose": {
- "slug": "newsletter-signup",
- "text": "I agree to receive the newsletter.",
- "brand_id": 1,
- "active": true,
- "scheduled_cancellation_duration_in_days": 30
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "slug": "newsletter-signup",
- "text": "I agree to receive the newsletter.",
- "brand_id": 1,
- "active": true,
- "scheduled_cancellation_duration_in_days": 30,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Show a single MPM consent purpose with its associated messaging schedules.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the MPM consent purpose. |
| limit | integer Example: limit=200 Number of records per page for nested messaging schedule collections. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "slug": "newsletter-signup",
- "text": "I agree to receive the newsletter.",
- "brand_id": 1,
- "active": true,
- "scheduled_cancellation_duration_in_days": 30,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z",
- "messaging_schedules": {
- "items": [
- {
- "id": 1,
- "event_type": "Mpm::ConsentPurpose",
- "event_id": 1,
- "mailer_event_id": 1,
- "delay_value": 10,
- "delay_unit": "minutes",
- "delay_sending_in_seconds": 600,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}
}Update an existing consent purpose.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the MPM consent purpose. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "mpm_consent_purpose": {
- "slug": "newsletter-signup",
- "text": "I agree to receive the newsletter.",
- "brand_id": 1,
- "active": true,
- "scheduled_cancellation_duration_in_days": 30
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "slug": "newsletter-signup",
- "text": "I agree to receive the newsletter.",
- "brand_id": 1,
- "active": true,
- "scheduled_cancellation_duration_in_days": 30,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Create a new DOI page template for the given consent purpose.
| tenant required | string Example: ts The tenant slug |
| consent_purpose_id required | integer Example: 1 The ID of the consent purpose. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "doi_page_template": {
- "purpose_type": "confirmation_page",
- "pages_landing_page_attributes": {
- "layout_id": 1,
- "title": "Confirmation Page"
}
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "purpose_type": "confirmation_page",
- "external_success_page": null,
- "consent_purpose_id": 1,
- "pages_landing_page_id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Update a DOI page template for the given consent purpose.
| tenant required | string Example: ts The tenant slug |
| consent_purpose_id required | integer Example: 1 The ID of the consent purpose. |
| id required | integer Example: 1 The ID of the page template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "doi_page_template": {
- "pages_landing_page_attributes": {
- "layout_id": 1,
- "title": "Updated Title"
}
}
}{- "success": true,
- "message": "Erfolgreich gespeichert",
- "error": null,
- "data": {
- "id": 1,
- "purpose_type": "confirmation_page",
- "consent_purpose_id": 1,
- "pages_landing_page_id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Delete a DOI page template for the given consent purpose.
| tenant required | string Example: ts The tenant slug |
| consent_purpose_id required | integer Example: 1 The ID of the consent purpose. |
| id required | integer Example: 1 The ID of the page template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": {
- "id": 1,
- "purpose_type": "confirmation_page",
- "external_success_page": null,
- "consent_purpose_id": 1,
- "pages_landing_page_id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}List abstract imports for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "abstract_imports": [
- {
- "id": 1,
- "type": "Mpm::OptInImport",
- "brand_id": 1,
- "consent_purpose_id": 1,
- "status": "pending",
- "revoke_all": false,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}Create a new abstract import (opt-in or opt-out) for the given tenant and enqueue the import job.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "type": "Mpm::OptInImport",
- "brand_id": 1,
- "consent_purpose_id": 1,
- "status": "pending",
- "revoke_all": false,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Returns the error report for a finished import as JSON (parsed error rows) or XLSX. Requires export permission on the tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 Import ID. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "type": "Mpm::OptInImport",
- "brand_id": 1,
- "consent_purpose_id": 1,
- "status": "finished",
- "revoke_all": false,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z",
- "error_rows": [
- {
- "row_index": 2,
- "error": "Phone number is invalid"
}
]
}
}List contacts for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| search | string Example: search=customer-123 Search by customer identification number or consent channel. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "contacts": [
- {
- "id": 1,
- "customer_identification_number": "customer-123",
- "tenant_id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 5
}
}
}Create a new contact with an associated consent for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "mpm_contact": {
- "customer_identification_number": "customer-123",
- "mpm_consent": {
- "consent_purpose_id": 1,
- "email": "customer@example.com",
- "phone": "+49123456789"
}
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "customer_identification_number": "customer-123",
- "tenant_id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Return a single contact for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the contact. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "customer_identification_number": "customer-123",
- "tenant_id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Update an existing contact and initiate a new consent for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the contact. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
required | object |
{- "mpm_contact": {
- "customer_identification_number": "customer-123",
- "mpm_consent": {
- "consent_purpose_id": 1,
- "email": "customer@example.com",
- "phone": "+49123456789"
}
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "customer_identification_number": "customer-123",
- "tenant_id": 1,
- "created_at": "2024-01-15T10:00:00.000Z",
- "updated_at": "2024-01-15T10:00:00.000Z"
}
}Admin API for survey event resources. OAuth2 bearer authentication only.
Setup order before creating a survey campaign:
Set up landing page layouts so that landing pages for the survey can be created.
Landing-page layouts define only the structural frame (header/footer). Both vote_landing_page_attributes and response_landing_page_attributes can reference the same layout_id if the visual frame is identical — which is the common case. Only create separate layouts if the pages need distinct headers or footers.
Set up a messaging event and define the expected payload. The following placeholders are required and must be present at the top level of the payload (e.g. json_path: $.email):
survey_question — the survey question textsurvey_link — the link to the survey landing pageemail — the respondent's email addressphone — the respondent's phone numberAlways create a dedicated messaging event per survey campaign. Reusing an existing event risks triggering its existing email/SMS/RCS templates, which are likely written for a different purpose and will produce wrong message content for the survey audience.
To send out the survey, create email/sms/rcs templates for the messaging event. See Admin / Mailer for more information.
List survey events for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| show_inactive | boolean Include inactive events when true. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "events": [
- {
- "id": 1,
- "name": "Customer Satisfaction Survey",
- "slug": "customer-satisfaction-survey",
- "question": "How satisfied are you?",
- "is_active": true,
- "mailer_event_id": 1,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}Create a survey event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "survey_event": {
- "name": "Customer Satisfaction Survey",
- "slug": "customer-satisfaction-survey",
- "question": "How satisfied are you?",
- "is_active": true,
- "mailer_event_id": 1,
- "vote_landing_page_attributes": {
- "title": "Vote Page",
- "layout_id": 1
}, - "response_landing_page_attributes": {
- "title": "Response Page",
- "layout_id": 1
}
}
}{- "success": true,
- "message": "Erfolgreich erstellt",
- "error": null,
- "data": {
- "id": 1,
- "name": "Customer Satisfaction Survey",
- "slug": "customer-satisfaction-survey",
- "question": "How satisfied are you?",
- "is_active": true,
- "mailer_event_id": 1,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Return a single survey event with its imports for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 |
| limit | integer Example: limit=200 Number of imports per page. |
| page | integer Example: page=1 Page number for imports. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "name": "Customer Satisfaction Survey",
- "slug": "customer-satisfaction-survey",
- "question": "How satisfied are you?",
- "is_active": true,
- "mailer_event_id": 1,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "imports": {
- "list": [
- {
- "id": 1,
- "type": "Survey::EventImport",
- "status": "completed",
- "created_at": "2019-08-24T14:15:22Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 0
}
}
}
}Update a survey event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "survey_event": {
- "name": "Updated Survey",
- "slug": "updated-survey",
- "question": "How satisfied are you?",
- "is_active": true,
- "mailer_event_id": 1,
- "vote_landing_page_attributes": {
- "title": "Vote Page",
- "layout_id": 1
}, - "response_landing_page_attributes": {
- "title": "Response Page",
- "layout_id": 1
}
}
}{- "success": true,
- "message": "Erfolgreich bearbeitet",
- "error": null,
- "data": {
- "id": 1,
- "name": "Updated Survey",
- "slug": "updated-survey",
- "question": "How satisfied are you?",
- "is_active": true,
- "mailer_event_id": 1,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Delete a survey event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Erfolgreich gelöscht",
- "error": null,
- "data": { }
}Return aggregated survey statistics for the given tenant.
| tenant required | string Example: ts The tenant slug |
| event_id | integer Example: event_id=1 Filter stats by a specific survey event ID. |
| time_range | string Example: time_range=2024-01 Time range filter (e.g. "2024-01", "custom"). Defaults to current month. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "overview_chart_stats": { },
- "filtered_overview_chart_stats": { }
}
}Admin API for injector (prefilled order journeys usind the Experience Engine or epilot) resources. OAuth2 bearer authentication only.
Setup order to create an injector campaign:
json_path: $.email):landing_page_link - the link to the landing page that features the prefilled order journey. The JSON path must be landing_page_link.Show aggregated injector stats for the given tenant.
| tenant required | string Example: ts The tenant slug |
| event_id | integer Example: event_id=1 Filter stats by a specific injector event ID. |
| time_range | string Example: time_range=2023-05-01 Time range for filtered stats (e.g. "2023-05-01" for a specific month, or "custom"). |
| start_date | string <date> Example: start_date=2023-05-01 Start date for custom time range (requires time_range=custom). |
| end_date | string <date> Example: end_date=2023-05-31 End date for custom time range (requires time_range=custom). |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "overview_chart_stats": [
- { }
], - "filtered_overview_chart_stats": [
- { }
]
}
}List injector abstract events for the given tenant.
| tenant required | string Example: ts The tenant slug |
| limit | integer Example: limit=200 Number of records per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "abstract_events": [
- {
- "id": 1,
- "type": "Injector::ExperienceEngineEvent",
- "name": "My Injector Event",
- "slug": "my-injector-event",
- "mailer_event_id": 1,
- "external_order_journey_id": "journey-123",
- "external_journey_link": null,
- "tenant_identifier": "my-tenant",
- "basic_auth_username": "user",
- "basic_auth_password": "********",
- "journey_password_required": false,
- "journey_password": null,
- "validity_days": 30,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 2
}
}
}Create an injector abstract event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "injector_abstract_event": {
- "type": "Injector::ExperienceEngineEvent",
- "name": "My Injector Event",
- "slug": "my-injector-event",
- "mailer_event_id": 1,
- "external_order_journey_id": "journey-123",
- "tenant_identifier": "my-tenant",
- "basic_auth_username": "user",
- "basic_auth_password": "pass",
- "journey_password_required": false,
- "journey_password": "secret",
- "validity_days": 30
}
}{- "success": true,
- "message": "Successfully created",
- "error": null,
- "data": { }
}Show an injector abstract event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the injector abstract event. |
| limit | integer Example: limit=200 Number of imports per page. |
| page | integer Example: page=1 Page number. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "type": "Injector::ExperienceEngineEvent",
- "name": "My Injector Event",
- "slug": "my-injector-event",
- "basic_auth_password": "********",
- "imports": {
- "list": [
- {
- "id": 1,
- "type": "Injector::EventImport",
- "status": "completed",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "pagination": {
- "current_page": 1,
- "items_per_page": 200,
- "total_pages": 1,
- "total_count": 0
}
}
}
}Update an injector abstract event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the injector abstract event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "injector_abstract_event": {
- "name": "Updated Name",
- "slug": "updated-slug",
- "journey_password_required": false,
- "journey_password": "secret",
- "tenant_identifier": "my-tenant",
- "basic_auth_username": "user",
- "basic_auth_password": "pass",
- "validity_days": 30
}
}{- "success": true,
- "message": "Successfully edited",
- "error": null,
- "data": { }
}Delete an injector abstract event for the given tenant.
| tenant required | string Example: ts The tenant slug |
| id required | integer Example: 1 The ID of the injector abstract event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Successfully deleted",
- "error": null,
- "data": { }
}Create a landing page template for the given injector event.
| tenant required | string Example: ts The tenant slug |
| abstract_event_id required | integer Example: 1 The ID of the injector abstract event. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "injector_landing_page_template": {
- "name": "My Landing Page",
- "html_content": "<html><body>Hello</body></html>"
}
}{- "success": true,
- "message": "Successfully created",
- "error": null,
- "data": {
- "id": 1,
- "injector_abstract_event_id": 1,
- "name": "My Landing Page",
- "html_content": "<html><body>Hello</body></html>",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Show the landing page template for the given injector event.
| tenant required | string Example: ts The tenant slug |
| abstract_event_id required | integer Example: 1 The ID of the injector abstract event. |
| id required | integer Example: 1 The ID of the landing page template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": null,
- "error": null,
- "data": {
- "id": 1,
- "injector_abstract_event_id": 1,
- "name": "My Landing Page",
- "html_content": "<html><body>Hello</body></html>",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update the landing page template for the given injector event.
| tenant required | string Example: ts The tenant slug |
| abstract_event_id required | integer Example: 1 The ID of the injector abstract event. |
| id required | integer Example: 1 The ID of the landing page template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
object |
{- "injector_landing_page_template": {
- "name": "Updated Name",
- "html_content": "<html><body>Updated</body></html>"
}
}{- "success": true,
- "message": "Successfully edited",
- "error": null,
- "data": { }
}Delete the landing page template for the given injector event.
| tenant required | string Example: ts The tenant slug |
| abstract_event_id required | integer Example: 1 The ID of the injector abstract event. |
| id required | integer Example: 1 The ID of the landing page template. |
| Accept required | string Example: application/json The accept header, only application/json is supported. |
{- "success": true,
- "message": "Successfully deleted",
- "error": null,
- "data": { }
}