# Manychat

> Work with the contacts in a Manychat account across Instagram, Messenger, WhatsApp, Telegram, SMS and email: find one by name, email or phone, update their name, tag them, set or clear their fields, read and set the bot's own fields, and send a contact an automation built in Manychat.

App · Marketing Automation · 19 actions. Web page: https://docs.lodol.com/docs/integrations/manychat

## Actions

### Add tag to contact

Tag one contact. Manychat creates the tag on the account first if it does not have it, so this does not need 'Create tag' in front of it.

**Inputs**

- Contact ID (`subscriber_id`, text, required): The contact to act on. Manychat shows the id on a contact card under Contacts, and every contact action here returns it as 'id'. A contact exists only once someone has messaged the bot - this integration cannot create one. Contacts are not offered as a list because an account has as many as it has ever talked to - use 'Find contacts by name' or 'Find contact by email or phone' to get one.
- Tag (`tag_name`, text, required): The tag's name, as it appears in Manychat under Settings > Tags. Pick one from the list, or type a name - including one an earlier step in this workflow created, which the list will not have yet.

**Outputs**

- `added` (true/false): Always true - Manychat reported no error
- `subscriber_id` (text): The contact that was tagged
- `tag_name` (text): The tag that was added

**Example output**

```json
{
  "added": true,
  "subscriber_id": "987654321",
  "tag_name": "VIP"
}
```

### Create bot field

Define a new account-wide variable the bot can read, optionally with a starting value. As with a contact field, the type is fixed at creation.

**Inputs**

- Field name (`name`, text, required): What to call the bot field.
- Field type (`field_type`, text, required): What the field holds. This is fixed when the field is created and decides what its value has to look like: a date field takes 2026-09-14, a date-and-time field takes a full timestamp. One of: `text`, `number`, `date`, `datetime` (Date and time), `boolean` (True or false). Default: `text`.
- Description (`description`, text): An optional note about what the field is for, shown beside it in Manychat.
- Starting value (`value`, text): An optional first value. It must suit the type chosen above; leave it empty to create the field unset.

**Outputs**

- `bot_field` (object): The bot field that was created

**Example output**

```json
{
  "bot_field": {
    "description": "The code the bot quotes",
    "id": 66301,
    "name": "Current promotion",
    "type": "text",
    "value": "SPRING25"
  }
}
```

### Create contact field

Define a new field that every contact can hold a value for. The type is fixed at creation and decides what values the field accepts afterwards, so pick it deliberately: Manychat offers no way to change it later.

**Inputs**

- Field name (`caption`, text, required): What to call the field. Manychat calls this the caption when the field is created and the name everywhere afterwards.
- Field type (`field_type`, text, required): What the field holds. This is fixed when the field is created and decides what its value has to look like: a date field takes 2026-09-14, a date-and-time field takes a full timestamp. One of: `text`, `number`, `date`, `datetime` (Date and time), `boolean` (True or false). Default: `text`.
- Description (`description`, text): An optional note about what the field is for, shown beside it in Manychat.

**Outputs**

- `custom_field` (object): The contact field that was created

**Example output**

```json
{
  "custom_field": {
    "description": "What this contact usually orders",
    "id": 55201,
    "name": "Favourite roast",
    "type": "text"
  }
}
```

### Create tag

Add a tag to the account so contacts can be segmented by it. Returns the new tag with the id every other tag action uses. Tagging a contact does not need this first: 'Add tag to contact' creates the tag if the account does not have it.

**Inputs**

- Tag name (`name`, text, required): What to call the tag. This is what appears in Manychat under Settings > Tags.

**Outputs**

- `tag` (object): The tag that was created

**Example output**

```json
{
  "tag": {
    "id": 44101,
    "name": "Newsletter"
  }
}
```

### Delete tag

Delete a tag from the whole account. Manychat also strips it from every contact carrying it, and this cannot be undone. To untag one contact and leave the tag alone, use 'Remove tag from contact' instead.

**Inputs**

- Tag (`tag_id`, text, required): The tag to delete, picked from the account's tags. A tag id from an earlier step can be typed in instead.

**Outputs**

- `deleted` (true/false): Always true - Manychat reported no error
- `tag_id` (number): The tag that was deleted

**Example output**

```json
{
  "deleted": true,
  "tag_id": 44102
}
```

### Find contact by email or phone

Look one contact up by their email address or their phone number - an exact match, not a search. Set one of the two, not both. Nothing matching is an answer rather than a failure: 'found' comes back false and the workflow can branch on it.

**Inputs**

- Email address (`email`, text): The contact's email address. Leave empty if searching by phone number.
- Phone number (`phone`, text): The contact's phone number. Leave empty if searching by email address.

**Outputs**

- `found` (true/false): Whether a contact matched
- `subscriber` (object): The contact, or empty when none matched

**Example output**

```json
{
  "found": true,
  "subscriber": {
    "custom_fields": [
      {
        "description": "What this contact usually orders",
        "id": 55201,
        "name": "Favourite roast",
        "type": "text",
        "value": "Ethiopian"
      }
    ],
    "email": "ada@example.com",
    "first_name": "Ada",
    "gender": "female",
    "id": "987654321",
    "ig_id": 6384638,
    "ig_username": "ada.lovelace",
    "is_followup_enabled": true,
    "language": "en",
    "last_input_text": "When do you open?",
    "last_interaction": "2026-09-13T17:42:00+01:00",
    "last_name": "Lovelace",
    "last_seen": "2026-09-13T17:42:00+01:00",
    "live_chat_url": "https://app.manychat.com/fb1234567890/chat/987654321",
    "locale": "en_GB",
    "name": "Ada Lovelace",
    "optin_email": true,
    "optin_phone": false,
    "optin_whatsapp": false,
    "page_id": "1234567890",
    "phone": "",
    "profile_pic": "https://scontent.example.com/ada.jpg",
    "subscribed": "2026-02-01T09:15:00+01:00",
    "tags": [
      {
        "id": 44101,
        "name": "Newsletter"
      }
    ],
    "timezone": "UTC+01:00",
    "user_refs": [],
    "whatsapp_bsuid": null,
    "whatsapp_phone": "",
    "whatsapp_username": null
  }
}
```

### Find contacts by name

Search the account's contacts by full name. Manychat caps this at 100 results and offers no second page, so a search that hits the cap is reported as such rather than pretending to be complete. For an exact match, use 'Find contact by email or phone'.

**Inputs**

- Full name (`name`, text, required): The name to search for. Manychat matches against a contact's full name, so 'Ada Lovelace' rather than 'Ada'.

**Outputs**

- `count` (number): How many contacts matched
- `limit_reached` (true/false): True when the cap was hit, meaning matches were dropped
- `result_limit` (number): The most Manychat will return from this search (100)
- `subscribers` (list): The contacts that matched

**Example output**

```json
{
  "count": 1,
  "limit_reached": false,
  "result_limit": 100,
  "subscribers": [
    {
      "custom_fields": [
        {
          "description": "What this contact usually orders",
          "id": 55201,
          "name": "Favourite roast",
          "type": "text",
          "value": "Ethiopian"
        }
      ],
      "email": "ada@example.com",
      "first_name": "Ada",
      "gender": "female",
      "id": "987654321",
      "ig_id": 6384638,
      "ig_username": "ada.lovelace",
      "is_followup_enabled": true,
      "language": "en",
      "last_input_text": "When do you open?",
      "last_interaction": "2026-09-13T17:42:00+01:00",
      "last_name": "Lovelace",
      "last_seen": "2026-09-13T17:42:00+01:00",
      "live_chat_url": "https://app.manychat.com/fb1234567890/chat/987654321",
      "locale": "en_GB",
      "name": "Ada Lovelace",
      "optin_email": true,
      "optin_phone": false,
      "optin_whatsapp": false,
      "page_id": "1234567890",
      "phone": "",
      "profile_pic": "https://scontent.example.com/ada.jpg",
      "subscribed": "2026-02-01T09:15:00+01:00",
      "tags": [
        {
          "id": 44101,
          "name": "Newsletter"
        }
      ],
      "timezone": "UTC+01:00",
      "user_refs": [],
      "whatsapp_bsuid": null,
      "whatsapp_phone": "",
      "whatsapp_username": null
    }
  ]
}
```

### Get account details

The Manychat account this connection reaches: its name, username, category, avatar, timezone and whether it is on a Pro plan. The cheapest way to confirm a connection is alive, and the way to tell which of several Manychat accounts a workflow is pointed at - an API key belongs to exactly one.

**Inputs**: None.

**Outputs**

- `page` (object): The connected Manychat account

**Example output**

```json
{
  "page": {
    "about": "Small-batch roasters.",
    "avatar_link": "https://scontent.example.com/northwind.jpg",
    "category": "Coffee shop",
    "description": "Order updates and offers.",
    "id": 1234567890,
    "is_pro": true,
    "name": "Northwind Coffee",
    "timezone": "UTC+01:00",
    "username": "northwindcoffee"
  }
}
```

### Get contact

One contact in full: names, channel handles and opt-ins for Instagram, Messenger, WhatsApp, SMS and email, when they last interacted, every tag they carry and every contact field's value.

**Inputs**

- Contact ID (`subscriber_id`, text, required): The contact to act on. Manychat shows the id on a contact card under Contacts, and every contact action here returns it as 'id'. A contact exists only once someone has messaged the bot - this integration cannot create one. Contacts are not offered as a list because an account has as many as it has ever talked to - use 'Find contacts by name' or 'Find contact by email or phone' to get one.

**Outputs**

- `subscriber` (object): The contact

**Example output**

```json
{
  "subscriber": {
    "custom_fields": [
      {
        "description": "What this contact usually orders",
        "id": 55201,
        "name": "Favourite roast",
        "type": "text",
        "value": "Ethiopian"
      }
    ],
    "email": "ada@example.com",
    "first_name": "Ada",
    "gender": "female",
    "id": "987654321",
    "ig_id": 6384638,
    "ig_username": "ada.lovelace",
    "is_followup_enabled": true,
    "language": "en",
    "last_input_text": "When do you open?",
    "last_interaction": "2026-09-13T17:42:00+01:00",
    "last_name": "Lovelace",
    "last_seen": "2026-09-13T17:42:00+01:00",
    "live_chat_url": "https://app.manychat.com/fb1234567890/chat/987654321",
    "locale": "en_GB",
    "name": "Ada Lovelace",
    "optin_email": true,
    "optin_phone": false,
    "optin_whatsapp": false,
    "page_id": "1234567890",
    "phone": "",
    "profile_pic": "https://scontent.example.com/ada.jpg",
    "subscribed": "2026-02-01T09:15:00+01:00",
    "tags": [
      {
        "id": 44101,
        "name": "Newsletter"
      }
    ],
    "timezone": "UTC+01:00",
    "user_refs": [],
    "whatsapp_bsuid": null,
    "whatsapp_phone": "",
    "whatsapp_username": null
  }
}
```

### List automations

Every automation built in this Manychat account, with the folders they are filed in. The 'ns' of an automation is the only identifier 'Send automation' accepts, and this is where it comes from.

**Inputs**: None.

**Outputs**

- `count` (number): How many automations the account has
- `flows` (list): Every automation, each with the 'ns' that names it
- `folder_count` (number): How many folders they are filed in
- `folders` (list): The folders the automations are filed in

**Example output**

```json
{
  "count": 2,
  "flows": [
    {
      "folder_id": 77401,
      "name": "Welcome sequence",
      "ns": "content20260201120000_123456"
    },
    {
      "folder_id": 77401,
      "name": "Abandoned cart",
      "ns": "content20260210093000_123457"
    }
  ],
  "folder_count": 1,
  "folders": [
    {
      "id": 77401,
      "name": "Onboarding",
      "parent_id": 0
    }
  ]
}
```

### List bot fields

Every bot field on the account, with its current value. A bot field is one value for the whole bot - today's promo code, whether the shop is open - unlike a contact field, which holds a value per contact.

**Inputs**: None.

**Outputs**

- `bot_fields` (list): Every bot field on the account, with its current value
- `count` (number): How many bot fields the account has

**Example output**

```json
{
  "bot_fields": [
    {
      "description": "The code the bot quotes",
      "id": 66301,
      "name": "Current promotion",
      "type": "text",
      "value": "SPRING25"
    },
    {
      "description": "Whether the shop is taking orders",
      "id": 66302,
      "name": "Shop open",
      "type": "boolean",
      "value": true
    }
  ],
  "count": 2
}
```

### List contact fields

Every contact field defined on the account, with its type. A contact field holds a different value for each contact - 'Favourite roast', 'Last order date'. For the bot's own account-wide variables, use 'List bot fields'.

**Inputs**: None.

**Outputs**

- `count` (number): How many contact fields the account has
- `custom_fields` (list): Every contact field on the account

**Example output**

```json
{
  "count": 2,
  "custom_fields": [
    {
      "description": "What this contact usually orders",
      "id": 55201,
      "name": "Favourite roast",
      "type": "text"
    },
    {
      "description": "When they last ordered",
      "id": 55202,
      "name": "Last order date",
      "type": "date"
    }
  ]
}
```

### List tags

Every tag on the account, with the id each one is deleted by. Manychat returns the whole list in one call - there is no page two - so the count is the account's total.

**Inputs**: None.

**Outputs**

- `count` (number): How many tags the account has
- `tags` (list): Every tag on the account

**Example output**

```json
{
  "count": 2,
  "tags": [
    {
      "id": 44101,
      "name": "Newsletter"
    },
    {
      "id": 44102,
      "name": "VIP"
    }
  ]
}
```

### Remove tag from contact

Take a tag off one contact. The tag itself stays on the account and every other contact keeps it - 'Delete tag' is the one that removes it everywhere.

**Inputs**

- Contact ID (`subscriber_id`, text, required): The contact to act on. Manychat shows the id on a contact card under Contacts, and every contact action here returns it as 'id'. A contact exists only once someone has messaged the bot - this integration cannot create one. Contacts are not offered as a list because an account has as many as it has ever talked to - use 'Find contacts by name' or 'Find contact by email or phone' to get one.
- Tag (`tag_name`, text, required): The tag's name, as it appears in Manychat under Settings > Tags. Pick one from the list, or type a name - including one an earlier step in this workflow created, which the list will not have yet.

**Outputs**

- `removed` (true/false): Always true - Manychat reported no error
- `subscriber_id` (text): The contact the tag was taken off
- `tag_name` (text): The tag that was removed

**Example output**

```json
{
  "removed": true,
  "subscriber_id": "987654321",
  "tag_name": "VIP"
}
```

### Send automation to contact

Start one of the account's automations for a contact. This is how a workflow messages someone through Manychat: the automation was built in Manychat, so Manychat applies its own sending rules and channel choice to it. Manychat allows 100 sends per contact per hour.

**Inputs**

- Contact ID (`subscriber_id`, text, required): The contact to act on. Manychat shows the id on a contact card under Contacts, and every contact action here returns it as 'id'. A contact exists only once someone has messaged the bot - this integration cannot create one. Contacts are not offered as a list because an account has as many as it has ever talked to - use 'Find contacts by name' or 'Find contact by email or phone' to get one.
- Automation (`flow_ns`, text, required): The automation to send, picked from the account's automations. Nothing here creates one, so the list is complete - build the automation in Manychat first if it is not there.

**Outputs**

- `flow_ns` (text): The automation that was sent
- `sent` (true/false): Always true - Manychat reported no error
- `subscriber_id` (text): The contact it was sent to

**Example output**

```json
{
  "flow_ns": "content20260201120000_123456",
  "sent": true,
  "subscriber_id": "987654321"
}
```

### Set bot field

Change an account-wide bot field's value, choosing the field from a list. Use 'Set bot field by name' instead when the field is named by an earlier step rather than picked here.

**Inputs**

- Bot field (`field_id`, text, required): The bot field to set, picked from the account's fields. A field id from an earlier step can be typed in instead.
- Value (`field_value`, text, required): The value to store. Text, a number or true/false is stored as it stands; a date or date-and-time carried over from an earlier step is converted to the format Manychat expects. It must suit the field's type - Manychat refuses a word in a number field.

**Outputs**

- `field_id` (number): The bot field that was set
- `field_value`: The value as it was sent to Manychat
- `updated` (true/false): Always true - Manychat reported no error

**Example output**

```json
{
  "field_id": 66301,
  "field_value": "SPRING25",
  "updated": true
}
```

### Set bot field by name

Change an account-wide bot field's value, naming the field rather than picking its id. Saves a lookup step when the field's name is known or comes out of an earlier step.

**Inputs**

- Bot field (`field_name`, text, required): The bot field's name. Pick one from the list, or type a name - including one an earlier step in this workflow created, which the list will not have yet.
- Value (`field_value`, text, required): The value to store. Text, a number or true/false is stored as it stands; a date or date-and-time carried over from an earlier step is converted to the format Manychat expects. It must suit the field's type - Manychat refuses a word in a number field.

**Outputs**

- `field_name` (text): The bot field that was set
- `field_value`: The value as it was sent to Manychat
- `updated` (true/false): Always true - Manychat reported no error

**Example output**

```json
{
  "field_name": "Current promotion",
  "field_value": "SPRING25",
  "updated": true
}
```

### Set contact field

Set one contact field's value on one contact - the per-contact fields, not the bot's own - or clear it with 'Clear the value instead'. The field must already exist on the account; 'Create contact field' adds one. Manychat matches the field name without regard to case.

**Inputs**

- Contact ID (`subscriber_id`, text, required): The contact to act on. Manychat shows the id on a contact card under Contacts, and every contact action here returns it as 'id'. A contact exists only once someone has messaged the bot - this integration cannot create one. Contacts are not offered as a list because an account has as many as it has ever talked to - use 'Find contacts by name' or 'Find contact by email or phone' to get one.
- Contact field (`field_name`, text, required): The contact field's name. Pick one from the list, or type a name - including one an earlier step in this workflow created, which the list will not have yet.
- Value (`field_value`, text): The value to store. Text, a number or true/false is stored as it stands; a date or date-and-time carried over from an earlier step is converted to the format Manychat expects. Required unless 'Clear the value instead' is on.
- Clear the value instead (`clear_value`, true/false): Turn on to empty this contact's value for the field rather than set one, and leave Value empty. An empty Value on its own never clears a field - it is refused - so a value that is missing by mistake cannot wipe a contact's data.

**Outputs**

- `cleared` (true/false): True when the field was emptied rather than set
- `field_name` (text): The contact field that was set
- `field_value`: The value as it was sent to Manychat - empty when the field was cleared
- `subscriber_id` (text): The contact whose field was set
- `updated` (true/false): Always true - Manychat reported no error

**Example output**

```json
{
  "cleared": false,
  "field_name": "Favourite roast",
  "field_value": "Ethiopian",
  "subscriber_id": "987654321",
  "updated": true
}
```

### Update contact

Change a contact's first name, last name or gender. Only the fields filled in here are sent; the rest are left alone. Email, phone and opt-ins are not offered: Manychat treats writing them onto a contact as an import, which needs an account permission ('Import Contacts') that Manychat support grants by hand and never during a trial.

**Inputs**

- Contact ID (`subscriber_id`, text, required): The contact to act on. Manychat shows the id on a contact card under Contacts, and every contact action here returns it as 'id'. A contact exists only once someone has messaged the bot - this integration cannot create one. Contacts are not offered as a list because an account has as many as it has ever talked to - use 'Find contacts by name' or 'Find contact by email or phone' to get one.
- First name (`first_name`, text): Leave empty to keep the current first name.
- Last name (`last_name`, text): Leave empty to keep the current last name.
- Gender (`gender`, text): Free text. Manychat documents no list of accepted values, so whatever is sent is what is stored. Leave empty to keep the current value.

**Outputs**

- `subscriber` (object): The updated contact

**Example output**

```json
{
  "subscriber": {
    "custom_fields": [
      {
        "description": "What this contact usually orders",
        "id": 55201,
        "name": "Favourite roast",
        "type": "text",
        "value": "Ethiopian"
      }
    ],
    "email": "ada@example.com",
    "first_name": "Ada",
    "gender": "female",
    "id": "987654321",
    "ig_id": 6384638,
    "ig_username": "ada.lovelace",
    "is_followup_enabled": true,
    "language": "en",
    "last_input_text": "When do you open?",
    "last_interaction": "2026-09-13T17:42:00+01:00",
    "last_name": "Lovelace",
    "last_seen": "2026-09-13T17:42:00+01:00",
    "live_chat_url": "https://app.manychat.com/fb1234567890/chat/987654321",
    "locale": "en_GB",
    "name": "Ada Lovelace",
    "optin_email": true,
    "optin_phone": false,
    "optin_whatsapp": false,
    "page_id": "1234567890",
    "phone": "",
    "profile_pic": "https://scontent.example.com/ada.jpg",
    "subscribed": "2026-02-01T09:15:00+01:00",
    "tags": [
      {
        "id": 44101,
        "name": "Newsletter"
      }
    ],
    "timezone": "UTC+01:00",
    "user_refs": [],
    "whatsapp_bsuid": null,
    "whatsapp_phone": "",
    "whatsapp_username": null
  }
}
```
