JavaScript API
App methods
reload()
Reloads the iframe.
search(text)
Initiates a new search.
text*
""
Search term
alert(options)
Displays an error modal. It only has a “Got it” action.
options
{}
title
"Error in “Your Integration” integration"
Error title
message
""
Error description
note
""
Error note
navigate(options)
Navigate to a conversation.
options
{}
conversationId
""
Conversation ID
on(event, callback, options)
Registers an event callback.
callback*
Callback function
options
{}
retroactive
false
Triggers the callback immediately if the event has occurred before the callback is registered
openForm(data)
Displays a form popup. Multiple forms can be stacked over each other.
=> Promise(Object) — Resolves with Field objects
data
{}
name
""
Form title
options
{}
autoClose
true
Close the popup on submit
closeForm()
Closes the last open form popup.
openSelf()
Opens the integration sidebar if closed and selects the integration.
closeSelf()
Closes the integration sidebar if opened.
openURL(url)
Opens the URL in a new tab on desktop. Opens in native browser or in-app browser depending on user settings on mobile.
url*
""
URL string
openContextMenu(data)
Opens a context menu
data*
{}
top
0
Top position of the menu — Menu will be below that point — Note: do not set if data.bottom is provided
bottom
null
Top position of the menu — Menu will be above that point — Note: do not set if data.top is provided
left
0
Left position of the menu — Menu will be to the right of that point — Note: do not set if data.right is provided
right
null
Right position of the menu — Menu will be to the left of that point — Note: do not set if data.left is provided
setActions(actions)
Actions are available throughout the app as an option in context menus or swipe action.
setAsUtility()
Mark the integration as an utility integration. It will not display the iframe in the integration sidebar. Useful for integrations that only display actions in context menus.
setPermissions(permissions)
Make Missive requests certain media permissions. Required on macOS for integrations that require Camera or Microphone usage. You may need to reload the integration once Missive has been granted access.
permissions
{}
camera
false
Request permission to use camera
microphone
false
Request permission to use microphone
storeGet(key)
Retrieve data that has been previously stored using storeSet. The data is persistent between page reloads and app reloads.
key*
""
A unique identifier used when storing the data using storeSet(key, data).
storeSet(key, data)
Store data that remains consistent between page reloads and app reloads.
key*
""
A unique identifier for the data to be stored. This key is used to retrieve the data later using storeGet(key).
data*
{}
The data (String, Array or Object) to be stored.
Example usage:
respondToMessage(data)
The respondToMessage method can be used to send commands to the Command Bar inside the Action callback of the command_bar context.
data*
{}
commands*
{}
List of commands that are rendered in the command bar
id*
""
Unique identifier of the command
picture
{}
An image displayed alongside the command using the grid layout
src*
""
Path to the image
webp
""
Optional WEBP image path that is used when the browser supports it
alt
""
Alt attribute for the image tag
iconUrl
""
Icon displayed alongside the command using the list layout
label
""
Text displayed with the command using the list layout
payload
{}
An object returned to the callback event of type execute
closeOnExecute
false
Specifies whether or not the Command Bar should close when the command is executed
Example usage:
initiateCallback(url)
Initiates an OAuth flow by opening the authentication URL in a new browser tab. This method helps work around iframe OAuth limitations and is compatible with iOS.
=> Promise(Object) — Resolves with query parameters from the OAuth redirect
url*
""
Authentication endpoint URL that will receive a redirectTo parameter
Example usage:
How it works:
Missive opens the auth URL in a new browser tab
Adds a
redirectToparameter to your URLAfter OAuth completion, redirect to the provided
redirectToURL with your tokens/data as query paramsThe browser tab closes automatically
Your integration receives the data in the
responseobject
Fetch methods
fetchConversations(ids)
Fetches attributes for the given conversation IDs.
=> Promise(Array) — Resolves with Conversation objects
ids*
[]
Array of conversation IDs
Example usage:
Available attributes for conversations:
fetchMessages(ids)
Fetches attributes for the given message IDs.
=> Promise(Array) — Resolves with Message objects
ids*
[]
Array of message IDs
Available attributes for messages:
fetchUsers()
Fetches attributes for all users.
=> Promise(Array) — Resolves with User objects
fetchLabels()
Fetches attributes for all shared labels.
=> Promise(Array) — Resolves with Label objects
Conversation methods
createConversation(options)
Creates a new conversation.
options
{}
select
true
Navigate to the newly created conversation(s)
count
1
Number of conversations to create
archive()
Archives current conversation.
trash()
Trashes current conversation.
moveToInbox()
Moves current conversation to Inbox.
comment(body)
Creates a comment in the current conversation.
body*
""
Body of the comment
createTask(body, completed)
Creates a task in the current conversation.
body*
""
Body of the task
completed
false
Mark task as completed
addLabels(labelIds)
Adds labels to the current conversation.
labelIds*
[]
Array of label ids
removeLabels(labelIds)
Removes labels from the current conversation.
labelIds*
[]
Array of label ids
close()
Closes the current conversation.
reopen()
Reopens the current conversation.
assign(userIds)
Assigns users to the current conversation.
userIds*
[]
Array of user ids — Empty array removes all assignees
addAssignees(userIds)
Adds assignees to the current conversation.
userIds*
[]
Array of user ids
removeAssignees(userIds)
Removes assignees from the current conversation.
userIds*
[]
Array of user ids
setColor(color)
Sets current conversation color.
color*
""
Color in HEX format
setDescription(description)
Sets current conversation description.
description*
""
Description of the conversation
setSubject(subject)
Sets current conversation subject.
subject*
""
Subject of the conversation — Empty or null resets the subject
Composer methods
compose(options)
Creates a new draft in a new conversation.
options
{}
deliver
false
Instantly deliver newly created draft
mailto
{}
subject
""
Draft subject
body
""
Draft body
composeInConversation()
Creates a new draft in current conversation.
Same params as compose.
reply(options)
Replies to current conversation latest message.
options
{}
deliver
false
Instantly deliver newly created reply
mailto
{}
See compose method above
forward(options)
Forwards current conversation latest message.
options
{}
private
false
Create draft in a new private conversation
deliver
false
Instantly deliver newly created draft
mailto
{}
See compose method above
insertText(text)
Inserts content as text in the currently selected composer.
text
""
Text content
insertHtml(text)
Inserts content as HTML in the currently selected composer.
text
""
HTML content
Helper methods
isToday(date)
Tests if date is today.
=> Boolean
isTomorrow(date)
Tests if date is tomorrow.
=> Boolean
isPast(date)
Tests if date is past.
=> Boolean
isInLessThan(date, options)
Tests if date is in less than X hours / minutes / seconds.
=> Boolean
options
{}
hours
0
Hours in the future
minutes
0
Minutes in the future
seconds
0
Seconds in the future
getMonth(index, options)
Returns the month name of a given index.
=> String
index*
0-11 index of the month
options
{}
short
false
Returns the short version of the month — i.e. "Jan"
getEmailAddresses(conversations)
Returns all the email addresses found in conversations.
=> Array(AddressField)
getPhoneNumbers(conversations)
Returns all the phone numbers found in conversations.
=> Array(PhoneField)
formatTimestamp(timestamp, options)
Formats given timestamp.
=> { date, formatted }
timestamp*
Unix timestamp in seconds or milliseconds — i.e. 1550586350
options
{}
today
false
Displays "Today" when date is today
tomorrow
false
Displays "Tomorrow" when date is tomorrow
year
false
Forces the year to be displayed — Year is not displayed by default when current year
time
false
Displays the hours and minutes
until
Unix timestamp — When date spans over multiple days
formatDate(string, options)
Formats given date.
=> { date, formatted }
string*
""
Date string — i.e. "2018-10-19 17:32:45 GMT"
options
{}
See formatTimestamp options above
formatContact(contact)
Formats given contact.
=> { letters, formatted }
capitalize(string)
Capitalizes given string.
=> String
string*
""
String to be capitalized
classNames(classes)
Converts object to CSS class names.
=> String
classes*
{}
Object of CSS classes definitions and assertions — i.e. { foo: true, bar: true, baz: false }
writeToClipboard(text)
Write text to the user’s clipboard.
text
""
String to copy to the clipboard
Events
main_action
Triggered when user press the “Integrations main action” shortcut.
=> ()
message_sent
Triggered when a user sends a message, or when a message is scheduled to be sent. Be careful as once triggered, the user can still cancel the delivery of the message within a short period (Undo).
=> (id)
id
Use fetchMessages to fetch the data of the message.
change:conversations
Triggered when selected conversation(s) change.
=> (ids)
ids
Array of the selected Conversation IDs. Use fetchConversations to fetch the data of newly selected conversation(s).
change:users
Triggered when users change.
=> ()
Use fetchUsers to fetch users data.
Glossary
Action
{ label: 'New task', callback: () => {} }
{ label: 'Forward', contexts: ['message'], callback: () => {} }
contexts
[]
Contexts where the action will be available in the Missive UI. Any of draft, conversations, conversation, message, tel, comment, comment_box, swipe, command_bar, setting — All when omitted.
label*
""
Action name
emoji
""
Emoji ID of the emoji used as the action icon in the Missive UI. You can find the ID of a specific emoji on this page. For instance, for this 🧹 emoji the ID is :broom:.
swipe_id
""
Unique string per swipe action — i.e. new-task — Required for swipe context
callback*
null
Action callback — Receives an object with either conversations, conversation, message, tel, comment, comment_box as keys depending on the context the action was triggered. Callbacks for the command_bar context take an event object with either a load, search, execute type as well as a messageId. The callback can be used to send commands that will be displayed in the Command Bar. See the respondToMessage method for more details.
swipe_color
"#aaa"
Background color of the swipe action
layout
"list"
The layout of the commands inside the Command Bar when using the command_bar context. It can be either list or grid.
placeholder
""
Placeholder of the Command Bar input
AddressField
{ address: 'frodo@missiveapp.com', name: 'Frodo Baggins' }
{ address: 'sam@missiveapp.com' }
address*
""
Email address
name
""
Contact name
FormField
{ type: 'input', data: { … }, options: { … } }
{ type: 'calendar', data: { … } }
type*
""
Field type — Any of input, textarea, select, calendar, duration, progress, html
scope
{}
Dynamically filter out fields not matching this scope — i.e. { project_id: 12345 } — Would only show this field when project 12345 is selected
data*
{}
Data available for all types — See following FormField(type:) for specific types data
name*
""
Name of the field — As you would normally use inside a <form>
value*
""
Default value of the field
placeholder*
""
Field placeholder
required
false
Form won’t submit unless user fills this field
FormField(type:input)
data
{}
type*
{}
Input type — Any of text, number, hidden
focus
false
Auto focus the input
disabled
false
Make the input non-editable
precision
Format number to specific precision — For number input type only
options
{}
prefix
false
Make the placeholder always visible
thin
false
Render a smaller input — For text input type only
FormField(type:textarea)
data
{}
rows
4
Number of visible rows
focus
false
Auto focus the textarea
FormField(type:select)
data
{}
value
Value of the selected option
multiple
false
Allow selecting multiple options
FormField(type:calendar)
data
{}
value
{ timestamp, all_day }
Unix timestamp and boolean — i.e. { timestamp: 1550586350, all_day: true }
allow_past
false
Allow setting a date in the past
allow_all_day
false
Allow setting a full-day date
FormField(type:duration)
data
{}
value
""
HH:MM duration — i.e. "00:30"
FormField(type:progress)
FormField(type:html)
data
{}
value
""
HTML string — i.e. "<br> <p>Hey <b>there</b>!</p><br> <p>How <span style="color: red">are you</span>?</p><br>"
FormComment
Example:
content*
""
Comment body
authorAvatar
""
Author avatar URL
authorName
""
Author name
date
""
Date string with format of your choosing — i.e. "Feb 18, 2019"
FormNote
Examples:
message*
""
Note body
url
""
Turn the note into a clickable link
FormButton
Examples:
type*
""
Button type — Any of submit, cancel
label
""
Button label
Option
Examples:
label*
""
Option label
value*
""
Option value
disabled
false
Make the option non-clickable
color
""
Color in HEX format — Add a color pin to the option
colorRadius
"100%"
Specify the radius of the color pin
callback
null
Option callback — For openContextMenu options
PhoneField
Examples:
phoneNumber*
""
Phone number
name
""
Contact name
Step
Examples:
label*
""
Step label
value*
""
Step value
Related guides
Need more specific answers? Contact us
Last updated