{"openapi":"3.1.0","info":{"title":"Front (BYOK) API","version":"0.1.0","description":"Front (BYOK) lets an AI assistant read your own Front data through the Front API with a key you supply (API token). Read-only: 10 tools (list_conversations, search_conversations, get_conversation, list_conversation_messages, list_inbox_conversations, list_inboxes, list_contacts, list_tags, list_teammates, list_channels). The BYOK key travels with each request, is used for that one call only and...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-front.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-front/docs"},"termsOfService":"https://connectorbay.com/byok-front/terms"},"servers":[{"url":"https://byok-front.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-front/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_conversations":{"post":{"operationId":"list_conversations","summary":"List conversations across the inboxes the token can see, with subject, status, assignee, recipient, tags and times (Unix","description":"List conversations across the inboxes the token can see, with subject, status, assignee, recipient, tags and times (Unix seconds). Filter by status. Use for \"What conversations are unassigned in Front\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"statuses":{"anyOf":[{"enum":["assigned","unassigned","archived","trashed"],"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations with this status: assigned, unassigned, archived or trashed.","title":"Statuses"},"sort_by":{"anyOf":[{"const":"date","type":"string"},{"type":"null"}],"default":null,"description":"Sort field; only date is supported.","title":"Sort By"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Page token for the next page: take the value of the page_token parameter inside _pagination.next of the previous answer.","title":"Page Token"}},"title":"list_conversationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_conversations":{"post":{"operationId":"search_conversations","summary":"Search conversations by text and filters such as inbox:inb_x, tag:tag_x, from:email, assignee:tea_x, is:open or is:unass","description":"Search conversations by text and filters such as inbox:inb_x, tag:tag_x, from:email, assignee:tea_x, is:open or is:unassigned, after:unixtime; filters combine with AND. Use for \"Find Front conversations from fry@example.com that are open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Search text and filters, for example 'refund is:open from:fry@example.com' or 'inbox:inb_123 tag:tag_345'. Up to 15 filters. Ids, not names, for inbox, tag and teammates.","maxLength":200,"title":"Query","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Page token for the next page: take the value of the page_token parameter inside _pagination.next of the previous answer.","title":"Page Token"}},"required":["query"],"title":"search_conversationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_conversation":{"post":{"operationId":"get_conversation","summary":"Get one conversation by id with subject, status, assignee, recipient, tags, links and timestamps. Use for \"Show Front co","description":"Get one conversation by id with subject, status, assignee, recipient, tags, links and timestamps. Use for \"Show Front conversation cnv_123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"conversation_id":{"description":"Conversation id, starting with cnv_ (from the conversation lists).","maxLength":200,"title":"Conversation Id","type":"string"}},"required":["conversation_id"],"title":"get_conversationArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_conversation_messages":{"post":{"operationId":"list_conversation_messages","summary":"List the messages of one conversation with author, direction, recipients, subject, short preview, text body and attachme","description":"List the messages of one conversation with author, direction, recipients, subject, short preview, text body and attachment names. Use for \"What messages are in Front conversation cnv_123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"conversation_id":{"description":"Conversation id, starting with cnv_ (from the conversation lists).","maxLength":200,"title":"Conversation Id","type":"string"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction by creation time: asc or desc.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Page token for the next page: take the value of the page_token parameter inside _pagination.next of the previous answer.","title":"Page Token"}},"required":["conversation_id"],"title":"list_conversation_messagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_inbox_conversations":{"post":{"operationId":"list_inbox_conversations","summary":"List the conversations of one inbox, optionally by status, with subject, assignee, recipient and tags. Use for \"What is ","description":"List the conversations of one inbox, optionally by status, with subject, assignee, recipient and tags. Use for \"What is in my Front inbox inb_123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"inbox_id":{"description":"Inbox id, starting with inb_ (from list_inboxes).","maxLength":200,"title":"Inbox Id","type":"string"},"statuses":{"anyOf":[{"enum":["assigned","unassigned","archived","trashed"],"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations with this status: assigned, unassigned, archived or trashed.","title":"Statuses"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Page token for the next page: take the value of the page_token parameter inside _pagination.next of the previous answer.","title":"Page Token"}},"required":["inbox_id"],"title":"list_inbox_conversationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_inboxes":{"post":{"operationId":"list_inboxes","summary":"List the inboxes of the company that the token can see, with id, name and whether they are private or public. Use for \"W","description":"List the inboxes of the company that the token can see, with id, name and whether they are private or public. Use for \"What inboxes do we have in Front\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_inboxesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_contacts":{"post":{"operationId":"list_contacts","summary":"List contacts with name, description, handles (emails, phones), groups and private flag; filter by update time. Use for ","description":"List contacts with name, description, handles (emails, phones), groups and private flag; filter by update time. Use for \"Who are my Front contacts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"updated_after":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Only contacts updated after this Unix timestamp in seconds.","title":"Updated After"},"updated_before":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Only contacts updated before this Unix timestamp in seconds.","title":"Updated Before"},"sort_by":{"anyOf":[{"enum":["created_at","updated_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field: created_at or updated_at.","title":"Sort By"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Page token for the next page: take the value of the page_token parameter inside _pagination.next of the previous answer.","title":"Page Token"}},"title":"list_contactsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List tags with id, name, description, color highlight and whether private. Use for \"What tags are used in Front\".","description":"List tags with id, name, description, color highlight and whether private. Use for \"What tags are used in Front\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Page token for the next page: take the value of the page_token parameter inside _pagination.next of the previous answer.","title":"Page Token"}},"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_teammates":{"post":{"operationId":"list_teammates","summary":"List teammates of the company with id, email, name, role flags and availability. Use for \"Who is on my Front team\".","description":"List teammates of the company with id, email, name, role flags and availability. Use for \"Who is on my Front team\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_teammatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_channels":{"post":{"operationId":"list_channels","summary":"List channels (connected email addresses, chats, social accounts) with id, name, address, type and validity. Use for \"Wh","description":"List channels (connected email addresses, chats, social accounts) with id, name, address, type and validity. Use for \"Which channels are connected to Front\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}