Everything an AI agent can do with the Front API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints23
AuthenticationOAuth 2.0 / API token
Last updated23 June 2026
Orientation

How the Front API works.

The Front API is how an app or AI agent works with a shared inbox: reading and updating conversations, sending a reply, adding an internal comment for teammates, and managing contacts, tags, and channels. Access is granted through a Bearer token, either an API token or an OAuth grant, whose namespace and permission level set which inboxes a call can read or write. Front has no version to pin, and it can push an event to a registered webhook when something happens, like a message arriving or a conversation being assigned.

23Endpoints
9Capability groups
13Read
10Write
15Permissions
Authentication
Front authenticates Core API calls with a Bearer token sent in the Authorization header, where the token MUST be preceded by 'Bearer'. The token is either an API token created in Front's settings or an OAuth 2.0 access token. Front requires OAuth for public integrations and for partner integrations acting on behalf of a customer, unless it grants an exception. The Core API base URL is https://api2.frontapp.com.
Permissions
An API token's reach is set on three axes: a feature (such as access to Core API resources, auto-provisioning, application triggers, or the MCP server), a namespace (company-wide global resources, a specific shared workspace or all shared workspaces, or a teammate's private resources), and a permission level of Read, Write, Delete, or Send. OAuth scopes are coarse and follow the same shared-resources and provisioning boundaries; the namespace, not a long scope list, is what bounds which inboxes and conversations a token reaches.
Versioning
Front's Core API has no dated version string and is not pinned by the caller, so there is a single continuously updated API. Notable changes, including deprecations and new endpoints, are published through Front's API news and updates feed rather than a version number, so an integration tracks that feed instead of pinning a version.
Data model
Front is resource-oriented JSON over HTTPS at https://api2.frontapp.com. The core object is a conversation, a thread in a shared inbox that holds messages, internal comments, an assignee, a status, and tags. Messages flow through channels, the connected addresses for email, SMS, and chat, and contacts hold the people a team talks to. Lists are cursor-paginated, and a state change can push an application webhook to a registered URL.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Front determines what it can reach. There is a route for making calls, a route for receiving events, and a hosted server that exposes Front tools to agents, and each is governed by the token behind it and the permissions that token carries.

Ways to connect

Core API (REST)

The Core API answers at https://api2.frontapp.com. It takes JSON request bodies, returns JSON, and pages through lists with a page_token cursor. A call authenticates with a Bearer token, either an API token created in Front's settings or an OAuth 2.0 access token.

Best forConnecting an app or AI agent to Front.
Governed byThe token and the permissions it carries.
Docs ↗

MCP server

A first-party hosted Model Context Protocol server at https://mcp.frontapp.com/mcp lets an AI agent work with Front through natural language. It is in open beta and authenticates with OAuth 2.1 and PKCE as a specific teammate, so the agent's reach matches that teammate's own permissions. It exposes tools for searching and reading conversations, sending replies, adding comments, applying tags, managing contacts, and listing inboxes, teammates, and teams.

Best forConnecting an AI agent to Front through MCP.
Governed byThe OAuth grant and the authorizing teammate's permissions.
Docs ↗

Application webhooks

Front POSTs a JSON event to a registered URL when something happens in an inbox, like a message arriving or a conversation being assigned. An app webhook is bundled with the integration so a customer does not configure it, and each delivery is signed with an X-Front-Signature header an HMAC over the timestamp and raw body, for verification. A separate rule-based webhook can be configured per inbox.

Best forReceiving Front events at an app or AI agent.
Governed byThe app's signing key on the webhook.
Docs ↗
Authentication

API token

An API token is created in Front's settings and sent as a Bearer token. It is a JWT and carries a chosen feature (like access to Core API resources), a namespace (company-wide global resources, a shared workspace, or a teammate's private resources), and a permission level of Read, Write, Delete, or Send. Front requires partners to use OAuth instead of API tokens for integrations that act on behalf of a customer, unless granted an exception.

TokenBearer API token (JWT)
Best forServer-side scripts and internal automation on a single account.
Docs ↗

OAuth 2.0

OAuth uses the authorization-code flow at app.frontapp.com/oauth/authorize, exchanging the code at app.frontapp.com/oauth/token with Basic auth for an access token and a refresh token. The access token lasts 60 minutes and the refresh token lasts 6 months. The authorizing user must be an administrator. Front requires OAuth for public integrations available to all customers.

TokenOAuth 2.0 access token (Bearer), with a refresh token
Best forPublic and partner integrations acting on behalf of a customer.
Docs ↗
Capability map

What an AI agent can do in Front.

The Front API is split into areas an agent can act on, like conversations, messages, comments, contacts, inboxes, channels, tags, and teammates. Each area has its own methods, and a write in some areas sends a real message to a customer or changes a shared inbox.

Conversations

3 endpoints

List, read, and update conversations, the threads that hold a shared inbox's messages, comments, assignee, status, and tags.

A write here changes a real conversation's state, like its assignee or status.
View endpoints

Messages

3 endpoints

Send a new message, reply to a conversation, and import an existing message into an inbox.

A write here sends a real message to a customer or changes inbox history.
View endpoints

Comments

2 endpoints

List the internal comments on a conversation and add a new one, visible only to teammates.

A write here posts an internal comment teammates can see.
View endpoints

Drafts

2 endpoints

List a conversation's drafts and create a draft message that a teammate can review before it is sent.

A write here creates a draft a teammate may later send.
View endpoints

Contacts

4 endpoints

List, read, create, and update the people and companies in a Front account's shared address book.

A write here changes a real contact record.
View endpoints

Inboxes

2 endpoints

List inboxes and read a single inbox, the shared mailboxes a team works out of.

A write here changes a real inbox.
View endpoints

Channels

2 endpoints

List channels and read a single channel, the connected addresses (email, SMS, social) that send and receive messages.

A write here changes a real channel.
View endpoints

Tags

2 endpoints

List tags and create a company tag used to label and route conversations.

A write here changes the shared set of tags.
View endpoints

Teammates

3 endpoints

List teammates, read a single teammate, and update a teammate's profile and availability.

A write here changes a real teammate's profile or availability.
View endpoints
Endpoint reference

Every Front API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Conversations

List, read, and update conversations, the threads that hold a shared inbox's messages, comments, assignee, status, and tags.3

Read-only. With an OAuth token, the scopes are coarse; the underlying access is set by the token's namespace, like a single shared workspace or all shared resources.

Acts onconversation
Permission (capability)conversations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only. Returns 301 if the conversation has been merged into another.

Acts onconversation
Permission (capability)conversations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Changing the assignee here can fire the assignee_changed application webhook.

Acts onconversation
Permission (capability)conversations:write
VersionAvailable since the API’s base version
Webhook eventassignee_changed
Rate limitStandard limits apply

Messages

Send a new message, reply to a conversation, and import an existing message into an inbox.3

Sends a real message to a recipient and fires the outbound_sent application webhook.

Acts onmessage
Permission (capability)messages:send
VersionAvailable since the API’s base version
Webhook eventoutbound_sent
Rate limit5 requests per channel per second

Sends a real reply to the conversation's recipients.

Acts onmessage
Permission (capability)messages:send
VersionAvailable since the API’s base version
Webhook eventoutbound_sent
Rate limit5 requests per conversation per second

Records a message in Front; it is not delivered to a recipient.

Acts onmessage
Permission (capability)messages:send
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Comments

List the internal comments on a conversation and add a new one, visible only to teammates.2

Read-only. Comments are internal and never sent to the customer.

Acts oncomment
Permission (capability)comments:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Posts a teammate-only note and fires the new_comment_added application webhook.

Acts oncomment
Permission (capability)comments:write
VersionAvailable since the API’s base version
Webhook eventnew_comment_added
Rate limitStandard limits apply

Drafts

List a conversation's drafts and create a draft message that a teammate can review before it is sent.2

Read-only. A draft is an unsent message awaiting review.

Acts ondraft
Permission (capability)drafts:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Creates an unsent draft; nothing is delivered until a teammate sends it.

Acts ondraft
Permission (capability)drafts:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Contacts

List, read, create, and update the people and companies in a Front account's shared address book.4

Read-only.

Acts oncontact
Permission (capability)contacts:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts oncontact
Permission (capability)contacts:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Handles are required; a contact is shared across the company.

Acts oncontact
Permission (capability)contacts:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The contact ID can be a source-and-handle alias.

Acts oncontact
Permission (capability)contacts:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Inboxes

List inboxes and read a single inbox, the shared mailboxes a team works out of.2

Read-only.

Acts oninbox
Permission (capability)inboxes:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts oninbox
Permission (capability)inboxes:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Channels

List channels and read a single channel, the connected addresses (email, SMS, social) that send and receive messages.2

Read-only. A channel can be email, SMS, or a social or chat integration.

Acts onchannel
Permission (capability)channels:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onchannel
Permission (capability)channels:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Tags

List tags and create a company tag used to label and route conversations.2

Read-only.

Acts ontag
Permission (capability)tags:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A company tag is visible to the whole company; a name is required.

Acts ontag
Permission (capability)tags:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Teammates

List teammates, read a single teammate, and update a teammate's profile and availability.3

Read-only.

Acts onteammate
Permission (capability)teammates:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onteammate
Permission (capability)teammates:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Returns 204 No Content on success; the ID can be an email alias.

Acts onteammate
Permission (capability)teammates:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

Front can notify an app when something happens in a shared inbox, like a new message arriving or a conversation being assigned. It posts a JSON event to a registered URL, so an integration learns about activity without polling.

EventWhat it signalsTriggered by
inbound_receivedA new inbound message arrived in a connected inbox.In-app only
outbound_sentAn outbound message was sent from a channel, for example a reply to a customer./channels/{channel_id}/messages
/conversations/{conversation_id}/messages
message_delivery_failedAn outbound message failed to deliver.In-app only
assignee_changedA conversation's assignee changed, including being assigned or unassigned./conversations/{conversation_id}
new_comment_addedA new internal comment was added to a conversation./conversations/{conversation_id}/comments
conversation_archivedA conversation was archived, closing it in the inbox.In-app only
conversation_reopenedA previously archived conversation was reopened.In-app only
conversation_movedA conversation was moved to a different inbox.In-app only
tag_addedA tag was added to a conversation.In-app only
tag_removedA tag was removed from a conversation.In-app only
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Front limits how fast an app can call, by a per-minute request rate set by the company's plan, with a short burst allowance on top and a few endpoints held to tighter per-resource limits.

Request rate

Front meters requests per minute per company, set by the plan: 50 on Starter, 100 on Professional, and 200 on Enterprise; a partner integration calling through OAuth gets 120 per minute, enforced per company and separate from the customer's own limit. A burst allowance of 50 percent of the plan limit absorbs short spikes and refills over a 10-minute window. A few endpoints are held tighter: analytics export and report creation allow 1 request per second, message and conversation sends allow 5 per resource per second, marking a message as seen allows 10 per message per hour, and conversation search is capped at 40 percent of the company's limit. Going over returns HTTP 429 with a retry-after header giving the seconds to wait.

Pagination

List endpoints are cursor-based. A response includes a _pagination object whose next field is a full URL to the following page, and a page_token query parameter fetches it; the limit parameter sets page size up to a maximum of 100. Results come back in reverse-chronological order. Following the next URL rather than building it by hand is the supported approach.

Request size

A list page returns at most 100 results, the maximum value of limit. A company tag name is capped at 64 characters. Individual resources carry their own field limits, documented per endpoint.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400bad_requestThe request was malformed, for example a missing or invalid parameter in the body or query.Read the error message, correct the request, and resend. The request is not retryable as-is.
401unauthorizedNo valid token was provided, or the token has expired.Send a valid Bearer token; for OAuth, refresh the access token, since it expires after 60 minutes.
403forbiddenThe token is valid but lacks the permission or namespace for this resource, for example a token scoped to one workspace reaching another.Grant the needed permission or namespace on the token, or use a token with the right access.
404not_foundThe requested resource does not exist, or is not visible to this token.Verify the resource ID and confirm the token can reach it.
409conflictThe request conflicts with the current state of the resource.Refetch the current state, then retry once the conflict is resolved.
422unprocessable_entityThe request was well-formed but a field is invalid, for example a value that fails validation.Correct the named field and resend.
429too_many_requestsThe per-minute rate limit or a per-resource limit was exceeded.Wait for the seconds in the retry-after header, then retry. The x-ratelimit headers report the remaining budget.
500server_errorAn error on Front's side. It is rare.Retry with backoff, and contact Front support if it persists.
Versioning & freshness

Version history.

Front's Core API has no dated version string, so there is a single continuously updated API. Notable changes ship through the API news and updates feed rather than a version number an integration pins.

Version history

What changed, and when

Latest versionCurrent
CurrentCurrent version
Continuously updated Core API

The Front Core API has no dated version string and is not pinned by the caller. Notable changes ship through the API news and updates feed, and recent additions include a first-party MCP server in open beta, granular Read, Write, and Delete permissions for API tokens, and a Core API analytics dashboard for monitoring request and rate-limit usage.

What changed
  • MCP server released in open beta, authenticating per teammate with OAuth 2.1 and PKCE.
  • Granular API token permissions added: Read, Write, and Delete levels.
  • Core API analytics dashboard added for admins to monitor calls and rate limiting.
  • New endpoints added across views, time off, and conversation deletion.
2025-09-01Requires migration
Contact lists replace contact groups

Front replaced the contact group endpoints with contact list endpoints, deprecating the contact_groups path in favor of contact_lists. Integrations that organized contacts by group needed to move to the new path.

What changed
  • contact_groups endpoints deprecated.
  • contact_lists endpoints introduced as the replacement.

There is no version to pin; track the API news feed for changes.

Front API news & updates ↗
Questions

Front API, answered.

API token or OAuth, which should I use?+
An API token is created in Front's settings and suits a server-side script or internal automation on a single account. OAuth is required for public integrations available to all Front customers, and for partner integrations that act on behalf of a customer, unless Front grants an exception. OAuth uses the authorization-code flow, and the user authorizing the app must be an administrator.
How do Front's permissions and scopes work?+
Access is set on three axes rather than a long scope list. A feature decides what the token can do (work with Core API resources, auto-provision, process triggers, or use the MCP server). A namespace decides where it reaches (company-wide global resources, a shared workspace or all shared workspaces, or a single teammate's private resources). A permission level decides how far (Read, Write, Delete, or Send). OAuth scopes are coarse and map to these same boundaries, so the namespace is what limits which inboxes and conversations a token can touch.
What are the rate limits?+
Front meters requests per minute per company by plan: 50 on Starter, 100 on Professional, and 200 on Enterprise, with a separate 120 per minute for partner integrations calling through OAuth. A burst allowance worth 50 percent of the plan limit absorbs short spikes and refills over 10 minutes. Some endpoints are stricter, like 5 sends per resource per second and conversation search at 40 percent of the company limit. Going over returns 429 with a retry-after header, and the x-ratelimit-limit, x-ratelimit-remaining, and x-ratelimit-reset headers report the current budget.
How does pagination work?+
List endpoints are cursor-based. A response carries a _pagination object whose next field is a full URL to the following page, and a page_token query parameter fetches it. The limit parameter sets page size up to 100. The next URL should be followed as given rather than built by hand, and results return newest first.
How do I receive events instead of polling?+
Front sends application webhooks. Front POSTs a JSON event to a registered URL when something happens, like inbound_received for a new message, outbound_sent for a reply, assignee_changed for an assignment, or new_comment_added for an internal comment. Each delivery carries an X-Front-Signature header, an HMAC SHA256 over the x-front-request-timestamp and the raw request body using the app's signing key, so the receiver can confirm the event came from Front. The receiver should return a 2xx response; Front retries up to 3 times and then disables a failing webhook.
Does Front have an official MCP server for AI agents?+
Yes. Front hosts a first-party Model Context Protocol server at https://mcp.frontapp.com/mcp, currently in open beta. It authenticates with OAuth 2.1 and PKCE as a specific teammate, so the agent's effective permissions match that teammate's; if the teammate cannot see an inbox, neither can the agent. It exposes tools for searching and reading conversations, sending replies, adding comments, applying tags, managing contacts, and listing inboxes, teammates, and teams.
What's the difference between sending a message and creating a draft?+
Sending a message delivers it to the recipient immediately, through POST to a channel's messages or a conversation's messages, and fires the outbound_sent event. Creating a draft makes an unsent message that a teammate reviews and sends later, so nothing reaches the customer until a person acts. For an AI agent, a draft keeps a human in the loop before anything is sent.
Related

More communication API guides for agents

What is Bollard AI?

Control what every AI agent can do in Front.

Bollard AI sits between a team's AI agents and Front. Grant each agent exactly the access it needs, read or write, resource by resource, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Front token.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Front
Support Agent
Read conversations ResourceOffReadFull use
Send replies ActionOffReadFull use
Comments & tags ResourceOffReadFull use
Per-agent access, set in Bollard AI, not in Front