Tickets de suporte via API
POST /v1/tickets — abra um ticket de suporte, leia a conversa, envie mensagens adicionais e feche-o com uma chave de API: campos, anexos, status, limites e compatibilidade com /v1/technical-feedback.
A Tickets API é o único canal de suporte: um ticket aberto pela API aparece no dashboard e vice-versa. Autentique-se com uma chave de API (Authorization: Bearer ou X-API-Key) ou com uma sessão do dashboard. Você só verá seus próprios tickets.
Abrir um chamado
| Parâmetro | Tipo | Descrição |
|---|---|---|
subject | string | Obrigatório: de 3 a 200 caracteres. |
message | string | Obrigatório: de 10 a 8.000 caracteres. |
category | string | api_error, performance, incorrect_response, integration, feature_request, other, billing, account ou general (padrão). |
requestIds | string[] | Opcional, até 10 IDs de solicitação da sua conta (o header de resposta x-request-id). |
clientIncidentId | string | ID de série estável opcional do seu lado: um ticket aberto com o mesmo ID é reutilizado. |
files | file[] | somente multipart/form-data: até 5 imagens PNG, JPEG, GIF ou WebP, 10 MB cada, 10 por ticket. |
curl https://getvibeapi.com/v1/tickets \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "Stream stops after 30 seconds",
"message": "stream=true on /v1/chat/completions stops after about 30 seconds; retrying does not help.",
"category": "api_error",
"requestIds": ["req_123"]
}'Com uma captura de tela — multipart:
curl https://getvibeapi.com/v1/tickets \
-H "Authorization: Bearer $API_KEY" \
-F subject="Wrong response" \
-F message="The model returns an empty answer, screenshot attached." \
-F category=incorrect_response \
-F [email protected]Resposta
{
"deduplicated": false,
"ticket": {
"id": "cmg1abc234",
"object": "ticket",
"subject": "Stream stops after 30 seconds",
"category": "api_error",
"source": "api",
"status": "open",
"requestIds": ["req_123"],
"clientIncidentId": null,
"occurrences": 1,
"createdAt": "2026-09-27T09:14:00.000Z",
"updatedAt": "2026-09-27T09:14:00.000Z",
"repliedAt": null
}
}Um novo ticket retorna 201. Se o mesmo ticket aberto já existir (mesma categoria, assunto, mensagem e requestIds, ou o mesmo clientIncidentId), esse ticket será retornado com deduplicated: true, status 200 e um occurrences maior.
Listar tickets
Mais recentes primeiro. Resposta: { "object": "list", "data": [...], "hasMore": true, "nextCursor": "..." }. Próxima página: ?after=<nextCursor>. limit é de 1 a 100.
Thread e status
curl https://getvibeapi.com/v1/tickets/cmg1abc234 \
-H "Authorization: Bearer $API_KEY"ticket.messages mantém suas mensagens (author: "client") e as respostas do suporte (author: "staff") em ordem cronológica. Baixe os anexos com GET /v1/tickets/{id}/attachments/{attachmentId}. Um ID estrangeiro ou desconhecido retorna 404.
Continuar e fechar
curl https://getvibeapi.com/v1/tickets/cmg1abc234/messages \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "It happened again today at 10:05 UTC, request id req_456."}'Uma mensagem (de até 8.000 caracteres, multipart com files permitido) reabre um ticket respondido. Um ticket fechado não pode receber mensagens — ele retorna 409; abra um novo. O fechamento é idempotente.
Status
| Parâmetro | Tipo | Descrição |
|---|---|---|
open | status | Aguardando suporte. |
replied | status | O suporte respondeu; sua próxima mensagem o reabrirá. |
closed | status | Fechado por você ou pelo suporte. |
Limites e erros
Por conta: 10 tickets novos por hora e 60 mensagens por hora; além desse limite 429 com um header Retry-After. Erros: { "error": "…", "code": "invalid_fields" } — códigos invalid_fields, invalid_request_ids, too_many_attachments, file_too_large (413), unsupported_attachment (415), not_found (404), ticket_closed (409), rate_limited (429).
Segurança
Compatibility: /v1/technical-feedback
POST /v1/technical-feedback e GET /v1/technical-feedback/{id} continuam funcionando com os mesmos campos (category, summary, details, requestIds, clientIncidentId) e a resposta { "deduplicated", "incident" }. Esse relatório é armazenado como um ticket (source: "technical-feedback") e aparece em GET /v1/tickets. As solicitações para alterar saldo, acesso ou implantações continuam sendo rejeitadas lá com 422. Novas integrações devem usar /v1/tickets.