• AI reference · Always listed
people
Find or update a person. Make or update a person's card by email. To only read a card, use thread. Custom fields (the owner's own, like a wedding date): once the owner has any, the card's answer has fields (its values) and field_defs (each key, label, type: text, date YYYY-MM-DD, number, or choice with its choices); fields sets values by key (null takes one off); in_field { key, value } lists everyone with exactly that value; define_field { label, type, choices? } adds a field (or changes one by key). A field fills {{key}} in automation emails (someone without it skips that email).
Where it is
Always listed: call it by its name.
Does it need a yes?
Runs at once, no yes card: it changes only the office's own working state, and nothing reaches anyone. Here: the company's own people list; nobody is emailed or started.
Inputs
| Input | Type | Needed | About |
|---|---|---|---|
email | string | no | The person's email address. Leave it out with in_stage to list. · up to 254 characters · format `^[^\s@<>",;]+@[^\s@<>",;]+\.[^\s@<>",;]+$` |
in_stage | "new" | "replied" | "call" | "proposal" | "won" | "lost" | "client" | no | Read only: the people in a stage, 50 at a time, newest added first. |
before | string | no | Read only, with in_stage: the next of an earlier list (the people after that page). · 1 to 300 characters |
name | string | no | 1 to 120 characters |
phone | string | no | 3 to 40 characters |
stage | "new" | "replied" | "call" | "proposal" | "won" | "lost" | "client" | no | Where they are on the pipeline. |
notes | string | no | Added to the card as a dated line. · 1 to 4,000 characters |
summary | string | no | One line: who they are and where things stand. · 1 to 300 characters |
consent | false | no | false records that they said no to the newsletter. A yes is never yours: newsletter sign-ups use double opt-in (only the person's own click on the confirmation email turns it on), and the card's newsletter_consent shows where it stands. |
fields | object | no | Custom field values by key (field_defs on the answer has the keys and types); null takes one off. |
in_field | object | no | Read only: everyone whose custom field has exactly this value. |
in_field.key | string | yes | format `^[a-z][a-z0-9_]{1,39}$` |
in_field.value | string or number | yes | |
define_field | object | no | Add a custom field on people (or change one by key). |
define_field.key | string | no | Leave out for a new one: made from the label. · format `^[a-z][a-z0-9_]{1,39}$` |
define_field.label | string | yes | 1 to 60 characters |
define_field.type | "text" | "date" | "number" | "choice" | yes | |
define_field.choices | array of string | no | For a choice: its choices. · 1 to 50 items |
run_id | string | no | The run_id from start. Pass it on every call: it keeps your task held. · 1 to 100 characters |
Example
{
"name": "people",
"arguments": {}
}When it is refused
invalid: The input isn't right. The sentence names the field and the fix; nothing was done. Fix it and call again.not_found: No such thing in this company (a task, file, person, record). Check the number or name, or list first.not_allowed: Not without another step: the owner's yes, your own task held with pick_up, or a setting the owner turns on. The sentence says which.taken: Someone else holds it (another AI on that task). Pick another task.stale: It changed since you read it. Read it again and use the new version.failed: On our side or a service's, never your input. Try again in a minute; if it keeps failing, call report_problem.