An agent that doesn’t know who it’s talking to gives generic answers. User Attributes is how Fini fetches the customer’s context, fresh on every message, so the agent can reference the customer’s actual plan, order, account state, or any other detail you’d otherwise have to look up by hand.Documentation Index
Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
Use this file to discover all available pages before exploring further.

The model
An attribute is three decisions:- Source: the native conversation context the attribute starts from. You pick one when you create the attribute: your app’s UI metadata, a signed widget JWT, or a connected integration. The source seeds the attribute with fields and (for integrations) credentials.
- Fields: what you end up with. Fields arrive from four groups in the Available Data panel: System Attributes, passed-in UI/JWT fields, connected-integration metadata, and fields collected by external API calls. The first three are native (no HTTP call you write); the fourth is an API chain that can reach any endpoint, your internal API, Shopify, anything, independent of the source.
- Switches: each field has up to three independent switches that decide who downstream can use it. Toggling a switch doesn’t move data; it exposes the field to that consumer.
1 · Source: where data comes from
Each attribute has a source, picked when you create it. The source seeds the attribute with a starting set of fields and (for integrations) credentials:| Source | What it seeds the attribute with | Typical use |
|---|---|---|
App UI (ui) | Metadata your app passes when it embeds Fini. | Logged-in user’s id / plan / role from your dashboard. |
Widget (widget) | The signed JWT payload your backend hands the widget. | Authenticated widget conversations (you sign a JWT with the Widget Signing Key and pass user fields inside it). |
| Connected integration (Zendesk, Intercom, Front, Gorgias, HubSpot, Salesforce, LiveChat) | The integration’s standard conversation objects, plus its API credentials. | Look up the customer in Zendesk by email, read the ticket’s status, etc. |
widget only shows up if you have at least one widget created.
2 · Fields: what you can fetch
Fields arrive from four groups, all in the Available Data panel, which describes itself: “Data your AI can reference. For each field, choose independently whether it’s used as an API input, available in the Rulebook, and shared with the LLM.” Each group shows an enabled-over-total count in its header (e.g., System Attributes 7/8, Conversation 2/11, Collected attributes 44/44) so you can see at a glance how many are switched on.| Group | Available for | Where it comes from |
|---|---|---|
| System Attributes | Every attribute | The conversation itself (always present) |
| Passed-in fields | UI / Widget sources | Your embed metadata or signed JWT |
| Integration metadata | Any source (credentials); integration sources (conversation fields) | A connected native integration |
| External systems | Any source | An API chain you configure, see below |
System Attributes (always available)
Every attribute, regardless of source, exposes the same set of universal System Attributes about the conversation itself:zendesk, intercom, widget, ui, and so on.Passed-in fields (UI / Widget sources only)
For the App UI source, fields you’ve passed in via your embed metadata. For the Widget source, fields inside the JWT payload your backend signed.- These are automatically visible to the AI by default, even if you don’t list them here.
- Listing them here gives you two extra abilities:
- Reference them in Rulebook and Reply Behavior conditions.
- Use them as inputs to API steps further down (for example, pass a user id from the JWT into a Zendesk API call).
Integration metadata fields
This section covers two distinct things that share a UI panel: connected-integration credentials (always available) and conversation-level fields (only for integration-source attributes). Connection Settings (credentials, cross-source). Every connected integration exposes its Connection Settings group regardless of which source you picked for this attribute. So a widget-source or UI-source attribute can pull Zendesk’s subdomain and access token to call Zendesk’s API directly, without rebuilding auth on your side. The group label in the editor is<IntegrationName> Settings (e.g., “Zendesk Settings”). Toggle Use as Input in API on the credential fields, then insert them by their display name into your Data Collection Steps via the $ picker. If you have multiple integrations connected, each one’s Connection Settings appears as its own group.
Conversation-level fields (integration sources only). For an integration source, the same panel also shows fields directly available on the integration’s standard objects (e.g., a Zendesk ticket’s status, a Salesforce case’s priority). No API call needed; Fini reads them as part of the conversation context the integration already provides. Use these when the field is on the conversation object itself (“the customer’s email is on the ticket”); they’re cheaper and more reliable than a custom API step.
The full field catalog for every integration is in the integration field catalog at the end of this page. The same list is visible live in the editor when you create an attribute.
Attributes from External Systems
The fourth field group, and the only one that costs an HTTP call you write. The distinction that matters:- Native integrations (Zendesk, HubSpot, Salesforce, and the others) are connected once on the Deploy page. Fini knows their object shape, so they come with a pre-built field catalog you just toggle on.
- External systems are any other HTTP endpoint, your own internal API, Shopify, a data warehouse, or even a native integration’s REST API. There’s no catalog: you supply the URL, headers, and auth, and declare which response fields to keep.
- A Step Name and Method (GET / POST / PUT / PATCH / DELETE), plus the URL. Type
$in any field to insert a dynamic value. - A Headers block and request body, as JSON. Use the
$picker to interpolate any field from the sections above whose Use as Input in API switch is on, for example, the user’s email in the URL, or an API key in anx-api-keyheader. - A Save From Response block: the fields to pull out of the response, in
"mappedName": "json_path"form.
3 · Switches: who can see each field
Most fields show three independent switches in the editor table. They don’t move data, they expose a field to a downstream consumer:- Use as Input in API: makes the field available to your Data Collection Steps as a dynamic value you can insert into URLs, headers, or request bodies. In any step field, type
$to open the picker; Fini inserts the field by its display name. Turn this on for credentials and identifiers you want to inject into HTTP calls. - Use in Rulebooks: exposes the field as a condition input in Rulebook and Reply Behavior. Off by default; flip on for fields you want to write rules against.
- Visible to AI: includes the field in the LLM’s context for that conversation. Off by default; flip on for fields the agent should reference when answering.
| Field kind | Input in API | Rulebooks | Visible to AI |
|---|---|---|---|
| A credential (bearer token, subdomain) | ✓ | ||
| A customer plan / tier | ✓ | ✓ | |
| An order / ticket id | ✓ | ✓ | ✓ |
Creating a user attribute
Open the Attributes page and click New Attribute
Fill in the basics
- Name (required): how this attribute shows up in the list and in test logs (e.g., “Customer Plan”, “Recent Orders”).
- Description (optional): a sentence about what this attribute fetches. Useful when teammates open the page later.
- Source (required): pick from the dropdown. Determines which field-source sections you’ll see in the detail view.

Configure Available Data

Toggle the three switches per field
Test the chain
Deploying attributes for an AI agent
The page header has an agent dropdown (top right). With All selected, the list shows every attribute you’ve configured across the workspace with its total field count, the way the screenshot at the top of this page shows. Picking a specific agent switches into deployment mode for that agent: each attribute card grows a checkbox toggle, channel tags, and a “Save / Cancel” pair appears in the header so you can commit attachment changes.
- The Always-Get banner at the top of the list is a reminder: every attached attribute runs on every chat message for the selected agent. There’s no “fetch on demand” mode; if it’s attached, it runs.
- Each attribute card shows the Chat and Email channel tags it’s currently active on, plus an “Active for [agent name] on Chat & Email”-style status line. Use the checkbox on the card to toggle attachment.
- The card also shows the total field count the attribute exposes (system + passed-in + collected).
- Click Save in the top-right to commit attachment / channel changes; Cancel discards.
When attributes run
User attributes attached to the responding agent are fetched on every chat message before the agent composes its reply. The chain runs server-side; the customer doesn’t see anything happen. Because they’re fetched up front, the resulting fields are available to the LLM, Rulebook, and Reply Behavior (under theUser Attributes field group), each according to the per-field switches described in Switches.
The fetch is per-message, so if a customer’s plan changes mid-conversation, the next message picks up the new value.
Worked examples
Every attribute follows the same shape: create → expose source fields → call an API → toggle collected fields → attach to an agent. The three examples below apply that shape to the three sources. Pick the tab that matches how your agent is deployed, you only need the one.- UI metadata
- Widget (JWT)
- Connected integration

Add the UI Metadata Attributes you'll use
| Field | Use as Input in API | Use in Rulebooks | Visible to AI |
|---|---|---|---|
| Token | ✓ | ✓ | ✓ |
| Order Id | ✓ | ✓ | ✓ |
Add a Data Collection Step that calls your order API
GET. Configure:${Order Id} and ${Token} tokens are the passed-in fields by their display name, inserted with the $ picker. The order.status path on the right of Save From Response is the JSON path inside your API’s response.Toggle Collected attributes for orderStatus
orderStatus. Toggle Visible to AI so the agent can reference it in its reply (“Your order is in transit and will arrive Monday”).Optionally enable a System Attribute for time-based rules
Is Weekday (UTC) so a Reply Behavior rule can stay silent when it’s false.Why a field isn’t reaching the agent
The attribute isn't attached to the responding agent
The attribute isn't attached to the responding agent
The field's Visible to AI switch is off
The field's Visible to AI switch is off
An API step is failing
An API step is failing
The integration source isn't connected anymore
The integration source isn't connected anymore
The conversation came from a different channel than the attribute is configured for
The conversation came from a different channel than the attribute is configured for
Reference: integration field catalog
The fields each connected integration exposes. Connection Settings are credentials available from any source; the object groups (Ticket, Conversation, Case, etc.) are conversation-level fields available only when the attribute’s source is that integration. This same list appears live in the editor.
Zendesk

Zendesk
.zendesk.com). Used to construct API URLs.low, normal, high, or urgent.new, open, pending, hold, solved, closed.problem, incident, question, task.
Intercom

Intercom

HubSpot

HubSpot

Salesforce

Salesforce

Front

Front

Gorgias

Gorgias

LiveChat

LiveChat



