API reference
Phone widgets
Data for the Dynamic Island and Lock Screen widgets: custom endpoint values, stock prices, speed tests and what's next.
The Home app's widgets on the Dynamic Island and the Lock Screen are arranged once per account at /v1/me/preferences/widgets (see Health, identity and locations). These routes give the phone what it can't get on its own. They're for people in their own apps: organization keys and the phone assistant get 403, and each route counts against an hourly allowance per person (429 past it; see Limits).
The nearest-aircraft widget reads GET /v1/orgs/:orgId/maps/aircraft/nearest (see Maps and flight watches).
POST /v1/me/widgets/endpoint
A custom endpoint widget's value: reads the address saved in that widget (itemId, one of the person's own endpoint widgets; https only, public addresses, at most 64 KB in 4 seconds) and returns what's at its path in the JSON answer (or the plain-text answer), at most 64 characters with its decimal places applied. A widget's value is kept for a minute. 422: the widget has no address, or nothing usable at its path; 502: the address couldn't be read.
Auth: user access token or platform agent key
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
itemId | string | Yes | matches ^[a-z0-9][a-z0-9_-]{0,31}$ |
Response 200
{
value: string
at: number
}Errors
| Status | Message |
|---|---|
403 | Widgets belong to people. |
403 | Widgets are read by the app. |
GET /v1/me/widgets/quotes
Stock prices for up to 10 comma-separated symbols, in the order asked (missing: ones the provider doesn't know or couldn't price just now; stale: the provider is down and this is its last price, up to an hour old). Indices are priced through a fund that tracks them (index names it: SPY for the S&P 500). Each symbol is fetched at most once a minute for everyone. 503 until the platform has a stock price provider.
Auth: user access token or platform agent key
| Query parameter | Type | Required | Notes |
|---|---|---|---|
symbols | string | Yes | up to 200 characters |
Response 200
{
quotes: {
index?: string
symbol: string
price: number
change: null | number
changePercent: null | number
previousClose: null | number
open: null | number
high: null | number
low: null | number
at: number
stale?: boolean
}[]
missing: string[]
source: {
id: string
name: string
url: string
}
at: number
}Errors
| Status | Message |
|---|---|
400 | symbols: up to 10 ticker symbols, separated by commas. |
403 | Widgets belong to people. |
403 | Widgets are read by the app. |
GET /v1/me/widgets/speedtest
bytes random bytes (up to 1,000,000; 250,000 by default) for the network widget to time the download. Never cached or compressed on the way.
Auth: user access token or platform agent key
| Query parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
bytes | integer | No | 250000 | 1–1000000; coerced from a string |
Response 200 with no body.
Errors
| Status | Message |
|---|---|
403 | Widgets belong to people. |
403 | Widgets are read by the app. |
GET /v1/me/agenda/next
The person's next events and tasks due, across every org (the Up next widget), each list nearest first and at most limit (1–10, default 3). events: from the calendars of the mailboxes they're a member of (under way now or starting within days, 1–14, default 7; cancelled, free and declined ones left out). tasks: open tasks assigned to them due within days, with overdue ones first unless overdue=0. tzOffset (minutes east of UTC) says which day is today for all-day events and due dates.
Auth: user access token or platform agent key
| Query parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
limit | integer | No | 3 | 1–10; coerced from a string |
days | integer | No | 7 | 1–14; coerced from a string |
events | "0" | "1" | No | "1" | |
tasks | "0" | "1" | No | "1" | |
overdue | "0" | "1" | No | "1" | |
tzOffset | integer | No | 0 | -840–840; coerced from a string |
Response 200
{
events: [] | {
orgId: string
mailboxId: string
calendarId: string
calendarName: string
eventId: string
summary: string
location?: string
start: number
end: number
allDay: boolean
startDate?: string
endDate?: string
now: boolean
}[]
tasks: [] | {
orgId: string
key: string
summary: string
due: string
overdue: boolean
url: string
}[]
at: number
}Errors
| Status | Message |
|---|---|
403 | Widgets belong to people. |
403 | Widgets are read by the app. |