---
title: "A support ticket and its messages"
method: GET
path: "/api/v1/support/tickets/{ticket_id}"
tags: ["Support"]
---

# A support ticket and its messages

`GET /api/v1/support/tickets/{ticket_id}`

## Request

- Base URL: `https://api.everyinfra.com`
- URL: `https://api.everyinfra.com/api/v1/support/tickets/{ticket_id}`
- Auth: HTTP bearer

Status, what happens next and the latest 100 messages of one ticket. A key can always read the tickets it opened itself; reading the account's other tickets (opened in the console or with other keys) needs the `support:read` account scope, which the account owner enables under API Keys in the console. Anything else is 404 `ticket_not_found`. Not charged; counted in the 60 account requests per minute. The MCP tool `everyinfra_get_ticket` (argument `ticket_id`) follows the same rules and returns the same object.

## Path parameters

- `ticket_id` integer, required

## Response `200`

The ticket

- object
  - `object` 'support_ticket'
  - `ticket_id` integer: The ticket number (#N in the console and in emails)
  - `url` string: The ticket in the console, for the account owner
  - `subject` string
  - `status` 'new' | 'in_progress' | 'waiting_customer' | 'investigating' | 'resolved' | 'closed', nullable
  - `status_text` string
  - `resolution_pending` boolean: Support asked the account owner to confirm the problem is solved
  - `category` 'general' | 'product' | 'integration' | 'billing' | 'order' | 'incident', nullable: The ticket's category as support files it
  - `created_at` string, date-time, nullable
  - `updated_at` string, date-time, nullable
  - `last_message` object, nullable
    - `from` 'customer' | 'support'
    - `at` string, date-time
  - `next_step` string: What happens next and what to do, in one sentence
  - `support_hours` string
  - `submitted` object, nullable: What this key sent when opening it
    - `via` 'api' | 'mcp'
    - `category` string, nullable
    - `request_id` string, nullable
    - `request_found` boolean, nullable: Whether that request_id is a call of this account
    - `job_id` string, nullable
    - `job_found` boolean, nullable: Whether that job_id is a job of this account
    - `contact_email` string, nullable
  - `messages` object[]: Up to the latest 100 messages, oldest first
    - `id` integer
    - `from` 'customer' | 'support'
    - `text` string
    - `created_at` string, date-time
  - `messages_truncated` boolean

## Other responses

- `401`: Missing, invalid, disabled or expired API key (`missing_key`, `invalid_key`, `expired_key`, `key_in_url_not_accepted`)
- `403`: Account disabled, source IP outside the key's allowlist, or an account served by a reseller (`support_not_available`)
- `404`: `ticket_not_found` — no such ticket for this key
- `429`: `rate_limited` — 60 account requests per minute (all keys of the account combined), or support is receiving too many requests right now; honour Retry-After
- `503`: `support_unavailable` (nothing was opened) or `support_outcome_unknown` (retry the same request: it returns the ticket and never opens a second one)

---

[API](https://skmtc.dev/everyinfra/apis/everyinfra.md) - [All operations](https://skmtc.dev/everyinfra/apis/everyinfra/llms.txt) - [OpenAPI document](https://skmtc.dev/everyinfra/apis/everyinfra/revisions/a656c5a29c95?raw)
