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

# Companies

> Model the clients or brands your agents work for and attribute each call to the right company.

A **company** is a client or brand that your agents work for inside your Zelto
organization. Use Companies when one operating team runs agents on behalf of
several customers and needs to separate their calls and activity.

<Note>
  Companies is an optional feature. If **Companies** does not appear in your
  sidebar, an organization owner or admin can enable it in **Settings →
  Organization**.
</Note>

## Organization, company, or group?

These three concepts solve different problems:

| Concept | What it represents | What it controls |
| - | - | - |
| **Organization** | Your Zelto workspace and account boundary. | Members, roles, integrations, API keys, billing, and all of the data in the workspace. |
| **Company** | A client or brand your organization serves. | Which agents work for that client and which individual calls belong to it. |
| **Agent group** | A flexible collection such as a team, area, language, or campaign. | Agent-level grouping and filtering; it does not attribute individual calls to a client. |

Companies are not separate workspaces or access boundaries. Every company stays
inside the same organization and uses the organization's members, integrations,
API keys, and billing. Selecting a company filters what you are looking at; it
does not grant or restrict a member's access to that company's data.

## How companies relate to agents and calls

```text theme={null}
Organization
├── Company A ─┬── Agent 1 ── calls attributed to Company A
│              └── Agent 2
└── Company B ─┬── Agent 2 ── calls attributed to Company B
               └── Agent 3
```

An agent can work for more than one company. That membership makes the agent
appear on each company's page and lets company-scoped, agent-based views find
the right agents.

Each conversation, however, is attributed to at most **one** company. This is
what lets Zelto separate calls when a shared agent handles work for several
clients.

## How a call gets its company

Zelto decides the company when it ingests the call, in this order:

1. **Per-call company identifier.** If the provider or upload sends a client or
   brand id, Zelto maps that external id to a company. The first unseen id
   creates a company named after the id, which you can rename in the dashboard.
2. **The agent's default company.** If the call has no company identifier,
   Zelto uses the single company marked as that agent's default.
3. **Unattributed.** If neither signal exists, the call remains in the
   organization without a company.

The per-call identifier always wins over the default. This matters for a shared
agent: one call can belong to Company A and the next to Company B without
changing the agent's setup.

For direct uploads, send the identifier as `companyExternalId`:

```json theme={null}
{
  "agent": {
    "externalId": "collections-agent",
    "name": "Collections Agent"
  },
  "companyExternalId": "acme-bank",
  "call": {
    "externalId": "call-001"
  }
}
```

The value is your stable identifier for the client or brand, up to 255
characters. Send the same value on later calls for the same company. See
[Custom and other providers](/docs/integrations/api-call-upload#attribute-each-call-to-a-company)
for the complete upload contract.

<Warning>
  Setting a default or attaching an agent affects new ingestion. It does not
  rewrite historical calls automatically. Ask your Zelto contact if existing
  calls need a company-attribution backfill.
</Warning>

## Company scope in the dashboard

Select a company under **Companies** in the sidebar to keep that company in
scope as you move through the dashboard. The company card at the top of the
sidebar lets you switch companies, open the company page, or return to **All
agents**.

Conversations, monitor rates/trends/results, findings and their linked calls,
traces, and live transfer/cost reports use the company stored on each call.
Shared agents do not bring another company's calls into these views. Unattributed
calls are excluded. Traces require an explicit call link or a unique provider
session reference; ambiguous references and traces spanning companies are excluded.

Saved written reports are organization-wide snapshots and are hidden while a
company is selected. Stored monitor benchmarks also span the organization;
clear the company filter to view or run them. Agent configuration and tool-call views still describe
agents; see [operational workflows](/docs/guides/customer-evaluation-workflows)
for the report boundaries.

The Companies directory lists companies alphabetically, 50 per page, with each
company's attached agent count and attributed calls from the last seven days.
The heading shows the total company count. Use the page controls below the table
to browse the directory and see the current row range.

## Manage companies

Open a company to switch between **Conversations** and **Agents**. Conversations
opens by default and lists calls attributed to that company, newest first, with
the agent, end reason, duration, and call time. Use the page controls to browse
older calls, open a reference ID for call details, or choose **View all
conversations** for the full list with the company filter applied. Calls appear
even when their agent is not attached to the company.

From **Companies**, you can create or rename a company, attach or remove agents,
and choose each agent's default company. You can also manage an agent's company
memberships from the agent's settings.

Deleting a company removes its agent attachments and clears that company from
its calls. The agents and calls themselves stay in Zelto.

For a complete walkthrough, see [Set up companies](/docs/guides/set-up-companies).

### Company logo

Every company has a mark next to its name in the sidebar, lists, and pickers.
Until you add a logo, the mark shows the first two characters of the company
name in uppercase on a neutral background at every size. For example, Acme Bank
shows **AC**. A one-character name keeps that character.

To change it, open the company and select its mark next to the name:

* **Upload image** — a PNG, JPEG, or WebP file up to 2 MB. Square images look
  best.
* **Use image URL** — a public `https` link to a logo you already host, such as
  one on your own site or CDN. SVG logos work this way.
* **Reset to default** — remove the logo and go back to the two-character mark.

If a linked image stops loading, Zelto shows the name's characters instead.

You can also manage logos with the REST API using an organization
[API key](/docs/settings#api-keys):

```bash theme={null}
# Upload an image file
curl -X PUT "https://api.zelto.ai/v1/companies/$COMPANY_ID/logo" \
  -H "Authorization: Bearer $ZELTO_API_KEY" \
  -H "Content-Type: image/png" \
  --data-binary @logo.png

# Use an image you host (send null to remove it)
curl -X PATCH "https://api.zelto.ai/v1/companies/$COMPANY_ID" \
  -H "Authorization: Bearer $ZELTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"logoUrl": "https://example.com/acme-logo.png"}'

# Remove the logo
curl -X DELETE "https://api.zelto.ai/v1/companies/$COMPANY_ID/logo" \
  -H "Authorization: Bearer $ZELTO_API_KEY"
```

`GET /v1/companies` lists your companies with their ids and current
`logoUrl`. Uploads also accept `multipart/form-data` with the image in a `file`
field.

## Related

* [Agents](/docs/agents) — the agents that can work for one or more companies.
* [Conversations](/docs/conversations) — the exact per-call company view.
* [Custom and other providers](/docs/integrations/api-call-upload) — send a
  company identifier with each uploaded call.
* [Settings](/docs/settings) — the organization-level account boundary that
  contains all companies.
