---
title: "Get agent overview"
method: GET
path: "/api/agents/{sid}/overview"
tags: ["agents"]
---

# Get agent overview

`GET /api/agents/{sid}/overview`

## Request

- Base URL: `https://beta.getsales.io/unibox/v1`
- URL: `https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview`
- Auth: HTTP bearer and API key in header `Team-SID`

One AI SDR's overview (by sid) for a period (all, 30d, 7d): the replies it read and sent, calls booked, median reply time, hand-offs, unsure replies, credits spent, the funnel from reply to goal, the outcome (what the lead did after its reply, against the corpus baseline), the same scalars for the period before, and, now, its conversations by state and the workflows its threads name. For how the agent is doing, never for one thread (get_conversation) or one run (search_agent_runs).

Contract:
- MCP tool `get_agent_overview`, registry package `mcp.unibox/agents`, mount `unibox.agent`.
- Operation `action`, response envelope `action`.
- Flags: read only.

## Path parameters

- `sid` string, required: The agent whose overview is read (ub_ag_…).

## Query parameters

- `period` 'all' | '30d' | '7d': What to count over: all (since ever), 30d (the default) or 7d. The Now block is the same whatever the period.

## Response `200`

`action` success envelope.

- GetAgentOverviewResponse
  - `success` true, required
  - `operation` 'action', required
  - `action` string, required: kebab-case verb; matches the route segment.
  - `item` unknown, required
  - `result` object, required
    - `period` object, required
      - `key` 'all' | '30d' | '7d', required
      - `days` integer, nullable, required: 30, 7, or null for all time.
      - `since` string, nullable, required: ISO 8601 UTC, the period's first instant; null for all time.
      - `until` string, required: ISO 8601 UTC, now.
    - `replies` object, required
      - `received` integer, required: The replies the agent read in the period: the classify runs that labelled a reply, one per reply (a burst merged into one).
      - `sent` integer, required: The agent's messages that went out in the period, a reply split into parts counted once.
      - `sent_as_written` integer, required: Of them, the ones no person changed before approving and nobody asked for again: the ring.
      - `as_written_share` number, nullable, required: sent_as_written over sent, 0..1; null when nothing was sent.
      - `answered_by_person` integer, required: The answers a person typed in the period: by hand, no workflow step behind them, with the lead's message before them in the thread.
      - `a_day` object, required
        - `days` integer, required: How many days the series covers: the period's, or 90 for all time.
        - `since` string, required: The first day, YYYY-MM-DD in the workspace's zone.
        - `counts` integer[], required: The replies read per day, oldest first, one number per day.
    - `calls_booked` integer, required: The leads who said yes in the period on a goal of the kind call (the dialog_objective_reached pills with kind call).
    - `said_yes` integer, required: The leads who said yes to the offer in the period, on any goal.
    - `median_reply_seconds` integer, nullable, required: The median from the lead's message to the agent's answer that went out within two days of it; null when none.
    - `handed_to_you` integer, required: The hand-offs in the period: a trigger that fired (once per hand-off), the credits cap.
    - `unsure` integer, required: The replies the classifier read under the confidence floor (0.5) in the period.
    - `credits` object, required
      - `spent` number, required: What the turns cost in the period, in credits (25 a dollar, rounded up to the hundredth: two decimals since 2026-10-21).
      - `per_thread_median` number, nullable, required: What a thread cost at the median, to the hundredth; null when nothing was spent.
      - `per_thread_max` number, nullable, required: What the most expensive thread cost.
    - `funnel` object, required
      - `replied` integer, required: The threads that replied in the period.
      - `engaged` integer, required: The threads the Playbook took in the period (the cohort the rows below count).
      - `discovered` integer, required: Of them, the ones that reached Discover or past it.
      - `heard_the_bridge` integer, required: Of them, the ones that reached Bridge or past it (2026-10-19).
      - `got_the_offer` integer, required: Of them, the ones the offer went to, or that reached the Offer or past it.
      - `said_yes` integer, required: Of them, the ones who said yes to the offer.
      - `booked` integer, required: Of them, the ones whose goal landed after the yes: the call booked, the sign-up or the registration (never a custom goal, whose yes is its end).
    - `golden_set` object, required: The golden set in the period (2026-10-20): replies matched, the Words caught, the edits kept and waiting, the rows.
      - `replies` integer, required: The agent's replies that went out in the period.
      - `matched` integer, required: Of them, the ones written with the team's own replies in front of the turn (search_agent_examples).
      - `words_caught` integer, required: How often the send door refused a word the team never writes; each time the turn wrote the sentence again.
      - `words_caught_by_word` union, required: The same, per word: the never as the team wrote it, or the long dash, with its count.
        - object
        - unknown[]
          - unknown
      - `edits_kept` integer, required: The drafts a person edited that joined the set as golden in the period (Keep).
      - `edits_waiting` integer, required: Now: the edits waiting for a Keep (From your edits).
      - `rows` integer, required: Now: the rows in the set.
    - `knowledge` object, required: Knowledge in the period (2026-10-20, block 7; answers and documents since block AC3, 2026-10-26): the replies that read it and the most read document; the questions it did not answer are the hints (search_agent_hints) since 2026-10-26.
      - `replies` integer, required: The agent's replies that went out in the period.
      - `read` integer, required: Of them, the ones whose turn carried a Knowledge answer.
      - `most_read` object, nullable, required: The document whose answers were read in the most replies; null when none was read (an answer added by hand counts for no document).
        - `sid` string, required: The document (ub_as_…).
        - `kind` 'file' | 'website', required
        - `title` string, required
        - `reads` integer, required: The replies that read one of its answers.
      - `documents` integer, required: Now: the documents, files and websites.
      - `answers` integer, required: Now: the answers ready to be read, what a turn picks from.
      - `answers_from_documents` integer, required: Of them, the ones read from a document.
      - `answers_manual` integer, required: Of them, the ones added by hand.
      - `reading` integer, required: Now: the documents being read.
    - `hints` object, required: The open hints now, whatever the period (2026-10-26, the Analyzer's Hints tab): the Overview's Needs you row. The rows are search_agent_hints on /mcp/unibox/agent-memory.
      - `open` integer, required: Now: the open hints, what needs you.
      - `missing_answer` integer, required: Of them, the questions leads ask that nothing in Knowledge answers.
      - `no_example` integer, required: Of them, the situations with no close dialogue in the Golden set.
    - `outcome` object, required: The measurement block (2026-10-25): what the lead did after our reply in the period, the two counters, and the corpus baseline to draw them against. The one way to judge the agent: never by continuation, never by our own links.
      - `replied_threads` integer, required: The threads a lead wrote on in the period (a landed inbound of theirs on a one-to-one thread, recalled ones left out): the denominator of the three rates.
      - `evidence` object, required: The lead-side evidence of the period by class (research conversations.md, lead_evidence): a thread counts once per class, at the first time the class fired.
        - `their_link` integer, required: The threads where the lead first sent a calendar link in the period, after a reply of ours (the thread's lead_evidence.their_link_at).
        - `confirmed_time` integer, required: The threads where the lead first confirmed a day or a time we proposed in the period.
        - `handoff_after_reply` integer, required: The threads where the lead first handed over a phone number, an email address or a colleague after our reply in the period.
        - `strict` integer, required: The threads with their link or a confirmed time first fired in the period: the study's strict evidence, against baseline.strict.
        - `any` integer, required: The threads with any of the three first fired in the period, against the positive band baseline.positive_low to positive_high.
      - `replies` object, required: The two counters over the lead's replies of the period: whether the team answers at all, and how fast.
        - `total` integer, required: The lead's replies in the period: every landed inbound of theirs on a one-to-one thread.
        - `judged` integer, required: Of them, the ones older than 24 hours: the only ones "we stopped" can be said of.
        - `we_stopped` integer, required: Of the judged, the ones no message of ours (the agent's, a person's or a workflow's) followed within 24 hours: "replied, we stopped", against baseline.we_stopped.
        - `answered` integer, required: The replies a message of ours followed, whenever.
        - `within_hour` integer, required: Of the answered, the ones answered within 60 minutes, against baseline.within_hour.
      - `baseline` object, required: The corpus study's human baseline, in percent, as constants: what people did on the legacy platform across 22 million threads. Draw the team's rates against these.
        - `positive_low` number, required: 8.6: the low end of the positive outcomes, percent of replied threads.
        - `positive_high` number, required: 11.4: the high end.
        - `strict` number, required: 0.6: strict lead-side evidence, percent of replied threads.
        - `we_stopped` number, required: 39: the replies people never answered, percent.
        - `within_hour` number, required: 28.5: the answered replies people answered within the hour, percent.
    - `against` object, required: The agent against the team (2026-10-27, block AC8): the five measures of the Overview's block in two columns, what the lead did after each reply. Read the shares off the counts; outcome keeps the whole inbox's counters and the corpus baseline.
      - `agent` object, required: The agent's replies that went out in the period (replies.sent).
        - `replies` integer, required: The column's replies that went out in the period: the denominator of the three evidence shares.
        - `strict` integer, required: Of them, the replies after which the lead first sent a calendar link or confirmed a time we proposed (each fact attributed to the last message of ours before it).
        - `contact` integer, required: Of them, the replies after which the lead first handed over a phone, an email or a colleague.
        - `ended_well` integer, required: Of them, the replies after which any of the three fired, or the dialog said yes or ended on its goal (a call booked, a sign-up, a registration): a call, a yes or a next step, against the positive band of outcome.baseline.
        - `answered` integer, required: Of the replies, the ones that answered a lead's message within two days of it.
        - `within_hour` integer, required: Of those, within 60 minutes.
        - `median_reply_seconds` integer, nullable, required: The median gap over the answered; null when none.
        - `silence` integer, required: The lead's replies of the period older than 24 hours with no message of ours within 24 hours after them, on this side: the agent's when a classify read the reply within the day and handed nothing over, the team's otherwise.
      - `team` object, required: Every reply a person sent by hand in the period on a thread the agent had read into a scenario before it; replies 0 when nobody did, and the page then shows people in general (outcome.baseline), marked so.
        - `replies` integer, required: The column's replies that went out in the period: the denominator of the three evidence shares.
        - `strict` integer, required: Of them, the replies after which the lead first sent a calendar link or confirmed a time we proposed (each fact attributed to the last message of ours before it).
        - `contact` integer, required: Of them, the replies after which the lead first handed over a phone, an email or a colleague.
        - `ended_well` integer, required: Of them, the replies after which any of the three fired, or the dialog said yes or ended on its goal (a call booked, a sign-up, a registration): a call, a yes or a next step, against the positive band of outcome.baseline.
        - `answered` integer, required: Of the replies, the ones that answered a lead's message within two days of it.
        - `within_hour` integer, required: Of those, within 60 minutes.
        - `median_reply_seconds` integer, nullable, required: The median gap over the answered; null when none.
        - `silence` integer, required: The lead's replies of the period older than 24 hours with no message of ours within 24 hours after them, on this side: the agent's when a classify read the reply within the day and handed nothing over, the team's otherwise.
    - `previous` object, nullable, required: The same scalars for the period of the same length before this one, so a reader can say what moved; null for all time.
      - `replies_received` integer, required
      - `replies_sent` integer, required
      - `sent_as_written` integer, required: Of them, the ones sent as written (2026-10-20): the widget's change in points.
      - `calls_booked` integer, required
      - `said_yes` integer, required
      - `handed_to_you` integer, required
      - `unsure` integer, required
      - `credits_spent` number, required
    - `now` object, required
      - `talking` object, required: The agent's conversations now, one state per thread (the search's own counts over agent_state not none). Open one state with search_conversations and filter.agent_state.
        - `total` integer, required: The threads the agent stands on now in any of the five states.
        - `leading` integer, required: It leads: its plan runs, or it is reading or writing.
        - `awaiting_approval` integer, required: It waits for a person's OK: a draft, a proposed plan, a parked step.
        - `handed_off` integer, required: Handed to a person: a hand-off task open, a give-up, a failed step.
        - `taken_over` integer, required: A person writes: they stepped in, nothing of the agent's in flight.
        - `stalled` integer, required: The lead went quiet and no follow-up may follow.
      - `workflows` object[], required: The workflows the threads name as their owner, the busiest first. A workflow's enrolled people are playtables' (search_workflows with include records_counts).
        - `workflow_sid` string, required: The workflow the threads name as their owner (wf_wf_…).
        - `workflow_name` string, required: Its name as the threads' refs carry it.
        - `playtable_sid` string, nullable, required: Its table (pt_tb_…); null on refs frozen before it rode along.
        - `ai_agent_mode` string, required: Its After a reply as the refs carry it: autopilot, copilot or off.
        - `threads` integer, required: The threads the workflow owns in the inbox.
        - `with_agent_now` integer, required: Of them, the threads the agent stands on now.
        - `replies` integer, required: The agent's replies that went out on them in the period.
        - `calls_booked` integer, required: The calls booked on them in the period.
  - `meta` object, required
    - `trace_id` string, required: UUID v7; same 128-bit value as the X-Trace-Id header.
    - `span_id` string, required: 16 hex chars, root span of this request.
    - `timestamp` string, required: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
    - `duration_ms` integer, required: Server-side wall clock.
    - `team_sid` string, nullable: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends.
    - `actor_type` string, nullable: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends.

## Other responses

- `4XX`: MCP error envelope. `error.code` is one of validation_failed, nothing_to_update, not_found, relation_not_found, invalid_transition, limit_exceeded, payment_required, duplicate_rejected, conflict, delete_blocked, unauthorized, forbidden, rate_limited, not_implemented.
- `5XX`: MCP error envelope with `error.code` internal_error or service_unavailable.

---

[API](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-unibox.md) - [All operations](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-unibox/llms.txt) - [OpenAPI document](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-unibox/revisions/8f1bc317897f?raw)
