What the person reads is what your app sends: Trustaige keeps no catalogue of
actions and adds nothing of its own. You describe each action as an entry in
authorization_details (RFC 9396),
and the same text appears in the Trustaige window and on the phone.
[{
"type": "acme.payroll.bank_account.change",
"summary": "Change where Kemi Adeyemi is paid",
"fields": [
{ "name": "employee", "title": "Employee", "value": "Kemi Adeyemi", "format": "emphasis" },
{ "name": "account_number", "title": "New account", "value": "•••• 4321", "format": "emphasis" },
{ "name": "bank", "title": "Bank", "value": "GTBank", "format": "bold" },
{ "name": "previous_account", "title": "Replaces", "value": "•••• 1234 · Zenith Bank" },
{ "name": "effective", "title": "From", "value": "Next pay run" }
],
"notice": { "text": "The paying account changed today.", "tone": "caution" }
}]
[{
"type": "acme.payroll.bank_account.change",
"summary": "Change where Kemi Adeyemi is paid",
"fields": [
{ "name": "employee", "title": "Employee", "value": "Kemi Adeyemi", "format": "emphasis" },
{ "name": "account_number", "title": "New account", "value": "•••• 4321", "format": "emphasis" },
{ "name": "bank", "title": "Bank", "value": "GTBank", "format": "bold" },
{ "name": "previous_account", "title": "Replaces", "value": "•••• 1234 · Zenith Bank" },
{ "name": "effective", "title": "From", "value": "Next pay run" }
],
"notice": { "text": "The paying account changed today.", "tone": "caution" }
}]An entry
| Member | |
|---|---|
type | Required. Your own name for the kind of action, such as acme.payroll.bank_account.change. It goes into the proof and the organization’s audit log, and is never shown to the person. |
summary | The headline, up to 140 characters. Without one, the request’s binding_message is the headline, else “Confirm this action”. |
fields | The values the person reads, in the order they read them. An entry needs fields, a summary, or both. |
notice | Optional. One line of context, up to 160 characters, with tone info or caution. |
Nothing else may appear in an entry: a member Trustaige wouldn’t show is refused, so nothing the proof carries goes unseen.
A field
| Member | |
|---|---|
name | Required. Your key for the value, unique in the entry. It is how your server finds the value again; the person never sees it. |
title | Required, up to 60 characters. What the person reads beside the value. |
value | Required. A string, a number, or true or false, shown exactly as you send it. No objects, lists or null. |
format | Optional. emphasis shows the value large, at the top (at most three in a request); bold sets it in bold in the list. |
Trustaige formats nothing. Send the value the way the person should read it:
- An account number, masked:
"•••• 4321". - An amount with its currency:
"₦48,250,000.50". A JSON number is shown as written, so48250000.50reads48250000.50. - A change, with the old value as a field of its own:
"Replaces": "•••• 1234". - Several people or items, as one string (
"Ada, Tunde"), or a field each. - A date, as the person should read it:
"6 Nov 2026, 09:00 WAT".
How long an action should be
That is yours to decide, up to 32 KB of authorization_details: every field
you send is shown. Shorter is better. People decide faster, and read more
carefully, with fewer fields, and a long list invites a glance and a tap.
Send the fields that would change someone’s mind: who or what is affected,
the new value, and what it replaces. Leave out what your app already knows and
the person doesn’t need to judge. Try it in the hub warns when an action
shows more than eight.
More than one action
authorization_details can hold several entries, countersigned together.
The first summary is the headline, and every entry’s fields follow in order.
Prefer one entry per request unless the person must approve the actions as
one.
Check yours before you ship
In the hub, on the app’s Countersign tab, Try it on yourself takes the request your app will send under Technical details, shows it exactly as people will see it, or says why Trustaige would refuse it, then runs the whole countersignature on you.
“fields[0] needs a title, which is what the person reads”
Every field needs a title. Trustaige never makes one up from the name.
“value must be a string, a number or true or false”
Flatten the value: send a list of names as one string, or as a field each.
“authorization_details emphasizes more than 3 fields”
Keep emphasis for the values that decide the action, and use bold or no
format for the rest.