Using the Aptly SDK (recommended)
If your app includes the Aptly SDK, use the named wrapper methods. They return aPromise<{ success: boolean, error?: string }>, handle the response listener for you, and time out after 3 seconds.
openSMSComposer (capital SMS).
Action reference at a glance
“Required” means the action cannot do anything useful without the field. Aptly itself only validates
streamId (see What success means).
Raw postMessage
If you are not using the SDK, post a message directly to the parent window. Aptly validates the permission and sends a response.{ type: 'aptly-action-result', action, nonce, success: true } or { ..., success: false, error: 'Not permitted' }. The nonce you sent is echoed back on every response.
The SDK wrappers add two error values of their own: error: 'timeout' if no response arrives within 3 seconds, and error: 'not-in-iframe' if the page is not running inside an Aptly embed.
What success means
success: true means Aptly dispatched the action, not that the user completed it or that every field was applied. The only payload check Aptly performs today is on open-conversation: a missing or non-string streamId returns success: false (with no error text). Every other action reports success: true once permitted, even if a field was ignored (see the per-action notes below).
Enabling actions for your app
Actions must be explicitly granted — nothing runs by default. An admin configures this in the settings for the specific embed. Marketplace app: In Global Admin → App Marketplace, open your app’s edit modal → Permissions tab → Embed Actions. When a user installs the app on a board, these permissions are copied to that board tab and can be adjusted in board settings. Custom board tab: In Board Settings → your tab → edit → Allowed Actions. Dashboard widget: In Dashboard → add or edit app → Embed Actions.Available actions
open-card-pane
Opens a card. The behavior depends on where the embed is running:
- Inside a board (the page URL is a board): the card opens in that board’s side panel.
- Anywhere else (for example the dashboard): the card opens in a fullscreen modal, the same as
open-card-view.
open-card-view
Opens a card in a fullscreen detail view (a floating modal, 90% wide by 95% tall), whether or not the embed is inside a board.
start-dialer
Opens the Aptly phone dialer with a number pre-filled.
Provider behavior: if the user has no phone channel, Aptly falls back to a
tel: link. If the user has both a Twilio and a RingCentral channel, they are asked to pick one.
open-email-composer
Opens a new email compose window, optionally pre-filled.
The composer opens as a new outbound message; Aptly creates a discussion thread for it automatically.
open-sms-composer
Opens a new SMS compose window, optionally pre-filled. It takes the same fields as open-email-composer; only the defaults and the meaning of to and content differ.
create-event
Opens the calendar event editor.
Only
recipients is applied today. Do not rely on date or comments until this page says otherwise.
create-card
Opens the new-card form. What you get depends on where the embed is running:
- Inside a board (the page URL is a board): the create-card dialog opens for the board named by
boardId(it does not have to be the board you are on), pre-filled fromfields. IfboardIdis missing, the dialog opens on a “Choose a Board” step. - On the dashboard: the dashboard’s create-card dialog opens. The board picker starts on the user’s remembered dashboard board if they have one, otherwise on
boardId.fieldsis ignored in this case. - On any other page (inbox, contacts, and so on): nothing visible happens, although the call still reports
success: true.
create-task
Opens the task creation form, optionally pre-filled. Common use case: a “remind me later” button that pre-fills a future due date.
The form itself shows Title, Assignee, Priority and Due At. The other fields are carried through and saved when the user clicks Create.
create-contact
Opens the contact creation modal, optionally pre-filled.
Any other key is ignored.
navigate-to-contact
Opens a contact’s record in a floating panel titled “Contact”.
open-conversation
Opens an email or SMS conversation thread in a floating panel, given its stream (discussion) _id.
Troubleshooting
Action fires but nothing happens. Check that the action is listed under Allowed Actions for the specific embed where your app is running. Permission is configured per embed, not globally. Also check the per-action notes above:create-card does nothing outside a board or the dashboard, and success: true only means the action was dispatched.
Response says success: false, error: 'Not permitted'. The action is not in the embed’s allowed list. An admin needs to enable it in the app or board settings.
No response message at all. Ensure your app is loaded inside an Aptly embed (not a standalone tab) and that the message is sent via window.parent. The SDK wrappers handle this correctly and resolve { success: false, error: 'timeout' } after 3 seconds if nothing comes back.
open-conversation returns success: false with no error. streamId was missing or not a string.
create-event ignores my date or description. The event editor currently applies only recipients; date and comments are accepted but not used.
create-event attendees show up blank or wrong. Pass recipients as { value: email, label: name }, not { email, name }.
create-card opens without my values. Pre-fill works only inside a board, and keys must be field UUIDs (or name). On the dashboard, fields is ignored.
open-email-composer or open-sms-composer opens but the To field is empty. Pass to as a string, an array of strings, or an array of { value, label } objects. An empty array or a missing to leaves the field empty for the user to fill in.