# Front

> Work with your Front shared inboxes: find conversations, reply to them, comment internally, tag, assign and snooze.

App · Help Desk · 20 actions. Web page: https://docs.lodol.com/docs/integrations/front

## Actions

### Add an internal comment

Add an internal comment to a conversation. Only teammates see it: it is never sent to the customer.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Comment (`body`, text, required): The comment. Markdown formatting is supported, and @mentioning a teammate notifies them.
- Comment as (`author_id`, text): The teammate to post the comment as. Leave blank to post as the connected API token.
- Pin the comment (`is_pinned`, true/false): Pin it to the top of the conversation. Default: `false`.

**Outputs**

- `comment` (object): The comment that was created.
- `comment_id` (text): The new comment's id.
- `conversation_id` (text): The conversation the comment was added to.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "comment": {
    "body": "Refunded, closing this out.",
    "id": "com_55c8c149",
    "is_pinned": false,
    "posted_at": 1758038460.0
  },
  "comment_id": "com_55c8c149",
  "conversation_id": "cnv_55c8c149",
  "status": "success"
}
```

### Add followers to a conversation

Add teammates as followers of a conversation, so they are notified about it.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Followers (`teammate_ids`, list, required): The teammates to add as followers.
- Skip teammates Front does not recognise (`ignore_errors`, true/false): Off by default. Switching it on makes Front add the teammates it recognises and report success anyway, which hides a wrong id instead of reporting it. Default: `false`.

**Outputs**

- `conversation_id` (text): The conversation the followers were added to.
- `followers_added` (number): How many teammates were sent.
- `status` (text): Status of the action execution ("success" on success).
- `teammate_ids` (list): The teammates that were added.

**Example output**

```json
{
  "conversation_id": "cnv_55c8c149",
  "followers_added": 1,
  "status": "success",
  "teammate_ids": [
    "tea_55c8c149"
  ]
}
```

### Add tags to a conversation

Add tags to a conversation, keeping the tags it already has.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Tags (`tag_ids`, list, required): The tags to apply. Use 'List tags' to see every tag available.

**Outputs**

- `conversation_id` (text): The conversation that was tagged.
- `status` (text): Status of the action execution ("success" on success).
- `tag_ids` (list): The tags that were added.
- `tagged` (true/false): True when Front accepted the tags.

**Example output**

```json
{
  "conversation_id": "cnv_55c8c149",
  "status": "success",
  "tag_ids": [
    "tag_155"
  ],
  "tagged": true
}
```

### Assign a conversation

Assign a conversation to a teammate, or clear its assignee so it goes back to unassigned.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Assign to (`assignee_id`, text): The teammate to assign the conversation to. Leave blank only if you are switching on 'Unassign' below.
- Unassign instead (`unassign`, true/false): Switch on to remove the current assignee rather than setting one. Default: `false`.

**Outputs**

- `assigned` (true/false): True when a teammate was set, false when cleared.
- `assignee_id` (text): The teammate it is now assigned to, if any.
- `conversation_id` (text): The conversation that was assigned.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "assigned": true,
  "assignee_id": "tea_55c8c149",
  "conversation_id": "cnv_55c8c149",
  "status": "success"
}
```

### Create a discussion or task

Start an internal discussion or a task in Front. Both hold comments only: nothing here is ever sent to a customer.

**Inputs**

- Type (`conversation_type`, text, required): A discussion is a thread teammates comment on; a task is the same thing with a description and a due date. One of: `discussion`, `task`. Default: `discussion`.
- Subject (`subject`, text, required): The title the discussion appears under.
- First comment (`comment_body`, text, required): The opening comment. Markdown formatting is supported.
- Inbox (`inbox_id`, text): Put the discussion in this shared inbox, where everyone with access to it can see it. Choose either an inbox or teammates, not both.
- Teammates (`teammate_ids`, list): Make it a private discussion between these teammates instead of putting it in an inbox.
- Comment author (`comment_author_id`, text): Post the first comment as this teammate. Leave blank to post as the connected API token.
- Task description (`description`, text): Tasks only: what the task is for.
- Task due (`due_at`, date and time): Tasks only: when the task is due. Must be in the future.

**Outputs**

- `conversation` (object): The conversation that was created.
- `conversation_id` (text): The new conversation's id.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "conversation": {
    "created_at": 1758038400.0,
    "id": "cnv_55c8c149",
    "is_private": false,
    "status": "unassigned",
    "subject": "Refund policy for damaged goods",
    "type": "discussion"
  },
  "conversation_id": "cnv_55c8c149",
  "status": "success"
}
```

### Get a conversation

Get one conversation in full: its status, assignee, tags, recipient and reminders.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.

**Outputs**

- `conversation` (object): The conversation.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "conversation": {
    "created_at": 1758038400.0,
    "id": "cnv_55c8c149",
    "status": "assigned",
    "subject": "Where is my order?",
    "tags": [
      {
        "id": "tag_155",
        "name": "Urgent"
      }
    ],
    "type": "email"
  },
  "status": "success"
}
```

### List channels

List the channels messages can be sent from, and which of them are currently able to send.

**Inputs**: None.

**Outputs**

- `channels` (list): Every channel on the company.
- `count` (number): How many channels were returned.
- `sending_channel_ids` (list): The ids of the channels that can currently send. A channel that has lost its authorisation is left out, because sending from it is refused.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "channels": [
    {
      "address": "support@example.com",
      "id": "cha_55c8c149",
      "is_valid": true,
      "name": "Support",
      "type": "smtp"
    }
  ],
  "count": 1,
  "sending_channel_ids": [
    "cha_55c8c149"
  ],
  "status": "success"
}
```

### List comments on a conversation

List the internal comments on a conversation. Comments are only ever seen by teammates, never by the customer.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.

**Outputs**

- `comments` (list): The comments on the conversation.
- `conversation_id` (text): The conversation the comments belong to.
- `count` (number): How many comments were returned.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "comments": [
    {
      "body": "Refunded, closing this out.",
      "id": "com_55c8c149",
      "is_pinned": false,
      "posted_at": 1758038460.0
    }
  ],
  "conversation_id": "cnv_55c8c149",
  "count": 1,
  "status": "success"
}
```

### List contacts

List the company's contacts, optionally only those changed in a given window.

**Inputs**

- Updated after (`updated_after`, date and time): Only return contacts changed at or after this time.
- Updated before (`updated_before`, date and time): Only return contacts changed at or before this time.
- Sort by (`sort_by`, text): Which timestamp to sort the contacts on. One of: `created_at` (Created at), `updated_at` (Updated at).
- Order (`sort_order`, text): Which end of the list to start from. Leave blank for Front's own order. One of: `asc` (Oldest first), `desc` (Newest first).
- Maximum results (`limit`, number): How many results to return per page (1-100). Defaults to 50. From 1 to 100.
- Page token (`page_token`, text): Ask for the next page of results. Use the 'page_token' this action returned last time; leave blank for the first page.

**Outputs**

- `contacts` (list): The contacts that matched.
- `count` (number): How many contacts were returned.
- `paging` (object): Front's cursor for the next page: 'page_token' is what to send back to this action, and is empty when there are no more results.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "contacts": [
    {
      "handles": [
        {
          "handle": "hermes@example.com",
          "source": "email"
        }
      ],
      "id": "crd_55c8c149",
      "is_private": false,
      "name": "Hermes Conrad"
    }
  ],
  "count": 1,
  "paging": {
    "next": "",
    "page_token": ""
  },
  "status": "success"
}
```

### List conversations

List the conversations in your Front company, optionally narrowed to particular statuses.

**Inputs**

- Statuses (`statuses`, list): Only return conversations in these statuses. Leave blank for every status except the trash. Note that the trash is called 'trashed' here and reads back as 'deleted' on the conversation itself. One or more of: `assigned`, `unassigned`, `archived`, `trashed`.
- Order (`sort_order`, text): Which end of the list to start from. Leave blank for Front's own order. One of: `asc` (Oldest first), `desc` (Newest first).
- Maximum results (`limit`, number): How many results to return per page (1-100). Defaults to 50. From 1 to 100.
- Page token (`page_token`, text): Ask for the next page of results. Use the 'page_token' this action returned last time; leave blank for the first page.

**Outputs**

- `conversations` (list): The conversations that matched.
- `count` (number): How many conversations were returned.
- `paging` (object): Front's cursor for the next page: 'page_token' is what to send back to this action, and is empty when there are no more results.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "conversations": [
    {
      "created_at": 1758038400.0,
      "id": "cnv_55c8c149",
      "is_private": false,
      "status": "assigned",
      "subject": "Where is my order?",
      "type": "email"
    }
  ],
  "count": 1,
  "paging": {
    "next": "",
    "page_token": ""
  },
  "status": "success"
}
```

### List inboxes

List the inboxes the connection can see, with the id each one is addressed by.

**Inputs**: None.

**Outputs**

- `count` (number): How many inboxes were returned.
- `inboxes` (list): The inboxes the token can see.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "count": 1,
  "inboxes": [
    {
      "id": "inb_55c8c149",
      "is_private": false,
      "is_public": true,
      "name": "Support"
    }
  ],
  "status": "success"
}
```

### List messages on a conversation

List the messages on a conversation. Each one carries both the HTML body and a plain-text version, plus a short preview.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Order (`sort_order`, text): Which end of the list to start from. Leave blank for Front's own order. One of: `asc` (Oldest first), `desc` (Newest first).
- Maximum results (`limit`, number): How many results to return per page (1-100). Defaults to 50. From 1 to 100.
- Page token (`page_token`, text): Ask for the next page of results. Use the 'page_token' this action returned last time; leave blank for the first page.

**Outputs**

- `conversation_id` (text): The conversation the messages belong to.
- `count` (number): How many messages were returned.
- `messages` (list): The messages on the conversation.
- `paging` (object): Front's cursor for the next page: 'page_token' is what to send back to this action, and is empty when there are no more results.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "conversation_id": "cnv_55c8c149",
  "count": 1,
  "messages": [
    {
      "blurb": "Hi, I ordered a week ago and...",
      "created_at": 1758038400.0,
      "id": "msg_55c8c149",
      "is_inbound": true,
      "type": "email"
    }
  ],
  "paging": {
    "next": "",
    "page_token": ""
  },
  "status": "success"
}
```

### List tags

List every tag the connection can see: company tags, team tags and teammate tags alike.

**Inputs**

- Order (`sort_order`, text): Which end of the list to start from. Leave blank for Front's own order. One of: `asc` (Oldest first), `desc` (Newest first).
- Maximum results (`limit`, number): How many results to return per page (1-100). Defaults to 50. From 1 to 100.
- Page token (`page_token`, text): Ask for the next page of results. Use the 'page_token' this action returned last time; leave blank for the first page.

**Outputs**

- `count` (number): How many tags were returned.
- `paging` (object): Front's cursor for the next page: 'page_token' is what to send back to this action, and is empty when there are no more results.
- `status` (text): Status of the action execution ("success" on success).
- `tags` (list): The tags the token can see.

**Example output**

```json
{
  "count": 1,
  "paging": {
    "next": "",
    "page_token": ""
  },
  "status": "success",
  "tags": [
    {
      "created_at": 1758038400.0,
      "highlight": "red",
      "id": "tag_155",
      "is_private": false,
      "name": "Urgent"
    }
  ]
}
```

### List teammates

List everyone in the Front company, with the id each one is addressed by.

**Inputs**: None.

**Outputs**

- `count` (number): How many teammates were returned.
- `status` (text): Status of the action execution ("success" on success).
- `teammates` (list): The company's teammates.

**Example output**

```json
{
  "count": 1,
  "status": "success",
  "teammates": [
    {
      "email": "leela@example.com",
      "first_name": "Turanga",
      "id": "tea_55c8c149",
      "is_admin": true,
      "last_name": "Leela",
      "type": "user"
    }
  ]
}
```

### Remove tags from a conversation

Take tags off a conversation. Any tag you do not name is left where it is.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Tags (`tag_ids`, list, required): The tags to apply. Use 'List tags' to see every tag available.

**Outputs**

- `conversation_id` (text): The conversation the tags came off.
- `status` (text): Status of the action execution ("success" on success).
- `tag_ids` (list): The tags that were removed.
- `untagged` (true/false): True when Front accepted the removal.

**Example output**

```json
{
  "conversation_id": "cnv_55c8c149",
  "status": "success",
  "tag_ids": [
    "tag_155"
  ],
  "untagged": true
}
```

### Reply to a conversation

Reply to a conversation. The recipients and channel default to the conversation's own, so a body is usually all you need. Discussions and tasks cannot be replied to: comment instead.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Reply (`body`, text, required): The reply body. HTML is supported on email channels.
- Plain-text version (`text`, text): A plain-text version of the body, for email clients that cannot show HTML.
- Subject (`subject`, text): Override the subject line. Leave blank to keep the conversation's own.
- To (`to`, list): Override the recipients, as handles. Leave blank to reply to whoever is on the conversation.
- CC (`cc`, list): Handles to copy in.
- BCC (`bcc`, list): Handles to copy in privately.
- Quoted text (`quote_body`, text): Text to show as the quoted message above the reply. Email channels only.
- Send on behalf of (`author_id`, text): The teammate the reply is sent on behalf of. Leave blank to send as the channel itself.
- Send from (`channel_id`, text): Send from a different channel. Leave blank to use the conversation's own.
- Tag the conversation (`tag_ids`, list): Tags to put on the conversation as the reply goes.
- Archive the conversation after sending (`archive`, true/false): Off by default, which leaves the conversation open in the inbox. Note that Front's own API archives on send unless told otherwise -- this action always tells it, so the switch is what decides. Default: `false`.

**Outputs**

- `conversation_id` (text): The conversation that was replied to.
- `message_uid` (text): Front's reference for the queued reply. This is not a message id and cannot be read back with an action.
- `send_status` (text): What Front reported when it accepted the send.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "conversation_id": "cnv_55c8c149",
  "message_uid": "a1b2c3d4e5f6a7b8c9d0",
  "send_status": "accepted",
  "status": "success"
}
```

### Search conversations

Search conversations using Front's own search syntax, such as 'refund is:open' or 'tag:tag_155 after:1748000000'.

**Inputs**

- Search query (`query`, text, required): Words to search for, plus any of Front's filters: is:, inbox:, tag:, assignee:, from:, to:, before:, after:. is: accepts archived, assigned, open, resolved, snoozed, trashed, unassigned, unreplied, waiting. Trashed conversations are left out unless you ask for is:trashed.
- Maximum results (`limit`, number): How many results to return per page (1-100). Defaults to 50. From 1 to 100.
- Page token (`page_token`, text): Ask for the next page of results. Use the 'page_token' this action returned last time; leave blank for the first page.

**Outputs**

- `conversations` (list): The conversations on this page of results.
- `count` (number): How many conversations on this page were returned.
- `paging` (object): Front's cursor for the next page: 'page_token' is what to send back to this action, and is empty when there are no more results.
- `status` (text): Status of the action execution ("success" on success).
- `total` (number): How many conversations matched in total.

**Example output**

```json
{
  "conversations": [
    {
      "created_at": 1758038400.0,
      "id": "cnv_55c8c149",
      "status": "open",
      "subject": "Refund request"
    }
  ],
  "count": 1,
  "paging": {
    "next": "",
    "page_token": ""
  },
  "status": "success",
  "total": 1
}
```

### Send a message

Send a new message from one of your Front channels, which starts a new conversation. Front queues the send and answers with a message reference rather than the conversation, so use 'Search conversations' afterwards if you need it.

**Inputs**

- Send from (`channel_id`, text, required): The channel to send from. A channel labelled 'not connected' has lost its authorisation and cannot send.
- To (`to`, list, required): Who to send to, as handles -- an email address for an email channel, a phone number for SMS. Not contact ids.
- Subject (`subject`, text): The subject line, for email channels.
- Message (`body`, text, required): The message body. HTML is supported on email channels.
- Plain-text version (`text`, text): A plain-text version of the body, for email clients that cannot show HTML.
- CC (`cc`, list): Handles to copy in.
- BCC (`bcc`, list): Handles to copy in privately.
- Send on behalf of (`author_id`, text): The teammate the message is sent on behalf of. Leave blank to send as the channel itself.
- Sender name (`sender_name`, text): The name shown as the sender.
- Tag the conversation (`tag_ids`, list): Tags to put on the new conversation.
- Archive the conversation after sending (`archive`, true/false): Off by default, which leaves the conversation open in the inbox. Note that Front's own API archives on send unless told otherwise -- this action always tells it, so the switch is what decides. Default: `false`.

**Outputs**

- `channel_id` (text): The channel the message was sent from.
- `message_uid` (text): Front's reference for the queued message. This is not a message id and cannot be read back with an action.
- `send_status` (text): What Front reported when it accepted the send.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "channel_id": "cha_55c8c149",
  "message_uid": "a1b2c3d4e5f6a7b8c9d0",
  "send_status": "accepted",
  "status": "success"
}
```

### Snooze a conversation

Snooze a conversation until a chosen time, or wake it up again. In a shared inbox the reminder is shared by everyone in it.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Remind (`teammate_id`, text, required): The teammate the reminder belongs to.
- Wake up at (`scheduled_at`, date and time): When the conversation should come back. Must be in the future. Leave blank only if you are switching on 'Unsnooze' below.
- Unsnooze instead (`unsnooze`, true/false): Switch on to cancel the reminder and bring the conversation back now. Default: `false`.

**Outputs**

- `conversation_id` (text): The conversation the reminder is on.
- `scheduled_at` (text): When the conversation will come back, in UTC. Empty when the reminder was cancelled.
- `snoozed` (true/false): True when snoozed, false when woken up.
- `status` (text): Status of the action execution ("success" on success).
- `teammate_id` (text): The teammate the reminder belongs to.

**Example output**

```json
{
  "conversation_id": "cnv_55c8c149",
  "scheduled_at": "2026-09-18T09:00:00Z",
  "snoozed": true,
  "status": "success",
  "teammate_id": "tea_55c8c149"
}
```

### Update a conversation

Change a conversation's status, assignee, inbox or tags. Only the fields you fill in are changed, but note that tags replace rather than add.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's Front id, which looks like cnv_55c8c149. Use 'List conversations' or 'Search conversations' to find one -- you can also paste the web address of the conversation from Front.
- Status (`status`, text): The status to move the conversation to. 'Deleted' moves it to the trash, where it can still be restored. One of: `archived`, `open`, `deleted`, `spam`.
- Assignee (`assignee_id`, text): Assign the conversation to this teammate. To clear the assignee instead, use 'Assign a conversation'.
- Move to inbox (`inbox_id`, text): Move the conversation into this inbox.
- Replace tags with (`tag_ids`, list): The complete set of tags the conversation should end up with. This replaces its tags: any tag you leave out is removed. To add one without disturbing the rest, use 'Add tags to a conversation'.
- Task description (`description`, text): Tasks only: what the task is for.
- Task due (`due_at`, date and time): Tasks only: when the task is due. Must be in the future.

**Outputs**

- `conversation_id` (text): The conversation that was updated.
- `status` (text): Status of the action execution ("success" on success).
- `status_set` (text): The status the conversation was moved to, if any.
- `updated` (true/false): True when Front accepted the change.
- `updated_fields` (list): The names of the fields that were sent.

**Example output**

```json
{
  "conversation_id": "cnv_55c8c149",
  "status": "success",
  "status_set": "archived",
  "updated": true,
  "updated_fields": [
    "status"
  ]
}
```
