Every request has an ID you can quote

· Hyperouter · 3 min read

When a request does something you did not expect, the fastest way to talk about it is its id. Every request that Hyperouter accepts has one, it comes back in the answer, and it is the key to the record of that request.

Where the id is

The id is a UUID, and the docs call it the request id. It sits in the body of the answer, under a different name per endpoint:

RequestWhere the id is
POST /v1/chat/completionsid of the chat completion.
POST /v1/images/generations, POST /v1/images/editsid of the image answer. With Prefer: respond-async, id of the 202.
POST /v1/videos and the other video callsid of the Video object.
An error about a job that went on, such as the 503 timeout of an imageerror.generation_id.
A repeated chat completion under an Idempotency-Keyerror.generation_id of the 409 idempotency_key_replayed: the first request's id.

The documentation names no request-id response header, so read the id from the body. Log the id next to the call in your own code:

res = client.chat.completions.create(
    model="x-ai/grok-4.7",
    messages=[{"role": "user", "content": "Hello"}],
)
log.info("hyperouter request %s cost=%s", res.id, res.usage.cost)

The usage.cost field is a Hyperouter addition to the usage object, so a typed SDK may not declare it; the value is in the JSON.

Look it up

GET /v1/generations/{id} returns the record of one of your requests, of any kind:

curl https://api.hyperouter.app/v1/generations/0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21 \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY"

The record has the kind (chat, image or video), the model, the status (queued, submitting, running, done or failed), created_at and finished_at, the usage and its cost, ttft_ms and latency_ms, and an error with a code and a message when the request failed. For a finished chat request, provider_name says which provider served it. For images and videos, outputs holds signed links, valid for 24 hours, for 30 days after the request.

usage_estimated is true when the provider sent no token counts and Hyperouter counted them.

Prompt and completion text are never in the record. Hyperouter does not return them through any API or dashboard page.

An id that is not a UUID, does not exist, or belongs to another account answers 404 not_found. You can only read your own requests.

Quote it in a ticket

Open a ticket in the dashboard for billing, top-ups and API questions, and staff reply in the same thread. Please include the id from the response when you report a specific request.

A useful report has three things: the id, what you expected, and what you got. Paste the status and the error from GET /v1/generations/{id} if you have them. The id lets staff find the request itself instead of asking you to describe it.

If an error answer carries no id, quote its status, its code and the time of the request instead.

Reconcile spend

The same id answers the question of what a request cost. usage.cost is the charge in USD, as a JSON number. If you store the id with each job in your own database, you can match your records to Hyperouter's one to one. Chat, image and video all work the same way.

What next