profile(schema:) fills a JSON Schema you write with what the person’s life says: their favorite cuisine, their home city, their trips. Each filled field comes with the photos behind it.
query: an agent on Rollup’s server calls tools that run on the iPhone, and only their text results leave the device.
What comes back
Data
The filled profile as JSON, in your schema’s shape exactly. Every field is present. A field is
null when the person’s life does not say, never a guess. Use value to read it as a JSONValue.[String: [String]]
The PhotoKit local identifiers behind each filled field, keyed by JSON Pointer, such as
/favorite_restaurant.[String: String]
Fields Rollup would not fill, keyed by JSON Pointer, with the reason. See Sensitive fields.
Writing a schema
Rollup accepts a subset of JSON Schema:- The root is an object schema:
"type": "object"withproperties. - Keywords:
type,properties,required,items,enum,description,title,additionalProperties(onlyfalse) and$schema. Anything else is refused. - Types:
string,number,integer,boolean,objectandarray. - An object needs at least one property. An array needs an
itemsschema. - An
enumlists 1 to 200 values of the field’s type. - At most 5 levels of nesting, 100 fields in all, and 32 KB of JSON.
null, whatever your schema says about required. Inside an array, items are values: a list Rollup cannot fill is null, not a list of nulls.
Write a description for any field whose name does not say exactly what you want. The agent reads it.
Data that is not a JSON object throws RollupError with code invalidSchema. A schema outside this subset is refused by the server with the same code: the error’s serverCode is invalid_schema, and its message names the first problem and where it is, such as /trips: an array takes items, not properties or enum.
Sensitive fields
Rollup does not fill fields about a person’s health, religion, sexuality, ethnicity or race, politics, or children. A field is refused when its name, title, description or allowed values use those words, before the agent sees the schema. The agent may refuse more fields it judges sensitive. A refused field isnull in the profile, has no evidence, and is listed in refused with a reason such as “Rollup does not fill fields about health.”
Limits
- A profile takes a few seconds to about 20 seconds and needs a network connection.
- Each step counts toward your app’s rate limits and monthly token budget. See Limits and budgets.

