{"openapi":"3.1.0","info":{"title":"DeskCrew API","version":"1.0.0","description":"The DeskCrew REST API. Authenticate with a workspace API key as a bearer token: `Authorization: Bearer dk_...`. Keys are minted in the dashboard under API keys and carry explicit scopes; every request is scoped to the workspace that owns the key. The DeskCrew apps for iPhone, iPad and Mac call the same routes as a signed-in person: their bearer is the session token from the sign-in code, scopes follow the person's role, and the X-Workspace header names the workspace (the first one they belong to when absent). Every key is limited per minute and per day, and unauthenticated requests are limited per IP. A 429 carries a retry-after header.","contact":{"name":"DeskCrew support","url":"https://deskcrew.io/board/deskcrew"}},"servers":[{"url":"https://deskcrew.io"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A workspace API key that starts with dk_, or a signed-in person's session token from the DeskCrew apps."}}},"security":[{"bearerAuth":[]}],"x-scopes":["tickets:read","tickets:write","tickets:reply","issues:read","issues:write","changelog:read","changelog:write","customers:read","kb:read","kb:write","webhooks:manage","errors:write","bounties:manage"],"paths":{"/api/v1/tickets":{"get":{"summary":"List tickets","description":"Requires the `tickets:read` scope.","operationId":"get_api_v1_tickets","security":[{"bearerAuth":[]}],"parameters":[{"name":"status","in":"query","required":false,"description":"active, pending, or closed","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1 to 100 (default 25)","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, 1-based","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create a ticket","description":"Requires the `tickets:write` scope.","operationId":"post_api_v1_tickets","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"subject: string, required; body: string, required: the customer message; customer_email: string, required; priority: low | normal | high"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/tickets/{id}":{"get":{"summary":"Get one ticket with its timeline","description":"Requires the `tickets:read` scope.","operationId":"get_api_v1_tickets__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/tickets/{id}/replies":{"post":{"summary":"Add an internal note or agent reply to a ticket","description":"Requires the `tickets:write` scope.","operationId":"post_api_v1_tickets__id__replies","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"body: string, required; internal: boolean, default false"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/tickets/{id}/reply":{"post":{"summary":"Draft or send a customer-facing reply","description":"The external-agent seam. Drafts land in the human approval queue unless the workspace has explicitly enabled sending. Requires the `tickets:reply` scope.","operationId":"post_api_v1_tickets__id__reply","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"body: string, required; send: boolean, default false"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/kb":{"get":{"summary":"List knowledge-base articles","description":"Requires the `kb:read` scope.","operationId":"get_api_v1_kb","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create an article","description":"Requires the `kb:write` scope.","operationId":"post_api_v1_kb","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"title: string, required; body: string, required: markdown; status: draft | published; category_id: number, optional"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/kb/{id}":{"get":{"summary":"Get one article","description":"Requires the `kb:read` scope.","operationId":"get_api_v1_kb__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Update an article","description":"Requires the `kb:write` scope.","operationId":"patch_api_v1_kb__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete an article","description":"Requires the `kb:write` scope.","operationId":"delete_api_v1_kb__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/kb/categories":{"get":{"summary":"List KB categories","description":"Requires the `kb:read` scope.","operationId":"get_api_v1_kb_categories","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create a category","description":"Requires the `kb:write` scope.","operationId":"post_api_v1_kb_categories","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"name: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/kb/categories/{id}":{"get":{"summary":"Get one category","description":"Requires the `kb:read` scope.","operationId":"get_api_v1_kb_categories__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Rename or reorder a category","description":"Requires the `kb:write` scope.","operationId":"patch_api_v1_kb_categories__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete a category","description":"Requires the `kb:write` scope.","operationId":"delete_api_v1_kb_categories__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/issues":{"get":{"summary":"List feedback and roadmap issues","description":"Requires the `issues:read` scope.","operationId":"get_api_v1_issues","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create an issue","description":"Requires the `issues:write` scope.","operationId":"post_api_v1_issues","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"title: string, required; body: string; type: feature | bug; status: open | planned | in_progress | shipped | declined; is_public: boolean"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/issues/{id}":{"get":{"summary":"Get one issue","description":"Requires the `issues:read` scope.","operationId":"get_api_v1_issues__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Update an issue (status, title, visibility)","description":"Requires the `issues:write` scope.","operationId":"patch_api_v1_issues__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete an issue","description":"Requires the `issues:write` scope.","operationId":"delete_api_v1_issues__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/changelog":{"get":{"summary":"List changelog entries","description":"Requires the `changelog:read` scope.","operationId":"get_api_v1_changelog","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Publish a changelog entry","description":"Requires the `changelog:write` scope.","operationId":"post_api_v1_changelog","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"title: string, required; body: string, required: markdown"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/changelog/{id}":{"get":{"summary":"Get one entry","description":"Requires the `changelog:read` scope.","operationId":"get_api_v1_changelog__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Update an entry","description":"Requires the `changelog:write` scope.","operationId":"patch_api_v1_changelog__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete an entry","description":"Requires the `changelog:write` scope.","operationId":"delete_api_v1_changelog__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/customers":{"get":{"summary":"List customers","description":"Requires the `customers:read` scope.","operationId":"get_api_v1_customers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/me":{"get":{"summary":"Who is signed in (native apps)","description":"For a signed-in person, not an API key: the person, the workspaces they belong to, the current workspace, and the device holding this session. Needs the tickets:read scope, which every role holds. Requires the `tickets:read` scope.","operationId":"get_api_v1_me","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/devices/me":{"patch":{"summary":"Update this device (push token, name, version)","description":"The device is always the one whose session made the request. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_devices_me","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"pushToken: string | null; pushEnv: sandbox | production; name: string; appVersion: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Sign this device out","description":"Revokes the session behind the token; it is refused from the next request. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_devices_me","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/billing":{"get":{"summary":"Plan and billing source (native apps)","description":"The plan, where it comes from (web or Apple), when an Apple subscription renews, and whether an in-app purchase is allowed. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_billing","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/billing/apple":{"post":{"summary":"Apply an App Store subscription to the workspace","description":"Takes the StoreKit 2 signed transaction; the server verifies it and sets the plan. Admins only, and refused while a web subscription is live. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_billing_apple","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"signedTransaction: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets":{"get":{"summary":"List tickets (app)","description":"The dashboard list: page, status, priority, ids. Spam is its own view. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_tickets","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create a ticket by hand (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_tickets","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"subject: string, required; customerEmail: string, required; customerName: string; body: string; priority: low | normal | high | urgent"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/search":{"get":{"summary":"Search tickets by subject or id (app)","description":"At most six rows. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_tickets_search","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/counts":{"post":{"summary":"Message and awaiting-draft counts per ticket (app)","description":"Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"post_api_v1_app_tickets_counts","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"ids: number[], required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/bulk":{"post":{"summary":"Update many tickets (app)","description":"At most 100 ids. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_tickets_bulk","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"ids: string[], required; status: string; priority: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/{id}":{"get":{"summary":"Ticket with timeline and pending drafts (app)","description":"Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_tickets__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Change status, priority or assignee (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_tickets__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"status: string; priority: string; assignee: agent id | null"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/{id}/reply":{"post":{"summary":"Post a reply as the signed-in person (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_tickets__id__reply","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"body: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/{id}/reopen":{"post":{"summary":"Reopen a closed ticket (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_tickets__id__reopen","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/{id}/request-contact":{"post":{"summary":"Ask the customer for an email address (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_tickets__id__request-contact","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tickets/{id}/assignable":{"get":{"summary":"Team members a ticket can be assigned to (app)","description":"Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_tickets__id__assignable","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/replies/{id}/retract":{"post":{"summary":"Retract a reply inside the retract window (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_replies__id__retract","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/approvals/pending":{"get":{"summary":"Drafts awaiting approval (app)","description":"Newest first, with the ticket subject. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_approvals_pending","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/approvals/{id}/approve":{"post":{"summary":"Approve and send a draft (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_approvals__id__approve","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/approvals/{id}/reject":{"post":{"summary":"Reject a draft (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_approvals__id__reject","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"reason: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/approvals/{id}/edit":{"post":{"summary":"Edit a draft before approval (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_approvals__id__edit","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"body: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/approvals/{id}/reason":{"post":{"summary":"Set the rejection reason on a draft (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_approvals__id__reason","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"reason: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/overview":{"get":{"summary":"Dashboard home numbers and banners (app)","description":"Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_overview","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/notifications":{"get":{"summary":"Notification preferences (app)","description":"Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_notifications","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Set one notification preference (app)","description":"scope me or workspace (workspace is admins only). Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_notifications","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"type: string, required; enabled: boolean, required; scope: me | workspace"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/reports":{"get":{"summary":"Reports available to the workspace (app)","description":"With the plan gate state and the report timezone. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_reports","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/reports/timezone":{"patch":{"summary":"Set the report timezone (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_reports_timezone","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"timezone: IANA name, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/reports/{id}":{"get":{"summary":"Run a report (app)","description":"from, to (YYYY-MM-DD) and channel as query. Plan-gated like the web. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_reports__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/account":{"get":{"summary":"The signed-in person (app)","description":"Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_account","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Update name, signature or avatar (app)","description":"Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_account","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"name: string; signature: string; avatarUrl: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/kb/articles":{"get":{"summary":"List knowledge base articles (app)","description":"Needs the kb:read scope. Requires the `kb:read` scope.","operationId":"get_api_v1_app_kb_articles","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create an article (app)","description":"Admins only. Needs the kb:write scope. Requires the `kb:write` scope.","operationId":"post_api_v1_app_kb_articles","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"title: string, required; body: string, required; categoryId: id | null"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/kb/articles/{id}":{"get":{"summary":"One article (app)","description":"Needs the kb:read scope. Requires the `kb:read` scope.","operationId":"get_api_v1_app_kb_articles__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Edit an article or change its status (app)","description":"Admins only. Needs the kb:write scope. Requires the `kb:write` scope.","operationId":"patch_api_v1_app_kb_articles__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"title: string; body: string; categoryId: id | null; featuredImageUrl: string; status: draft | published"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete an article (app)","description":"Admins only. Needs the kb:write scope. Requires the `kb:write` scope.","operationId":"delete_api_v1_app_kb_articles__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/kb/categories":{"get":{"summary":"List categories (app)","description":"Needs the kb:read scope. Requires the `kb:read` scope.","operationId":"get_api_v1_app_kb_categories","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create a category (app)","description":"Admins only. Needs the kb:write scope. Requires the `kb:write` scope.","operationId":"post_api_v1_app_kb_categories","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"name: string, required; slug: string; order: number; description: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/kb/categories/{id}":{"patch":{"summary":"Rename or reorder a category (app)","description":"Admins only. Needs the kb:write scope. Requires the `kb:write` scope.","operationId":"patch_api_v1_app_kb_categories__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"name: string; description: string; order: number"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete a category (app)","description":"Admins only. Needs the kb:write scope. Requires the `kb:write` scope.","operationId":"delete_api_v1_app_kb_categories__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/team":{"get":{"summary":"Team members (app)","description":"Everyone in the workspace with their role. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_team","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Invite a teammate (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_team","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"email: string, required; name: string, required; role: admin | agent; tempPassword: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/team/{id}":{"patch":{"summary":"Change a role (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_team__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"role: admin | agent"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Remove a teammate (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_team__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/team/devices":{"get":{"summary":"Signed-in devices (app)","description":"Every device signed in across the workspace. Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_team_devices","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/team/devices/{id}":{"delete":{"summary":"Sign a device out (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_team_devices__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/api-keys":{"get":{"summary":"API keys (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_api-keys","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Mint an API key (app)","description":"The plaintext is returned once. Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_api-keys","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"label: string, required; scopes: string[]"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/api-keys/{id}":{"post":{"summary":"Rotate an API key (app)","description":"The new plaintext is returned once. Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_api-keys__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Revoke an API key (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_api-keys__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/agents/door":{"get":{"summary":"Agent door state (app)","description":"Whether outside agents may call in, and whether access requests are accepted. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_agents_door","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Open or close the agent door (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_agents_door","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"open: boolean; accessRequests: boolean"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/agents/credentials":{"get":{"summary":"Agent credentials (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_agents_credentials","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Mint an agent credential (app)","description":"The plaintext is returned once. Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_agents_credentials","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"label: string, required; walletAddress: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/agents/credentials/{id}":{"patch":{"summary":"Set a tool tier or caps (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_agents_credentials__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"tool: string; tier: read | draft | send; caps: { ratePerMin, dailyActionLimit }"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Revoke an agent credential (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_agents_credentials__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/agents/external":{"get":{"summary":"Outside-agent reply settings (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_agents_external","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Change outside-agent reply settings (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_agents_external","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"liveReplies: boolean; dailyReplyCap: number"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/install":{"get":{"summary":"Install config (app)","description":"Widget key, origins, portal theme, position, board slug, localization. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_install","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Change install settings (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_install","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"portalThemeMode: string; widgetPosition: string; boardSlug: string; widgetLanguage: string; widgetStrings: object"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/install/origins":{"post":{"summary":"Allow an origin (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_install_origins","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"origin: string, required; kind: widget | portal"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Remove an origin (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_install_origins","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"origin: string, required; kind: widget | portal"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/install/rotate":{"post":{"summary":"Rotate the widget key or identify secret (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_install_rotate","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"what: widget | identify"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/install/identify-secret":{"get":{"summary":"Read the identify secret (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"get_api_v1_app_install_identify-secret","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/branding":{"get":{"summary":"Branding (app)","description":"Name, colour, logo, white-label and AI auto-draft. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_branding","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Change branding (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_branding","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"brandColor: string; fullWhiteLabel: boolean; aiAutoDraft: boolean; name: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/branding/logo":{"post":{"summary":"Upload a logo (app)","description":"Image bytes as the body, or JSON { base64 }. Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_branding_logo","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"base64: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Remove the logo (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_branding_logo","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/domains":{"get":{"summary":"Custom domain state (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_domains","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Set or verify the custom domain (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_domains","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"domain: string; verify: boolean"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Remove the custom domain (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_domains","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/send-domain":{"get":{"summary":"Sending domain state (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_send-domain","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Set or verify the sending domain (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_send-domain","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"domain: string; localPart: string; verify: boolean"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Set the reply signature (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_send-domain","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"signature: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Remove the sending domain (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_send-domain","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/inbox-forwarding":{"get":{"summary":"Inbox forwarding state (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_inbox-forwarding","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Set the inbox handle (app)","description":"Pro and above. Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_inbox-forwarding","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"handle: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/integrations":{"get":{"summary":"Integrations overview (app)","description":"Chat connections, HubSpot and Webflow state. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_integrations","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/integrations/discord":{"get":{"summary":"Discord channels (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_integrations_discord","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Pick the Discord channel (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_integrations_discord","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"channelId: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Disconnect Discord (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_integrations_discord","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/integrations/slack":{"get":{"summary":"Slack channels (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_integrations_slack","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Pick the Slack channel (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_integrations_slack","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"channelId: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/integrations/hubspot":{"delete":{"summary":"Disconnect HubSpot (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_integrations_hubspot","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/integrations/webflow":{"get":{"summary":"Webflow state (app)","description":"Add ?sites=1 for the site list. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_integrations_webflow","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Install the widget on a Webflow site (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_integrations_webflow","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"siteId: string, required; siteName: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Remove a site or disconnect Webflow (app)","description":"With { siteId } one site; with no body the whole connection. Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_integrations_webflow","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"siteId: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/surveys":{"get":{"summary":"Surveys (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_surveys","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create a survey (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_surveys","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"name: string, required; type: string, required; question: string, required; followUp: string; urlPattern: string; questions: array"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/surveys/{id}":{"get":{"summary":"A survey (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_surveys__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Update a survey or its status (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_surveys__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"status: draft | active | archived"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete a survey (app)","description":"Add ?withResponses=1 to confirm when responses exist. Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"delete_api_v1_app_surveys__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/surveys/{id}/results":{"get":{"summary":"Survey results (app)","description":"Admins only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_surveys__id__results","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/roadmap":{"get":{"summary":"Roadmap issues (app)","description":"Every issue with votes. Needs the issues:read scope. Requires the `issues:read` scope.","operationId":"get_api_v1_app_roadmap","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/roadmap/{id}":{"patch":{"summary":"Update an issue (app)","description":"Admins only. Needs the issues:write scope. Requires the `issues:write` scope.","operationId":"patch_api_v1_app_roadmap__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"status: string; version: string; isPublic: boolean"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete an issue (app)","description":"Admins only. Needs the issues:write scope. Requires the `issues:write` scope.","operationId":"delete_api_v1_app_roadmap__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/feedback-config":{"get":{"summary":"Feedback board config (app)","description":"Public URL, embed snippet and board state. Needs the issues:read scope. Requires the `issues:read` scope.","operationId":"get_api_v1_app_feedback-config","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/changelog":{"get":{"summary":"Changelog entries (app)","description":"Drafts and published. Needs the changelog:read scope. Requires the `changelog:read` scope.","operationId":"get_api_v1_app_changelog","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create a changelog entry (app)","description":"Admins only. Needs the changelog:write scope. Requires the `changelog:write` scope.","operationId":"post_api_v1_app_changelog","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"title: string, required; body: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/changelog/{id}":{"get":{"summary":"A changelog entry (app)","description":"Admins only. Needs the changelog:read scope. Requires the `changelog:read` scope.","operationId":"get_api_v1_app_changelog__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Edit or publish an entry (app)","description":"Admins only. Needs the changelog:write scope. Requires the `changelog:write` scope.","operationId":"patch_api_v1_app_changelog__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"title: string; body: string; status: draft | published"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"delete":{"summary":"Delete a changelog entry (app)","description":"Admins only. Needs the changelog:write scope. Requires the `changelog:write` scope.","operationId":"delete_api_v1_app_changelog__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/public-answers":{"get":{"summary":"Public answers state (app)","description":"Whether answered questions are published. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_public-answers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Toggle public answers (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_public-answers","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"enabled: boolean, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/signals":{"get":{"summary":"Signals (app)","description":"Error groups, newest first, with the enabled flag. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_signals","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Turn Signals on or off (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"patch_api_v1_app_signals","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"enabled: boolean, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/signals/{id}":{"get":{"summary":"A signal with its tickets (app)","description":"Tenant-scoped; a foreign id is 404. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_signals__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Resolve, reopen, mute or ignore a signal (app)","description":"Ignore adds a pattern and is admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_signals__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"action: resolve | reopen | mute | ignore; reason: string; pattern: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/onboarding":{"post":{"summary":"Advance onboarding (app)","description":"Admins only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_onboarding","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"step: enable-ai | dismiss | clear-demo | setup-complete"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/tasks":{"get":{"summary":"Board kind (app)","description":"helpdesk or open. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_tasks","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Post a task on an open board (app)","description":"Refused on a helpdesk workspace. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_tasks","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"subject: string, required; body: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/bounties":{"get":{"summary":"Bounty credit (app)","description":"Balances by chain and the top-up menu. Add ?deposit=1 for deposit addresses. Needs the bounties:manage scope. Requires the `bounties:manage` scope.","operationId":"get_api_v1_app_bounties","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Attach, void, badge, claim a deposit or top up (app)","description":"One action per call. Needs the bounties:manage scope. Requires the `bounties:manage` scope.","operationId":"post_api_v1_app_bounties","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"action: attach | void | badges | claim-deposit | topup; ticketId: number; amountUsd: number; network: string; acceptance: string; bountyId: number; ids: number[]; txHash: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/contests":{"post":{"summary":"Open or void a ticket contest (app)","description":"Admins only. Needs the bounties:manage scope. Requires the `bounties:manage` scope.","operationId":"post_api_v1_app_contests","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"action: open | void; ticketId: number, required; bountyUsd: number; attemptFeeUsd: number; maxEntrants: number"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/auto-fund":{"get":{"summary":"Auto-fund rule (app)","description":"Admins only. Needs the bounties:manage scope. Requires the `bounties:manage` scope.","operationId":"get_api_v1_app_auto-fund","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Set or clear the auto-fund rule (app)","description":"Admins only. Needs the bounties:manage scope. Requires the `bounties:manage` scope.","operationId":"patch_api_v1_app_auto-fund","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"rule: { usd, network, acceptance?, sources? } | null"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/broadcasts":{"get":{"summary":"Newsletter broadcasts (operator)","description":"Platform operators only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_broadcasts","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Save, estimate, test or send a broadcast (operator)","description":"Platform operators only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_broadcasts","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"action: save | estimate | test | send; draft: object; segments: string[]; id: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/app/moderation":{"get":{"summary":"Reported bounties (operator)","description":"Platform operators only. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_app_moderation","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Take down or restore a bounty (operator)","description":"Platform operators only. Needs the tickets:write scope. Requires the `tickets:write` scope.","operationId":"post_api_v1_app_moderation","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"action: take-down | restore; bountyId: number, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/changes":{"get":{"summary":"What changed since a cursor","description":"Tickets touched since `since` (ISO 8601) in the chosen workspace, the count of drafts awaiting approval, and a new cursor. A cheap poll for apps. Needs the tickets:read scope. Requires the `tickets:read` scope.","operationId":"get_api_v1_changes","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/errors":{"post":{"summary":"Ingest an application error (Signals)","description":"The server-side error door: send from a backend or a Sentry-style webhook. Requires the `errors:write` scope.","operationId":"post_api_v1_errors","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"message: string, required; stack: string; level: error | warning | info"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/webhooks":{"get":{"summary":"List webhook endpoints","description":"Requires the `webhooks:manage` scope.","operationId":"get_api_v1_webhooks","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Register a webhook endpoint","description":"The URL must be public https. Private, loopback, link-local and metadata addresses are rejected at write time and again at send time. Requires the `webhooks:manage` scope.","operationId":"post_api_v1_webhooks","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"url: string, required, https; events: string[], required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/webhooks/{id}":{"delete":{"summary":"Delete a webhook endpoint","description":"Requires the `webhooks:manage` scope.","operationId":"delete_api_v1_webhooks__id_","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/bounties":{"post":{"summary":"Attach a USDC bounty to a ticket","description":"Spends the workspace credit balance. The bounty pays out on the chain its credit was funded in. Requires the `bounties:manage` scope.","operationId":"post_api_v1_bounties","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"ticket_id: number, required; amount_usd: number, required; network: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/bounties/deposits":{"get":{"summary":"List bounty-credit deposits","description":"Requires the `bounties:manage` scope.","operationId":"get_api_v1_bounties_deposits","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Claim a USDC deposit as bounty credit","description":"Requires the `bounties:manage` scope.","operationId":"post_api_v1_bounties_deposits","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"tx_hash: string, required; network: string, required"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}},"/api/v1/bounties/drafts":{"get":{"summary":"List agent drafts competing for your bounties","description":"Requires the `bounties:manage` scope.","operationId":"get_api_v1_bounties_drafts","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}},"post":{"summary":"Approve or reject a draft (approval pays the agent)","description":"Requires the `bounties:manage` scope.","operationId":"post_api_v1_bounties_drafts","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"draft_id: number, required; decision: approve | reject; reason: string"}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"},"403":{"description":"The key does not hold the required scope"},"404":{"description":"Not found in this workspace"},"429":{"description":"Rate limited"}}}}}}