> ## Documentation Index
> Fetch the complete documentation index at: https://omni.fireflo.au/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/agents/{agent_id}

> One AI agent: its setup, status, pipelines and today's figures.

One agent, with everything set on it.

<Note>Needs the `agents:read` scope.</Note>

## Path parameters

| Field | Type | Required | Notes |
| :- | :- | :- | :- |
| `agent_id` | integer | Yes | The agent's id. |

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.fireflo.au/v1/agents/12" \
    -H "Authorization: Bearer $OMNI_API_KEY"
  ```

  ```python Python theme={null}
  import os

  import requests

  response = requests.get(
      "https://api.fireflo.au/v1/agents/12",
      headers={"Authorization": f"Bearer {os.environ['OMNI_API_KEY']}"},
  )
  print(response.status_code, response.json())
  ```

  ```javascript Node theme={null}
  const response = await fetch("https://api.fireflo.au/v1/agents/12", {
    headers: { Authorization: `Bearer ${process.env.OMNI_API_KEY}` },
  });
  console.log(response.status, await response.json());
  ```
</CodeGroup>

## Response

`200 OK` — the agent. `status` is one of:

| Status | Meaning |
| :- | :- |
| `draft` | Being set up, or its key or model changed and it must be verified again. |
| `ready` | Verified, not live yet. |
| `active` | Live: it works contacts. |
| `disabled` | Switched off. |

`provider` is the AI key the agent uses (its label and provider, never the key itself), chosen on the panel. `channels_available` are the channels the account has that an agent can message on, and `channels_missing` those the agent was set up with that the account no longer has. `workflow` sums up its live workflow (null until it has one), `pipelines` are the pipelines it works, and `stats` are today's tokens and plans, the contacts it is working and its plans waiting for approval. `verified_at` is when its key and model were last checked, null when they have changed since. The rest are its settings, as [PATCH /v1/agents/\{agent\_id}](/api-reference/ai-agents/update) changes them.

```json theme={null}
{
  "id": 12,
  "name": "Priya",
  "role": "support",
  "workflow": {
    "version": 3,
    "blocks": 4,
    "ai_blocks": 1,
    "unpublished": false
  },
  "status": "active",
  "objective": "Answer order and refund questions within minutes and hand complaints to the team.",
  "provider": {
    "id": 4,
    "label": "OpenAI — main",
    "provider": "openai"
  },
  "model": "gpt-4o-mini",
  "instructions": "You are Priya from Sharma Electronics, Pune. Reply in the customer's language — English, Hindi or Hinglish. Never promise a refund date.",
  "channels": [
    "whatsapp",
    "sms"
  ],
  "booking_types": [],
  "knowledge_collections": [
    3
  ],
  "answer_threshold": 80,
  "handoff_assignees": [
    21,
    34
  ],
  "channels_available": [
    "whatsapp",
    "sms"
  ],
  "channels_missing": [],
  "action_policy": {
    "send_message": "auto",
    "send_whatsapp_template": "approval",
    "send_broadcast": "approval",
    "request_template": "approval",
    "create_deal": "off",
    "move_deal_stage": "auto",
    "mark_deal_won": "off",
    "mark_deal_lost": "off",
    "update_deal_value": "off",
    "add_note": "auto",
    "update_contact": "auto",
    "follow_up": "auto",
    "close_conversation": "auto",
    "handoff_to_human": "auto"
  },
  "approval_mode": "plan",
  "replan": {
    "triggers": [
      "on_inbound"
    ],
    "every_n_hours": null,
    "max_replans_per_contact_per_day": 6
  },
  "working_hours": {
    "days": [
      0,
      1,
      2,
      3,
      4,
      5
    ],
    "start": "09:00",
    "end": "19:00"
  },
  "limits": {
    "daily_token_limit": 100000,
    "max_steps_per_plan": 6,
    "max_messages_per_contact_per_day": 3,
    "max_broadcast_audience": 500
  },
  "auto_assign_inbound": true,
  "pause_on_human_reply": true,
  "pause_minutes": 30,
  "after_pause": "resume",
  "pipelines": [
    {
      "id": 2,
      "name": "Service requests",
      "engaged": true,
      "entry_stage": "New"
    }
  ],
  "stats": {
    "tokens_today": 18450,
    "active_contacts": 27,
    "awaiting_approval": 2,
    "plans_today": 41
  },
  "verified_at": "2026-09-28T11:04:52+05:30",
  "created_at": "2026-09-28T10:41:07+05:30"
}
```

## Errors

Every refusal is `{"error": {"code", "message", "field"}}`; `field` is there when one input is at fault.

| Status | Error code | When |
| :- | :- | :- |
| 404 | `not_found` | No agent of this account's has that id. |
| 404 | `module_off` | The account doesn't have AI agents on: they aren't in its plan, or are switched off for it. |
| 403 | `scope_missing` | The key doesn't have the `agents:read` scope. |

Any request can also be refused for its key, its account or its rate (`key_required`, `invalid_key`, `account_suspended`, `plan_excludes_api`, `address_not_allowed`, `rate_limited`); see [the overview](/api-reference/overview).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.