Reference

Tickets, intake & files

Support tickets, structured intake forms, and file library endpoints.

ClaudeChatGPTCursor

Tickets

Method Path Purpose
GET /v1/tickets List tickets
POST /v1/tickets Create ticket
GET /v1/tickets/:id Ticket detail
POST /v1/tickets/:id/messages Reply

Creating or updating tickets can emit ticket.created / ticket.updated for Slack and outbound webhooks.

Structured intake

Agencies define request types with required fields under Settings → Intake. Portal clients pick a form when opening a request; the ticket stores intakeFormId and intakeAnswers, and the first message summarizes the answers.

Method Path Purpose
GET /v1/intake-forms List forms
POST /v1/intake-forms Create form
PUT /v1/intake-forms/:id Update form
DELETE /v1/intake-forms/:id Delete form

Example create body:

{
  "name": "Design change",
  "active": true,
  "fields": [
    { "key": "page", "label": "Page / screen", "type": "text", "required": true },
    { "key": "priority", "label": "Priority", "type": "select", "required": true, "options": ["Normal", "Urgent"] }
  ],
  "defaults": { "priority": "normal" }
}

When creating a ticket from a form, pass the selected form id and answers in the ticket payload (portal UI does this automatically).

Files

Agency uploads may omit projectId and link later. Nested folders are supported via parentId. Design uploads also appear in the Files library.

Method Path Purpose
GET /v1/files List files
POST /v1/files/presign Presign upload
POST /v1/files/confirm Confirm upload
GET /v1/folders List folders
POST /v1/folders Create folder

See openapi/v1.yaml in the repository for the complete surface.