zoxaAI
Homepage
API ReferenceAgents

Get an agent

GET /api/v1/agents/{agent_uuid} — fetch a single saved agent.

GET /api/v1/agents/{agent_uuid}

Fetch one saved agent by its uuid.

One identifier: the UUID

Agents are addressed by uuid everywhere — in this path, in every other CRUD path (PATCH, DELETE, duplicate, test-call), and as agentId in POST /call. There is no integer id in the API surface.

Authentication

X-API-Key: zsk_...

Path parameters

ParamTypeDescription
agent_uuidstring (UUID)The agent's uuid.

Response

Returns an AgentEnvelope — server-managed metadata wrapping the full validated config:

{
  "uuid": "550e8400-e29b-41d4-a716-446655440000",
  "status": "active",
  "createdAt": "2026-06-01T10:00:00Z",
  "updatedAt": "2026-08-06T09:30:00Z",
  "config": {
    "name": "Sales bot",
    "description": "Qualifies B2B SaaS leads.",
    "languages": ["en"],
    "systemPrompt": "You qualify inbound leads...",
    "timezone": "Asia/Kolkata",
    "greeting": {
      "firstMessages": ["Hi! Are you looking to evaluate our product?"],
      "interruptible": false,
      "speakFirst": "agent",
      "agentDelayS": 0.0,
      "userTimeoutS": 3.0
    },
    "llm": { "provider": "openai", "model": "gpt-5.4-mini", "temperature": 1.0, "maxTokens": 251, "prewarm": true },
    "stt": { "provider": "soniox", "model": null, "interruptionMinWords": 0, "...": "per-provider tuning blocks" },
    "tts": { "provider": "elevenlabs", "model": null, "voice": null, "...": "per-provider tuning blocks" },
    "noiseGate": { "enabled": true, "model": "voice-focus", "enhancementLevel": 0.8 },
    "backgroundSound": { "enabled": false, "sound": "library", "volume": 0.08 },
    "taskSound": { "enabled": false, "sound": "typing", "volume": 0.35, "startAfterMs": 800 },
    "acknowledgeSounds": { "enabled": false, "words": "hmm, hm hmm, okay", "wordOrder": "round-robin", "volume": 1.0, "thresholdS": 3.0, "probability": 0.8 },
    "fillerWords": { "enabled": false, "words": "so, yeah, okay", "wordOrder": "round-robin", "thresholdMs": 300, "probability": 0.75 },
    "maxCallDurationS": 610,
    "userIdleTimeoutS": 7,
    "userIdleMessages": ["Are you still there?"],
    "userIdleMaxRetries": 2,
    "tools": [
      "abc12345-6789-0123-4567-89abcdef0123",
      {
        "type": "endCall",
        "name": "end_call",
        "description": "End the call when the user says goodbye, asks to stop, or the conversation is clearly finished.",
        "config": { "messageType": "custom", "customMessages": ["Goodbye!"], "audioRecordingId": null }
      }
    ],
    "voicemailDetection": true,
    "webhook": null,
    "enableSummarization": false,
    "recordInProviderConsole": null,
    "contextVariables": {}
  }
}
FieldNotes
uuidThe agent's stable identifier — used in every CRUD path and as agentId in POST /call.
status"active" or "archived". Archived agents 404 on this endpoint and are hidden from default lists.
config.toolsMixed array: saved-tool UUID strings and inline tool objects. Every stored config contains at least the endCall tool (auto-seeded).
config.webhooknull or { "url": "…", "headers": { … } }. The write-only webhookSecret is never returned.

Full nested shape: Agent Config schema.

Examples

curl https://dashboard.zoxa.ai/api/v1/agents/550e8400-e29b-41d4-a716-446655440000 \
  -H "X-API-Key: zsk_..."
const res = await fetch(`https://dashboard.zoxa.ai/api/v1/agents/${agentUuid}`, {
  headers: { "X-API-Key": "zsk_..." },
});
const agent = await res.json();
import httpx
agent = httpx.get(
    f"https://dashboard.zoxa.ai/api/v1/agents/{agent_uuid}",
    headers={"X-API-Key": "zsk_..."},
).json()

Errors

StatusdetailWhen
400"No organization selected"Auth missing org.
404"Agent not found"UUID doesn't exist in your org, or the agent is archived.

On this page