Skip to content

Support Tickets ​

Raise and follow up on support requests from your own tooling, instead of opening the Support Center in the Studio. Useful when your monitoring, deployment pipeline or internal helpdesk should be able to file a request directly.

OperationEndpointScope
Raise a ticketPOST /api/v1/support/ticketssupport:write
List your ticketsGET /api/v1/support/ticketssupport:read
Get one ticketGET /api/v1/support/tickets/{id}support:read
ReplyPOST /api/v1/support/tickets/{id}/replysupport:write

Raising a ticket ​

bash
curl -X POST "https://<your-workspace>-api.perfox.ai/api/v1/support/tickets" \
  -H "Authorization: Bearer sk_…" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Voice agent drops tool calls on long calls",
    "description": "Reproduces after ~6 minutes. Conversation ids attached in the thread.",
    "category": "platform",
    "severity": "high"
  }'
FieldValues
subject3–200 characters
descriptionThe problem statement, up to 8,000 characters; becomes the first message in the thread
categoryforward_deployment for help with your implementation, platform for a suspected product defect
severitylow, medium (default), high, urgent
requester_emailOptional — see below

The response is 201 with the ticket:

FieldMeaning
idTicket id, for the other calls
ticket_numberThe number shown as SUP-<n> in the Support Center
subject, description, category, severityAs raised
statusopen, in_progress, awaiting_customer, resolved or closed
created_viastudio, api or chatbot
created_byname and email of the requester
assignedWhether someone on the support team has picked it up
messagesThe thread: each message has author_kind (requester or responder), author_name, body and created_at
created_at, updated_at, last_activity_atTimestamps

Who the ticket is from ​

An API key identifies a system, not a person, so tickets raised this way are attributed to API integration and marked created_via: "api".

To attribute one to a colleague instead, pass requester_email. It must match someone in your own workspace; anything else is rejected with 400. That check is deliberate — the requester is who the support team replies to, so it is never recorded unverified.

Replying ​

bash
curl -X POST ".../api/v1/support/tickets/$ID/reply" \
  -H "Authorization: Bearer sk_…" -H "Content-Type: application/json" \
  -d '{"body": "Still reproducing on the latest build — new conversation id inside."}'

body is 1–8,000 characters; requester_email works here the same way as on creation. Replying to a ticket that was resolved, or that was waiting on you, re-opens it — the same as in the Studio. The response is { "id", "reopened", "message" }, so you can tell whether that happened.

Listing returns every ticket your workspace has raised, most recent activity first, however it was created — Studio, API, or the in-product support assistant. List rows are a summary (with a message_count instead of the thread); get one ticket for its full thread. An id that is not one of your tickets returns 404 not_found.

Attachments

Not yet supported on this endpoint. Include a link in the description or a reply.