openapi: 3.0.3 info: title: Missive REST Analytics Conversations API description: The Missive REST API allows developers to manage conversations, messages, contacts, drafts, labels, and analytics programmatically. Authentication uses Bearer tokens (personal access tokens) generated in Missive preferences. The API requires a Productive plan or higher to generate API tokens. Responses are JSON-formatted with HTTP 200 or 201 success codes. version: '1' contact: name: Missive Support url: https://missiveapp.com/help termsOfService: https://missiveapp.com/terms servers: - url: https://public.missiveapp.com/v1 description: Missive REST API v1 security: - bearerAuth: [] tags: - name: Conversations description: Manage conversations in the inbox paths: /conversations: get: operationId: listConversations summary: List Conversations description: List conversations. At least one mailbox filter must be provided. Conversations are ordered newest to oldest by last activity. Pagination uses the last_activity_at timestamp of the last item as the until parameter. tags: - Conversations parameters: - name: inbox in: query schema: type: boolean - name: all in: query schema: type: boolean - name: assigned in: query schema: type: boolean - name: closed in: query schema: type: boolean - name: snoozed in: query schema: type: boolean - name: flagged in: query schema: type: boolean - name: trashed in: query schema: type: boolean - name: junked in: query schema: type: boolean - name: drafts in: query schema: type: boolean - name: shared_label in: query description: Shared label ID to filter by schema: type: string - name: team_inbox in: query description: Team ID to filter team inbox schema: type: string - name: team_closed in: query description: Team ID to filter closed team conversations schema: type: string - name: team_all in: query description: Team ID for all team conversations schema: type: string - name: limit in: query description: Number of conversations (default 25, max 50) schema: type: integer default: 25 maximum: 50 - name: until in: query description: Unix timestamp for cursor-based pagination schema: type: integer format: int64 - name: organization in: query description: Filter by organization ID schema: type: string - name: email in: query description: Filter by email address schema: type: string - name: domain in: query description: Filter by email domain schema: type: string - name: contact_organization in: query description: Filter by contact organization ID schema: type: string responses: '200': description: Array of conversation objects content: application/json: schema: $ref: '#/components/schemas/ConversationsResponse' /conversations/{id}: get: operationId: getConversation summary: Get Conversation description: Fetch a specific conversation using its ID. tags: - Conversations parameters: - $ref: '#/components/parameters/conversationId' responses: '200': description: Single conversation object content: application/json: schema: $ref: '#/components/schemas/ConversationResponse' '404': description: Conversation not found patch: operationId: updateConversation summary: Update Conversation(s) description: Update one or more conversations. The id parameter supports comma-separated IDs for bulk operations. tags: - Conversations parameters: - $ref: '#/components/parameters/conversationId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateConversationRequest' responses: '200': description: Updated conversation object(s) content: application/json: schema: $ref: '#/components/schemas/ConversationsResponse' '400': $ref: '#/components/responses/BadRequest' '404': description: Conversation not found /conversations/{id}/messages: get: operationId: listConversationMessages summary: List Conversation Messages description: List messages within a conversation. tags: - Conversations parameters: - $ref: '#/components/parameters/conversationId' - name: limit in: query description: Number of messages (default 10, max 10) schema: type: integer default: 10 maximum: 10 - name: until in: query description: Unix timestamp for cursor pagination schema: type: integer format: int64 responses: '200': description: Array of message objects content: application/json: schema: $ref: '#/components/schemas/MessagesResponse' /conversations/{id}/comments: get: operationId: listConversationComments summary: List Conversation Comments description: List comments (internal notes) within a conversation. tags: - Conversations parameters: - $ref: '#/components/parameters/conversationId' - name: limit in: query description: Number of comments (default 10, max 10) schema: type: integer default: 10 maximum: 10 - name: until in: query description: Unix timestamp for cursor pagination schema: type: integer format: int64 responses: '200': description: Array of comment objects content: application/json: schema: $ref: '#/components/schemas/CommentsResponse' /conversations/{id}/drafts: get: operationId: listConversationDrafts summary: List Conversation Drafts description: List drafts within a conversation. tags: - Conversations parameters: - $ref: '#/components/parameters/conversationId' - name: limit in: query description: Number of drafts (default 10, max 10) schema: type: integer default: 10 maximum: 10 - name: until in: query description: Unix timestamp for cursor pagination schema: type: integer format: int64 responses: '200': description: Array of draft objects content: application/json: schema: $ref: '#/components/schemas/DraftsResponse' /conversations/{id}/posts: get: operationId: listConversationPosts summary: List Conversation Posts description: List posts within a conversation. tags: - Conversations parameters: - $ref: '#/components/parameters/conversationId' - name: limit in: query description: Number of posts (default 10, max 10) schema: type: integer default: 10 maximum: 10 - name: until in: query description: Unix timestamp for cursor pagination schema: type: integer format: int64 responses: '200': description: Array of post objects content: application/json: schema: $ref: '#/components/schemas/PostsResponse' /conversations/{id}/merge: post: operationId: mergeConversations summary: Merge Conversations description: Merge a conversation into a target conversation. tags: - Conversations parameters: - $ref: '#/components/parameters/conversationId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MergeConversationRequest' responses: '200': description: Merged conversation object content: application/json: schema: $ref: '#/components/schemas/ConversationResponse' '400': $ref: '#/components/responses/BadRequest' components: schemas: Conversation: type: object properties: id: type: string subject: type: string color: type: string organization: type: string team: type: string assignees: type: array items: type: string shared_labels: type: array items: type: string message_count: type: integer last_activity_at: type: integer format: int64 assigned: type: boolean unassigned: type: boolean closed: type: boolean archived: type: boolean flagged: type: boolean snoozed: type: boolean trashed: type: boolean junked: type: boolean MessageField: type: object properties: name: type: string address: type: string phone_number: type: string id: type: string username: type: string MessagesResponse: type: object properties: messages: type: array items: $ref: '#/components/schemas/Message' ConversationsResponse: type: object properties: conversations: type: array items: $ref: '#/components/schemas/Conversation' MergeConversationRequest: type: object required: - target properties: target: type: string description: Destination conversation ID subject: type: string description: Subject for the merged conversation CommentsResponse: type: object properties: comments: type: array items: $ref: '#/components/schemas/Comment' Error: type: object properties: error: type: string description: Error message ConversationResponse: type: object properties: conversations: $ref: '#/components/schemas/Conversation' Message: type: object properties: id: type: string subject: type: string preview: type: string body: type: string type: type: string from_field: $ref: '#/components/schemas/MessageField' to_fields: type: array items: $ref: '#/components/schemas/MessageField' cc_fields: type: array items: $ref: '#/components/schemas/MessageField' bcc_fields: type: array items: $ref: '#/components/schemas/MessageField' references: type: array items: type: string in_reply_to: type: array items: type: string attachments: type: array items: $ref: '#/components/schemas/Attachment' created_at: type: integer format: int64 updated_at: type: integer format: int64 Attachment: type: object properties: id: type: string filename: type: string extension: type: string media_type: type: string sub_type: type: string size: type: integer url: type: string width: type: integer height: type: integer UpdateConversationRequest: type: object properties: subject: type: string color: type: string organization: type: string team: type: string add_users: type: array items: type: string add_assignees: type: array items: type: string remove_assignees: type: array items: type: string add_shared_labels: type: array items: type: string remove_shared_labels: type: array items: type: string add_to_inbox: type: boolean add_to_team_inbox: type: string description: Team ID to add to that team's inbox close: type: boolean reopen: type: boolean PostsResponse: type: object properties: posts: type: array items: $ref: '#/components/schemas/Post' Post: type: object properties: id: type: string body: type: string attachments: type: array items: $ref: '#/components/schemas/Attachment' created_at: type: integer format: int64 Comment: type: object properties: id: type: string body: type: string author: type: object properties: id: type: string name: type: string mentions: type: array items: type: object properties: id: type: string name: type: string attachments: type: array items: $ref: '#/components/schemas/Attachment' created_at: type: integer format: int64 DraftsResponse: type: object properties: drafts: type: array items: $ref: '#/components/schemas/Message' responses: BadRequest: description: Bad request — invalid parameters content: application/json: schema: $ref: '#/components/schemas/Error' parameters: conversationId: name: id in: path required: true description: Conversation ID (supports comma-separated IDs for bulk operations) schema: type: string securitySchemes: bearerAuth: type: http scheme: bearer description: 'Personal access token generated in Missive preferences. Format: Bearer missive_pat-[token]. Requires Productive plan or higher.' externalDocs: description: Missive Developer Documentation url: https://missiveapp.com/docs/developers/rest-api