Endpoints
Analytics
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.
Example usage Automatically sync analytics data to your Business Intelligence tool.
Create analytics report
POST /v1/analytics/reports
{
"reports": {
"organization": "0d9bab85-a74f-4ece-9142-0f9b9f36ff92",
"start": 1691812800,
"end": 1692371867,
"time_zone": "America/Montreal"
}
}{
"reports": {
"organization": "0d9bab85-a74f-4ece-9142-0f9b9f36ff92",
"start": 1691812800,
"end": 1692371867,
"time_zone": "America/Montreal",
"teams": [
"0e24f298-965d-4475-9220-b32636a1e2c3"
],
"users": [
"1ce8117e-ae42-4304-b953-c81656da4bd1",
"74f91030-39b8-4627-9835-9cfbce9d67c1"
],
"accounts": [
"716be7a6-fd40-45a2-bfcb-43b9ed38d1f0",
"a5d2aa1c-3828-4f90-bbd8-3dffaadda97e"
],
"account_types": [
"email",
"sms"
],
"shared_labels": [
"bca0bb8f-8b2f-45f8-a59a-333de84f0184"
]
}
}{
"reports": {
"id": "8441d4a0-a0ad-4f0f-aa9c-1cc881057e42"
}
}This id must then be included in a Get report request: https://learn.missiveapp.com/api-documentation/rest-endpoints#get-report
Params
organization*
Organization ID string
"0d9bab85-a74f-4ece-9142-0f9b9f36ff92"
start*
Report period start
1691812800
end*
Report period end
1692371867
teams
Array of team ID strings
["0e24f298-965d-4475-9220-b32636a1e2c3"]
users
Array of user ID strings
["1ce8117e-ae42-4304-b953-c81656da4bd1"]
shared_labels
Array of organization label ID strings
["bca0bb8f-8b2f-45f8-a59a-333de84f0184"]
accounts
Array of account ID strings
["716be7a6-fd40-45a2-bfcb-43b9ed38d1f0"]
account_types
Array of type strings
["email", "sms"]
teams, users, shared_labels, accounts
Refer to Resource IDs: https://learn.missiveapp.com/api-documentation/getting-started#resource-ids
account_types
"custom", "email", "instagram", "live_chat", "messenger", "sms", "whatsapp"
Get analytics report
GET /v1/analytics/reports/:id
Fetch a report using its id returned by a Create report request.
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.
Contacts
Contact endpoints let you manage your contacts programmatically.
Example usage Automatically sync contacts between Missive and your CRM.
Create contact(s)
POST /v1/contacts
A successful request will return newly created contacts.
Attributes
contact_book*
Contact book ID string
"551b8675-11e9-49c3-aac0-01fb8510d862"
first_name
string
"Philippe"
last_name
string
"Lehoux"
middle_name
string
"Antoine"
phonetic_first_name
string
"f ih l - IH - p ai"
phonetic_last_name
string
"l ay h oo"
phonetic_middle_name
string
"ah n t - w ah n"
prefix
string
"Mr."
suffix
string
"Jr."
nickname
string
"Phil"
file_as
string
"Missive"
notes
string
"Cool prospect!"
starred
boolean
true
gender
string
"Male"
infos
Array containing contact info objects, see below for details
[{"kind": "email", "label": "work", "value": "phil@missiveapp.com"}]
memberships
Array containing contact membership objects, see below for details
[{ "title": "CEO", "group": { "kind": "organization", "name": "Missive" }}]
infos
The infos array lets you attach data of different kinds to contact: email, twitter, phone_number, facebook, physical_address, url, custom.
Infos with kind email
kind*
string
"email"
value*
Email address
"philippe@missiveapp.com"
label*
Email address type. Accepted values: home, work, personal, other
"work"
custom_label
Custom label value, use only if label is other
"old"
Infos with kind phone_number
kind*
string
"phone_number"
value*
Phone number
"+1 518 777-7777"
label*
Phone number type. Accepted values: main, mobile, home, work, home_fax, work_fax, other_fax, pager, other
"mobile"
custom_label
Custom label value, use only if label is other
"old"
Infos with kind twitter
kind*
string
"twitter"
value*
Twitter username
"@plehoux"
label*
Twitter account type. Accepted values: work, personal, other
"personal"
custom_label
Custom label value, use only if label is other
"old"
Infos with kind facebook
kind*
string
"facebook"
name*
Facebook user name
"Philippe-Antoine Lehoux"
label*
Facebook account type. Accepted values: work, personal, other
"personal"
custom_label
Custom label value, use only if label is other
"old"
Infos with kind physical_address
kind*
string
"physical_address"
street
string
123 Fake Street
extended_address
string
Office 222
city
string
Quebec
region
string
QC
postal_code
string
G1K 3T4
po_box
string
PO#12345
country
string
Canada
label*
Address type. Accepted values: work, home, other
"work"
custom_label
Custom label value, use only if label is other
"old"
Infos with kind url
kind*
string
"url"
value*
URL
"https://missiveapp.com/"
label*
URL type. Accepted values: homepage, profile, blog, work, personal, other
"homepage"
custom_label
Custom label value, use only if label is other
"admin"
Infos with kind custom
kind*
string
"custom"
value*
string
"A custom value"
label*
Custom info type. Accepted values: other
"other"
custom_label
Custom label value
"custom"
memberships
The memberships array lets you link a contact to organizations or groups. A membership always embeds a related group, which has a kind equal to either group or organization.
Organizations are most often used to link contacts to their work location.
Groups are used to group contacts together. Think of groups as labels.
department
can be set if group is of kind organization
"Finance"
title
can be set if group is of kind organization
"CFO"
location
can be set if group is of kind organization
"Montreal"
description
can be set if group is of kind organization
"Handle reporting"
group*
Object, see below for details
{"kind": "organization", "name": "Missive"}
memberships.group
kind*
Group type. Accepted values: organization, group
"organization"
name*
string
"Missive"
Update contact(s)
PATCH /v1/contacts/:id1,:id2,:id3,...
A successful request will return the updated contacts with embedded memberships and infos.
Attributes
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.
List contacts
GET /v1/contacts
This endpoint is useful to sync Missive contacts to another service or to find contacts based on some search term.
Params
contact_book*
Contact book ID
order
last_name
Default ordering is by contact last name. To get the most recently updated contacts, pass last_modified
limit
50
Number of contacts returned. Max value: 200
offset
0
Offset used to paginate.
modified_since
null
To return only contacts that have been modified or created since a point in time, pass a Unix Epoch time like 1556137749.
include_deleted
false
To include deleted contacts in the results of modified_since requests, pass true. Only the contact id and deleted attributes will be returned since the contact data has been deleted from Missive.
search
null
Text string to filter contacts. search term(s) are matched against all contact infos: name, email, phone, organization, custom fields, notes, etc.
Get a contact
GET /v1/contacts/:id
Fetch a specific contact using the contact id. Trying to get a deleted contact will produce a 404 response.
Contact books
In Missive, contacts are stored in contact books. Contact books can be private or shared with various members of an organization.
List contact books
GET /v1/contact_books
List contact books the authenticated user has access to. Remember that a contact book id is mandatory when creating a contact programmatically.
Params
limit
50
Number of contact books returned. Max value: 200
offset
0
Offset used to paginate.
Contact groups
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.
List contact groups
GET /v1/contact_groups
List contact groups or organizations linked to a contact book.
Params
contact_book*
Contact book ID
kind*
Either group or organization.
limit
50
Number of contact groups returned. Max value: 200
offset
0
Offset used to paginate.
Conversations
List conversations
GET /v1/conversations
List conversations visible to the user who owns the API token. Must be filtered by mailbox, shared label or team.
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.
Params
limit
Number of conversations returned. Default: 25. Max: 50
until
Timestamp value in Unix time used to paginate. Use the last_activity_at of the oldest conversation from previous page.
inbox
Pass true to list conversations in the Inbox.
all
Pass true to list conversations in the All mailbox.
assigned
Pass true to list conversations assigned to the user.
closed
Pass true to list conversations in Closed.
snoozed
Pass true to list conversations in Snoozed.
flagged
Pass true to list conversations in Starred.
trashed
Pass true to list conversations in Trash.
junked
Pass true to list conversations in Spam.
drafts
Pass true to list conversations in Drafts.
shared_label
Shared label ID. List conversations in the shared label.
team_inbox
Team ID. List conversations in the team’s Inbox.
team_closed
Team ID. List conversations in the team’s Closed mailbox.
team_all
Team ID. List conversations in the team’s All mailbox.
organization
Organization ID. Filter conversations to only those shared with the organization. There is no use to the organization param when passing a shared_label or team_ param.
Get a conversation
GET /v1/conversations/:id
Fetch a specific conversation using the conversation id.
List conversation messages
GET /v1/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.
Params
limit
Number of messages returned. Default: 10. Max: 10
until
Timestamp value in Unix time used to paginate. Use the delivered_at of the oldest message from previous page.
List conversation comments
GET /v1/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.
Params
limit
Number of comments returned. Default: 10. Max: 10
until
Timestamp value in Unix time used to paginate. Use the created_at of the oldest comment from previous page.
Comment properties
id
Unique ID of the comment entry
body
Text content of the comment
created_at
Timestamp when the comment was created
mentions
Array of user mentions in the comment, with indexes to locate them in the body text
author
User who created the comment
attachment
Optional file attached to the comment
task
Task information if the comment is associated with a task, null otherwise
Task properties
The task object contains the following properties:
description
Detailed description of the task
state
Current state of the task: todo, in_progress, or closed
due_at
Unix timestamp for when the task is due
started_at
Unix timestamp for when work on the task began
closed_at
Unix timestamp for when the task was completed/closed, null if not completed
assignees
Array of users assigned to the task
team
Team associated with the task, if any
List conversation drafts
GET /v1/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.
Params
limit
Number of drafts returned. Default: 10. Max: 10
until
Timestamp value in Unix time used to paginate. Use the delivered_at of the oldest draft from previous page.
List conversation posts
GET /v1/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.
Params
limit
Number of posts returned. Default: 10. Max: 10
until
Timestamp value in Unix time used to paginate. Use the created_at of the oldest post from previous page.
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.
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.
Create a draft
POST /v1/drafts
Attributes
subject
string
"Hello"
body
HTML or text string
"<b>World!</b>"
quote_previous_message
boolean
false
from_field Email
Object with "address" and "name" keys.
{"address": "philippe@missiveapp.com", "name": "Philippe Lehoux"}
from_field SMS & WhatsApp
Object with "phone_number" key, it must match an account number you have access to, formatted as "+" followed by digits only. An optional "type" key with values of "signalwire", "twilio", "twilio_whatsapp" or "whatsapp" needs to be provided when the phone number matches accounts of different types.
{"phone_number": "+18005550199", "type": "whatsapp"}
from_field Custom channel
Object with "id", "username" and "name" keys.
{"id": "12345", "username": "@missiveapp", "name": "Missive"}
to_fields Email
Array of objects. Object with "address" and "name" keys.
[{"address": "philippe@missiveapp.com", "name": "Philippe Lehoux"}]
to_fields SMS & WhatsApp
Array of objects. Object with "phone_number" key, only one item is allowed and it must be formatted as "+" followed by digits only.
[{"phone_number": "+18005550199"}]
to_fields Messenger & Instagram
Array of objects. Object with the "id" key.
[{"id": "1736313053102918"}]
to_fields Custom channel
Array of objects. Object with "id", "username" and "name" keys.
[{"id": "12345", "username": "@missiveapp", "name": "Missive"}]
to_fields Missive Live Chat
Array of one object. Object with "id", "username" and "name" keys.
[{ id: '123', username: 'phil@acme.com', name: 'Phil [Unverified]' }]
cc_fields
Array of objects with "address" and "name" keys.
[{"address": "philippe@missiveapp.com", "name": "Philippe Lehoux"}]
bcc_fields
Array of objects with "address" and "name" keys.
[{"address": "philippe@missiveapp.com", "name": "Philippe Lehoux"}]
account Custom Channel & Missive Live Chat, Messenger & Instagram
Account ID. You can find this ID in the custom channel, Missive Live Chat settings or Settings > API > Resource IDs.
"fbf74c47-d0a0-4d77-bf3c-2118025d8102"
attachments
Array containing files, see below for details
[{"base64_data": "iVBORw0KGgoAAAANS…", "filename": "logo.png"}]
references
Array of strings for appending to an existing conversation.
["<some-reference-123>"]
from_field
Object with the "phone_number", "address" or "name" keys, used to match contacts in the Missive sidebar and populate the authors line in the conversation preview
{"phone_number": "+4187249887", "name": "Paul"}
conversation
Conversation ID string for appending to an existing conversation
"5bb24363-69e5-48ed-80a9-feee988bc953"
team
Team ID string
"646bb7f1-2066-40be-b8f6-bacb8b3b7419"
force_team
boolean
false
organization
Organization ID string
"90beb742-27a3-44cf-95bc-7e5097167c9d"
add_users
Array of user ID strings
["7343bccf-cf35-4b33-99b0-b1d3c69c5f5c"]
add_assignees
Array of user ID strings
["7343bccf-cf35-4b33-99b0-b1d3c69c5f5c"]
conversation_subject
string
"New user!"
conversation_color
HEX color code or "good" "warning" "danger" string
"#000", "danger"
add_shared_labels
Array of shared label ID strings
["9825718b-3407-40b8-800d-a27361c86102"]
remove_shared_labels
Array of shared label ID strings
["e4aae78f-e932-40a2-9ece-ed764aa85790"]
add_to_inbox
boolean
false
add_to_team_inbox
boolean
false
close
boolean
false
send
boolean
false
send_at
Timestamp value in Unix time
1684540565
auto_followup
boolean, send_at is required when passing true
false
external_response_id WhatsApp
The Twilio or Meta ID of the template you're using.
474808552386201
external_response_variables WhatsApp
An object containing the variables values for the template you're using.
{ "1": "Philippe", "2": "This awesome project" }
body
The HTML/text body of your message. Regular HTML paragraphs tags in Missive will not show the desired spacing.
For instance, to get the expected spacing in between paragraphs you would change this:
to:
quote_previous_message
When true, the draft will include a quoted version of the last message in the conversation.
Be extremely careful when using this parameter. If you're creating a draft in an existing conversation using conversation or references, the quoted content will include the previous message's body. This could potentially leak sensitive information if you're not certain about the content of the previous message. Only use this parameter when you have full control over and visibility into the conversation context.
send
Set to true to send the draft immediately upon creating it.
send_at
Schedule draft to be sent at a later time. Cannot be combined with send: true.
auto_followup
When auto_followup is true, the scheduled draft to be sent at a later time with send_at will be discarded when there is a reply in the conversation.
from_field
from_field must either have an address that matches one of your email aliases on Missive, or a phone_number that matches one of your Twilio or SignalWire accounts. For custom channels, you may pass any id, username and name with no restriction.
attachments
The attachments array lets you attach up to 25 files to the draft. The total JSON payload of your request must not exceed 10 MB.
base64_data*
The base64-encoded contents of the file
"iVBORw0KGgoAAAANS…"
filename*
Filename of the attachment
"logo.png"
references
The references array lets you append a draft to an existing conversation. Given a conversation already exists and includes an email with a Message-ID: <a@a.com> or References: <a@a.com> header, you may add "references": ["<a@a.com>"] to your request so the draft gets appended to that conversation.
If references passed in the request are related to more than one conversation, the draft will be appended to the first conversation found. If no reference is provided, the draft will be created in a new conversation. If one or more references are provided but none of them match an existing conversation, the draft will be created in a new conversation.
Chevrons around references are optional. Both ["<some-reference-123>"] and ["some-reference-123"] would reference the same conversation.
conversation
If you know the ID of an existing Missive conversation you want to create your draft into, you can pass it as conversation instead of using references.
team
team lets you link the draft’s conversation to a team. When a conversation is already linked to team, this field is ignored.
force_team
force_team lets you force a new team even if the conversation is already in another team.
organization
organization lets you scope the search for conversations to ones already associated with an organization. If a new conversation is created and organization is passed, the new conversation will be linked to that organization.
add_users
add_users determines users who will get access to the conversation. When providing add_users, the organization field is required.
add_assignees
add_assignees lets you assign users to the conversation. Existing assignees will remain assigned. When providing add_assignees, the organization field is required.
add_shared_labels, remove_shared_labels
add_shared_labels and remove_shared_labels let you manage shared labels that are applied to the draft’s conversation.
add_to_team_inbox
add_to_team_inbox lets you move the draft’s conversation to a team inbox. When providing add_to_team_inbox, the team field is required.
add_to_inbox
add_to_inbox lets you move the draft’s conversation to Inbox for everyone having access to the conversation.
close
close lets you close the draft’s conversation for everyone having access to the conversation.
external_response_id, external_response_variables
external_response_id and external_response_variables are used for WhatsApp templates. They are required if you're initiating a WhatsApp conversation with a user that you haven't previously interacted with for the past 24 hours.
external_response_id is the Twilio or Meta ID of the template you're using. You can find these in either Twilio Content Template Builder: https://console.twilio.com/us1/develop/sms/content-template-builder or WhatsApp Manager: https://business.facebook.com/latest/whatsapp_manager/message_templates
external_response_variables is an object where the keys are the placeholder in the template and the values are the content you want to use for said placeholder. Be sure to provide string keys for all of the variables.
When using a template, you will need to provide a body matching the result of the template interpolation in the draft payload. Missive will show the body value you've provided, but will send the template and variables to the appropriate provider.
Send a message
To send a new message or reply, use Create a draft with the send: true param.
Delete a draft
DELETE /v1/drafts/:id
Deletes a draft from a conversation. The :id parameter is the ID of the draft (returned in the create draft response).
Messages
Create a message
POST /v1/messages
Create an incoming message in a custom channel. Custom channels let users integrate message providers not built-in to Missive.
Attributes
account*
Account ID. You can find this ID in the custom channel settings.
"fbf74c47-d0a0-4d77-bf3c-2118025d8102"
subject
Email channel only: string
"Hello"
body
HTML or text string based on channel message type.
"<b>World!</b>"
from_field
Email channel: Object with "address" and "name" keys. Text or HTML channel: Object with "id", "username" and "name" keys.
{ "address": "philippe@missiveapp.com", "name": "Philippe Lehoux" } or { "id": "12345", "username": "@missiveapp", "name": "Missive" }
to_fields
Email channel: Array of objects with "address" and "name" keys. Text or HTML channel: Array of objects with "id", "username" and "name" keys.
[{ "address": "philippe@missiveapp.com", "name": "Philippe Lehoux" }] or [{ "id": "12345", "username": "@missiveapp", "name": "Missive" }]
cc_fields
Email channel only: Array of objects with "address" and "name" keys.
[{ "address": "philippe@missiveapp.com", "name": "Philippe Lehoux" }]
bcc_fields
Email channel only: Array of objects with "address" and "name" keys.
[{ "address": "philippe@missiveapp.com", "name": "Philippe Lehoux" }]
delivered_at
Message delivery timestamp. If omitted, message is marked as delivered at request time.
1563806347
attachments
Array containing files, see below for details.
[{ "base64_data": "iVBORw0KGgoAAAANS...", "filename": "logo.png" }]
external_id
Unique ID used to identify non-email messages (SMS, Instagram DMs, etc).
"some-id-123"
references
Array of strings for appending to an existing conversation.
["some-reference-123"]
conversation
Conversation ID string for appending to an existing conversation
"5bb24363-69e5-48ed-80a9-feee988bc953"
team
Team ID string
Default based on channel sharing settings: Inbox or Team Inbox
force_team
boolean
false
organization
Organization ID string
"90beb742-27a3-44cf-95bc-7e5097167c9d"
add_users
Array of user ID strings
["7343bccf-cf35-4b33-99b0-b1d3c69c5f5c"]
add_assignees
Array of user ID strings
["7343bccf-cf35-4b33-99b0-b1d3c69c5f5c"]
conversation_subject
string
"New user!"
conversation_color
HEX color code or "good" "warning" "danger" string
"#000", "danger"
add_shared_labels
Array of shared label ID strings
["9825718b-3407-40b8-800d-a27361c86102"]
remove_shared_labels
Array of shared label ID strings
["e4aae78f-e932-40a2-9ece-ed764aa85790"]
add_to_inbox
boolean
Default based on channel sharing settings: Inbox or Team Inbox
add_to_team_inbox
boolean
Default based on channel sharing settings: Inbox or Team Inbox
close
boolean
false
attachments
The attachments array lets you attach files to messages. The total JSON payload of your request must not exceed 10 MB.
base64_data*
The base64-encoded contents of the file
"iVBORw0KGgoAAAANS..."
filename*
Filename of the attachment
"logo.png"
references
The references array lets you append a message to an existing conversation. Given a conversation already exists and includes a message with external_id: "some-id-123" or references: ["some-id-123"], you may add "references": ["some-id-123"] to your request so the message gets appended to that conversation.
If references passed in the request are related to more than one conversation, the message will be appended to the first conversation found. If no reference is provided, the message will be created in a new conversation. If one or more references are provided but none of them match an existing conversation, the message will be created in a new conversation.
conversation
If you know the ID of an existing Missive conversation you want to create your message into, you can pass it as conversation instead of using references.
team
team lets you link the message’s conversation to a team. When a conversation is already linked to team, this field is ignored.
force_team
force_team lets you force a new team even if the conversation is already in another team.
organization
organization lets you scope the search for conversations to ones already associated with an organization. If a new conversation is created and organization is passed, the message will be linked to that organization.
add_users
add_users determines users who will get access to the conversation. When providing add_users, the organization field is required.
add_assignees
add_assignees lets you assign users to the conversation. Existing assignees will remain assigned. When providing add_assignees, the organization field is required.
add_shared_labels, remove_shared_labels
add_shared_labels and remove_shared_labels let you manage shared labels that are applied to the message’s conversation.
add_to_team_inbox
add_to_team_inbox lets you move the message’s conversation to a team inbox. When providing add_to_team_inbox, the team field is required.
add_to_inbox
add_to_inbox lets you move the message’s conversation to Inbox for everyone having access to the conversation.
close
close lets you close the message’s conversation for everyone having access to the conversation.
Get a Message
GET /v1/messages/:id
Fetch a specific message headers, body and attachments using the message id.
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.
List messages
GET /v1/messages?email_message_id=Message-ID
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.
Params
email_message_id*
``
The Message-ID found in an email’s header.
Organizations
List organizations
GET /v1/organizations
List organizations the authenticated user is part of.
Params
limit
50
Number of organizations returned. Max value: 200
offset
0
Offset used to paginate.
Responses
List responses
GET /v1/responses
List responses for the authenticated user.
Params
organization
null
Organization ID
limit
50
Number of responses returned. Max value: 200
offset
0
Offset used to paginate.
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.
Get a response
GET /v1/responses/:id
Fetch a specific response using the response id.
Create response(s)
POST /v1/responses
A successful request will return newly created responses.
Attributes
title
Response title string (max 500 characters)
"Welcome email template"
organization
Organization ID string. Either organization or user is required (but not both).
"0d9bab85-a74f-4ece-9142-0f9b9f36ff92"
user
User ID string for personal responses. Either organization or user is required (but not both).
"a41a00fd-453d-49d7-a487-9765c35a3b70"
body
HTML string containing the response content
"<p>Hello!</p>"
subject
Subject line string (max 500 characters)
"Welcome!"
share_with_team
Team ID string to share the response with a specific team. organization is required
"646bb7f1-2066-40be-b8f6-bacb8b3b7419"
shared_labels
Array of shared label ID strings. organization is required
["9825718b-3407-40b8-800d-a27361c86102"]
to_fields
Array of objects with "address" and "name" keys
[{"address": "support@example.com", "name": "Support"}]
cc_fields
Array of objects with "address" and "name" keys
[{"address": "manager@example.com", "name": "Manager"}]
bcc_fields
Array of objects with "address" and "name" keys
[{"address": "archive@example.com"}]
external_id
External identifier string for syncing with other systems. When provided, external_source is required.
"template-001"
external_source
Source system identifier string. Required when external_id is provided. The combination must be unique per organization or user.
"knowledge-base"
attachments
Array containing files, see below for details
[{"base64_data": "iVBORw0KGgoAAAANS...", "filename": "logo.png"}]
attachments
The attachments array lets you attach files to the response. The total JSON payload of your request must not exceed 10 MB.
base64_data*
The base64-encoded contents of the file
"iVBORw0KGgoAAAANS..."
filename*
Filename of the attachment
"logo.png"
id
Temporary ID for inline image references (see Inline images section below)
"img1"
Inline images
To embed images inline within the response body, use a temporary id in the attachment and reference it in the HTML using the data-missive-attachment-id attribute:
The server will replace the temporary id with the actual attachment UUID. Attachments with an id that is referenced in the body HTML will be treated as inline images; attachments without a reference in the body will be treated as regular attachments.
Update response(s)
PATCH /v1/responses/:id1,:id2,:id3,...
A successful request will return the updated responses.
Attributes
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.
Delete response(s)
DELETE /v1/responses/:id1,:id2,:id3,...
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.
Posts
The posts endpoint lets you inject data in any Missive conversation. You can create posts in new conversations or append them to existing ones.
Example usage Each time someone pushes code to Github, create a post that lists the commits.
A post created from a Github webhook: https://learn.missiveapp.com/assets/features/007/github-post-dbe8104504c164d552b161ecfcfd39c9a1e100fd84a6fadb9d2eef8e898bdb63.png
Create a post
POST /v1/posts
The response includes:
conversation: ID of the conversation the post was added toid: ID of the the post (use this ID for deleting the post)
Attributes
username
Name of the post author, used instead of the API token owner’s name
"Missive"
username_icon
Image of the post author, used instead of the API token owner’s avatar
"https://s3.amazonaws.com/missive-assets/missive-avatar.png"
conversation_icon
Image used as the icon in the conversation list
"https://s3.amazonaws.com/missive-assets/missive-avatar.png"
conversation_subject
string
"New user!"
conversation_color
HEX color code or "good" "warning" "danger" string
"#000", "danger"
text
Main message of a post
"This is a post!"
markdown
Main message of a post, formatted with Markdown
"This is a **post**!"
notification*
Object with the "title" and "body" keys, used to render a notification
{"title":"A title", "body": "A body"}
attachments
Array containing attachment objects, see below for details
[{"text": "This is an attachment!"}]
references
Array of strings for appending to an existing conversation.
["<some-reference-123>"]
conversation
Conversation ID string for appending to an existing conversation
"5bb24363-69e5-48ed-80a9-feee988bc953"
organization
Organization ID string
"90beb742-27a3-44cf-95bc-7e5097167c9d"
team
Team ID string
"646bb7f1-2066-40be-b8f6-bacb8b3b7419"
force_team
boolean
false
add_users
Array of user ID strings
["7343bccf-cf35-4b33-99b0-b1d3c69c5f5c"]
add_assignees
Array of user ID strings
["7343bccf-cf35-4b33-99b0-b1d3c69c5f5c"]
add_shared_labels
Array of shared label ID strings
["9825718b-3407-40b8-800d-a27361c86102"]
remove_shared_labels
Array of shared label ID strings
["e4aae78f-e932-40a2-9ece-ed764aa85790"]
add_to_inbox
boolean
false
add_to_team_inbox
boolean
false
close
boolean
false
reopen
boolean
true
Validations
Either
text,markdownorattachmentsis required.All string fields have a variable maximum length, over which the content will be truncated. Those limits are safe enough for normal use.
references
The references array lets you append a post to an existing conversation. Given a conversation already exists and includes an email with a Message-ID: <a@a.com> or References: <a@a.com> header, you may add "references": ["<a@a.com>"] to your request so the post gets appended to that conversation.
If references passed in the request are related to more than one conversation, the post will only be inserted in the first conversation found. If no reference is provided, the post will be inserted into a new conversation. If one or more references are provided but none of them match an existing conversation, the post will be inserted into a new conversation.
Chevrons around references are optional. Both ["<some-reference-123>"] and ["some-reference-123"] would reference the same conversation.
conversation
If you know the ID of an existing Missive conversation you want to create your post into, you can pass it as conversation instead of using references.
organization
organization lets you scope the search for conversations to the ones already associated with an organization. If a new conversation is created and organization is passed, the conversation will be linked to that organization.
team
team lets you link the post’s conversation to a team. When a conversation is already linked to team, this field is ignored.
force_team
force_team lets you force a new team even if the conversation is already in another team.
add_users
add_users determines users who will get access to the conversation. When providing add_users, the organization field is required.
add_assignees
add_assignees lets you assign users to the conversation. Existing assignees will remain assigned. When providing add_assignees, the organization field is required.
add_shared_labels, remove_shared_labels
add_shared_labels and remove_shared_labels let you manage shared labels that are applied to the post’s conversation.
add_to_team_inbox
add_to_team_inbox lets you move the post’s conversation to a team inbox. When providing add_to_team_inbox, the team field is required.
add_to_inbox
add_to_inbox lets you move the post’s conversation to Inbox for everyone having access to the conversation.
close
close lets you close the post’s conversation for everyone having access to the conversation.
reopen
reopen lets you prevent closed conversations from reopening when creating a post.
attachments
color
HEX color code or "good" "warning" "danger" string
"#ccc", "danger"
pretext
Text string
"This is a pretext!"
author_name
Attachment author name
"User - Phil"
author_link
URL linking to the author
"https://admin.myapp.com/users/phil"
author_icon
Image URL of the attachment author
"https://myapp.com/phil.png"
title
Attachment title
"This is a title!"
title_link
URL linking to the attachment resource
"https://myapp.com/a-resource"
image_url
Image URL of the attachment
"https://myapp.com/a-resource.png"
text
Text string
"This is text!"
markdown
Text string, formatted with Markdown
"This is a **bold text**!"
timestamp
Integer value in Unix time
1512395766
footer
Text string
"This is a footer!"
footer_icon
Image URL of the attachment footer
"https://myapp.com/logo.png"
fields
Array containing of field objects, see below for details
[{"title": "Paying customer","value": "yes"}]
attachments.fields
title
Text string
"Paying customer?"
value
Text string
"yes"
short
Boolean. If true, there will be two fields per row, otherwise one per row.
true
Delete a post
DELETE /v1/posts/:id
Deletes a post from a conversation. The :id parameter is the ID of the post (returned in the create post response).
Shared labels
Create shared labels(s)
POST /v1/shared_labels
A successful request will return newly created shared labels.
Attributes
name*
Label name string
"Heroku"
organization*
Organization ID string
"0d9bab85-a74f-4ece-9142-0f9b9f36ff92"
color
HEX color code
"#430098"
parent
Parent shared label ID string
"9b45a00fd-353s-89l2-a487-2465c35c3r91"
share_with_organization
Boolean
true
share_with_team
Team ID string
nil
share_with_users
Array of user ID strings
[]
visibility
Either 'organization' or 'delegates' string
'organization'
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.
visibility
The visibility param controls whom the label is visible to. If the value is organization, everyone in the organization can use the label. If the value is delegates, only admins and auto-shared users (users affected by share_with_users, share_with_organization, share_with_team) can use the label.
Update shared label(s)
PATCH /v1/shared_labels/:id1,:id2,:id3,...
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 labelcolor: 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 organizationshare_with_team: The ID of the team to share the label withshare_with_users: An array of user IDs to share the label with
List shared labels
GET /v1/shared_labels
List shared labels in organizations the authenticated user is part of and has access to.
Params
organization
null
Organization ID
limit
50
Number of shared labels returned. Max value: 200
offset
0
Offset used to paginate.
Teams
List teams
GET /v1/teams
List teams in organizations the authenticated user is part of and has access to.
Params
organization
null
Organization ID
limit
50
Number of teams returned. Max value: 200
offset
0
Offset used to paginate.
Create team(s)
POST /v1/teams
Create a new team in an organization. The API token must belong to an admin or owner of the organization.
Attributes
name*
Team name string
"Support"
organization*
Organization ID string
"0d9bab85-a74f-4ece-9142-0f9b9f36ff92"
active_members
Array of user ID strings for active team members
["1ce8117e-ae42-4304-b953-c81656da4bd1"]
observers
Array of user ID strings for team observers
["a41a00fd-453d-49d7-a487-9765c35a3b70"]
business_hours
Business hours configuration object, see below for details
{"tz": "America/Montreal", "t": [...]}
inactivity_period
Inactivity period in seconds before a conversation is considered stale
604800
team_mention_behavior
Who receives notifications when team is mentioned
"only_active_members"
user_reply_behavior
What happens when a user replies to an unassigned conversation
"assign_user"
received_reply_behavior
Where to show assigned conversations when a new reply is received
"show_in_assignee_inbox"
team_sidebar_behavior
What to show in the sidebar for this team
"show_team_space"
team_inbox_enabled
Whether the team inbox is enabled
true
chat_room_enabled
Whether the team chat room is enabled
true
active_members, observers
Active members get notified for new messages in the team inbox and also see conversations in the unified Team Inboxes view. Observers do not get notified for new messages in the team inbox and do not see conversations in the unified Team Inboxes view, but they can open and manage the team inbox as needed. Both get access to contacts, responses, calendars and integrations shared with the team.
business_hours
The business_hours object defines when the team is available:
tz: Time zone identifier (see list of time zones)t: Array of time slot objects, each containing:d: Day of week (0 = Sunday, 1 = Monday, ..., 6 = Saturday)s: Array of two integers representing start and end times in seconds from midnight (e.g.,[32400, 61200]= 9:00 AM to 5:00 PM)
inactivity_period
The number of seconds of inactivity after which a conversation is considered stale. Common values: 86400 (1 day), 259200 (3 days), 604800 (1 week).
team_mention_behavior
all_members: All team members (active and observers) receive notifications when the team is mentionedonly_active_members: Only active members receive notifications when the team is mentioned
user_reply_behavior
assign_user: Automatically assign the user to the conversation when they replyleave_in_team_inbox: Leave the conversation in the team inbox without assigning
received_reply_behavior
show_in_assignee_inbox: Show in the assignee's inbox when a new reply is receivedshow_in_team_inbox: Move back to team inbox when a new reply is received
team_sidebar_behavior
show_team_space: Show the full team space in the sidebarshow_team_inbox: Show only the team inbox in the sidebar
Update team(s)
PATCH /v1/teams/:id1,:id2,:id3,...
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.
Attributes
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.
Users
List users
GET /v1/users
List users in organizations the authenticated user is part of.
Params
organization
null
Organization ID
limit
50
Number of users returned. Max value: 200
offset
0
Offset used to paginate.
Tasks
Task endpoints let you create and manage tasks programmatically.
Example usage Automatically create tasks from your project management tool or bug tracker.
List tasks
GET /v1/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:
Query parameters
limit
Number of tasks to return (min 2, max 50)
10
until
Unix timestamp for pagination, returns tasks with last_activity_at before this value
1692371867
organization
Filter by organization ID
"0d9bab85-a74f-4ece-9142-0f9b9f36ff92"
team
Filter by team ID
"0e24f298-965d-4475-9220-b32636a1e2c3"
assignee
Filter by assignee user ID
"1ce8117e-ae42-4304-b953-c81656da4bd1"
state
Filter by state. One of: todo, in_progress, closed
"todo"
type
Filter by type. One of: task, conversation, all
"all"
conversation
Filter by parent conversation ID (returns subtasks of that conversation)
"a5d2aa1c-3828-4f90-bbd8-3dffaadda97e"
due_at_gteq
Filter tasks with due_at greater than or equal to this Unix timestamp
1692371867
due_at_lteq
Filter tasks with due_at less than or equal to this Unix timestamp
1692400000
type
Filter tasks by their type:
task- Only return tasks (conversation subtasks or standalone tasks)conversation- Only return tasked conversations (assigned or due conversations)all- Return both tasks and tasked conversations (default)
Pagination
To paginate through results, use the last_activity_at value from the last task in the response as the until parameter for the next request. Subtract 1 from the timestamp to avoid duplicates since until is inclusive.
Get a task
GET /v1/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.
Create a task
POST /v1/tasks
Create a new task. Tasks can be standalone, conversations or created inside conversations.
Params
title*
Task title (max 1000 characters)
"Review pull request"
description
Task description (max 10000 characters)
"Please review PR #123"
state
Task state. One of: todo, in_progress, closed
"in_progress"
organization
Organization ID string (required when using team, assignees, or add_users)
"0d9bab85-a74f-4ece-9142-0f9b9f36ff92"
team
Team ID string (either team or assignees is required for standalone tasks)
"0e24f298-965d-4475-9220-b32636a1e2c3"
assignees
Array of user ID strings (either team or assignees is required for standalone tasks)
["1ce8117e-ae42-4304-b953-c81656da4bd1"]
due_at
Unix timestamp for task due date
1692371867
subtask
Boolean indicating if this is a subtask of a conversation
true
conversation
Parent conversation ID string (required when subtask is true)
"a5d2aa1c-3828-4f90-bbd8-3dffaadda97e"
references
Array of strings for finding or creating parent conversation (used when creating a subtask)
["<some-reference-123>"]
conversation_subject
Subject for the parent conversation when creating via references
"New feature request"
add_users
Array of user IDs to add to parent conversation (only for subtasks)
["74f91030-39b8-4627-9835-9cfbce9d67c1"]
Update a task
PATCH /v1/tasks/:id
Update an existing task's attributes.
Params
title
Task title (max 1000 characters)
"Updated task title"
description
Task description (max 10000 characters)
"New description"
state
Task state. One of: todo, in_progress, closed
"in_progress"
assignees
Array of user ID strings
["1ce8117e-ae42-4304-b953-c81656da4bd1"]
team
Team ID string
"0e24f298-965d-4475-9220-b32636a1e2c3"
due_at
Unix timestamp for task due date
1692371867
title
The title of the task that will be displayed in the task list and task details. Limited to 1000 characters.
description
A longer description of the task that provides additional context or details. The description supports plain text and is limited to 10000 characters.
state
The current state of the task. Can be one of:
todo- Task is pending and needs to be worked onin_progress- Task is currently being worked onclosed- Task has been completed or closed
If not specified, new tasks default to todo state.
organization
The organization ID is required when assigning tasks to teams or users via team, assignees, or add_users parameters. This ensures the task is created in the correct organizational context.
team
For standalone tasks (not subtasks), either team or assignees must be specified. When a team is assigned, all team members will have access to the task and it will appear in the team's task list.
assignees
For standalone tasks (not subtasks), either team or assignees must be specified. When users are assigned, they will be responsible for completing the task and it will appear in their personal task lists.
due_at
Sets a due date for the task using a Unix timestamp. The task will be marked as overdue if not completed by this date. Setting this field is optional.
subtask
When true, indicates that this task should be created as a subtask within a conversation. Subtasks require either a conversation ID or references to identify the parent conversation.
conversation
Required when creating a subtask (subtask: true). Specifies the ID of the existing conversation where the subtask should be created.
references
An alternative to conversation when creating subtasks. Allows you to find or create the parent conversation using message references (like email Message-IDs). If multiple conversations match the references, the task will be created in the first matching conversation.
conversation_subject
When creating a subtask using references and a new conversation needs to be created, this field sets the subject of that new conversation.
add_users
When creating subtasks, this parameter allows you to add additional users to the parent conversation. These users will have access to both the conversation and the subtask. The organization parameter is required when using add_users.
Hooks
Example usage Automatically trigger workflows in external systems when new messages arrive or comments are added.
Create webhook
POST /v1/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.
Params
type *
Event type to subscribe to. Supported values: incoming_email, incoming_sms_message, incoming_facebook_message, incoming_whatsapp_message, incoming_twilio_chat_message, new_comment
url *
The webhook URL that will receive the event notifications
organization
null
Organization ID. If not provided, creates a personal webhook subscription
content_contains
null
Only trigger when content contains this text
content_starts_with
null
Only trigger when content starts with this text
content_ends_with
null
Only trigger when content ends with this text
Exclusive to new_comment:
is_task
false
Only trigger for task comments
author
null
Only trigger for comments by this user ID
mention
null
Only trigger when this user ID is mentioned
Exclusive to incoming_email:
from_eq
null
Only trigger for messages from this exact email address
subject_contains
null
Only trigger for messages with this text in the subject
Delete webhook
DELETE /v1/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?\
Last updated