Every attribute and option
Everything the embed reads, grouped by where it goes. This page is complete for the embed as it stands: every attribute below is one the script actually looks for, and there are no others.
Two groups behave differently and it is worth knowing which you are in. The script tag is installed once and rarely touched. Host markup is per-page, which is why it cannot come from your assistant's settings — only your page knows what your page is about.
On the script tag
| Attribute | Required | Value |
|---|---|---|
data-assistant-id |
Yes | The assistant's id: 24 hexadecimal characters. A malformed value is ignored, leaving the embed with no assistant unless the older data-campaign attribute is present |
data-mount |
No | CSS selector for the launcher's parent element. The desktop backdrop still attaches to <body> |
data-ats |
No | pinpoint, which turns on Pinpoint careers-site behaviour: remounting after Turbo navigations, and inferring the role from /jobs/<id> or /postings/<id> paths when no job URL pattern is set |
nonce |
No | Standard HTML attribute, but load-bearing here: the script copies it onto everything it inserts, so a strict CSP can allow them |
data-mount is for hosts that will not let you place a tag at the end of
<body> — a template system's custom-code slot, for instance. One caveat: avoid
a mount ancestor with a CSS transform, because it makes position: fixed
resolve against that element rather than the viewport, and the launcher will sit
somewhere you did not intend.
On your own markup
| Attribute | Goes on | Does |
|---|---|---|
data-voyse-open |
Any element | Makes it open the assistant on click. Its value may be a role's ATS id |
data-voyse-ask-text |
An element with data-voyse-open |
Question to send when it is clicked |
data-voyse-ats-id |
Any element | Declares the role for itself and its subtree. On a job page, <body> |
data-voyse-ask-context |
Any element | One line of context for questions asked from its subtree. Collapsed to a single line, capped at 500 characters |
data-voyse-ask |
A <form> |
Hands the form to the assistant: submitting opens it with what was typed |
data-voyse-placeholder |
A <form data-voyse-ask> |
Placeholder applied to the form's first text input on load |
data-voyse-nudge |
Any element | The line shown in a callout when the visitor reaches or lingers on it |
data-voyse-nudge-prompt |
An element with data-voyse-nudge |
Question sent when the nudge is accepted. Defaults to the line |
data-voyse-nudge-mode |
An element with data-voyse-nudge |
scroll (default) or linger |
data-voyse-nudge-linger |
An element with data-voyse-nudge |
Seconds of visible time before a linger nudge shows. Default 5, clamped to 0.5–600 |
data-voyse-button-text |
An element with data-voyse-nudge |
The accept button's label. Default Ask this |
Each has a page of its own behaviour and edge cases: Open the assistant from your own page, Tell the assistant which role a page is about, and Offer a question at the moment it fits.
Attributes the embed sets itself
Not for you to set. Useful for reading state in devtools, and worth knowing so you do not fight them:
| Attribute | Where | Means |
|---|---|---|
data-voyse-embed-loaded="1" |
<html> |
A copy of the script has run. Later copies return immediately |
data-voyse-ask-wired="1" |
A <form data-voyse-ask> |
The form was found and taken over |
data-voyse-embed |
Injected elements | Marks the launcher, backdrop, panel, styles and nudge |
data-voyse-shape |
The launcher | The shape currently painted |
What the admin controls instead
These are not attributes, and deliberately so: they arrive at runtime from the assistant's settings, so appearance can change without anyone re-pasting a snippet.
| Setting | Values |
|---|---|
| Launcher shape | bubble (icon only), pill (icon and label, the default), tab (edge tab), bar (a composer bar) |
| Launcher position | bottom-right, bottom-left, top-right, top-left |
| How it opens | overlay (centred, behind a scrim — the default), classic (docked in the launcher's corner, page stays usable), command (a sheet rising from the base). Mobile ignores this and opens a tab |
| Mark | voyse (the logotype) or icon (a plain chat glyph in the theme's text colour) |
| Message | The label beside the mark |
| Theme | Follows the visitor's system setting, or is pinned light or dark |
| Launcher surface colour | A hex colour for the launcher only; the assistant's interior stays on the theme |
| Launcher text colour | light or dark, for legibility against that surface |
| Job URL pattern | A URL template containing {atsId} once, used to infer the role when no data-voyse-ats-id is declared |
Your team sets these in the admin. If you need one changed, that is a conversation with them rather than a change to your markup.
Attributes older snippets carry
Snippets pasted before the configuration handshake existed set their values on the tag. Those installs still work, and nothing needs re-pasting for the sake of it — but do not add these to a new installation, because the admin is the better place for every one of them:
| Attribute | Now |
|---|---|
data-campaign |
Superseded by data-assistant-id, and read only when that is absent |
data-message |
The message setting |
data-position |
The position setting |
data-job-url-pattern |
The job URL pattern setting |
data-analytics-token |
Supplied by the handshake |
data-tenant-id |
Supplied by the handshake, which overwrites whatever the tag says. It only has an effect if the handshake never lands |
data-api-url |
Supplied by the handshake — but a value here still wins, which is the one case where the tag overrides the admin |
Everywhere else the handshake wins, so an attribute and a setting that disagree resolve to the setting.