MESSAGING · EMAIL
Conversations, drafts, and shared labels in the inbox that person works from.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
missive_delete_drafts_by_idWRITEDelete a draft via DELETE /drafts/{id}. Deletes a draft from a conversation. The `:id` parameter is the ID of the draft (returned in the create draft response). The drafts endpoint lets you create email, SMS, WhatsApp and Missive Live Chat drafts that can either be sent immediately or edited and sent from the Missive app. You can create drafts in a new conversation or append them as a reply to an existing one. **This is the endpoint to use for sending emails.** To send immediately, include `send: true` in your request. To reply to an existing conversation, use the `conversation` or `references` parameters. **Example usage:** Create a new draft in a shared label named "Follow up" with a specific body every time someone fills out a form on your website.
missive_delete_hooks_by_idWRITEDelete webhook via DELETE /hooks/{id}. Delete a webhook subscription. Behind the scene it deletes the rule containing the webhook action. Last updated on September 18th, 2025 Need more specific answers? --- # Agent Instructions This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com. Example usage Automatically trigger workflows in external systems when new messages arrive or comments are added.
missive_delete_posts_by_idWRITEDelete a post via DELETE /posts/{id}. Deletes a post from a conversation. The `:id` parameter is the ID of the post (returned in the create post response). For shared conversations, the API token must be generated by an admin in the organization that owns the conversation. Only organization owner and admins have permission to delete posts in conversations shared with their organization. The posts endpoint lets you inject data in any Missive conversation and manage conversation state. You can create posts in new conversations or append them to existing ones. Posts are the recommended way to manage conversations (close, move to inbox, assign users, add labels) from integrations and automations. Each post leaves a visible trace in the conversation showing what triggered the action. Example usage: Each time someone pushes code to Github, create a post that lists the commits. When a support ticket is resolved in your system, create a post that closes the conversation.
missive_delete_responses_by_idsWRITEDelete response(s) via DELETE /responses/{ids}. Deletes one or more responses. For organization responses in organizations with restricted response management enabled (enterprise plan feature), only organization admins and owners have permission to delete responses. Responses created by external integrations (such as WhatsApp templates) cannot be deleted via this endpoint.
missive_get_analytics_reports_by_idREADGet analytics report via GET /analytics/reports/{id}. Fetch a report using its id returned by a Create report request. Report data is returned as JSON. Most reports complete within 2 or 3 seconds after creation, but some may take 30 seconds or more. They expire 60 seconds after completion. An empty 404 response is returned for incomplete, expired or inexistent reports. Fetch a report 5 seconds after its creation and retry every 5 seconds until a successful 200 response is returned. Analytics endpoints let you fetch a report based on a selected period and optional filters such as team inbox, users, labels, etc. Two endpoints are involved due to the asynchronous nature of generating reports: one request to create the report and another to get the data shortly after. Analytics API endpoints require a Productive or Business plan. Filtering capabilities (teams, users, labels, accounts) require a Business plan. Example usage Automatically sync analytics data to your Business Intelligence tool.
missive_get_contact_booksREADList contact books via GET /contact_books. List contact books the authenticated user has access to. Remember that a contact book `id` is mandatory when creating a contact programmatically. In Missive, contacts are stored in contact books. Contact books can be private or shared with various members of an organization.
missive_get_contact_groupsREADList contact groups via GET /contact_groups. List contact groups or organizations linked to a contact book. Contacts can be grouped in both organizations and groups. Organizations are typically used to map a group of related contacts (businesses). Groups are used to group unrelated contacts, think of groups as labels.
missive_get_contactsREADList contacts via GET /contacts. This endpoint is useful to sync Missive contacts to another service or to find contacts based on some search term. Contact endpoints let you manage your contacts programmatically. Example usage Automatically sync contacts between Missive and your CRM.
missive_get_contacts_by_idREADGet a contact via GET /contacts/{id}. Fetch a specific contact using the contact `id`. Trying to get a deleted contact will produce a 404 response. Contact endpoints let you manage your contacts programmatically. Example usage Automatically sync contacts between Missive and your CRM.
missive_get_conversationsREADList conversations via GET /conversations. List conversations visible to the user who owns the API token. Must be filtered by mailbox, shared label or team. At least one mailbox filter is required. Omitting all of them returns a `"You need to paginate at least one mailbox"` error. Pass one of: `inbox`, `all`, `assigned`, `closed`, `snoozed`, `flagged`, `trashed`, `junked`, `drafts`, `shared_label`, `team_inbox`, `team_closed`, or `team_all`. Returns conversations ordered from newest to oldest activity. To paginate, pass an `until` param equal to the `last_activity_at` of the oldest conversation returned in the previous page. The last page is reached when fewer conversations than `limit` are returned or if all conversations in a page have the same `last_activity_at`. A page may return more conversations than `limit`. Conversations where the API token user is a guest will be returned with limited data, containing only the `id` and `last_activity_at` fields. The `email`, `domain`, and `contact_organization` parameters are mutually exclusive. You can only use one of these contact filters at a time. Passing multiple will return a 400 error. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_get_conversations_by_idREADGet a conversation via GET /conversations/{id}. Fetch a specific conversation using the conversation `id`. The returned conversation may have a different `id`. This happens when conversations get merged; passing an old conversation `id` will keep working, but the new conversation `id` will be returned. The same shape is returned by List conversations, Get a conversation, Update conversations, and Merge conversations. When the API token user is a guest in the conversation, only `id` and `last_activity_at` are returned. The `team` object embedded in conversation responses is a compact team object. For the full team shape, use List teams, Create team(s), or Update team(s). Items inside `users` and `assignees` on a conversation. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_get_conversations_by_id_commentsREADList conversation comments via GET /conversations/{id}/comments. List comments in the conversation passed as `id`. Returns comments ordered from newest to oldest. To paginate, pass an `until` param equal to the `created_at` of the oldest comment returned in the previous page. The last page is reached when fewer comments than `limit` are returned or if all comments in a page have the same `created_at`. A page may return more comments than `limit`. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_get_conversations_by_id_draftsREADList conversation drafts via GET /conversations/{id}/drafts. List draft messages in the conversation passed as `id`. Returns drafts ordered from newest to oldest. To paginate, pass an `until` param equal to the `delivered_at` of the oldest draft returned in the previous page. The last page is reached when fewer drafts than `limit` are returned or if all drafts in a page have the same `delivered_at`. A page may return more drafts than `limit`. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_get_conversations_by_id_messagesREADList conversation messages via GET /conversations/{id}/messages. List messages in the conversation passed as `id`. Draft messages are excluded. Returns messages ordered from newest to oldest. To paginate, pass an `until` param equal to the `delivered_at` of the oldest message returned in the previous page. The last page is reached when fewer messages than `limit` are returned or if all messages in a page have the same `delivered_at`. A page may return more messages than `limit`. The same shape is returned by List conversation messages, List conversation drafts, List messages, and Get a Message. The `body` field is only included by Get a Message. Some keys are channel-specific (see notes below). For WhatsApp messages, the `id` in `from_field` and `to_fields` identifies authors and recipients by their **Business-Scoped User ID (BSUID)**, the identifier Meta uses to reference a WhatsApp user within your business, instead of the contact's phone number. For example, the `id` changes from `whatsapp:+14155551234` to `whatsapp:US.13491208655302741918`. If your integration relied on `from_field.id` or `to_fields[].id` being a phone number for WhatsApp, update it to use the BSUID. The `username` field holds the contact's WhatsApp username when they have set one, otherwise it falls back to their phone number. When the API token user is not related to the message (not the author, recipient, or watcher), sensitive fields such as `body`, `preview`, and recipient lists may be redacted. Returned inside the `attachments` array of messages, drafts, comments, posts, and responses. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_get_conversations_by_id_postsREADList conversation posts via GET /conversations/{id}/posts. List posts in the conversation passed as `id`. Returns posts ordered from newest to oldest. To paginate, pass an `until` param equal to the `created_at` of the oldest post returned in the previous page. The last page is reached when fewer posts than `limit` are returned or if all posts in a page have the same `created_at`. A page may return more posts than `limit`. Returned by List conversation posts. See Create a post for the meaning of each field. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_get_messagesREADList messages via GET /messages. Fetch messages matching an email `Message-ID`. Message data includes headers, body and attachments in the same format as Get a message. Most of the time, only one message matches a given Message-ID, as required by email standards. However, non-compliant sender servers may send you multiple messages with the same Message-ID in which case this endpoint will return the latest 10.
missive_get_messages_by_idREADGet a Message via GET /messages/{id}. Fetch a specific message headers, body and attachments using the message `id`. To retrieve multiple messages in a single call, pass comma-separated message IDs: When fetching multiple messages with comma-separated IDs, the response returns an array of message objects under the `messages` key, in the same format as shown above. Inline images Inline images markup in the message `body` HTML contain no `src` attribute, instead they contain a `data-missive-attachment-id` attribute with the attachment `id`. The attachment and its URL are available in the GET response under the `attachments` key.
missive_get_organizationsREADList organizations via GET /organizations. List organizations the authenticated user is part of.
missive_get_responsesREADList responses via GET /responses. List responses for the authenticated user. Inline images Inline images markup in the response `body` HTML contain no `src` attribute, instead they contain a `data-missive-attachment-id` attribute with the attachment `id`. The attachment and its URL are available in the GET response under the `attachments` key. The same shape is returned by List responses, Get a response, Create response(s), and Update response(s).
missive_get_responses_by_idREADGet a response via GET /responses/{id}. Fetch a specific response using the response `id`.
missive_get_shared_labelsREADList shared labels via GET /shared_labels. List shared labels in organizations the authenticated user is part of and has access to. The same shape is returned by List shared labels, Create shared labels(s), and Update shared label(s).
missive_get_tasksREADList tasks via GET /tasks. List tasks the authenticated user has access to. Results are ordered by last activity time (most recent first) and can be filtered by various criteria. Request example: Task endpoints let you create and manage tasks programmatically. Example usage Automatically create tasks from your project management tool or bug tracker.
missive_get_tasks_by_idREADGet a task via GET /tasks/{id}. Get a single task by ID. Returns the task with full details including assignees and team information. The `assignees` array contains full user objects with `id`, `name`, `email`, and `avatar_url`. The `team` object contains full team information with `id`, `name`, and `organization`. Task endpoints let you create and manage tasks programmatically. Example usage Automatically create tasks from your project management tool or bug tracker.
missive_get_teamsREADList teams via GET /teams. List teams in organizations the authenticated user is part of and has access to.
missive_get_usersREADList users via GET /users. List users in organizations the authenticated user is part of. User endpoints let you list users in your organization. User status (availability, away, out of office) is not available via the API. There are currently no endpoints to retrieve or update user status.
missive_patch_contacts_by_idsWRITEUpdate contact(s) via PATCH /contacts/{ids}. A successful request will return the updated contacts with embedded `memberships` and `infos`. Contact `id` is required. See the Create contact(s) section for other attributes. When updating a contact, you may pass only attributes you want to update. In the example above, only the last name will be updated. The `infos` and `memberships` arrays are exceptions: when passed, you must include all items. Missing items will be deleted from the contact. To delete items, omit them from the array. Contact endpoints let you manage your contacts programmatically. Example usage Automatically sync contacts between Missive and your CRM.
missive_patch_conversations_by_idWRITEUpdate conversations via PATCH /conversations/{id}. Update one or more conversations without creating a post. Use this endpoint to close, reopen, move, assign, label, recolor, or rename conversations silently. System events can still appear in Missive. When the update changes shared labels, label change rules still run. To update multiple conversations in one request, pass comma-separated IDs: The request body must include a `conversations` array with exactly one object for each ID in the URL. Each object must include the matching `id`. If a conversation was merged, you can pass the old conversation `id`. The response returns the current conversation `id`. In bulk requests, do not pass two IDs that resolve to the same merged conversation. The response uses the same conversation object shape documented in Conversation properties. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_patch_responses_by_idsWRITEUpdate response(s) via PATCH /responses/{ids}. A successful request will return the updated responses. Response `id` is required. See the Create response(s) section for other attributes. When updating a response, you may pass only attributes you want to update. In the example above, only the title and body will be updated. When the `attachments` array is passed, you must pass all attachments you want to keep. Missing attachments will be removed from the response. Responses created by external integrations (such as WhatsApp templates) cannot be updated via this endpoint.
missive_patch_shared_labels_by_idsWRITEUpdate shared label(s) via PATCH /shared_labels/{ids}. A successful request will return the updated shared labels. Attributes Shared label `id` is required. See the Create shared label(s) section for other attributes. You may pass only attributes you want to update. In the example above, the name and color will be updated. Basic users can update: * `name`: The name of the label * `color`: The color of the label as a hex color code (e.g. #f96885) * `parent`: The ID of the parent label Admin/owner users can additionally update: * `visibility`: Must be either 'delegates' or 'organization' * `share_with_organization`: Whether to share the label with the entire organization * `share_with_team`: The ID of the team to share the label with * `share_with_users`: An array of user IDs to share the label with
missive_patch_tasks_by_idWRITEUpdate a task via PATCH /tasks/{id}. Update an existing task's attributes. Task endpoints let you create and manage tasks programmatically. Example usage Automatically create tasks from your project management tool or bug tracker.
missive_patch_teams_by_idsWRITEUpdate team(s) via PATCH /teams/{ids}. Update one or more teams. The API token must belong to an admin or owner of the organization. A successful request will return the updated teams. Team `id` is required. See the Create team(s) section for other attributes. You may pass only attributes you want to update. In the example above, only the name, emoji, and active members will be updated. The same shape is returned by List teams, Create team(s), and Update team(s).
missive_post_analytics_reportsWRITECreate analytics report via POST /analytics/reports. This id must then be included in a Get report request. Analytics endpoints let you fetch a report based on a selected period and optional filters such as team inbox, users, labels, etc. Two endpoints are involved due to the asynchronous nature of generating reports: one request to create the report and another to get the data shortly after. Analytics API endpoints require a Productive or Business plan. Filtering capabilities (teams, users, labels, accounts) require a Business plan. Example usage Automatically sync analytics data to your Business Intelligence tool.
missive_post_contactsWRITECreate contact(s) via POST /contacts. A successful request will return newly created contacts. Contact endpoints let you manage your contacts programmatically. Example usage Automatically sync contacts between Missive and your CRM.
missive_post_conversations_by_id_mergeWRITEMerge conversations via POST /conversations/{id}/merge. Merge the conversation passed as `:id` into the conversation passed as `target`. After merging, the source conversation (`:id`) is marked as replaced and all its messages, comments, and other entries become part of the target conversation. When conversations are swapped during the merge (e.g., when merging an organization conversation into a private conversation, or when the source has significantly more entries), the returned conversation `id` may differ from the one passed as `target`. The source conversation UUID is passed in the URL as `:id`. **Managing conversation state (close, move, assign, etc.)** Use Update conversations to change conversation state without adding a post. Use Posts, Messages, or Drafts when you also want to create visible content in the conversation. Posts are useful for automations and integrations that should leave a visible trace showing what triggered the action.
missive_post_draftsWRITECreate a draft via POST /drafts. The drafts endpoint lets you create email, SMS, WhatsApp and Missive Live Chat drafts that can either be sent immediately or edited and sent from the Missive app. You can create drafts in a new conversation or append them as a reply to an existing one. **This is the endpoint to use for sending emails.** To send immediately, include `send: true` in your request. To reply to an existing conversation, use the `conversation` or `references` parameters. **Example usage:** Create a new draft in a shared label named "Follow up" with a specific body every time someone fills out a form on your website.
missive_post_hooksWRITECreate webhook via POST /hooks. Create a webhook subscription to receive notifications for specific events in Missive. This endpoint allows integration with services like Zapier, Relay, n8n, and others, or can be used directly for custom integrations. Under the hood, this endpoint creates a Missive rule with a webhook action - you can later view and edit these rules in your Missive Rules settings, just like any other rule you create manually. Example usage Automatically trigger workflows in external systems when new messages arrive or comments are added.
missive_post_messagesWRITECreate a message via POST /messages. Create an incoming message in a custom channel. Custom channels let users integrate message providers not built-in to Missive. This endpoint is only for **custom channels**. It creates incoming messages (simulating messages received from an external system). **To reply to an email or send a new email**, use the Drafts endpoint with `send: true` instead.
missive_post_postsWRITECreate a post via POST /posts. The response includes: * `conversation`: ID of the conversation the post was added to * `id`: ID of the the post (use this ID for deleting the post) Validations * Either `text`, `markdown` or `attachments` is required. * The `text` and `markdown` fields have a maximum length of 8000 characters. * The total JSON payload of your request must not exceed 10 MB. The posts endpoint lets you inject data in any Missive conversation and manage conversation state. You can create posts in new conversations or append them to existing ones. Posts are the recommended way to manage conversations (close, move to inbox, assign users, add labels) from integrations and automations. Each post leaves a visible trace in the conversation showing what triggered the action. Example usage: Each time someone pushes code to Github, create a post that lists the commits. When a support ticket is resolved in your system, create a post that closes the conversation.
missive_post_responsesWRITECreate response(s) via POST /responses. A successful request will return newly created responses.
missive_post_shared_labelsWRITECreate shared labels(s) via POST /shared_labels. A successful request will return newly created shared labels. `share_with_organization`, `share_with_team`, `share_with_users`\ Users affected by either of those params will have access to all the conversations in the label.
missive_post_tasksWRITECreate a task via POST /tasks. Create a new task. Tasks can be standalone, conversations or created inside conversations. Tasks created via the API appear in the **Tasks** view only, not the Inbox. Creating a task does not auto-watch the parent conversation for the API token owner. When creating subtasks inside conversations, you may auto-watch the parent conversation. To disable this, go to **Settings > Preferences** and search for "watch" to find and disable the **auto-watch on task creation** option. Task endpoints let you create and manage tasks programmatically. Example usage Automatically create tasks from your project management tool or bug tracker.
missive_post_teamsWRITECreate team(s) via POST /teams. Create a new team in an organization. The API token must belong to an admin or owner of the organization.
Put Missive behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.