Update a person's app access
people_updateEdit an existing non-revoked person's app access and expiry in tslink; omit fields to preserve current apps and deadlines.
Instructions
Edit an existing non-revoked person: apps replaces the app set (omit to keep it); omitted for/until keeps deadlines. Use people_add for a new person and people_grant/people_revoke for one app. Confirm the person, apps and expiry with the user. Newly scoped apps deny callers without a grant or explicit legacy allow rule. TCP cannot enforce people; public Funnel is refused. invite creates one gateway device invitation for routed apps and per-app invitations for the rest; confirm first. invite alone resumes unfinished work; completed invitations are reused; no exactly-once guarantee. Invite needs a user-owned API token; OAuth cannot create device invites. Bearer links stay hidden unless print_links is true. No elevated exit-node, multi-use or tailnet-role permissions; use invite tools for those. Incomplete invitations keep local grants. Unknown POSTs need owner-verified reconcile_invites after remote listing. replace_invites retires a vanished or stale invitation and preserves grants and deadlines; invite only, no apps/for/until. Logins: nonempty, no controls/internal whitespace; outer ASCII whitespace trimmed, ASCII lowercased, no Unicode folding/normalization; invalid UTF-8 is a usage_error.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| qr | No | Return QR payload text only; never image bytes. | |
| for | No | Relative lifetime (descending unique units w,d,h,m,s,ms,us,ns) or until <RFC3339|YYYY-MM-DD|YYYY-MM-DDTHH:MM>. Local unless offset given; DST gaps/folds require an offset. Minimum 1h. Presets: 1h, 8h, 24h, 3d, 7d. New grants default to 24h; update omission preserves deadlines. Never requires ack_never and a tailnet-member login; device-invited guests have the configured public maximum. | |
| who | Yes | ||
| apps | No | App names, or [all] for all current private HTTP/file apps. Required on add; omission on update keeps the app set. | |
| until | No | Absolute deadline (RFC3339, YYYY-MM-DD, YYYY-MM-DDTHH:MM); conflicts with for. | |
| invite | No | ||
| ack_never | No | ||
| qr_invite | No | App invitation QR or @gateway; requires qr and print_links. Treat as a credential. | |
| print_links | No | ||
| replace_invites | No | Update with invite only, no apps/for: owner-confirmed app or @gateway to recorded old invite ID. Requires remote absence for the same NodeID. A stale gateway invitation can be retired as target_gone when current gateway ownership is proven, including accepted shares; preserves grants and deadlines. | |
| reconcile_invites | No | Update --invite only: owner-verified app or @gateway to invite ID mapping, or none after checking absence. Unknown POSTs cannot be retried blindly. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| guide | No | ||
| person | Yes | ||
| portal | No | Independent home portal configuration and exact runtime address when available. | |
| invites | Yes | ||
| message | Yes | ||
| complete | Yes | ||
| guide_zh | No | ||
| warnings | No | ||
| qr_payload | No | ||
| qr_warning | No | ||
| invite_requirement | Yes |