Skip to main content
Embedded apps running inside Aptly can trigger UI interactions in the parent window — opening a card, starting a phone call, launching the email or SMS composer, creating an event, opening a conversation, and more — by posting a browser message. Aptly executes the action if your app has been granted that permission. This works alongside delegate token authentication. You can use one, the other, or both. For a compact, paste-friendly version of this page, see Aptly context for Claude.
If your app includes the Aptly SDK, use the named wrapper methods. They return a Promise<{ success: boolean, error?: string }>, handle the response listener for you, and time out after 3 seconds.
The SMS composer wrapper is spelled 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.
Listen for the response:
Aptly responds with { 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 from fields. If boardId is 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. fields is 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.
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.