HydraCore
API by router

Smoke

Smoke Poll

Resolve idempotency_key → instance_id once the worker inserts the row. Same shape as /api/v1/instances/by-key/{idem} but scoped to the smoke customer.

GET
/internal/v1/smoke/instances/by-key/{idempotency_key}

Path Parameters

idempotency_keyIdempotency Key

Header Parameters

authorization?Authorization

Response Body

curl -X GET "https://loading/internal/v1/smoke/instances/by-key/string" \  -H "authorization: string"
{
  "found": true,
  "instance_id": "string",
  "status": "string"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}

Smoke Status

GET
/internal/v1/smoke/instances/{instance_id}

Path Parameters

instance_idInstance Id
Formatuuid

Header Parameters

authorization?Authorization

Response Body

curl -X GET "https://loading/internal/v1/smoke/instances/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "authorization: string"
{
  "hostname": "string",
  "id": "string",
  "status": "string"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}

Smoke Delete

Soft-delete + provider cleanup for a smoke instance. Mirrors the cleanup recipe in /api/v1/instances DELETE — same child-row deletes, same hostname suffix, same Hetzner cleanup task.

DELETE
/internal/v1/smoke/instances/{instance_id}

Path Parameters

instance_idInstance Id
Formatuuid

Header Parameters

authorization?Authorization

Response Body

curl -X DELETE "https://loading/internal/v1/smoke/instances/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "authorization: string"
{
  "instance_id": "string",
  "status": "string"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}

Smoke Chat

One chat turn, SSE streamed from the agent VPS.

Strips the customer-facing chat endpoint's Redis stream lock, rate limiter, and renewal loop — single-consumer CI does not need those, and the smoke fixture is the only customer that can drive this endpoint anyway.

POST
/internal/v1/smoke/instances/{instance_id}/chat

Path Parameters

instance_idInstance Id
Formatuuid

Header Parameters

authorization?Authorization
messageMessage
Lengthlength <= 4000

Response Body

curl -X POST "https://loading/internal/v1/smoke/instances/497f6eca-6276-4993-bfeb-53cbbbba6f08/chat" \  -H "authorization: string" \  -H "Content-Type: application/json" \  -d '{    "message": "string"  }'
null
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}

Smoke Llm Events

Count llm_usage_events rows for a smoke instance within a recent window. Reads the authoritative table directly so a fresh chat turn's row is visible immediately (the usage_daily rollup customer-facing endpoint hits is too stale for smoke).

GET
/internal/v1/smoke/instances/{instance_id}/llm-events

Path Parameters

instance_idInstance Id
Formatuuid

Query Parameters

window_seconds?Window Seconds
Default900

Header Parameters

authorization?Authorization

Response Body

curl -X GET "https://loading/internal/v1/smoke/instances/497f6eca-6276-4993-bfeb-53cbbbba6f08/llm-events?window_seconds=900" \  -H "authorization: string"
{
  "count": 0,
  "instance_id": "string",
  "providers": [
    "string"
  ],
  "window_seconds": 0
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}

Smoke Provision

Provision a smoke instance via the same Celery task the customer endpoint uses. Customer / tenant / subscription IDs come from settings — the request body cannot override them, so a leaked OPS_BEARER_TOKEN can't be used to create instances under any other customer.

POST
/internal/v1/smoke/provision

Header Parameters

authorization?Authorization
agent_name?Agent Name
idempotency_keyIdempotency Key
Lengthlength <= 255
manifest_idManifest Id
Lengthlength <= 100
region_idRegion Id
Lengthlength <= 80
tier_idTier Id
Lengthlength <= 80

Response Body

curl -X POST "https://loading/internal/v1/smoke/provision" \  -H "authorization: string" \  -H "Content-Type: application/json" \  -d '{    "idempotency_key": "string",    "manifest_id": "string",    "region_id": "string",    "tier_id": "string"  }'
{
  "idempotency_key": "string",
  "instance_id": "string",
  "task_id": "string"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}