Personas
The Personas service gives your agents the identities they work as on outside systems: a mailbox, an API account, an app registration. Each Persona records who that identity is and holds its one credential, whose secret is kept in the platform's keychain rather than in a conversation. An agent passes a Persona's id to another service, and that service signs in with it.
A Persona belongs to your account, and every agent of the account shares it.
It offers a trial, and it can also be enabled in full and billed per use.
Every tool works on this system's own storage only; none reaches outside it. No tool signs in to the outside system or checks that a credential works.
Its tools
Each tool is charged under an operation of its own, named in brackets at the end of its entry: one unit per call.
Every tool that answers a Persona answers it without its secret, with its
dates in ISO form, and with a notice for each Persona in the answer whose
secret has expired or expires soon (see Expiry and notices).
A Persona is named by its personaId, the id personas_list answers.
Tools that only read
personas_listlists your account's Personas: every one, or withtagonly those carrying that tag, or withexpiresWithinDaysonly those whose secret expires within that many days, the already expired included. Give both to have both apply. It only reads (personas-list).personas_getreturns one Persona: its name, purpose, identifier, system kind, credential type and that credential's non-secret details, whether it is revealable, when its secret expires, its tags, and when its secret was last replaced and the Persona created and last changed. It only reads (personas-get).
Tools that change things and lose nothing
personas_createmakes a new Persona from aname, an optionalpurpose, itsexternalIdentifieron the outside system (an address, a user name, an app id), itssystemKind, itscredential, the credential'ssecret, an optionalsecretExpiresAt,revealableand optionaltags. A name your account already uses, compared without regard to letter case, is refused.revealableis chosen here, once:falsecan never be changed totrue(personas-create).personas_add_tagputs onetagon a Persona. A tag it already carries leaves it as it was (personas-add-tag).personas_remove_tagtakes onetagoff a Persona. A tag it does not carry leaves it as it was (personas-remove-tag).
Tools that replace, disclose or remove, with no undo
personas_updatechanges any of a Persona'sname,purpose,externalIdentifier,systemKindandcredential, leaving the rest as they are; at least one must be given. Apurposeofnullclears it. The credential's type cannot change, and acredentialgiven replaces the whole of its non-secret details: aclient-secretcredential sent withouttenantIdclears it. What it overwrites keeps no history and cannot be recovered. The secret is untouched (personas-update).personas_replace_secretgives a Persona's credential a newsecret, and a newsecretExpiresAtor, when that is left out ornull, no expiry. The previous secret is overwritten and cannot be recovered; the credential's non-secret details are untouched (personas-rotate).personas_lockmakes a revealable Persona unrevealable, for good: this cannot be undone. Locking one already locked leaves it as it was (personas-lock).personas_revealreturns the secret of a revealable Persona, in its answer and nowhere else. A Persona created unrevealable, or locked since, is refused, and nothing is revealed. Each reveal is recorded (see Revealing and locking). Its answer comes back whole and is never stored or paged. A secret once in a transcript cannot be taken back out of it (personas-reveal).personas_deletedeletes a Persona and erases its secret. Nothing of it can be recovered (personas-delete).
Credentials
A Persona holds one credential, of one of three types. The secret is given
apart from the credential, as secret, and is never part of an answer except
personas_reveal's.
password: ausername, and the password as the secret.api-key: nothing besides the key, which is the secret.client-secret: aclientIdand, optionally, atenantId, and the client secret as the secret.
systemKind says which kind of system the Persona belongs to:
microsoft-365, google-workspace, imap, smtp, http-api or other.
Microsoft and Google refuse plain password sign-in for accounts with
multi-factor authentication on their modern APIs. A password Persona is
therefore for IMAP, SMTP and other services that accept one, not for a
Microsoft or Google mailbox reached through those companies' APIs; use a
client-secret Persona for an app registration there.
Expiry and notices
A secret may carry an expiry, secretExpiresAt: a date and time with its
zone, written YYYY-MM-DDThh:mm:ssZ or with an offset in place of the Z.
It is stored and shown with the Persona, and a Persona whose secret has
expired is marked secretExpired (EXPIRED in the text). An expired secret
is reported, never blocked: the Persona still works for as long as the
outside system accepts the secret. Replace it with personas_replace_secret,
which also sets the new expiry.
Every answer that carries a Persona also carries a notice for each Persona in
it whose secret has expired or expires within your account's warning window:
as a line beginning Notice: after the answer's text, and in the answer's
notices list, each naming the Persona, its expiry and the whole days left
(negative once expired). A Persona with no expiry, or one further off than
the window, carries none. The window is a setting (see Its
settings).
Revealing and locking
Whether a Persona's secret may ever be shown is chosen when it is created,
with revealable. A Persona created unrevealable stays so: its secret can be
set, replaced and used by reference, and no tool returns it.
personas_reveal returns the secret of a revealable Persona only.
personas_lock turns revealable off, and nothing turns it back on, so a
Persona once locked is refused by personas_reveal from then on.
Every reveal is recorded: who revealed it, when, and on which surface (through the tools or on the dashboard), never the value. A reveal that cannot be recorded returns nothing. The record of a reveal is kept when the Persona is later deleted.
Tags
A tag is free-form text you choose, such as mailbox or billing, to group
Personas and to list them by. Leading and trailing spaces are trimmed, and two
tags that differ only in letter case are the same tag. Tags are given at
creation with tags, and changed one at a time with personas_add_tag and
personas_remove_tag.
Its settings
services.personas.max-personas is the most Personas your account may hold,
which you can set to at most 100 Personas. The platform has a ceiling of its
own on it, and the smaller of the two is the cap in force. Lowering it deletes
nothing: Personas already held stay, and only the next create past the cap is
refused.
services.personas.expiry-warning-days is how many days before a secret's
expiry its Persona starts carrying a notice, from 0 to 365 days. At its lowest,
only secrets already expired carry one.
Its limits
A Persona's fields are bounded: a name of 1 to 200 characters, unique within your account without regard to letter case; a purpose of up to 4,000 characters; an identifier of 1 to 400 characters; a user name of up to 320 characters; a client id and a tenant id of up to 450 characters each; each tag 1 to 64 characters, at most 20 tags on a Persona; and a secret of up to 32 KiB of UTF-8, with no control characters other than tab, line feed and carriage return. A name, an identifier, a user name, a client id, a tenant id and a tag must each contain some visible text.
A list's expiry horizon is bounded: personas_list takes
expiresWithinDays from 0 to 3,650, in whole days.