{"openapi":"3.1.0","info":{"title":"Deleg8 API","version":"1","description":"Everything the Deleg8 app does, with an API key (Authorization: Bearer d8k_...). Keys, scopes, limits, errors, pagination and webhooks: docs/API.md. A key acts as one team role, narrowed by its scopes; each operation names the scope it needs (x-deleg8-scope)."},"servers":[{"url":"https://ticket-dev.st8n.ai"}],"security":[{"apiKey":[]},{"session":[]}],"tags":[{"name":"general"},{"name":"tickets"},{"name":"boards"},{"name":"clients"},{"name":"users"},{"name":"requests"},{"name":"files"},{"name":"objects"},{"name":"records"},{"name":"admin"}],"paths":{"/api/v1/admin/api-keys":{"get":{"operationId":"get_admin_api_keys","summary":"{ keys: [{ id, name, last4, role, scopes, clients, createdBy, createdAt, expiresAt, lastUsedAt, lastUsedFrom, revokedAt }], objects: [{ key, name, plural }] }  (team owner or admin; a key needs `admin","description":"{ keys: [{ id, name, last4, role, scopes, clients, createdBy, createdAt, expiresAt, lastUsedAt, lastUsedFrom, revokedAt }], objects: [{ key, name, plural }] }  (team owner or admin; a key needs `admin`; objects: custom objects a scope may name)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ keys: [{ id, name, last4, role, scopes, clients, createdBy, createdAt, expiresAt, lastUsedAt, lastUsedFrom, revokedAt }], objects: [{ key, name, plural }] }  (team owner or admin; a key needs `admin`; objects: custom objects a scope may name)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_admin_api_keys","summary":"{ id, name, last4, role, scopes, ..., token: \"d8k_...\" (shown once) } (201). 400 bad_name | bad_role | bad_scopes | bad_days | member_keys_later (no member keys yet); 409 too_many (50 live)","description":"{ id, name, last4, role, scopes, ..., token: \"d8k_...\" (shown once) } (201). 400 bad_name | bad_role | bad_scopes | bad_days | member_keys_later (no member keys yet); 409 too_many (50 live)\n\nBody: { name, role: owner | admin, scopes: [read:<object> | write:<object> | read:* | write:* | admin], days?: 1..730 }  (team owner or admin; role no higher than yours: 403 role_too_high; a key makes only keys no stronger than itself)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"201":{"description":"{ id, name, last4, role, scopes, ..., token: \"d8k_...\" (shown once) } (201). 400 bad_name | bad_role | bad_scopes | bad_days | member_keys_later (no member keys yet); 409 too_many (50 live)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name, role: owner | admin, scopes: [read:<object> | write:<object> | read:* | write:* | admin], days?: 1..730 }  (team owner or admin; role no higher than yours: 403 role_too_high; a key makes only keys no stronger than itself)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/admin/api-keys/{id}":{"delete":{"operationId":"delete_admin_api_keys_by_id","summary":"{ ok }  (revoked at once; team owner or admin; an owner key only by an owner: 403 role_too_high; 404 not_found)","description":"{ ok }  (revoked at once; team owner or admin; an owner key only by an owner: 403 role_too_high; 404 not_found)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (revoked at once; team owner or admin; an owner key only by an owner: 403 role_too_high; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/admin/api-keys/{id}/calls":{"get":{"operationId":"get_admin_api_keys_by_id_calls","summary":"{ calls: [{ at, method, path, status, ip }], next: cursor | null }  (?limit=1..200 (50)&cursor=<next>; newest first, kept 90 days; team owner or admin)","description":"{ calls: [{ at, method, path, status, ip }], next: cursor | null }  (?limit=1..200 (50)&cursor=<next>; newest first, kept 90 days; team owner or admin)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ calls: [{ at, method, path, status, ip }], next: cursor | null }  (?limit=1..200 (50)&cursor=<next>; newest first, kept 90 days; team owner or admin)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/admin/setup":{"get":{"operationId":"get_admin_setup","summary":"{ warnings: string[] }  (what the operator must fix, the start log's WARNING lines, e.g. DELEG8_OWNER_EMAILS unset on a public install; [] when nothing; team owner or admin)","description":"{ warnings: string[] }  (what the operator must fix, the start log's WARNING lines, e.g. DELEG8_OWNER_EMAILS unset on a public install; [] when nothing; team owner or admin)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ warnings: string[] }  (what the operator must fix, the start log's WARNING lines, e.g. DELEG8_OWNER_EMAILS unset on a public install; [] when nothing; team owner or admin)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/admin/webhooks":{"get":{"operationId":"get_admin_webhooks","summary":"{ webhooks: [{ id, url, events, description, enabled, disabledWhy, createdAt, createdBy, lastDelivery: { state, at } | null }], events: string[] }  (events: the names an endpoint may subscribe to; tea","description":"{ webhooks: [{ id, url, events, description, enabled, disabledWhy, createdAt, createdBy, lastDelivery: { state, at } | null }], events: string[] }  (events: the names an endpoint may subscribe to; team owner or admin)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ webhooks: [{ id, url, events, description, enabled, disabledWhy, createdAt, createdBy, lastDelivery: { state, at } | null }], events: string[] }  (events: the names an endpoint may subscribe to; team owner or admin)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_admin_webhooks","summary":"Webhook with secret: \"whsec_...\" (shown once) (201). 400 bad_events | bad_url | private_address | dns; 409 too_many (20)","description":"Webhook with secret: \"whsec_...\" (shown once) (201). 400 bad_events | bad_url | private_address | dns; 409 too_many (20)\n\nBody: { url, events: [<event> | \"*\"], description? }  (team owner or admin; url: public https only)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"201":{"description":"Webhook with secret: \"whsec_...\" (shown once) (201). 400 bad_events | bad_url | private_address | dns; 409 too_many (20)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ url, events: [<event> | \"*\"], description? }  (team owner or admin; url: public https only)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/admin/webhooks/{id}":{"patch":{"operationId":"patch_admin_webhooks_by_id","summary":"Webhook  (enabled: true clears its failure count; 400 bad_events | bad_url; 404 not_found)","description":"Webhook  (enabled: true clears its failure count; 400 bad_events | bad_url; 404 not_found)\n\nBody: { url?, events?, description?, enabled? }  (team owner or admin; turning on one whose maker is gone makes you its maker)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Webhook  (enabled: true clears its failure count; 400 bad_events | bad_url; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ url?, events?, description?, enabled? }  (team owner or admin; turning on one whose maker is gone makes you its maker)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_admin_webhooks_by_id","summary":"{ ok }  (the endpoint and its delivery log go; team owner or admin; 404 not_found)","description":"{ ok }  (the endpoint and its delivery log go; team owner or admin; 404 not_found)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (the endpoint and its delivery log go; team owner or admin; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/admin/webhooks/{id}/deliveries":{"get":{"operationId":"get_admin_webhooks_by_id_deliveries","summary":"{ deliveries: [{ id, event, type, state, tries: [{ at, status, ms, error, answer }], nextAt, createdAt }], next: cursor | null }  (?limit=1..200 (50)&cursor=<next>; newest first; team owner or admin; ","description":"{ deliveries: [{ id, event, type, state, tries: [{ at, status, ms, error, answer }], nextAt, createdAt }], next: cursor | null }  (?limit=1..200 (50)&cursor=<next>; newest first; team owner or admin; 404 not_found)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ deliveries: [{ id, event, type, state, tries: [{ at, status, ms, error, answer }], nextAt, createdAt }], next: cursor | null }  (?limit=1..200 (50)&cursor=<next>; newest first; team owner or admin; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/admin/webhooks/{id}/deliveries/{dlv}/redeliver":{"post":{"operationId":"post_admin_webhooks_by_id_deliveries_by_dlv_redeliver","summary":"{ delivery: \"dlv_...\" } (201)  (a new delivery of the same event and body, queued now; team owner or admin; 404 not_found)","description":"{ delivery: \"dlv_...\" } (201)  (a new delivery of the same event and body, queued now; team owner or admin; 404 not_found)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dlv","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"{ delivery: \"dlv_...\" } (201)  (a new delivery of the same event and body, queued now; team owner or admin; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/admin/webhooks/{id}/roll-secret":{"post":{"operationId":"post_admin_webhooks_by_id_roll_secret","summary":"{ secret: \"whsec_...\" (shown once), oldUntil }  (the old secret signs too for 24 hours; team owner or admin; 404 not_found)","description":"{ secret: \"whsec_...\" (shown once), oldUntil }  (the old secret signs too for 24 hours; team owner or admin; 404 not_found)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ secret: \"whsec_...\" (shown once), oldUntil }  (the old secret signs too for 24 hours; team owner or admin; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/admin/webhooks/{id}/test":{"post":{"operationId":"post_admin_webhooks_by_id_test","summary":"{ delivery, ok, try: { at, status, ms, error, answer } }  (sends a ping now and waits for the one try; team owner or admin; 404 not_found)","description":"{ delivery, ok, try: { at, status, ms, error, answer } }  (sends a ping now and waits for the one try; team owner or admin; 404 not_found)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ delivery, ok, try: { at, status, ms, error, answer } }  (sends a ping now and waits for the one try; team owner or admin; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/auth/pending-link":{"get":{"operationId":"get_auth_pending_link","summary":"{ email, provider: \"st8n\" }  (signed out is fine: this browser's pending st8n link, 10 minutes; 404 no_pending; 404 not_found while st8n sign-in is off (DELEG8_ST8N_SIGNIN))","description":"{ email, provider: \"st8n\" }  (signed out is fine: this browser's pending st8n link, 10 minutes; 404 no_pending; 404 not_found while st8n sign-in is off (DELEG8_ST8N_SIGNIN))\n\nWho: anyone.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ email, provider: \"st8n\" }  (signed out is fine: this browser's pending st8n link, 10 minutes; 404 no_pending; 404 not_found while st8n sign-in is off (DELEG8_ST8N_SIGNIN))","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients":{"get":{"operationId":"get_clients","summary":"{ clients: Client[] }  (Client = { id, name, owner: { id, name }, portalHost, ownRequestsOnly, boards: [{ id, name, portal }], people (active users) }; Clients you own, and the team's by role: owner/a","description":"{ clients: Client[] }  (Client = { id, name, owner: { id, name }, portalHost, ownRequestsOnly, boards: [{ id, name, portal }], people (active users) }; Clients you own, and the team's by role: owner/admin all, a member those assigned)\n\nWho: person.\n\nKey scope: read:clients.","tags":["clients"],"x-deleg8-scope":"read:clients","parameters":[],"responses":{"200":{"description":"{ clients: Client[] }  (Client = { id, name, owner: { id, name }, portalHost, ownRequestsOnly, boards: [{ id, name, portal }], people (active users) }; Clients you own, and the team's by role: owner/admin all, a member those assigned)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_clients","summary":"Client (201)  (400 no_name; 409 too_many (500 per owner))","description":"Client (201)  (400 no_name; 409 too_many (500 per owner))\n\nBody: { name }  (team owner or admin, or an account with no team role, which owns it; a member: 403 forbidden)\n\nWho: person.\n\nKey scope: write:clients.","tags":["clients"],"x-deleg8-scope":"write:clients","parameters":[],"responses":{"201":{"description":"Client (201)  (400 no_name; 409 too_many (500 per owner))","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name }  (team owner or admin, or an account with no team role, which owns it; a member: 403 forbidden)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/clients/{id}":{"get":{"operationId":"get_clients_by_id","summary":"Client with people: [{ id, name, email, role, status, at }] (active or not), invites: [{ email, at, expiresAt }]  (clients.view: its owner, team owner/admin, a member assigned; else 404 no_client)","description":"Client with people: [{ id, name, email, role, status, at }] (active or not), invites: [{ email, at, expiresAt }]  (clients.view: its owner, team owner/admin, a member assigned; else 404 no_client)\n\nWho: person.\n\nKey scope: read:clients.","tags":["clients"],"x-deleg8-scope":"read:clients","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Client with people: [{ id, name, email, role, status, at }] (active or not), invites: [{ email, at, expiresAt }]  (clients.view: its owner, team owner/admin, a member assigned; else 404 no_client)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_clients_by_id","summary":"Client  (400 no_name | bad_host | bad_own_only | empty; 409 host_taken; 403 forbidden)","description":"Client  (400 no_name | bad_host | bad_own_only | empty; 409 host_taken; 403 forbidden)\n\nBody: { name?, portalHost?: one of DELEG8_CUSTOMER_HOSTS | null, ownRequestsOnly?: boolean }  (clients.edit: team owner/admin or its own owner; portalHost only a team owner/admin on a team Client)\n\nWho: person.\n\nKey scope: write:clients.","tags":["clients"],"x-deleg8-scope":"write:clients","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Client  (400 no_name | bad_host | bad_own_only | empty; 409 host_taken; 403 forbidden)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name?, portalHost?: one of DELEG8_CUSTOMER_HOSTS | null, ownRequestsOnly?: boolean }  (clients.edit: team owner/admin or its own owner; portalHost only a team owner/admin on a team Client)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_clients_by_id","summary":"{ ok }  (clients.edit; only with no boards: 409 has_boards; its client users and invites go, their accounts and requests stay)","description":"{ ok }  (clients.edit; only with no boards: 409 has_boards; its client users and invites go, their accounts and requests stay)\n\nWho: person.\n\nKey scope: write:clients.","tags":["clients"],"x-deleg8-scope":"write:clients","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (clients.edit; only with no boards: 409 has_boards; its client users and invites go, their accounts and requests stay)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients/{id}/audit":{"get":{"operationId":"get_clients_by_id_audit","summary":"{ entries: AuditEntry[] }  (?limit= (100, at most 500); that Client's log; team owner or admin only (audit.view), a key needs `admin`; its own owner with no team role: 403)","description":"{ entries: AuditEntry[] }  (?limit= (100, at most 500); that Client's log; team owner or admin only (audit.view), a key needs `admin`; its own owner with no team role: 403)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ entries: AuditEntry[] }  (?limit= (100, at most 500); that Client's log; team owner or admin only (audit.view), a key needs `admin`; its own owner with no team role: 403)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients/{id}/invite":{"post":{"operationId":"post_clients_by_id_invite","summary":"{ invited, mail: \"sent\" } | { invited, mail: \"console\", link } (no mail set up) | { invited, mail: \"failed\", link } (the send failed) (201)  (link works once, 14 days; 400 bad_email | bad_role; 409 ow","description":"{ invited, mail: \"sent\" } | { invited, mail: \"console\", link } (no mail set up) | { invited, mail: \"failed\", link } (the send failed) (201)  (link works once, 14 days; 400 bad_email | bad_role; 409 owner | team_invite | already; 429 rate_limited)\n\nBody: { email, role?: admin | requester | viewer }  (clients.users.manage: team owner/admin or its own owner; role default requester)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"{ invited, mail: \"sent\" } | { invited, mail: \"console\", link } (no mail set up) | { invited, mail: \"failed\", link } (the send failed) (201)  (link works once, 14 days; 400 bad_email | bad_role; 409 owner | team_invite | already; 429 rate_limited)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ email, role?: admin | requester | viewer }  (clients.users.manage: team owner/admin or its own owner; role default requester)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/clients/{id}/invites/{email}":{"delete":{"operationId":"delete_clients_by_id_invites_by_email","summary":"{ ok }  (withdraws the invite, audit client.invite.withdrawn; ok: false when there was none; clients.users.manage)","description":"{ ok }  (withdraws the invite, audit client.invite.withdrawn; ok: false when there was none; clients.users.manage)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"email","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (withdraws the invite, audit client.invite.withdrawn; ok: false when there was none; clients.users.manage)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients/{id}/invites/{email}/resend":{"post":{"operationId":"post_clients_by_id_invites_by_email_resend","summary":"{ invited, mail: \"sent\" | \"console\" | \"failed\", link? }  (the same invite and role with a new link; the old link stops working; 404 no_invite; 429 rate_limited; clients.users.manage)","description":"{ invited, mail: \"sent\" | \"console\" | \"failed\", link? }  (the same invite and role with a new link; the old link stops working; 404 no_invite; 429 rate_limited; clients.users.manage)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"email","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ invited, mail: \"sent\" | \"console\" | \"failed\", link? }  (the same invite and role with a new link; the old link stops working; 404 no_invite; 429 rate_limited; clients.users.manage)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/clients/{id}/people/{person}":{"delete":{"operationId":"delete_clients_by_id_people_by_person","summary":"{ ok }  (old name of DELETE /clients/:id/users/:person: removed from the Client, their requests stay; 404 no_user; clients.users.manage)","description":"{ ok }  (old name of DELETE /clients/:id/users/:person: removed from the Client, their requests stay; 404 no_user; clients.users.manage)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (old name of DELETE /clients/:id/users/:person: removed from the Client, their requests stay; 404 no_user; clients.users.manage)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients/{id}/requests":{"get":{"operationId":"get_clients_by_id_requests","summary":"{ requests: [{ ticket, id, number, title, status, statusLabel, createdBy: { name }, lastCustomerAt, drafts, waiting }] }  (every board of the Client, newest first, at most 500; clients.view)","description":"{ requests: [{ ticket, id, number, title, status, statusLabel, createdBy: { name }, lastCustomerAt, drafts, waiting }] }  (every board of the Client, newest first, at most 500; clients.view)\n\nWho: person.\n\nKey scope: read:requests.","tags":["requests"],"x-deleg8-scope":"read:requests","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ requests: [{ ticket, id, number, title, status, statusLabel, createdBy: { name }, lastCustomerAt, drafts, waiting }] }  (every board of the Client, newest first, at most 500; clients.view)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients/{id}/users":{"get":{"operationId":"get_clients_by_id_users","summary":"{ users: ClientUser[], invites: [{ email, role, at, expiresAt }] }  (ClientUser = { id, name, email, role, status, lastActiveAt, at }; clients.view)","description":"{ users: ClientUser[], invites: [{ email, role, at, expiresAt }] }  (ClientUser = { id, name, email, role, status, lastActiveAt, at }; clients.view)\n\nWho: person.\n\nKey scope: read:users.","tags":["users"],"x-deleg8-scope":"read:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ users: ClientUser[], invites: [{ email, role, at, expiresAt }] }  (ClientUser = { id, name, email, role, status, lastActiveAt, at }; clients.view)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients/{id}/users/{person}":{"patch":{"operationId":"patch_clients_by_id_users_by_person","summary":"ClientUser  (400 bad_role; 404 no_user)","description":"ClientUser  (400 bad_role; 404 no_user)\n\nBody: { role: admin | requester | viewer }  (clients.users.manage)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ClientUser  (400 bad_role; 404 no_user)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ role: admin | requester | viewer }  (clients.users.manage)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_clients_by_id_users_by_person","summary":"{ ok }  (removed from the Client; their requests stay; no other active Client and no team role: their sessions end; 404 no_user; clients.users.manage)","description":"{ ok }  (removed from the Client; their requests stay; no other active Client and no team role: their sessions end; 404 no_user; clients.users.manage)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (removed from the Client; their requests stay; no other active Client and no team role: their sessions end; 404 no_user; clients.users.manage)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/clients/{id}/users/{person}/deactivate":{"post":{"operationId":"post_clients_by_id_users_by_person_deactivate","summary":"ClientUser (status deactivated)  (no other active Client and no team role: their sessions end at once; 404 no_user; clients.users.manage)","description":"ClientUser (status deactivated)  (no other active Client and no team role: their sessions end at once; 404 no_user; clients.users.manage)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ClientUser (status deactivated)  (no other active Client and no team role: their sessions end at once; 404 no_user; clients.users.manage)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/clients/{id}/users/{person}/reactivate":{"post":{"operationId":"post_clients_by_id_users_by_person_reactivate","summary":"ClientUser (status active)  (the team may turn on anyone, also one a client admin turned off; 404 no_user; clients.users.manage)","description":"ClientUser (status active)  (the team may turn on anyone, also one a client admin turned off; 404 no_user; clients.users.manage)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ClientUser (status active)  (the team may turn on anyone, also one a client admin turned off; 404 no_user; clients.users.manage)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/clients/{id}/users/{person}/reset-link":{"post":{"operationId":"post_clients_by_id_users_by_person_reset_link","summary":"{ mail: \"sent\" } | { mail: \"console\", link } | { mail: \"none\" } (no password here)  (to the Client's own address, 24 hours, once; only a Client-only account: 409 not_client_account; 404 no_user; 429; ","description":"{ mail: \"sent\" } | { mail: \"console\", link } | { mail: \"none\" } (no password here)  (to the Client's own address, 24 hours, once; only a Client-only account: 409 not_client_account; 404 no_user; 429; 502 mail_failed)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ mail: \"sent\" } | { mail: \"console\", link } | { mail: \"none\" } (no password here)  (to the Client's own address, 24 hours, once; only a Client-only account: 409 not_client_account; 404 no_user; 429; 502 mail_failed)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/events":{"get":{"operationId":"get_events","summary":"text/event-stream of ChangeEvent (event: tickets); a st8n link as its person also gets `event: command`","description":"text/event-stream of ChangeEvent (event: tickets); a st8n link as its person also gets `event: command`\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[],"responses":{"200":{"description":"text/event-stream of ChangeEvent (event: tickets); a st8n link as its person also gets `event: command`","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/files":{"post":{"operationId":"post_files","summary":"File (201)  (waiting: attach it within 24 h with files: [id]; 400 no_file, 413 too_big, 415 bad_type, 429 too_many_uploads at 20 waiting, 429 rate_limited at 60 a minute)","description":"File (201)  (waiting: attach it within 24 h with files: [id]; 400 no_file, 413 too_big, 415 bad_type, 429 too_many_uploads at 20 waiting, 429 rate_limited at 60 a minute)\n\nBody: the file's raw bytes (any content-type), ?name=log.pdf  (team user; PNG, JPEG, GIF, WebP, HEIC or PDF, type from the bytes, 10 MB)\n\nWho: person.\n\nKey scope: write:files.","tags":["files"],"x-deleg8-scope":"write:files","parameters":[],"responses":{"201":{"description":"File (201)  (waiting: attach it within 24 h with files: [id]; 400 no_file, 413 too_big, 415 bad_type, 429 too_many_uploads at 20 waiting, 429 rate_limited at 60 a minute)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"the file's raw bytes (any content-type), ?name=log.pdf  (team user; PNG, JPEG, GIF, WebP, HEIC or PDF, type from the bytes, 10 MB)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/files/{id}":{"get":{"operationId":"get_files_by_id","summary":"the bytes (images inline, HEIC and PDF as a download; nosniff, sandbox CSP, no-store)  (anyone on the ticket's list, or the uploader of a waiting file; else 404 no_file)","description":"the bytes (images inline, HEIC and PDF as a download; nosniff, sandbox CSP, no-store)  (anyone on the ticket's list, or the uploader of a waiting file; else 404 no_file)\n\nWho: person.\n\nKey scope: read:files.","tags":["files"],"x-deleg8-scope":"read:files","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"the bytes (images inline, HEIC and PDF as a download; nosniff, sandbox CSP, no-store)  (anyone on the ticket's list, or the uploader of a waiting file; else 404 no_file)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/invites":{"get":{"operationId":"get_invites","summary":"{ invites: [{ list, name, role, from }] }  (waiting for this person's email)","description":"{ invites: [{ list, name, role, from }] }  (waiting for this person's email)\n\nWho: person.\n\nKey scope: read:boards.","tags":["boards"],"x-deleg8-scope":"read:boards","parameters":[],"responses":{"200":{"description":"{ invites: [{ list, name, role, from }] }  (waiting for this person's email)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/invites/{list}":{"delete":{"operationId":"delete_invites_by_list","summary":"{ ok }  (the invited person declines)","description":"{ ok }  (the invited person declines)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"list","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (the invited person declines)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/invites/{list}/accept":{"post":{"operationId":"post_invites_by_list_accept","summary":"{ ok }  (the person joins the list; their sessions take its tickets only after PUT /lists/:id/work-on)","description":"{ ok }  (the person joins the list; their sessions take its tickets only after PUT /lists/:id/work-on)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"list","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (the person joins the list; their sessions take its tickets only after PUT /lists/:id/work-on)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/links":{"get":{"operationId":"get_links","summary":"{ links: St8nLink[] }","description":"{ links: St8nLink[] }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ links: St8nLink[] }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_links","summary":"{ id, token: \"d8l_...\" (shown once), name, kind, ... } (201)","description":"{ id, token: \"d8l_...\" (shown once), name, kind, ... } (201)\n\nBody: { name, days?, kind?: \"st8n\" }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"201":{"description":"{ id, token: \"d8l_...\" (shown once), name, kind, ... } (201)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name, days?, kind?: \"st8n\" }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/links/{id}":{"delete":{"operationId":"delete_links_by_id","summary":"{ ok }  (that st8n's sessions' claims go back to open)","description":"{ ok }  (that st8n's sessions' claims go back to open)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (that st8n's sessions' claims go back to open)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/lists":{"get":{"operationId":"get_lists","summary":"{ lists: List[] }  (?archived=1 adds archived)","description":"{ lists: List[] }  (?archived=1 adds archived)\n\nWho: person, session.\n\nKey scope: read:boards.","tags":["boards"],"x-deleg8-scope":"read:boards","parameters":[],"responses":{"200":{"description":"{ lists: List[] }  (?archived=1 adds archived)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_lists","summary":"List","description":"List\n\nBody: { name, about? }\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[],"responses":{"200":{"description":"List","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name, about? }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/lists/{id}":{"get":{"operationId":"get_lists_by_id","summary":"List (with its fields)","description":"List (with its fields)\n\nWho: person, session.\n\nKey scope: read:boards.","tags":["boards"],"x-deleg8-scope":"read:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List (with its fields)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_lists_by_id","summary":"List","description":"List\n\nBody: { name?, about?, archived? }  (list owner)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name?, about?, archived? }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_lists_by_id","summary":"{ ok, id, tickets: <how many went> }","description":"{ ok, id, tickets: <how many went> }\n\nBody: { confirm: <the list's name> }  (list owner; not the Inbox; every ticket on it goes too)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok, id, tickets: <how many went> }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/lists/{id}/fields":{"get":{"operationId":"get_lists_by_id_fields","summary":"{ fields: Field[] }","description":"{ fields: Field[] }\n\nWho: person, session.\n\nKey scope: read:boards.","tags":["boards"],"x-deleg8-scope":"read:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ fields: Field[] }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_lists_by_id_fields","summary":"Field (201)","description":"Field (201)\n\nBody: { name, kind: FieldKind, options?: [{ label, color? }] }  (list owner)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Field (201)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name, kind: FieldKind, options?: [{ label, color? }] }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/lists/{id}/fields/{field}":{"patch":{"operationId":"patch_lists_by_id_fields_by_field","summary":"Field","description":"Field\n\nBody: { name?, hidden? }  (list owner)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name?, hidden? }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_lists_by_id_fields_by_field","summary":"{ ok, cleared: <tickets that lost a value> }  (list owner)","description":"{ ok, cleared: <tickets that lost a value> }  (list owner)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok, cleared: <tickets that lost a value> }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/lists/{id}/fields/{field}/options":{"post":{"operationId":"post_lists_by_id_fields_by_field_options","summary":"Field (201)","description":"Field (201)\n\nBody: { label, color? }  (list owner; a dropdown)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Field (201)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ label, color? }  (list owner; a dropdown)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/lists/{id}/fields/{field}/options/{option}":{"patch":{"operationId":"patch_lists_by_id_fields_by_field_options_by_option","summary":"Field","description":"Field\n\nBody: { label?, color?, retired? }  (list owner; a rename shows on every ticket)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}},{"name":"option","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ label?, color?, retired? }  (list owner; a rename shows on every ticket)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/lists/{id}/fields/{field}/options/order":{"put":{"operationId":"put_lists_by_id_fields_by_field_options_order","summary":"Field","description":"Field\n\nBody: { ids: [every value id, in order] }  (list owner)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ ids: [every value id, in order] }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/lists/{id}/fields/order":{"put":{"operationId":"put_lists_by_id_fields_order","summary":"{ fields: Field[] }","description":"{ fields: Field[] }\n\nBody: { ids: [every field id, in order] }  (list owner)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ fields: Field[] }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ ids: [every field id, in order] }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/lists/{id}/invite":{"post":{"operationId":"post_lists_by_id_invite","summary":"{ ok, invited?: email, person?: id, people, invites, emailed, note? }  (everyone invited by email, known or not, waits until they accept)","description":"{ ok, invited?: email, person?: id, people, invites, emailed, note? }  (everyone invited by email, known or not, waits until they accept)\n\nBody: { email, role: manager | work | view }  (owner; a manager may invite as work or view)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok, invited?: email, person?: id, people, invites, emailed, note? }  (everyone invited by email, known or not, waits until they accept)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ email, role: manager | work | view }  (owner; a manager may invite as work or view)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/lists/{id}/invites/{email}":{"delete":{"operationId":"delete_lists_by_id_invites_by_email","summary":"{ people, invites }  (the owner withdraws an invite)","description":"{ people, invites }  (the owner withdraws an invite)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"email","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ people, invites }  (the owner withdraws an invite)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/lists/{id}/people":{"get":{"operationId":"get_lists_by_id_people","summary":"{ people: ListPerson[], invites: Invite[] }  (emails and invites: the list's owner only; others see names)","description":"{ people: ListPerson[], invites: Invite[] }  (emails and invites: the list's owner only; others see names)\n\nWho: person, session.\n\nKey scope: read:boards.","tags":["boards"],"x-deleg8-scope":"read:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ people: ListPerson[], invites: Invite[] }  (emails and invites: the list's owner only; others see names)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/lists/{id}/people/{person}":{"put":{"operationId":"put_lists_by_id_people_by_person","summary":"{ people, invites }","description":"{ people, invites }\n\nBody: { role: manager | work | view }  (owner; a manager may set work or view)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ people, invites }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ role: manager | work | view }  (owner; a manager may set work or view)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_lists_by_id_people_by_person","summary":"{ people, invites }  (their claims there end, the list leaves their tokens)","description":"{ people, invites }  (their claims there end, the list leaves their tokens)\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ people, invites }  (their claims there end, the list leaves their tokens)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/lists/{id}/requests":{"get":{"operationId":"get_lists_by_id_requests","summary":"{ requests: [{ ticket, id, number, title, status, statusLabel, createdBy: { name }, lastCustomerAt, drafts, waiting }] }  (anyone on the list; newest first, at most 500; for badges)","description":"{ requests: [{ ticket, id, number, title, status, statusLabel, createdBy: { name }, lastCustomerAt, drafts, waiting }] }  (anyone on the list; newest first, at most 500; for badges)\n\nWho: person.\n\nKey scope: read:requests.","tags":["requests"],"x-deleg8-scope":"read:requests","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ requests: [{ ticket, id, number, title, status, statusLabel, createdBy: { name }, lastCustomerAt, drafts, waiting }] }  (anyone on the list; newest first, at most 500; for badges)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/lists/{id}/work-on":{"put":{"operationId":"put_lists_by_id_work_on","summary":"{ ok, workOn }  (a shared person's sessions take (or stop taking) tickets from this list)","description":"{ ok, workOn }  (a shared person's sessions take (or stop taking) tickets from this list)\n\nBody: { on: boolean }\n\nWho: person.\n\nKey scope: write:boards.","tags":["boards"],"x-deleg8-scope":"write:boards","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok, workOn }  (a shared person's sessions take (or stop taking) tickets from this list)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ on: boolean }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/me":{"get":{"operationId":"get_me","summary":"Me","description":"Me\n\nWho: person, session.\n\nKey scope: any key.","tags":["general"],"x-deleg8-scope":"any key","parameters":[],"responses":{"200":{"description":"Me","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/objects":{"get":{"operationId":"get_objects","summary":"{ objects: Object[] }  (any team user; built-ins first: clients, users, boards, tickets)","description":"{ objects: Object[] }  (any team user; built-ins first: clients, users, boards, tickets)\n\nWho: person.\n\nKey scope: any key.","tags":["objects"],"x-deleg8-scope":"any key","parameters":[],"responses":{"200":{"description":"{ objects: Object[] }  (any team user; built-ins first: clients, users, boards, tickets)","content":{"application/json":{"schema":{"type":"object","properties":{"objects":{"type":"array","items":{"$ref":"#/components/schemas/Object"}}}}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_objects","summary":"Object (201)  (key made once from the plural, obj_<plural>, never changes; 409 too_many at 50 custom objects)","description":"Object (201)  (key made once from the plural, obj_<plural>, never changes; 409 too_many at 50 custom objects)\n\nBody: { name, plural?, icon?, portal? }  (objects.manage: team owner or admin; icon one short word, default box)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[],"responses":{"201":{"description":"Object (201)  (key made once from the plural, obj_<plural>, never changes; 409 too_many at 50 custom objects)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name, plural?, icon?, portal? }  (objects.manage: team owner or admin; icon one short word, default box)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/objects/{id}":{"patch":{"operationId":"patch_objects_by_id","summary":"Object","description":"Object\n\nBody: { name?, plural?, icon?, portal?, archived? }  (objects.manage; a custom object only, 409 builtin; another key is 400 key_fixed)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name?, plural?, icon?, portal?, archived? }  (objects.manage; a custom object only, 409 builtin; another key is 400 key_fixed)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_objects_by_id","summary":"{ ok }  (objects.manage; a custom object with no records: 409 has_records, archive it instead; 409 builtin)","description":"{ ok }  (objects.manage; a custom object with no records: 409 has_records, archive it instead; 409 builtin)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (objects.manage; a custom object with no records: 409 has_records, archive it instead; 409 builtin)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/objects/{id}/fields":{"get":{"operationId":"get_objects_by_id_fields","summary":"{ fields: Field[] }  (any team user; ?board=L-n on tickets adds that board's own fields)","description":"{ fields: Field[] }  (any team user; ?board=L-n on tickets adds that board's own fields)\n\nWho: person.\n\nKey scope: read:obj_{key}.","tags":["objects"],"x-deleg8-scope":"read:obj_{key}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ fields: Field[] }  (any team user; ?board=L-n on tickets adds that board's own fields)","content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/Field"}}}}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_objects_by_id_fields","summary":"Field (201)  (409 taken: one name per ticket or object; board fields: text, number, date, yesno, dropdown only)","description":"Field (201)  (409 taken: one name per ticket or object; board fields: text, number, date, yesno, dropdown only)\n\nBody: { name, type: FieldKind, board?, options?: [{ label, color? }], required?, default?, help?, portal?: hidden | read | edit, target?, currency? }  (objects.manage; target for record, currency for money)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Field (201)  (409 taken: one name per ticket or object; board fields: text, number, date, yesno, dropdown only)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Field"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name, type: FieldKind, board?, options?: [{ label, color? }], required?, default?, help?, portal?: hidden | read | edit, target?, currency? }  (objects.manage; target for record, currency for money)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/objects/{id}/fields/{field}":{"patch":{"operationId":"patch_objects_by_id_fields_by_field","summary":"Field","description":"Field\n\nBody: { name?, required?, default?, help?, portal?, hidden?, archived? }  (objects.manage; the type never changes: 400 type_fixed)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Field"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name?, required?, default?, help?, portal?, hidden?, archived? }  (objects.manage; the type never changes: 400 type_fixed)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/objects/{id}/fields/{field}/options":{"post":{"operationId":"post_objects_by_id_fields_by_field_options","summary":"Field (201)  (409 taken; at most 50 values)","description":"Field (201)  (409 taken; at most 50 values)\n\nBody: { label, color? }  (objects.manage; a dropdown or multi field, else 400 not_dropdown)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Field (201)  (409 taken; at most 50 values)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ label, color? }  (objects.manage; a dropdown or multi field, else 400 not_dropdown)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/objects/{id}/fields/{field}/options/{option}":{"patch":{"operationId":"patch_objects_by_id_fields_by_field_options_by_option","summary":"Field","description":"Field\n\nBody: { label?, color?, retired? }  (objects.manage; a rename shows on every record)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}},{"name":"option","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ label?, color?, retired? }  (objects.manage; a rename shows on every record)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/objects/{id}/fields/{field}/options/order":{"put":{"operationId":"put_objects_by_id_fields_by_field_options_order","summary":"Field","description":"Field\n\nBody: { ids: [every value id, in order] }  (objects.manage)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ ids: [every value id, in order] }  (objects.manage)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/objects/{id}/fields/order":{"put":{"operationId":"put_objects_by_id_fields_order","summary":"{ fields: Field[] }","description":"{ fields: Field[] }\n\nBody: { ids: [every one of the object's own field ids, in order] }  (objects.manage; board fields keep theirs)\n\nWho: person.\n\nKey scope: admin.","tags":["objects"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ fields: Field[] }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ ids: [every one of the object's own field ids, in order] }  (objects.manage; board fields keep theirs)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/objects/{id}/records":{"get":{"operationId":"get_objects_by_id_records","summary":"{ records: Record[], next: <skip> | null }  (records.read; a custom object, else 409 builtin; ?q=&client=&f.<F-n>=<value|none|any>&sort=f.<F-n>|-f.<F-n>&limit=&skip=&archived=1)","description":"{ records: Record[], next: <skip> | null }  (records.read; a custom object, else 409 builtin; ?q=&client=&f.<F-n>=<value|none|any>&sort=f.<F-n>|-f.<F-n>&limit=&skip=&archived=1)\n\nWho: person.\n\nKey scope: read:obj_{key}.","tags":["records"],"x-deleg8-scope":"read:obj_{key}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ records: Record[], next: <skip> | null }  (records.read; a custom object, else 409 builtin; ?q=&client=&f.<F-n>=<value|none|any>&sort=f.<F-n>|-f.<F-n>&limit=&skip=&archived=1)","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/Record"}},"next":{"type":["string","null"]}}}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_objects_by_id_records","summary":"Record (201)  (defaults filled; 400 required, 400 bad_field_value; 409 archived object)","description":"Record (201)  (defaults filled; 400 required, 400 bad_field_value; 409 archived object)\n\nBody: { client?, fields?: { <name or id>: value } }  (records.write: a member only for assigned Clients or none)\n\nWho: person.\n\nKey scope: write:obj_{key}.","tags":["records"],"x-deleg8-scope":"write:obj_{key}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Record (201)  (defaults filled; 400 required, 400 bad_field_value; 409 archived object)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Record"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ client?, fields?: { <name or id>: value } }  (records.write: a member only for assigned Clients or none)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordInput"}}}}}},"/api/v1/objects/{id}/records/{rid}":{"get":{"operationId":"get_objects_by_id_records_by_rid","summary":"Record  (records.read, else 404 no_record); on clients, users or boards: { id, object, title, fields }","description":"Record  (records.read, else 404 no_record); on clients, users or boards: { id, object, title, fields }\n\nWho: person.\n\nKey scope: read:obj_{key}.","tags":["records"],"x-deleg8-scope":"read:obj_{key}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"rid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Record  (records.read, else 404 no_record); on clients, users or boards: { id, object, title, fields }","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Record"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_objects_by_id_records_by_rid","summary":"Record; on a built-in { id, object, title, fields }  (tickets: 409 builtin, use PATCH /tickets/:id)","description":"Record; on a built-in { id, object, title, fields }  (tickets: 409 builtin, use PATCH /tickets/:id)\n\nBody: { client?, fields?: { <name or id>: value | null }, archived? }  (records.write on the old and the new Client; on clients/users/boards only fields, by clients.edit / team.users.role / board owner)\n\nWho: person.\n\nKey scope: write:obj_{key}.","tags":["records"],"x-deleg8-scope":"write:obj_{key}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"rid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Record; on a built-in { id, object, title, fields }  (tickets: 409 builtin, use PATCH /tickets/:id)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Record"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ client?, fields?: { <name or id>: value | null }, archived? }  (records.write on the old and the new Client; on clients/users/boards only fields, by clients.edit / team.users.role / board owner)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordInput"}}}}},"delete":{"operationId":"delete_objects_by_id_records_by_rid","summary":"{ ok }  (records.write; a custom object's record only)","description":"{ ok }  (records.write; a custom object's record only)\n\nWho: person.\n\nKey scope: write:obj_{key}.","tags":["records"],"x-deleg8-scope":"write:obj_{key}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"rid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (records.write; a custom object's record only)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"get_openapi_json","summary":"OpenAPI 3.1 document of every /api/v1 route  (public, no sign-in; someone on the team, or a key, also gets this team's custom objects it may read)","description":"OpenAPI 3.1 document of every /api/v1 route  (public, no sign-in; someone on the team, or a key, also gets this team's custom objects it may read)\n\nWho: anyone.\n\nKey scope: any key.","tags":["general"],"x-deleg8-scope":"any key","parameters":[],"responses":{"200":{"description":"OpenAPI 3.1 document of every /api/v1 route  (public, no sign-in; someone on the team, or a key, also gets this team's custom objects it may read)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/api/v1/people":{"get":{"operationId":"get_people","summary":"{ people: [{ id, name, email }] }  (people you already share with; never a directory)","description":"{ people: [{ id, name, email }] }  (people you already share with; never a directory)\n\nWho: person, session.\n\nKey scope: read:users.","tags":["users"],"x-deleg8-scope":"read:users","parameters":[],"responses":{"200":{"description":"{ people: [{ id, name, email }] }  (people you already share with; never a directory)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/profile":{"get":{"operationId":"get_profile","summary":"Profile = { id, name, email, jobTitle, phone, timeZone, photo: url | null, hasPassword, canChangeEmail, events: [{ id: new_request | customer_reply, label, email, push }] }","description":"Profile = { id, name, email, jobTitle, phone, timeZone, photo: url | null, hasPassword, canChangeEmail, events: [{ id: new_request | customer_reply, label, email, push }] }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"Profile = { id, name, email, jobTitle, phone, timeZone, photo: url | null, hasPassword, canChangeEmail, events: [{ id: new_request | customer_reply, label, email, push }] }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_profile","summary":"Profile  (400 bad_name, bad_phone, bad_time_zone, bad_photo)","description":"Profile  (400 bad_name, bad_phone, bad_time_zone, bad_photo)\n\nBody: { name?, jobTitle?, phone?, timeZone?, photo?: <your uploaded image id> | null }  (photo: PNG/JPEG/WebP/GIF up to 3 MB from POST /files)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"Profile  (400 bad_name, bad_phone, bad_time_zone, bad_photo)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ name?, jobTitle?, phone?, timeZone?, photo?: <your uploaded image id> | null }  (photo: PNG/JPEG/WebP/GIF up to 3 MB from POST /files)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/profile/devices":{"get":{"operationId":"get_profile_devices","summary":"{ devices: [{ id, current, label: \"Safari on iPhone\", where: \"203.0.113.x\", signedInAt, lastSeenAt }] }  (your own signed-in browsers)","description":"{ devices: [{ id, current, label: \"Safari on iPhone\", where: \"203.0.113.x\", signedInAt, lastSeenAt }] }  (your own signed-in browsers)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ devices: [{ id, current, label: \"Safari on iPhone\", where: \"203.0.113.x\", signedInAt, lastSeenAt }] }  (your own signed-in browsers)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/profile/devices/{id}":{"delete":{"operationId":"delete_profile_devices_by_id","summary":"{ ok, current }  (signs that browser out; the current one clears its cookie; 404 no_device)","description":"{ ok, current }  (signs that browser out; the current one clears its cookie; 404 no_device)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok, current }  (signs that browser out; the current one clears its cookie; 404 no_device)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/profile/devices/sign-out-others":{"post":{"operationId":"post_profile_devices_sign_out_others","summary":"{ ok, count }  (every browser but this one)","description":"{ ok, count }  (every browser but this one)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ ok, count }  (every browser but this one)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/profile/email":{"post":{"operationId":"post_profile_email","summary":"{ ok, mail: sent | console }  (a 24 h link goes to the NEW address; nothing changes yet; 400 bad_email, bad_credentials, same_email, st8n_email; 429 after 3 an hour)","description":"{ ok, mail: sent | console }  (a 24 h link goes to the NEW address; nothing changes yet; 400 bad_email, bad_credentials, same_email, st8n_email; 429 after 3 an hour)\n\nBody: { email, password }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ ok, mail: sent | console }  (a 24 h link goes to the NEW address; nothing changes yet; 400 bad_email, bad_credentials, same_email, st8n_email; 429 after 3 an hour)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ email, password }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/profile/email/confirm":{"post":{"operationId":"post_profile_email_confirm","summary":"{ ok, email }  (every other browser is signed out; the old address is told; 400 bad_token, 409 email_taken)","description":"{ ok, email }  (every other browser is signed out; the old address is told; 400 bad_token, 409 email_taken)\n\nBody: { token }  (the account that asked, signed in)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ ok, email }  (every other browser is signed out; the old address is told; 400 bad_token, 409 email_taken)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ token }  (the account that asked, signed in)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/profile/notify":{"put":{"operationId":"put_profile_notify","summary":"Profile","description":"Profile\n\nBody: { new_request?: { email?, push? }, customer_reply?: { email?, push? } }  (booleans; unknown events ignored; default on)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"Profile","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ new_request?: { email?, push? }, customer_reply?: { email?, push? } }  (booleans; unknown events ignored; default on)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/profile/photo/{person}":{"get":{"operationId":"get_profile_photo_by_person","summary":"the photo bytes (nosniff, sandbox CSP)  (a team user: anyone's; an account of its own: its own and those it shares a Client with; else 404 no_photo, as for no photo)","description":"the photo bytes (nosniff, sandbox CSP)  (a team user: anyone's; an account of its own: its own and those it shares a Client with; else 404 no_photo, as for no photo)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"person","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"the photo bytes (nosniff, sandbox CSP)  (a team user: anyone's; an account of its own: its own and those it shares a Client with; else 404 no_photo, as for no photo)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/push/key":{"get":{"operationId":"get_push_key","summary":"{ publicKey: string | null }  (null: push is not set up here)","description":"{ publicKey: string | null }  (null: push is not set up here)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ publicKey: string | null }  (null: push is not set up here)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/push/subscribe":{"post":{"operationId":"post_push_subscribe","summary":"{ ok }  (at most 10 devices, the oldest go; 404 push_off, 400 bad_endpoint | bad_keys, 409 endpoint_taken: another account's browser)","description":"{ ok }  (at most 10 devices, the oldest go; 404 push_off, 400 bad_endpoint | bad_keys, 409 endpoint_taken: another account's browser)\n\nBody: { endpoint, keys: { p256dh, auth } }  (endpoint: https on a known push service)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ ok }  (at most 10 devices, the oldest go; 404 push_off, 400 bad_endpoint | bad_keys, 409 endpoint_taken: another account's browser)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ endpoint, keys: { p256dh, auth } }  (endpoint: https on a known push service)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/push/unsubscribe":{"post":{"operationId":"post_push_unsubscribe","summary":"{ ok }  (your own subscription for that endpoint goes; none is still ok)","description":"{ ok }  (your own subscription for that endpoint goes; none is still ok)\n\nBody: { endpoint }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ ok }  (your own subscription for that endpoint goes; none is still ok)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ endpoint }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/sessions":{"get":{"operationId":"get_sessions","summary":"{ sessions: Session[], st8ns: St8nPresence[] }  (your own connected st8n computers' sessions; empty when none is on; with st8n off always { sessions: [], st8ns: [] })","description":"{ sessions: Session[], st8ns: St8nPresence[] }  (your own connected st8n computers' sessions; empty when none is on; with st8n off always { sessions: [], st8ns: [] })\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[],"responses":{"200":{"description":"{ sessions: Session[], st8ns: St8nPresence[] }  (your own connected st8n computers' sessions; empty when none is on; with st8n off always { sessions: [], st8ns: [] })","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/team/audit":{"get":{"operationId":"get_team_audit","summary":"{ entries: AuditEntry[] }  (?user=&client=&limit= (100, at most 500); newest first; team owner or admin, a key needs `admin`)","description":"{ entries: AuditEntry[] }  (?user=&client=&limit= (100, at most 500); newest first; team owner or admin, a key needs `admin`)\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ entries: AuditEntry[] }  (?user=&client=&limit= (100, at most 500); newest first; team owner or admin, a key needs `admin`)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/team/invite":{"post":{"operationId":"post_team_invite","summary":"{ invited, mail: \"sent\" } | { invited, mail: \"console\" | \"failed\", link } (201)  (applied when that address signs in; 400 bad_email | bad_role | bad_clients; 409 client_account | already)","description":"{ invited, mail: \"sent\" } | { invited, mail: \"console\" | \"failed\", link } (201)  (applied when that address signs in; 400 bad_email | bad_role | bad_clients; 409 client_account | already)\n\nBody: { email, role?: admin | member, clients?: [Client id] }  (team owner or admin; role default member; clients: the team's Clients, for a member)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[],"responses":{"201":{"description":"{ invited, mail: \"sent\" } | { invited, mail: \"console\" | \"failed\", link } (201)  (applied when that address signs in; 400 bad_email | bad_role | bad_clients; 409 client_account | already)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ email, role?: admin | member, clients?: [Client id] }  (team owner or admin; role default member; clients: the team's Clients, for a member)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/team/invites/{email}":{"delete":{"operationId":"delete_team_invites_by_email","summary":"{ ok }  (withdraws the invite; ok: false when there was none; team owner or admin)","description":"{ ok }  (withdraws the invite; ok: false when there was none; team owner or admin)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (withdraws the invite; ok: false when there was none; team owner or admin)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/team/invites/{email}/resend":{"post":{"operationId":"post_team_invites_by_email_resend","summary":"{ invited, mail: \"sent\" | \"console\" | \"failed\", link? }  (the same invite, role and Clients, mailed again; 404 no_invite; 429 rate_limited (20 an hour); team owner or admin)","description":"{ invited, mail: \"sent\" | \"console\" | \"failed\", link? }  (the same invite, role and Clients, mailed again; 404 no_invite; 429 rate_limited (20 an hour); team owner or admin)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ invited, mail: \"sent\" | \"console\" | \"failed\", link? }  (the same invite, role and Clients, mailed again; 404 no_invite; 429 rate_limited (20 an hour); team owner or admin)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/team/users":{"get":{"operationId":"get_team_users","summary":"{ users: TeamUser[], invites: [{ email, role, clients, at }] }  (?q= matches name or email; TeamUser = { id, name, email, role, status, clients: [{ id, name }], lastActiveAt, createdAt }; team owner o","description":"{ users: TeamUser[], invites: [{ email, role, clients, at }] }  (?q= matches name or email; TeamUser = { id, name, email, role, status, clients: [{ id, name }], lastActiveAt, createdAt }; team owner or admin)\n\nWho: person.\n\nKey scope: read:users.","tags":["users"],"x-deleg8-scope":"read:users","parameters":[],"responses":{"200":{"description":"{ users: TeamUser[], invites: [{ email, role, clients, at }] }  (?q= matches name or email; TeamUser = { id, name, email, role, status, clients: [{ id, name }], lastActiveAt, createdAt }; team owner or admin)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/team/users/{id}":{"patch":{"operationId":"patch_team_users_by_id","summary":"TeamUser  (an owner or admin made a member hands their Clients and boards to you; 400 bad_role | bad_clients; 404 no_user; 409 last_owner)","description":"TeamUser  (an owner or admin made a member hands their Clients and boards to you; 400 bad_role | bad_clients; 404 no_user; 409 last_owner)\n\nBody: { role?: owner | admin | member, clients?: [Client id] }  (team owner; an admin only on a non-owner and never to owner; clients: a member's assigned Clients)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"TeamUser  (an owner or admin made a member hands their Clients and boards to you; 400 bad_role | bad_clients; 404 no_user; 409 last_owner)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ role?: owner | admin | member, clients?: [Client id] }  (team owner; an admin only on a non-owner and never to owner; clients: a member's assigned Clients)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_team_users_by_id","summary":"{ ok }  (off the team: no role, no assigned Clients, no shares on the team's boards; an owner's or admin's Clients and boards move to you, their sessions and keys end; 409 last_owner; 404 no_user)","description":"{ ok }  (off the team: no role, no assigned Clients, no shares on the team's boards; an owner's or admin's Clients and boards move to you, their sessions and keys end; 409 last_owner; 404 no_user)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (off the team: no role, no assigned Clients, no shares on the team's boards; an owner's or admin's Clients and boards move to you, their sessions and keys end; 409 last_owner; 404 no_user)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/team/users/{id}/deactivate":{"post":{"operationId":"post_team_users_by_id_deactivate","summary":"TeamUser (status deactivated)  (sign-in blocked, every session ends at once, their webhooks turn off; an admin only on a non-owner; 409 last_owner; 404 no_user)","description":"TeamUser (status deactivated)  (sign-in blocked, every session ends at once, their webhooks turn off; an admin only on a non-owner; 409 last_owner; 404 no_user)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"TeamUser (status deactivated)  (sign-in blocked, every session ends at once, their webhooks turn off; an admin only on a non-owner; 409 last_owner; 404 no_user)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/team/users/{id}/reactivate":{"post":{"operationId":"post_team_users_by_id_reactivate","summary":"TeamUser (status active)  (team owner; an admin only on a non-owner; 404 no_user)","description":"TeamUser (status active)  (team owner; an admin only on a non-owner; 404 no_user)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"TeamUser (status active)  (team owner; an admin only on a non-owner; 404 no_user)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/team/users/{id}/reset-link":{"post":{"operationId":"post_team_users_by_id_reset_link","summary":"{ mail: \"sent\" } | { mail: \"console\", link } | { mail: \"none\" } (st8n sign-in, no password here)  (24 hours, once; an admin never for an owner; 404 no_user; 429 rate_limited; 502 mail_failed)","description":"{ mail: \"sent\" } | { mail: \"console\", link } | { mail: \"none\" } (st8n sign-in, no password here)  (24 hours, once; an admin never for an owner; 404 no_user; 429 rate_limited; 502 mail_failed)\n\nWho: person.\n\nKey scope: write:users.","tags":["users"],"x-deleg8-scope":"write:users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ mail: \"sent\" } | { mail: \"console\", link } | { mail: \"none\" } (st8n sign-in, no password here)  (24 hours, once; an admin never for an owner; 404 no_user; 429 rate_limited; 502 mail_failed)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets":{"get":{"operationId":"get_tickets","summary":"{ tickets: Ticket[], next: n | null }  (?list=&status=open,working&assignee=&label=&q=&batch=&machine=&mine=1&before=<n>&limit=&sort=queue | f.<F-n> | -f.<F-n>&f.<F-n>=<filter>)  filter: dropdown O-1,","description":"{ tickets: Ticket[], next: n | null }  (?list=&status=open,working&assignee=&label=&q=&batch=&machine=&mine=1&before=<n>&limit=&sort=queue | f.<F-n> | -f.<F-n>&f.<F-n>=<filter>)  filter: dropdown O-1,O-2 | yes/no yes|no | text: contains | number/date a..b, a.., ..b | none | any\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[],"responses":{"200":{"description":"{ tickets: Ticket[], next: n | null }  (?list=&status=open,working&assignee=&label=&q=&batch=&machine=&mine=1&before=<n>&limit=&sort=queue | f.<F-n> | -f.<F-n>&f.<F-n>=<filter>)  filter: dropdown O-1,O-2 | yes/no yes|no | text: contains | number/date a..b, a.., ..b | none | any","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_tickets","summary":"Ticket (201)","description":"Ticket (201)\n\nBody: { list?, title, details?, acceptance?, where?, assignee?, priority?, labels?, fields?: { <name or id>: value }, parent? }  (list default: your Inbox; parent: a new sub-ticket on the parent's list, docs/SUBTICKETS.md)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[],"responses":{"201":{"description":"Ticket (201)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ list?, title, details?, acceptance?, where?, assignee?, priority?, labels?, fields?: { <name or id>: value }, parent? }  (list default: your Inbox; parent: a new sub-ticket on the parent's list, docs/SUBTICKETS.md)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}":{"get":{"operationId":"get_tickets_by_id","summary":"Ticket with timeline, can, parent, children and related (docs/SUBTICKETS.md)","description":"Ticket with timeline, can, parent, children and related (docs/SUBTICKETS.md)\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket with timeline, can, parent, children and related (docs/SUBTICKETS.md)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_tickets_by_id","summary":"Ticket","description":"Ticket\n\nBody: { title?, details?, acceptance?, where?, priority?, labels?, list?, fields?: { <name or id>: value | null } }  (fields merge; null clears)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ title?, details?, acceptance?, where?, priority?, labels?, list?, fields?: { <name or id>: value | null } }  (fields merge; null clears)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_tickets_by_id","summary":"{ ok, id }","description":"{ ok, id }\n\nBody: { confirm: <the ticket id> }  (list owner or manager, or whoever added it; not while a session holds it)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok, id }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/{id}/assign":{"post":{"operationId":"post_tickets_by_id_assign","summary":"Ticket","description":"Ticket\n\nBody: { assignee, st8n? }  (st8n: the link id a session: assignee runs behind)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ assignee, st8n? }  (st8n: the link id a session: assignee runs behind)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/block":{"post":{"operationId":"post_tickets_by_id_block","summary":"Ticket","description":"Ticket\n\nBody: { why }\n\nWho: session, person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ why }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/cancel":{"post":{"operationId":"post_tickets_by_id_cancel","summary":"Ticket","description":"Ticket\n\nBody: { why? }\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ why? }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/claim":{"post":{"operationId":"post_tickets_by_id_claim","summary":"Ticket","description":"Ticket\n\nBody: { folder? }\n\nWho: session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ folder? }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/customer":{"get":{"operationId":"get_tickets_by_id_customer","summary":"{ request: Request | null, thread: TeamMessage[] }  (anyone on the list; null: not a client request; the thread includes drafts)","description":"{ request: Request | null, thread: TeamMessage[] }  (anyone on the list; null: not a client request; the thread includes drafts)\n\nWho: person.\n\nKey scope: read:requests.","tags":["requests"],"x-deleg8-scope":"read:requests","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ request: Request | null, thread: TeamMessage[] }  (anyone on the list; null: not a client request; the thread includes drafts)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/{id}/customer/updates":{"post":{"operationId":"post_tickets_by_id_customer_updates","summary":"TeamMessage (201)  (a draft; 409 not_a_request, 400 no_text)","description":"TeamMessage (201)  (a draft; 409 not_a_request, 400 no_text)\n\nBody: { text, waiting?, files?: [id] }  (list owner or manager; waiting: the request waits on the Client once published)\n\nWho: person.\n\nKey scope: write:requests.","tags":["requests"],"x-deleg8-scope":"write:requests","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"TeamMessage (201)  (a draft; 409 not_a_request, 400 no_text)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ text, waiting?, files?: [id] }  (list owner or manager; waiting: the request waits on the Client once published)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/customer/updates/{uid}":{"patch":{"operationId":"patch_tickets_by_id_customer_updates_by_uid","summary":"TeamMessage  (409 published: write a new one)","description":"TeamMessage  (409 published: write a new one)\n\nBody: { text?, waiting?, files? }  (list owner or manager; files replaces the draft's files)\n\nWho: person.\n\nKey scope: write:requests.","tags":["requests"],"x-deleg8-scope":"write:requests","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"uid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"TeamMessage  (409 published: write a new one)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ text?, waiting?, files? }  (list owner or manager; files replaces the draft's files)","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_tickets_by_id_customer_updates_by_uid","summary":"{ ok }  (list owner or manager; a draft only, its files go too; 409 published)","description":"{ ok }  (list owner or manager; a draft only, its files go too; 409 published)\n\nWho: person.\n\nKey scope: write:requests.","tags":["requests"],"x-deleg8-scope":"write:requests","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"uid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (list owner or manager; a draft only, its files go too; 409 published)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/{id}/customer/updates/{uid}/publish":{"post":{"operationId":"post_tickets_by_id_customer_updates_by_uid_publish","summary":"TeamMessage  (list owner or manager; the client users who may read the request see it; while its board is shown, mail and push go to those who chose them; again: no-op)","description":"TeamMessage  (list owner or manager; the client users who may read the request see it; while its board is shown, mail and push go to those who chose them; again: no-op)\n\nWho: person.\n\nKey scope: write:requests.","tags":["requests"],"x-deleg8-scope":"write:requests","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"uid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"TeamMessage  (list owner or manager; the client users who may read the request see it; while its board is shown, mail and push go to those who chose them; again: no-op)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/done":{"post":{"operationId":"post_tickets_by_id_done","summary":"Ticket","description":"Ticket\n\nBody: Evidence\n\nWho: session, person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"Evidence","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/files":{"get":{"operationId":"get_tickets_by_id_files","summary":"{ files: (File & { on: request | reply | update | ticket, message, published, by: { name }, at })[] }  (anyone on the list; 404 not_found)","description":"{ files: (File & { on: request | reply | update | ticket, message, published, by: { name }, at })[] }  (anyone on the list; 404 not_found)\n\nWho: person.\n\nKey scope: read:files.","tags":["files"],"x-deleg8-scope":"read:files","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ files: (File & { on: request | reply | update | ticket, message, published, by: { name }, at })[] }  (anyone on the list; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_tickets_by_id_files","summary":"{ files: File[] } (201)  (internal: never shown to the Client; a timeline note says so; 403 read_only; 404 not_found)","description":"{ files: File[] } (201)  (internal: never shown to the Client; a timeline note says so; 403 read_only; 404 not_found)\n\nBody: { files: [id], note? }  (owner, manager or work on the list; at most 5, each your own waiting upload)\n\nWho: person.\n\nKey scope: write:files.","tags":["files"],"x-deleg8-scope":"write:files","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"{ files: File[] } (201)  (internal: never shown to the Client; a timeline note says so; 403 read_only; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ files: [id], note? }  (owner, manager or work on the list; at most 5, each your own waiting upload)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/files/{fid}":{"delete":{"operationId":"delete_tickets_by_id_files_by_fid","summary":"{ ok }  (whoever added it, or the list owner or a manager; 403 not_editor; 404 not_found | no_file; 409 sent: the Client already has it)","description":"{ ok }  (whoever added it, or the list owner or a manager; 403 not_editor; 404 not_found | no_file; 409 sent: the Client already has it)\n\nWho: person.\n\nKey scope: write:files.","tags":["files"],"x-deleg8-scope":"write:files","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"fid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }  (whoever added it, or the list owner or a manager; 403 not_editor; 404 not_found | no_file; 409 sent: the Client already has it)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/{id}/note":{"post":{"operationId":"post_tickets_by_id_note","summary":"Ticket","description":"Ticket\n\nBody: { text }\n\nWho: session, person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ text }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/parent":{"put":{"operationId":"put_tickets_by_id_parent","summary":"Ticket with parent, children, related  (one level, same list; docs/SUBTICKETS.md; 404 not_found)","description":"Ticket with parent, children, related  (one level, same list; docs/SUBTICKETS.md; 404 not_found)\n\nBody: { parent: \"T-n\" }\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket with parent, children, related  (one level, same list; docs/SUBTICKETS.md; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ parent: \"T-n\" }","content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"delete_tickets_by_id_parent","summary":"Ticket with parent, children, related  (no longer a sub-ticket)","description":"Ticket with parent, children, related  (no longer a sub-ticket)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket with parent, children, related  (no longer a sub-ticket)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/{id}/related":{"post":{"operationId":"post_tickets_by_id_related","summary":"Ticket with parent, children, related  (both ways; at most 20; 404 not_found)","description":"Ticket with parent, children, related  (both ways; at most 20; 404 not_found)\n\nBody: { ticket: \"T-n\" }\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket with parent, children, related  (both ways; at most 20; 404 not_found)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ ticket: \"T-n\" }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/related/{other}":{"delete":{"operationId":"delete_tickets_by_id_related_by_other","summary":"Ticket with parent, children, related","description":"Ticket with parent, children, related\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"other","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket with parent, children, related","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/{id}/release":{"post":{"operationId":"post_tickets_by_id_release","summary":"Ticket","description":"Ticket\n\nBody: { why? }  (person: list owner)\n\nWho: session, person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ why? }  (person: list owner)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/renew":{"post":{"operationId":"post_tickets_by_id_renew","summary":"{ leaseUntil }","description":"{ leaseUntil }\n\nWho: session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ leaseUntil }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/reopen":{"post":{"operationId":"post_tickets_by_id_reopen","summary":"Ticket","description":"Ticket\n\nBody: { why? }\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ why? }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/session":{"post":{"operationId":"post_tickets_by_id_session","summary":"{ ticket, session: { id, name, machine } } (201): your st8n started a session told to work only this ticket; it claims it. 403 person_only (a session, a link or an API key: a person at the page only),","description":"{ ticket, session: { id, name, machine } } (201): your st8n started a session told to work only this ticket; it claims it. 403 person_only (a session, a link or an API key: a person at the page only), 403 no_work; 404 st8n_off with st8n off; 409 no_st8n | not_open, or what your st8n said\n\nBody: {}  (an open ticket you may work; your st8n connected and on)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"{ ticket, session: { id, name, machine } } (201): your st8n started a session told to work only this ticket; it claims it. 403 person_only (a session, a link or an API key: a person at the page only), 403 no_work; 404 st8n_off with st8n off; 409 no_st8n | not_open, or what your st8n said","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{}  (an open ticket you may work; your st8n connected and on)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/start":{"post":{"operationId":"post_tickets_by_id_start","summary":"Ticket","description":"Ticket\n\nWho: session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"JSON","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/{id}/track":{"get":{"operationId":"get_tickets_by_id_track","summary":"{ track: TicketTrack, timeline: Change[] }  (anyone who sees the ticket; track: opened, claimed, done, review, merged, verified, times...; timeline oldest first)","description":"{ track: TicketTrack, timeline: Change[] }  (anyone who sees the ticket; track: opened, claimed, done, review, merged, verified, times...; timeline oldest first)\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ track: TicketTrack, timeline: Change[] }  (anyone who sees the ticket; track: opened, claimed, done, review, merged, verified, times...; timeline oldest first)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_tickets_by_id_track","summary":"{ ok, added }  (added false: that key was already written; verified only by the list owner or a manager: 403 not_manager; 403 read_only; at held between the ticket's making and now)","description":"{ ok, added }  (added false: that key was already written; verified only by the list owner or a manager: 403 not_manager; 403 read_only; at held between the ticket's making and now)\n\nBody: { type: merged | reviewed | verified, key, at?, text? }  (work rights on the list; key: one mark per key)\n\nWho: person, session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok, added }  (added false: that key was already written; verified only by the list owner or a manager: 403 not_manager; 403 read_only; at held between the ticket's making and now)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ type: merged | reviewed | verified, key, at?, text? }  (work rights on the list; key: one mark per key)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/ask":{"post":{"operationId":"post_tickets_ask","summary":"{ say, cites, looked, refused?, model? }  (read only; 503 helper_off without a model; 429 rate_limited at 30 an hour per person, every door, link and session together, helper_cap, list_rate_limited)","description":"{ say, cites, looked, refused?, model? }  (read only; 503 helper_off without a model; 429 rate_limited at 30 an hour per person, every door, link and session together, helper_cap, list_rate_limited)\n\nBody: { question, list? }  (question under 1,000 chars; list: one board, else every list you see)\n\nWho: person, session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[],"responses":{"200":{"description":"{ say, cites, looked, refused?, model? }  (read only; 503 helper_off without a model; 429 rate_limited at 30 an hour per person, every door, link and session together, helper_cap, list_rate_limited)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ question, list? }  (question under 1,000 chars; list: one board, else every list you see)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/bulk":{"post":{"operationId":"post_tickets_bulk","summary":"{ batch, tickets } (201)","description":"{ batch, tickets } (201)\n\nBody: { list?, text, defaults?: { where, assignee, priority, labels } }\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[],"responses":{"201":{"description":"{ batch, tickets } (201)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ list?, text, defaults?: { where, assignee, priority, labels } }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/changes":{"get":{"operationId":"get_tickets_changes","summary":"{ since, changes: [{ ticket, title, at, type, from, to, text, who }] }  (newest first; ?since=<ms or date, default 24 h ago>&list=&limit= up to 5000, default 500; 10 a minute per person across reports","description":"{ since, changes: [{ ticket, title, at, type, from, to, text, who }] }  (newest first; ?since=<ms or date, default 24 h ago>&list=&limit= up to 5000, default 500; 10 a minute per person across reports, changes and workers: 429 rate_limited)\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[],"responses":{"200":{"description":"{ since, changes: [{ ticket, title, at, type, from, to, text, who }] }  (newest first; ?since=<ms or date, default 24 h ago>&list=&limit= up to 5000, default 500; 10 a minute per person across reports, changes and workers: 429 rate_limited)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/imported/{site}/{id}":{"get":{"operationId":"get_tickets_imported_by_site_by_id","summary":"Ticket with can and importedFrom: { site, id }  (the ticket st8n imported under that old id; else 404)","description":"Ticket with can and importedFrom: { site, id }  (the ticket st8n imported under that old id; else 404)\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[{"name":"site","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ticket with can and importedFrom: { site, id }  (the ticket st8n imported under that old id; else 404)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/next":{"post":{"operationId":"post_tickets_next","summary":"{ ticket: Ticket | null }  (claimed for this session); with ties: true it claims nothing: { ticket: null, ties: Ticket[] } (the tied first candidates, at most 20)","description":"{ ticket: Ticket | null }  (claimed for this session); with ties: true it claims nothing: { ticket: null, ties: Ticket[] } (the tied first candidates, at most 20)\n\nBody: { list?, labels?, folder?, ties? }\n\nWho: session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[],"responses":{"200":{"description":"{ ticket: Ticket | null }  (claimed for this session); with ties: true it claims nothing: { ticket: null, ties: Ticket[] } (the tied first candidates, at most 20)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ list?, labels?, folder?, ties? }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/proposals":{"get":{"operationId":"get_tickets_proposals","summary":"{ proposals: Proposal[] }  (?status=waiting|approved|declined; the lists you own)","description":"{ proposals: Proposal[] }  (?status=waiting|approved|declined; the lists you own)\n\nWho: person.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[],"responses":{"200":{"description":"{ proposals: Proposal[] }  (?status=waiting|approved|declined; the lists you own)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_tickets_proposals","summary":"Proposal (201)  (P-n, waiting: nothing changes until the list owner approves). The ticket's own assignee editing or closing it: { applied: true, kind, ticket } at once, on the timeline (T-330)","description":"Proposal (201)  (P-n, waiting: nothing changes until the list owner approves). The ticket's own assignee editing or closing it: { applied: true, kind, ticket } at once, on the timeline (T-330)\n\nBody: { kind: create|edit|close|cancel|reopen|move|assign, ticket?, list?, changes: { title?, details?, acceptance?, where?, priority?, labels?, fields?, summary? (close), list? (move), assignee? (assign) }, why? }  (10 an hour per session)\n\nWho: session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[],"responses":{"201":{"description":"Proposal (201)  (P-n, waiting: nothing changes until the list owner approves). The ticket's own assignee editing or closing it: { applied: true, kind, ticket } at once, on the timeline (T-330)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ kind: create|edit|close|cancel|reopen|move|assign, ticket?, list?, changes: { title?, details?, acceptance?, where?, priority?, labels?, fields?, summary? (close), list? (move), assignee? (assign) }, why? }  (10 an hour per session)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/proposals/{id}":{"get":{"operationId":"get_tickets_proposals_by_id","summary":"Proposal","description":"Proposal\n\nWho: person.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Proposal","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/proposals/{id}/approve":{"post":{"operationId":"post_tickets_proposals_by_id_approve","summary":"{ proposal, ticket }","description":"{ proposal, ticket }\n\nBody: { edits?: { title?, details?, acceptance?, where?, priority?, labels?, list?, fields? } }  (list owner)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ proposal, ticket }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ edits?: { title?, details?, acceptance?, where?, priority?, labels?, list?, fields? } }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/proposals/{id}/decline":{"post":{"operationId":"post_tickets_proposals_by_id_decline","summary":"Proposal","description":"Proposal\n\nBody: { why? }  (list owner)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Proposal","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ why? }  (list owner)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/proposals/approve":{"post":{"operationId":"post_tickets_proposals_approve","summary":"{ approved: { proposal, ticket }[] }","description":"{ approved: { proposal, ticket }[] }\n\nBody: { ids: [P-n, ...] }  (list owner; more than 3 needs a fresh sign-in)\n\nWho: person.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[],"responses":{"200":{"description":"{ approved: { proposal, ticket }[] }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ ids: [P-n, ...] }  (list owner; more than 3 needs a fresh sign-in)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/propose":{"post":{"operationId":"post_tickets_propose","summary":"Proposal (201)  (P-n, status waiting: not a ticket until approved)","description":"Proposal (201)  (P-n, status waiting: not a ticket until approved)\n\nBody: { list?, title, details?, acceptance?, where?, priority?, labels?, fields? }  (at most 10 an hour per session)\n\nWho: session.\n\nKey scope: write:tickets.","tags":["tickets"],"x-deleg8-scope":"write:tickets","parameters":[],"responses":{"201":{"description":"Proposal (201)  (P-n, status waiting: not a ticket until approved)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ list?, title, details?, acceptance?, where?, priority?, labels?, fields? }  (at most 10 an hour per session)","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tickets/reports":{"get":{"operationId":"get_tickets_reports","summary":"{ at, from, to, filters, totals, perDay, times, workers, teams, stuck, tracks? }  (?list=&days=&from=&to=&tz=&worker=&team=&label=&status=&tracks=1; &format=csv&part=perDay|workers|teams|stuck|tickets","description":"{ at, from, to, filters, totals, perDay, times, workers, teams, stuck, tracks? }  (?list=&days=&from=&to=&tz=&worker=&team=&label=&status=&tracks=1; &format=csv&part=perDay|workers|teams|stuck|tickets: text/csv; 10 a minute per person across reports, changes and workers: 429 rate_limited)\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[],"responses":{"200":{"description":"{ at, from, to, filters, totals, perDay, times, workers, teams, stuck, tracks? }  (?list=&days=&from=&to=&tz=&worker=&team=&label=&status=&tracks=1; &format=csv&part=perDay|workers|teams|stuck|tickets: text/csv; 10 a minute per person across reports, changes and workers: 429 rate_limited)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tickets/workers":{"get":{"operationId":"get_tickets_workers","summary":"{ workers: [{ worker, name, machine, team, tickets, done, sentBack, blocked, released, holding, busyMs, idleMs, idleNowMs, avgClaimToDoneMs, firstSeen, lastSeen }] }  (?list=&days=&from=&to=; 10 a min","description":"{ workers: [{ worker, name, machine, team, tickets, done, sentBack, blocked, released, holding, busyMs, idleMs, idleNowMs, avgClaimToDoneMs, firstSeen, lastSeen }] }  (?list=&days=&from=&to=; 10 a minute per person across reports, changes and workers: 429 rate_limited)\n\nWho: person, session.\n\nKey scope: read:tickets.","tags":["tickets"],"x-deleg8-scope":"read:tickets","parameters":[],"responses":{"200":{"description":"{ workers: [{ worker, name, machine, team, tickets, done, sentBack, blocked, released, holding, busyMs, idleMs, idleNowMs, avgClaimToDoneMs, firstSeen, lastSeen }] }  (?list=&days=&from=&to=; 10 a minute per person across reports, changes and workers: 429 rate_limited)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tokens":{"get":{"operationId":"get_tokens","summary":"{ tokens: WorkToken[] }","description":"{ tokens: WorkToken[] }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"200":{"description":"{ tokens: WorkToken[] }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_tokens","summary":"{ id, token: \"stt_...\" (shown once), ... } (201)","description":"{ id, token: \"stt_...\" (shown once), ... } (201)\n\nBody: { computer, lists, days? }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[],"responses":{"201":{"description":"{ id, token: \"stt_...\" (shown once), ... } (201)","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":false,"description":"{ computer, lists, days? }","content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/v1/tokens/{id}":{"delete":{"operationId":"delete_tokens_by_id","summary":"{ ok }","description":"{ ok }\n\nWho: person.\n\nKey scope: admin.","tags":["admin"],"x-deleg8-scope":"admin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ ok }","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: { error, code } (docs/API.md section 5)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"d8k_ + 48 base62 characters (Admin -> API keys)"},"session":{"type":"apiKey","in":"cookie","name":"deleg8_session","description":"The browser's sign-in (__Host-deleg8_session over https); changes also need the x-deleg8-csrf header from GET /api/v1/me."}},"schemas":{"Error":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"A sentence for a person"},"code":{"type":"string","description":"A code for a program"}}},"Object":{"type":"object","required":["id","key","name","plural","builtin"],"properties":{"id":{"type":"string","description":"`clients`, `users`, `boards`, `tickets`, or `ob_` + 12 hex for a custom object"},"key":{"type":"string","description":"A custom object's `obj_` + a slug of its plural, fixed once made: scopes and webhook events name it by this (`read:obj_locations`, `obj_locations.created`)"},"name":{"type":"string"},"plural":{"type":"string"},"icon":{"type":"string"},"builtin":{"type":"boolean"},"portal":{"type":"boolean"},"archived":{"type":"boolean"},"fields":{"type":"integer"},"records":{"type":["integer","null"]}}},"Field":{"type":"object","required":["id","object","name","type"],"properties":{"id":{"type":"string","description":"F-<n>"},"object":{"type":"string"},"board":{"type":["string","null"],"description":"L-<n>: a Tickets field of that board only"},"name":{"type":"string"},"type":{"type":"string","enum":["text","long_text","number","money","date","datetime","yesno","dropdown","multi","user","client","record","file","url","email","phone"]},"position":{"type":"integer"},"hidden":{"type":"boolean"},"archived":{"type":"boolean"},"required":{"type":"boolean"},"default":{},"help":{"type":["string","null"]},"portal":{"type":"string","enum":["hidden","read","edit"]},"target":{"type":["string","null"],"description":"A record field: the object its records are of"},"currency":{"type":["string","null"]},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"color":{"type":"string"},"retired":{"type":"boolean"}}}}}},"FieldValue":{"type":"object","required":["id","type","value"],"description":"A value as shown: stored by field id, shown by the field's name","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["text","long_text","number","money","date","datetime","yesno","dropdown","multi","user","client","record","file","url","email","phone"]},"value":{"description":"A dropdown: its label; multi: the labels"},"option":{"type":"string","description":"A dropdown: the option id (O-<n>)"},"options":{"type":"array","items":{"type":"string"},"description":"Multi: the option ids"},"retired":{"type":"boolean"},"hidden":{"type":"boolean"},"archived":{"type":"boolean"}}},"Record":{"type":"object","required":["id","object","title","fields"],"properties":{"id":{"type":"string","description":"rc_ + 16 hex"},"object":{"type":"string"},"client":{"type":["object","null"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"title":{"type":"string","description":"The first text field, or Untitled"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldValue"}},"createdBy":{"type":"object","properties":{"name":{"type":"string"}}},"createdAt":{"type":"integer"},"updatedAt":{"type":"integer"},"archived":{"type":"boolean"}}},"RecordInput":{"type":"object","properties":{"client":{"type":["string","null"]},"fields":{"type":"object","description":"{ \"<name or F-id>\": value | null }","additionalProperties":true},"archived":{"type":"boolean"}}}}}}