集成

Front

试用

通过 OAuth 鉴权的 API 调用,管理 Front 的会话、消息、联系人、标签、收件箱、队友和团队。

它能做什么

通过托管 OAuth 接入 Front API,覆盖共享工作区的常见资源:会话、消息、联系人、标签、收件箱、队友、团队、频道、账号和评论。所有请求统一经 `maton` 网关 `api.maton.ai` 转发,使用 `MATON_API_KEY` Bearer 令牌鉴权;当存在多个 Front 工作区时,可通过 `Maton-Connection` 请求头明确指定目标连接。读取与列表操作可直接执行,但所有写入行为(发送、创建、更新、删除)以及新建 OAuth 连接都必须先经用户明确确认。

什么时候用它

  • 按关键字或收件箱检索并列出会话与消息
  • 在 Front 中创建、更新联系人,或为会话打标签
  • 在会话中回复,或通过某个频道主动发送新邮件
  • 查看某个工作区的队友、团队、频道和收件箱配置

技能文档

Front

Access the Front API with managed OAuth authentication. Manage conversations, messages, contacts, tags, inboxes, teammates, and teams.

Quick Start

# List inboxes
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/front/inboxes')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Base URL

https://api.maton.ai/front/

Only the endpoints listed in the API Reference section below are supported. Maton proxies requests to api2.frontapp.com and automatically injects your OAuth token.

Authentication

All requests require the Maton API key in the Authorization header:

Authorization: Bearer $MATON_API_KEY

Environment Variable: Set your API key as MATON_API_KEY:

export MATON_API_KEY="YOUR_API_KEY"

Getting Your API Key

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your Front OAuth connections at https://api.maton.ai.

List Connections

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=front&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Create Connection

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'front'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Get Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Response:

{
  "connection": {
    "connection_id": "{connection_id}",
    "status": "ACTIVE",
    "creation_time": "2026-04-02T22:15:03.462342Z",
    "last_updated_time": "2026-04-02T22:15:37.297108Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "front",
    "metadata": {}
  }
}

Open the returned url in a browser to complete OAuth authorization.

Delete Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Specifying Connection

If you have multiple Front connections, specify which one to use with the Maton-Connection header:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/front/inboxes')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If you have multiple connections, always include this header to ensure requests go to the intended account.

Security & Permissions

  • Access is scoped to conversations, messages, contacts, tags, inboxes, teammates, and teams within the connected Front workspace.
  • All write operations require explicit user approval. Before executing any send, create, update, or delete call, confirm the target resource and intended effect with the user.
  • Shared workspace scope: Front resources (inboxes, conversations, contacts, tags, teams) are shared across the workspace. Modifications are visible to all teammates.

API Reference

Company / Me

Get Current Company

GET /front/me

Response:

{
  "_links": {"self": "https://company.api.frontapp.com/me"},
  "name": "Company Name",
  "id": "cmp_12345"
}

Teammates

List Teammates

GET /front/teammates

Response:

{
  "_pagination": {"next": null},
  "_results": [
    {
      "id": "tea_pa3u0",
      "email": "user@example.com",
      "username": "username",
      "first_name": "John",
      "last_name": "Doe",
      "is_admin": true,
      "is_available": true,
      "is_blocked": false,
      "type": "user"
    }
  ]
}

Get Teammate

GET /front/teammates/{teammate_id}

Teams

List Teams

GET /front/teams

Response:

{
  "_pagination": {"next": null},
  "_results": [
    {
      "id": "tim_9p8dk",
      "name": "Customer Support"
    },
    {
      "id": "tim_9p8fc",
      "name": "Sales"
    }
  ]
}

Inboxes

List Inboxes

GET /front/inboxes

Response:

{
  "_pagination": {"next": null},
  "_results": [
    {
      "id": "inb_lzrag",
      "name": "Support",
      "is_private": false,
      "is_public": true,
      "address": "support@company.com",
      "send_as": "support@company.com",
      "type": "smtp"
    }
  ]
}

Get Inbox

GET /front/inboxes/{inbox_id}

Create Inbox

POST /front/inboxes
Content-Type: application/json

{
  "name": "New Inbox",
  "teammate_ids": ["tea_abc123"]
}

Channels

List Channels

GET /front/channels

Response:

{
  "_pagination": {"next": null},
  "_results": [
    {
      "id": "cha_ogobs",
      "name": "support@company.com",
      "address": "support@company.com",
      "send_as": "support@company.com",
      "type": "smtp",
      "is_private": false,
      "is_valid": true
    }
  ]
}

Get Channel

GET /front/channels/{channel_id}

Conversations

List Conversations

GET /front/conversations

Query Parameters:

  • q - Search query
  • page_token - Pagination token

Response:

{
  "_pagination": {"next": null},
  "_results": [
    {
      "id": "cnv_abc123",
      "subject": "Help with order",
      "status": "open",
      "assignee": {
        "id": "tea_pa3u0",
        "email": "agent@company.com"
      },
      "recipient": {
        "handle": "customer@example.com"
      },
      "last_message": {
        "body": "Message content..."
      },
      "created_at": 1774828390.948
    }
  ]
}

Get Conversation

GET /front/conversations/{conversation_id}

Update Conversation

PATCH /front/conversations/{conversation_id}
Content-Type: application/json

{
  "assignee_id": "tea_abc123",
  "inbox_id": "inb_xyz789",
  "status": "archived",
  "tag_ids": ["tag_123"]
}

Update Conversation Assignee

PUT /front/conversations/{conversation_id}/assignee
Content-Type: application/json

{
  "assignee_id": "tea_abc123"
}

Messages

Get Message

GET /front/messages/{message_id}

Response:

{
  "id": "msg_abc123",
  "type": "email",
  "is_inbound": true,
  "created_at": 1774828390.948,
  "blurb": "Message preview...",
  "body": "Full message content...",
  "author": {
    "id": "tea_pa3u0",
    "email": "agent@company.com"
  },
  "recipients": [
    {
      "handle": "customer@example.com",
      "role": "to"
    }
  ]
}

Send Reply

POST /front/conversations/{conversation_id}/messages
Content-Type: application/json

{
  "author_id": "tea_abc123",
  "body": "Thank you for reaching out!",
  "type": "reply"
}

Send New Message

POST /front/channels/{channel_id}/messages
Content-Type: application/json

{
  "author_id": "tea_abc123",
  "to": ["customer@example.com"],
  "subject": "Following up",
  "body": "Hi, just following up on your inquiry..."
}

Contacts

List Contacts

GET /front/contacts

Query Parameters:

  • q - Search query (email, name, phone)
  • page_token - Pagination token

Response:

{
  "_pagination": {"next": null},
  "_results": [
    {
      "id": "crd_54wgwiw",
      "name": "John Doe",
      "description": "",
      "handles": [
        {"source": "email", "handle": "john@example.com"}
      ],
      "groups": [],
      "updated_at": 1774828390.948,
      "is_private": false
    }
  ]
}

Get Contact

GET /front/contacts/{contact_id}

Create Contact

POST /front/contacts
Content-Type: application/json

{
  "name": "Jane Smith",
  "handles": [
    {"source": "email", "handle": "jane@example.com"}
  ],
  "description": "VIP customer"
}

Update Contact

PATCH /front/contacts/{contact_id}
Content-Type: application/json

{
  "name": "Jane Smith-Jones",
  "description": "Updated description"
}

Delete Contact

DELETE /front/contacts/{contact_id}

Tags

List Tags

GET /front/tags

Response:

{
  "_pagination": {"next": null},
  "_results": [
    {
      "id": "tag_6v3mzs",
      "name": "Urgent",
      "highlight": "red",
      "description": "High priority items",
      "is_private": false,
      "is_visible_in_conversation_lists": true
    }
  ]
}

Get Tag

GET /front/tags/{tag_id}

Create Tag

POST /front/tags
Content-Type: application/json

{
  "name": "Follow-up",
  "highlight": "blue",
  "description": "Needs follow-up"
}

Update Tag

PATCH /front/tags/{tag_id}
Content-Type: application/json

{
  "name": "Updated Tag Name",
  "highlight": "green"
}

Delete Tag

DELETE /front/tags/{tag_id}

Accounts

List Accounts

GET /front/accounts

Get Account

GET /front/accounts/{account_id}

Create Account

POST /front/accounts
Content-Type: application/json

{
  "name": "Acme Corp",
  "description": "Enterprise customer",
  "domains": ["acme.com"]
}

Update Account

PATCH /front/accounts/{account_id}
Content-Type: application/json

{
  "name": "Acme Corporation",
  "description": "Updated description"
}

Comments

List Conversation Comments

GET /front/conversations/{conversation_id}/comments

Create Comment

POST /front/conversations/{conversation_id}/comments
Content-Type: application/json

{
  "author_id": "tea_abc123",
  "body": "Internal note: Customer is a VIP"
}

Pagination

Front uses cursor-based pagination with _pagination in responses:

{
  "_pagination": {
    "next": "https://api2.frontapp.com/contacts?page_token=abc123"
  },
  "_results": [...]
}

To get the next page, use the page_token parameter:

GET /front/contacts?page_token=abc123

When _pagination.next is null, there are no more results.

Code Examples

JavaScript

const response = await fetch(
  'https://api.maton.ai/front/inboxes',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const data = await response.json();
console.log(data._results);

Python

import os
import requests

response = requests.get(
    'https://api.maton.ai/front/contacts',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
contacts = response.json()['_results']

Create Contact and Tag Conversation

import os
import requests

headers = {
    'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
    'Content-Type': 'application/json'
}

# Create a contact
contact_resp = requests.post(
    'https://api.maton.ai/front/contacts',
    headers=headers,
    json={
        'name': 'New Customer',
        'handles': [{'source': 'email', 'handle': 'new@example.com'}]
    }
)
contact = contact_resp.json()

# Tag a conversation
conversation_id = 'cnv_abc123'
requests.patch(
    f'https://api.maton.ai/front/conversations/{conversation_id}',
    headers=headers,
    json={'tag_ids': ['tag_urgent']}
)

Notes

  • Resource IDs use prefixes: tea_ (teammate), tim_ (team), inb_ (inbox), cha_ (channel), cnv_ (conversation), msg_ (message), crd_ (contact), tag_ (tag), cmp_ (company)
  • Timestamps are Unix timestamps (seconds since epoch)
  • The API returns _links with related resource URLs
  • Responses include _pagination for list endpoints
  • Maton proxies to your company's Front API subdomain (e.g., company.api.frontapp.com)
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing
  • IMPORTANT: When piping curl output to jq, environment variables may not expand correctly in some shells

Error Handling

StatusMeaning
400Missing Front connection or invalid request
401Invalid or missing Maton API key
403Insufficient permissions
404Resource not found
429Rate limited
4xx/5xxPassthrough error from Front API

Resources

常见问题

鉴权是怎么处理的?
请求统一经 `api.maton.ai/front/` 网关转发:设置 `MATON_API_KEY` 环境变量并以 Bearer 令牌发送,网关会自动注入底层 Front OAuth 令牌;连接多个工作区时可用 `Maton-Connection` 头指定目标。
支持哪些 Front 资源?
仅覆盖 API 参考中列出的接口:队友、团队、收件箱、频道、会话、消息、联系人、标签、账号、评论和当前公司信息,未列出的 Front 接口不会被代理。
写入操作会自动执行吗?
不会。所有发送、创建、更新与删除操作,以及新建 OAuth 连接,都必须先获得用户确认才会执行,因为 Front 资源在整个工作区内是共享的。

相关技能

Front (front.com). Use this skill for ANY Front request — reading, creating, and updating data. Whenever a task involves Front, use this skill instead of cal...

通过 OAuth 代理调用 Twilio API,完成短信发送、语音外呼与电话号资源管理。

作者 byungkyu173 次安装8 星标

通过托管 OAuth 代理调用 Slack API,实现发消息、管频道、列用户和定时投递。

249 次安装7 星标

通过托管 OAuth 的代理调用 WhatsApp Business API,发送消息、管理模板与媒体。

758 次安装60 星标

通过托管 OAuth 代理调用 Apollo.io API,完成人员与公司搜索、联系人补全和销售数据管理。

226 次安装5 星标

通过托管 OAuth 访问 HubSpot CRM API,管理联系人、公司、商机及对象关联。

187 次安装5 星标