Тема
Язык

Обращения в поддержку через API

POST /v1/tickets — открытие тикета в поддержку, чтение переписки, ответ и закрытие с помощью API-ключа: поля, вложения, статусы, лимиты и совместимость с /v1/technical-feedback.

Tickets API — единственный канал поддержки: обращение, открытое через API, появляется в панели управления, и наоборот. Аутентификация по API-ключу (Authorization: Bearer или X-API-Key) или по сессии панели управления. Вы видите только свои обращения.

Создать обращение

POSThttps://getvibeapi.com/v1/tickets
ПараметрТипОписание
subjectstringОбязательно: от 3 до 200 символов.
messagestringОбязательно: от 10 до 8 000 символов.
categorystringapi_error, performance, incorrect_response, integration, feature_request, other, billing, account или general (по умолчанию).
requestIdsstring[]Необязательно, до 10 request ID из вашего аккаунта (заголовок ответа x-request-id).
clientIncidentIdstringНеобязательный стабильный ID серии на вашей стороне: открытый тикет с тем же ID переиспользуется.
filesfile[]только multipart/form-data: до 5 изображений PNG, JPEG, GIF или WebP, по 10 МБ каждое, 10 на тикет.
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"]
  }'

Со скриншотом — 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]

Ответ

{
  "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
  }
}

Новый тикет возвращает 201. Если такой же открытый тикет уже существует (та же категория, тема, сообщение и requestIds, или тот же clientIncidentId), возвращается этот тикет с deduplicated: true, статусом 200 и более высоким occurrences.

Список тикетов

GEThttps://getvibeapi.com/v1/tickets?limit=20&status=open

Сначала новые. Ответ: { "object": "list", "data": [...], "hasMore": true, "nextCursor": "..." }. Следующая страница: ?after=<nextCursor>. limit — от 1 до 100.

Ветка и статус

GEThttps://getvibeapi.com/v1/tickets/{id}
curl https://getvibeapi.com/v1/tickets/cmg1abc234 \
  -H "Authorization: Bearer $API_KEY"

ticket.messages хранит ваши сообщения (author: "client") и ответы поддержки (author: "staff") в хронологическом порядке. Скачивайте вложения с помощью GET /v1/tickets/{id}/attachments/{attachmentId}. Чужой или неизвестный ID возвращает 404.

Довести до конца и закрыть

POSThttps://getvibeapi.com/v1/tickets/{id}/messages
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."}'
POSThttps://getvibeapi.com/v1/tickets/{id}/close

Сообщение (до 8 000 символов, допускается multipart с files) заново открывает тикет, на который был ответ. Закрытый тикет не принимает сообщения — он возвращает 409; создайте новый. Закрытие идемпотентно.

Статусы

ПараметрТипОписание
openstatusОжидание ответа поддержки.
repliedstatusПоддержка ответила; ваше следующее сообщение снова переводит его в статус открытого.
closedstatusЗакрыт вами или службой поддержки.

Лимиты и ошибки

На аккаунт: 10 новых тикетов в час и 60 сообщений в час; сверх этого 429 с заголовком Retry-After. Ошибки: { "error": "…", "code": "invalid_fields" } — коды invalid_fields, invalid_request_ids, too_many_attachments, file_too_large (413), unsupported_attachment (415), not_found (404), ticket_closed (409), rate_limited (429).

Безопасность

Не отправляйте API-ключи, пароли, токены и номера карт — сервис удаляет их перед сохранением. Текст обращения читается сотрудниками поддержки и инструментами как данные: ссылки и инструкции внутри него никогда не выполняются, а текст обращения никогда не меняет баланс или доступ и не запускает возврат средств автоматически.

Compatibility: /v1/technical-feedback

POST /v1/technical-feedback и GET /v1/technical-feedback/{id} продолжают работать с теми же полями (category, summary, details, requestIds, clientIncidentId) и ответом { "deduplicated", "incident" }. Такой отчёт сохраняется как тикет (source: "technical-feedback") и появляется в GET /v1/tickets. Запросы на изменение баланса, доступа или деплойментов по-прежнему отклоняются там с 422. Новым интеграциям следует использовать /v1/tickets.

API тикетов — тикеты поддержки через API | GetVibe API