---
title: "Dotdigital MCP server for AI agents - actionlake"
description: "Give Claude 324 Dotdigital actions through one MCP server: campaign activity, contacts. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/dotdigital
updated: 2026-10-23
---

Connectors · Email & messaging

# Dotdigital MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Dotdigital and the rest of your systems. It gives your agent 324 Dotdigital actions (170 reads, 107 writes and 47 that wait for a confirmation) and holds the Dotdigital credential itself, so the agent never does. It paces Dotdigital's limits and records every call.

[Connect Dotdigital free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "dotdigital.address_books.list",
  intent: "check which Dotdigital account is connected"
}
# Get lists · read · 1 upstream call
```

- 324 actions in one signed file
- 170 read look, never change
- 107 write create and update
- 47 wait for a yes destructive, confirmed first

Set up

## Connect Dotdigital in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Dotdigital.
   Username and secret. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `api_user` Dotdigital API user email (Settings > Access > API users; it looks like apiuser-xxxx@apiconnector.com)
   - `api_password` The API user's password
   - `region` Your Dotdigital region
   ```
   account { op: "connections.requirements", service: "dotdigital" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "dotdigital.address_books.list" }
   # get lists · read · 1 upstream call
   check { action: "dotdigital.address_books.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Dotdigital at a glance

**Sign-in**

Username and secret. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`api_user` `api_password`

**Setup fields**

`region`

**Limits we pace to**

2,000 calls an hour, per connection

**API covered**

Dotdigital API v2 + v3 services + CPaaS (OpenAPI documents for v3.5), at your Dotdigital instance's API base URL, which you enter when connecting (path -api.dotdigital.com)

**Built from**

Dotdigital's documentation, read 23 October 2026[developer.dotdigital.com](https://developer.dotdigital.com/openapi) [developer.dotdigital.com](https://developer.dotdigital.com/)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

169 of 170 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

4, so ask can line Dotdigital up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Dotdigital.

324 actions in 66 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **170** read look, never change
- **107** write create and update
- **47** destructive wait for a confirmation

1. ### Campaign activity
   22
   22 read · 0 write · 0 destructive
   Get campaign activity · Get campaign clicks · Get campaign clicks since date · Get campaign clicks and link groups
2. ### Contacts
   22
   11 read · 10 write · 1 destructive
   Get contacts · Create contact · Get contact · Update contact
3. ### Campaigns
   17
   10 read · 6 write · 1 destructive
   Get all campaigns · Create campaign · Get campaign · Update campaign
4. ### Profiles
   17
   3 read · 8 write · 6 destructive
   Creates a new Profile · Query profiles · Retrieves a Profile · Updates or undeletes a Profile
5. ### Address book contacts
   13
   5 read · 5 write · 3 destructive
   Get contacts from address book · Add contact to address book · Bulk import contacts in address book with merge option · Get modified contacts in address book since date
6. ### Chats
   12
   3 read · 7 write · 2 destructive
   Retrieves a list of chats · Creates a new chat · Retrieves a chat · Updates a chat
7. ### Cpaas analytics
   12
   12 read · 0 write · 0 destructive
   Retrieves chat analytics · Retrieves conversation message analytics · Retrieves live chat analytics · Retrieves message metrics
8. ### Contacts V3
   10
   4 read · 4 write · 2 destructive
   Create a contact · Get contacts based on your criteria · Get a contact by an identifier · Deletes a contact using a specific identifier

**58 more areas · 199 actions**

- Conversations **10**
- Address books **8**
- Insight data contact records **8**
- Transactional data **7**
- Webhooks **7**
- Chat team config **6**
- Insight data account records **6**
- Messages **6**
- SMS campaigns **6**
- Event subscriptions **5**
- Firehose configurations **5**
- Inbound rules **5**
- Insight data collections **5**
- Message templates **5**
- Preferences **5**
- Transactional emails **5**
- Whatsapp numbers **5**
- Chat messages **4**
- Contact imports **4**
- Contact preferences **4**
- Contact scores **4**
- Conversation messages **4**
- Email templates **4**
- Forms **4**
- Account **3**
- Campaign attachments **3**
- Custom identifiers **3**
- Data fields **3**
- Image folders **3**
- Insight data **3**
- Program enrolments **3**
- Segments **3**
- Sessions **3**
- Transactional data imports **3**
- Content **2**
- Document folders **2**
- Documents **2**
- Events **2**
- Form responses **2**
- Inbound messages **2**
- Marketing emails **2**
- Phone validation jobs **2**
- Presence **2**
- Profile opt in defaults **2**
- Programs **2**
- Transactional data collections **2**
- Whatsapp templates **2**
- Chat config **1**
- Custom from addresses **1**
- Ecommerce orders **1**
- Images **1**
- Phone validation **1**
- Product recommendations **1**
- Profile messages **1**
- SMS keywords **1**
- SMS messages **1**
- SMS numbers **1**
- SMS shortcodes **1**

Top actions

## The Dotdigital API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 36 of Dotdigital's 36 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `dotdigital.address_books.list` Get lists | Get lists. | read | `comm.audience.list` 26 connectors |
| `dotdigital.address_book_contacts.list` Get contacts from address book | Get contacts from address book. | read | `comm.audience_member.list` 23 connectors |
| `dotdigital.segments.list` Get segments | Get segments. | read | `comm.audience_segment.list` 22 connectors |
| `dotdigital.contacts.list` Get contacts | Get contacts. | read | `crm.contact.list` 177 connectors |
| `dotdigital.address_books.create` Create list | Create list. | write | `comm.audience.create` 24 connectors |
| `dotdigital.contacts.create` Create contact | Create contact. | write | `crm.contact.create` 161 connectors |
| `dotdigital.address_books.delete` Delete list | Delete list. | destructive | `comm.audience.delete` 21 connectors |
| `dotdigital.campaigns.list` Get all campaigns | Get all campaigns. | read | `comm.campaign.list` 41 connectors |
| `dotdigital.email_templates.list` Get templates | Get templates. | read | `comm.email_template.list` 40 connectors |
| `dotdigital.campaigns.create` Create campaign | Create campaign. | write | `comm.campaign.create` 38 connectors |
| `dotdigital.email_templates.create` Create template | Create template. | write | `comm.email_template.create` 34 connectors |
| `dotdigital.chats.create` Creates a new chat | Creates a new chat. | write | `comm.chat.create` 15 connectors |

Try it

## Prompts to paste into Claude.

Each one names the Dotdigital actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Find the Dotdigital contacts with no email address, so we can clean them up.
   calls `dotdigital.contacts.list`
2. Write write
   Create list in Dotdigital. Show me exactly what you will send before you save it.
   calls `dotdigital.address_books.create`
3. Across systems read
   Which contacts are in both Dotdigital and HaloPSA, and how many are in only one of them?
   calls `dotdigital.contacts.list` `halopsa.users.list`

Across your systems

## Dotdigital, joined to the rest of your business.

One `ask` fetches from Dotdigital and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

- Which contacts are in both Dotdigital and HaloPSA, and how many are in only one of them?
  `dotdigital.contacts.list` + `halopsa.users.list`, on `crm.contact` · [HaloPSA](https://actionlake.com/connectors/halopsa)
- Which contacts are in both Dotdigital and NetSuite, and how many are in only one of them?
  `dotdigital.contacts.list` + `netsuite.views.contacts`, on `crm.contact` · [NetSuite](https://actionlake.com/connectors/netsuite)

Also mapped by other connectors `crm.contact` **192** `comm.audience` **27** `comm.audience_segment` **18** `comm.audience_member` **16**

ask

```
ask {
  intent: "which contacts are in both Dotdigital and HaloPSA, and how many are in only one of them",
  steps: [
    { action: "dotdigital.contacts.list", as: "people", input: {}, limit: 100, max_pages: 5 },
    { action: "halopsa.users.list", as: "people2", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "people",
        right: "people2",
        on: "crm.contact",
        group_by: "people.email",
        select: ["people.email", "count(people2.id) as in_halopsa"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Dotdigital

## Destructive actions wait for a yes.

47 Dotdigital actions are destructive. The first 10:

- Delete list `dotdigital.address_books.delete`
- Delete contact `dotdigital.contacts.delete`
- Delete campaign `dotdigital.campaigns.delete`
- Deletes a Message `dotdigital.messages.delete`
- Deletes a chat `dotdigital.chats.delete`
- Deletes webhook `dotdigital.webhooks.delete`
- Delete a file `dotdigital.content.delete`
- Deletes a Profile `dotdigital.profiles.delete`
- Deletes a contact using a specific identifier `dotdigital.contacts_v3.delete`
- Delete contact data field `dotdigital.data_fields.delete`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do dotdigital.address_books.delete confirm_policy: **human**

Delete list?

**intent:** the user asked me to delete list

run suspended · waiting for a named person · key _dotdigital-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "dotdigital-agent",
  allowed_actions: ["dotdigital.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "dotdigital.address_books.delete", approver: "lead@example.com" },
    { match: "dotdigital.contacts.delete", approver: "lead@example.com" },
    { match: "dotdigital.campaigns.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Dotdigital only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Dotdigital costs on actionlake.

Every Dotdigital action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Dotdigital refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 324 Dotdigital actions
- 324 actions page each page of a long list is one call
- 169 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Dotdigital action.

324 actions by area: the id your agent calls, what it does, and its effect.

**Campaign activity 22**

- `dotdigital.campaign_activity.list` Get campaign activity read
- `dotdigital.campaign_activity.list_clicks` Get campaign clicks read
- `dotdigital.campaign_activity.list_clicks_since` Get campaign clicks since date read
- `dotdigital.campaign_activity.list_clicks_with_groups` Get campaign clicks and link groups read
- `dotdigital.campaign_activity.get_contact_activity` Get campaign activity for a contact read
- `dotdigital.campaign_activity.get_contact_revenue` Get campaign revenue for contact read
- and 16 more in this area

**Contacts 22**

- `dotdigital.contacts.create` Create contact write
- `dotdigital.contacts.get` Get contact read
- `dotdigital.contacts.list` Get contacts read
- `dotdigital.contacts.update` Update contact write
- `dotdigital.contacts.count` Get all contacts count read
- `dotdigital.contacts.create_with_consent` Create contact with consent write
- and 16 more in this area

**Campaigns 17**

- `dotdigital.campaigns.create` Create campaign write
- `dotdigital.campaigns.get` Get campaign read
- `dotdigital.campaigns.list` Get all campaigns read
- `dotdigital.campaigns.update` Update campaign write
- `dotdigital.campaigns.copy` Copy campaign write
- `dotdigital.campaigns.create_split_test` Create split test campaign write
- and 11 more in this area

**Profiles 17**

- `dotdigital.profiles.create` Creates a new Profile write
- `dotdigital.profiles.get` Retrieves a Profile read
- `dotdigital.profiles.list` Query profiles read
- `dotdigital.profiles.update` Updates or undeletes a Profile write
- `dotdigital.profiles.add_link` Creates a relationship where this profile is the primary and the linked profile is a child write
- `dotdigital.profiles.delete` Deletes a Profile destructive
- and 11 more in this area

**Address book contacts 13**

- `dotdigital.address_book_contacts.add` Add contact to address book write
- `dotdigital.address_book_contacts.import` Bulk import contacts in address book with merge option write
- `dotdigital.address_book_contacts.list` Get contacts from address book read
- `dotdigital.address_book_contacts.list_modified_since` Get modified contacts in address book since date read
- `dotdigital.address_book_contacts.list_preference_opt_ins_since` Get contacts with modified preference opt-in in address book since date read
- `dotdigital.address_book_contacts.list_unsubscribed_since` Get unsubscribed from list since date read
- and 7 more in this area

**Chats 12**

- `dotdigital.chats.create` Creates a new chat write
- `dotdigital.chats.get` Retrieves a chat read
- `dotdigital.chats.list` Retrieves a list of chats read
- `dotdigital.chats.update` Updates a chat write
- `dotdigital.chats.assign` Assigns a chat write
- `dotdigital.chats.change_channel` Changes the channel for an existing chat write
- and 6 more in this area

**Cpaas analytics 12**

- `dotdigital.cpaas_analytics.get_chats` Retrieves chat analytics read
- `dotdigital.cpaas_analytics.get_conversation_messages` Retrieves conversation message analytics read
- `dotdigital.cpaas_analytics.get_live_chats` Retrieves live chat analytics read
- `dotdigital.cpaas_analytics.get_message_metrics` Retrieves message metrics read
- `dotdigital.cpaas_analytics.get_messages` Retrieves message analytics read
- `dotdigital.cpaas_analytics.get_sessions` Retrieves session analytics read
- and 6 more in this area

**Contacts V3 10**

- `dotdigital.contacts_v3.create` Create a contact write
- `dotdigital.contacts_v3.delete` Deletes a contact using a specific identifier destructive
- `dotdigital.contacts_v3.get` Get a contact by an identifier read
- `dotdigital.contacts_v3.list` Get contacts based on your criteria read
- `dotdigital.contacts_v3.delete_many` Delete multiple contacts destructive
- `dotdigital.contacts_v3.get_deletion_status` Get the status of a delete contacts job read
- and 4 more in this area

**Conversations 10**

- `dotdigital.conversations.create` Creates a new conversation write
- `dotdigital.conversations.get` Retrieves a conversation read
- `dotdigital.conversations.list` Retrieves a list of conversations read
- `dotdigital.conversations.update` Updates a conversation write
- `dotdigital.conversations.add_participants` Adds a list of participants to a conversation write
- `dotdigital.conversations.delete` Deletes a conversation destructive
- and 4 more in this area

**Address books 8**

- `dotdigital.address_books.create` Create list write
- `dotdigital.address_books.get` Get list read
- `dotdigital.address_books.list` Get lists read
- `dotdigital.address_books.update` Update list write
- `dotdigital.address_books.delete` Delete list destructive
- `dotdigital.address_books.list_campaigns` Get campaigns sent to address book or segment read
- and 2 more in this area

**Insight data contact records 8**

- `dotdigital.insight_data_contact_records.delete` Delete record from Insight data collection for a contact destructive
- `dotdigital.insight_data_contact_records.get` Retrieve Insight data record for a contact read
- `dotdigital.insight_data_contact_records.list` Retrieve records for a contact from Insight data collection read
- `dotdigital.insight_data_contact_records.list_all` Retrieve data for contact-scoped Insight data collection read
- `dotdigital.insight_data_contact_records.delete_many` Deletes multiple records from an contact scoped Insight Data collection destructive
- `dotdigital.insight_data_contact_records.empty` Empty Insight data collection for a contact destructive
- and 2 more in this area

**Transactional data 7**

- `dotdigital.transactional_data.create` Add transactional data to contact write
- `dotdigital.transactional_data.delete` Delete transactional data by key destructive
- `dotdigital.transactional_data.get` Get transactional data by key read
- `dotdigital.transactional_data.list_account_scoped` Get account scoped transactional data read
- `dotdigital.transactional_data.delete_for_contact` Delete transactional data collection for contact destructive
- `dotdigital.transactional_data.list_for_contact` Get transactional data collection for contact by email read
- and 1 more in this area

**Webhooks 7**

- `dotdigital.webhooks.create` Create webhook write
- `dotdigital.webhooks.get` Retrieves webhook configuration read
- `dotdigital.webhooks.list` Get webhooks read
- `dotdigital.webhooks.update` Update webhook configuration write
- `dotdigital.webhooks.delete` Deletes webhook destructive
- `dotdigital.webhooks.list_available_events` Retrieves available webhook events read
- and 1 more in this area

**Chat team config 6**

- `dotdigital.chat_team_config.delete` Removes the config for a team destructive
- `dotdigital.chat_team_config.get` Retrieves the members of a team read
- `dotdigital.chat_team_config.update_app_messaging` Update the App Messaging config for a team write
- `dotdigital.chat_team_config.update_settings` Update general settings for a team write
- `dotdigital.chat_team_config.delete_app_messaging` Removes the App Messaging config for a team destructive
- `dotdigital.chat_team_config.delete_settings` Removes the settings for a team destructive

**Insight data account records 6**

- `dotdigital.insight_data_account_records.delete` Delete record from an account Insight data collection destructive
- `dotdigital.insight_data_account_records.get` Retrieve single record from an account Insight data collection read
- `dotdigital.insight_data_account_records.list` Retrieves records from an accounts Insight data collection read
- `dotdigital.insight_data_account_records.list_collections` List account Insight data collections read
- `dotdigital.insight_data_account_records.delete_many` Deletes multiple records from an account scoped Insight Data collection destructive
- `dotdigital.insight_data_account_records.put` Upsert record into an account Insight data collection write

**Messages 6**

- `dotdigital.messages.delete` Deletes a Message destructive
- `dotdigital.messages.get` Retrieves the current state of a specific message read
- `dotdigital.messages.post_status` Posts a status for a message write
- `dotdigital.messages.send` Send a new message write
- `dotdigital.messages.redact` Patches a Message write
- `dotdigital.messages.send_batch` Send a batch of new messages write

**SMS campaigns 6**

- `dotdigital.sms_campaigns.create` Create SMS campaign write
- `dotdigital.sms_campaigns.get` Get SMS campaign read
- `dotdigital.sms_campaigns.list` Get SMS campaigns read
- `dotdigital.sms_campaigns.update` Update SMS campaign write
- `dotdigital.sms_campaigns.copy` Copy SMS campaign write
- `dotdigital.sms_campaigns.delete` Delete SMS campaign destructive

**Event subscriptions 5**

- `dotdigital.event_subscriptions.create` Create subscription write
- `dotdigital.event_subscriptions.get` Gets subscription read
- `dotdigital.event_subscriptions.list` List subscriptions read
- `dotdigital.event_subscriptions.update` Update subscription write
- `dotdigital.event_subscriptions.delete` Deletes subscription destructive

**Firehose configurations 5**

- `dotdigital.firehose_configurations.create` Add configuration write
- `dotdigital.firehose_configurations.delete` Delete configuration destructive
- `dotdigital.firehose_configurations.get` Get configuration read
- `dotdigital.firehose_configurations.update` Update configuration write
- `dotdigital.firehose_configurations.update_status` Update configuration status write

**Inbound rules 5**

- `dotdigital.inbound_rules.create` Create a message rule configuration write
- `dotdigital.inbound_rules.get` Retrieves single message rule configuration read
- `dotdigital.inbound_rules.list` Retrieves a message rules configuration list read
- `dotdigital.inbound_rules.update` Update single message rule configuration write
- `dotdigital.inbound_rules.delete` Delete single message rule configuration destructive

**Insight data collections 5**

- `dotdigital.insight_data_collections.create` Creates an Insight data collection write
- `dotdigital.insight_data_collections.delete` Deletes an Insight data collection destructive
- `dotdigital.insight_data_collections.get_schema` Gets the JSON schema for an Insight data collection read
- `dotdigital.insight_data_collections.list` Lists all Insight data collections read
- `dotdigital.insight_data_collections.empty` Empties an Insight data collection destructive

**Message templates 5**

- `dotdigital.message_templates.create` Create a template write
- `dotdigital.message_templates.get` Retrieves a template read
- `dotdigital.message_templates.list` Retrieves a list of all available templates read
- `dotdigital.message_templates.update` Updates a template write
- `dotdigital.message_templates.delete` Deletes a template destructive

**Preferences 5**

- `dotdigital.preferences.create` Create preference write
- `dotdigital.preferences.delete` Delete preference destructive
- `dotdigital.preferences.list` Get preferences read
- `dotdigital.preferences.update` Update preference write
- `dotdigital.preferences.list_modified_since` Get modified preferences since date read

**Transactional emails 5**

- `dotdigital.transactional_emails.send` Send transactional email write
- `dotdigital.transactional_emails.send_batch` Send batch transactional email write
- `dotdigital.transactional_emails.send_triggered_campaign` Send transactional email using a triggered campaign write
- `dotdigital.transactional_emails.send_triggered_campaign_batch` Send batch transactional email using a triggered campaign write
- `dotdigital.transactional_emails.get_stats_since` Get transactional email statistics read

**Whatsapp numbers 5**

- `dotdigital.whatsapp_numbers.create` Creates WhatsApp configuration write
- `dotdigital.whatsapp_numbers.delete` Removes WhatsApp number destructive
- `dotdigital.whatsapp_numbers.get` Get WhatsApp number read
- `dotdigital.whatsapp_numbers.list` Get WhatsApp configuration for API Space read
- `dotdigital.whatsapp_numbers.register` Registers WhatsApp number write

**Chat messages 4**

- `dotdigital.chat_messages.list` Retrieves a chat's messages from an point (event) in time and works backwards read
- `dotdigital.chat_messages.list_events` Retrieves a chat's events read
- `dotdigital.chat_messages.post_status_updates` Posts message updates back write
- `dotdigital.chat_messages.send` Sends a message to chat write

**Contact imports 4**

- `dotdigital.contact_imports.create` Bulk import contacts write
- `dotdigital.contact_imports.create_from_collection` Bulk import contacts collection write
- `dotdigital.contact_imports.get` Get contact import status read
- `dotdigital.contact_imports.get_report` Get contact import report read

**Contact preferences 4**

- `dotdigital.contact_preferences.get` Get preferences for contact read
- `dotdigital.contact_preferences.list_contacts_opted_in` Get contacts opted into a preference read
- `dotdigital.contact_preferences.list_opt_ins_since` Get contacts with modified preference opt-in since date read
- `dotdigital.contact_preferences.set` Set preferences for contact write

**Contact scores 4**

- `dotdigital.contact_scores.get` Get scoring for contact read
- `dotdigital.contact_scores.list` Get scoring for contacts read
- `dotdigital.contact_scores.list_for_address_book` Get scoring for contacts in address book read
- `dotdigital.contact_scores.list_modified_since` Get scoring modified since date for contacts read

**Conversation messages 4**

- `dotdigital.conversation_messages.list` Retrieves a conversation's messages from an point (event) in time and works backwards read
- `dotdigital.conversation_messages.list_events` Retrieves a conversation's events read
- `dotdigital.conversation_messages.post_status_updates` Posts message updates back write
- `dotdigital.conversation_messages.send` Sends a message to conversation write

**Email templates 4**

- `dotdigital.email_templates.create` Create template write
- `dotdigital.email_templates.get` Get template by id read
- `dotdigital.email_templates.list` Get templates read
- `dotdigital.email_templates.update` Update template write

**Forms 4**

- `dotdigital.forms.get` Get form by ID read
- `dotdigital.forms.list` Get forms read
- `dotdigital.forms.list_fields` Get form fields read
- `dotdigital.forms.list_with_activity_since` Get forms with activity since date read

**Account 3**

- `dotdigital.account.empty_recycle_bin` Empty recycle bin destructive
- `dotdigital.account.get` Get account information read
- `dotdigital.account.get_server_time` Get server time read

**Campaign attachments 3**

- `dotdigital.campaign_attachments.add` Add campaign attachment write
- `dotdigital.campaign_attachments.list` Get campaign attachments read
- `dotdigital.campaign_attachments.remove` Remove campaign attachment destructive

**Custom identifiers 3**

- `dotdigital.custom_identifiers.create` Creates a custom identifier write
- `dotdigital.custom_identifiers.delete` Delete a custom identifier by name destructive
- `dotdigital.custom_identifiers.list` Get all custom identifiers read

**Data fields 3**

- `dotdigital.data_fields.create` Create contact data field write
- `dotdigital.data_fields.delete` Delete contact data field destructive
- `dotdigital.data_fields.list` Get contact data fields read

**Image folders 3**

- `dotdigital.image_folders.create` Create image folder write
- `dotdigital.image_folders.get` Get image folders by id read
- `dotdigital.image_folders.list` Get image folders read

**Insight data 3**

- `dotdigital.insight_data.get_async_job_status` Retrieve the status of an asynchronous request read
- `dotdigital.insight_data.get_import_status` Retrieve the status of an Insight data import request read
- `dotdigital.insight_data.import` Bulk imports Insight data write

**Program enrolments 3**

- `dotdigital.program_enrolments.create` Create program enrolment write
- `dotdigital.program_enrolments.get` Gets an enrolment by ID read
- `dotdigital.program_enrolments.list_by_status` Gets enrolments by status read

**Segments 3**

- `dotdigital.segments.get_refresh_progress` Get refresh progress for segment read
- `dotdigital.segments.list` Get segments read
- `dotdigital.segments.refresh` Refresh segment write

**Sessions 3**

- `dotdigital.sessions.end` Ends a session, revoking access to services destructive
- `dotdigital.sessions.get` Retrieves details about a session read
- `dotdigital.sessions.get_anonymous_token` Gets a token that can be used to start an anonymous session read

**Transactional data imports 3**

- `dotdigital.transactional_data_imports.create` Bulk add transactional data to contacts write
- `dotdigital.transactional_data_imports.get` Get transactional data import status read
- `dotdigital.transactional_data_imports.get_report` Get transactional data import report read

**Content 2**

- `dotdigital.content.delete` Delete a file destructive
- `dotdigital.content.upload` Upload a file write

**Document folders 2**

- `dotdigital.document_folders.create` Create document folder write
- `dotdigital.document_folders.list` Get document folders read

**Documents 2**

- `dotdigital.documents.list` Get documents in folder read
- `dotdigital.documents.upload` Upload document write

**Events 2**

- `dotdigital.events.export` Retrieve events read
- `dotdigital.events.import` Import a collection of events write

**Form responses 2**

- `dotdigital.form_responses.list` Get form responses read
- `dotdigital.form_responses.list_with_activity_since` Get form responses with activity since date read

**Inbound messages 2**

- `dotdigital.inbound_messages.create` Posts an inbound message write
- `dotdigital.inbound_messages.post_status` Posts a status for an inbound write

**Marketing emails 2**

- `dotdigital.marketing_emails.send` Send marketing email write
- `dotdigital.marketing_emails.send_batch` Send batch marketing emails write

**Phone validation jobs 2**

- `dotdigital.phone_validation_jobs.get` Get bulk job details read
- `dotdigital.phone_validation_jobs.list` List bulk validation jobs read

**Presence 2**

- `dotdigital.presence.list_agents` Retrieves the presence for a list of agent's profileIds read
- `dotdigital.presence.list_app_messaging_users` Retrieves the presence for a list of user's profileIds read

**Profile opt in defaults 2**

- `dotdigital.profile_opt_in_defaults.get` Gets default profiles opt in/out options for each channel in channel service read
- `dotdigital.profile_opt_in_defaults.set` Set default profiles opt in/out options for each channel in channel service write

**Programs 2**

- `dotdigital.programs.get` Get program by ID read
- `dotdigital.programs.list` Get programs read

**Transactional data collections 2**

- `dotdigital.transactional_data_collections.empty` Empty transactional data collection destructive
- `dotdigital.transactional_data_collections.list` Get transactional data collections read

**Whatsapp templates 2**

- `dotdigital.whatsapp_templates.get` Get WhatsApp template read
- `dotdigital.whatsapp_templates.list` Get WhatsApp templates read

**Chat config 1**

- `dotdigital.chat_config.get` Retrieves the chat configuration for an apiSpace read

**Custom from addresses 1**

- `dotdigital.custom_from_addresses.list` Get custom from addresses read

**Ecommerce orders 1**

- `dotdigital.ecommerce_orders.list` Get orders since date read

**Images 1**

- `dotdigital.images.upload` Upload image write

**Phone validation 1**

- `dotdigital.phone_validation.validate` Validate a single number read

**Product recommendations 1**

- `dotdigital.product_recommendations.list` Get all product recommendations read

**Profile messages 1**

- `dotdigital.profile_messages.list` Retrieves message history for the specified profile. Messages retrieved from the date spacified (default now), in desce… read

**SMS keywords 1**

- `dotdigital.sms_keywords.list` Get SMS keywords read

**SMS messages 1**

- `dotdigital.sms_messages.send` Send SMS message write

**SMS numbers 1**

- `dotdigital.sms_numbers.list` Get SMS phone numbers read

**SMS shortcodes 1**

- `dotdigital.sms_shortcodes.list` Get SMS shortcodes read

This index shows a sample of each area. All 324 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The Dotdigital MCP server, answered.

**Is there a Dotdigital MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 324 Dotdigital actions across campaign activity, contacts, campaigns and profiles, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Dotdigital.

**What do I need to connect Dotdigital?**

Dotdigital API user email (Settings > Access > API users; it looks like apiuser-xxxx@apiconnector.com) and The API user's password. Plus your region. The free call account { op: "connections.requirements", service: "dotdigital" } lists exactly what to paste.

**Can an AI agent delete or change things in Dotdigital?**

Only if its key allows it, and only with an explicit confirmation. 47 Dotdigital actions are destructive, including delete list, delete contact and delete campaign. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Dotdigital API limit?**

actionlake paces every call to the limits in the Dotdigital service file: 2,000 calls an hour per connection. Repeated reads are answered from cache (169 Dotdigital actions can be), which never reaches Dotdigital.

**What does a Dotdigital action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (324 Dotdigital actions page). Cache hits, searches, dry runs and calls Dotdigital refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Dotdigital API does it cover?**

The Dotdigital API v2 + v3 services + CPaaS (OpenAPI documents for v3.5) at your Dotdigital instance's API base URL, which you enter when connecting (path -api.dotdigital.com). It is built from Dotdigital's documentation as read on 23 October 2026. 324 actions in 66 areas, each one in the signed service file (version 1.0.0).

**Can I combine Dotdigital with my other systems?**

Yes. ask joins Dotdigital to HaloPSA or NetSuite on the same customer and returns the answer rather than every row. Dotdigital maps crm.contact, which 192 other connectors also map.

**Does actionlake keep my Dotdigital data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Dotdigital credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Dotdigital

Shares the most action names with

- [Bird 29](https://actionlake.com/connectors/bird)
- [Sinch Mailjet 26](https://actionlake.com/connectors/sinch-mailjet)
- [Elastic Email 26](https://actionlake.com/connectors/elastic-email)
- [Mailtrap 20](https://actionlake.com/connectors/mailtrap)
- [Sinch 14](https://actionlake.com/connectors/sinch)
- [SparkPost 14](https://actionlake.com/connectors/sparkpost)

Joins with, on shared entities

- [Brevo 3](https://actionlake.com/connectors/brevo)
- [Circle 3](https://actionlake.com/connectors/circle)
- [beehiiv 3](https://actionlake.com/connectors/beehiiv)
- [ActiveCampaign 2](https://actionlake.com/connectors/activecampaign)
- [Cvent 2](https://actionlake.com/connectors/cvent)
- [Qualtrics XM 2](https://actionlake.com/connectors/qualtrics-xm)

Browse

- [All Email & messaging connectors](https://actionlake.com/connectors/category/email-and-messaging)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Dotdigital; the name is the vendor's own. Counts are from the Dotdigital service file, version 1.0.0.

## Give your agent Dotdigital today.

[Connect Dotdigital free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/dotdigital
More: https://actionlake.com/llms.txt
