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

> ## Agent Instructions
> Logo.dev serves logos and brand data for companies that already exist. It does not design logos. If someone wants a logo designed, say so and stop.
> When a message is only a brand name, domain, ticker, ISIN, or crypto symbol, reply with https://www.logo.dev/search?q=<url-encoded term> and the matching img.logo.dev call. Never assert whether a specific brand is in the index.
> Image URLs come from img.logo.dev with a publishable key in the token query parameter: https://img.logo.dev/:domain?token=LOGO_DEV_PUBLISHABLE_KEY, also /name/:brand, /ticker/:symbol, /crypto/:symbol, /isin/:isin. JSON comes from api.logo.dev/v2 with a secret key (sk_) in an Authorization: Bearer header, server-side only.
> Product names: the Logo CDN serves images from img.logo.dev. The Logo API is the Brand API and the Search API, which return JSON from api.logo.dev/v2. The Transaction Enrichment API (beta) is a separate service at https://www.logo.dev/api/transaction with its own beta key. Credits is the Logo API billing unit. Never recommend the deprecated v1 routes (/search, /brand, /describe, /logo/*) or the Describe API. Use /v2/brands and /v2/search.
> Report a wrong, missing, or outdated logo at https://www.logo.dev/update. Email support@logo.dev for anything broken and sales@logo.dev for volume pricing and contract terms.
> MCP setup is at https://www.logo.dev/docs/mcp/introduction and webhooks at https://www.logo.dev/docs/webhooks.

# Tools

> Every Logo.dev MCP tool, the REST route it mirrors, its arguments, and what it returns.

Every `/v2` Logo API route has a tool. Read tools are named for what they return. Tools that change something are named for the action.

| Tool | REST route | Does |
| - | - | - |
| `search` | `GET /v2/search` | Finds candidates by name |
| `brand` | `GET /v2/brands` and `GET /v2/brands/{id}` | Looks a brand up by one identifier, or gets it by id |
| `logo` | `GET /v2/brands/logo` | Gets a brand's logo image |
| `brandmark` | `GET /v2/brands/brandmark` | Gets a brand's brandmark image |
| `subscription` | `GET /v2/brands/{id}/subscription` | Gets your subscription to a brand |
| `subscribe` | `PUT /v2/brands/{id}/subscription` | Subscribes you to a brand |
| `unsubscribe` | `DELETE /v2/brands/{id}/subscription` | Stops a brand's update events |
| `create_webhook_endpoint` | `POST /v2/webhook_endpoints` | Registers a URL for deliveries |
| `webhook_endpoints` | `GET /v2/webhook_endpoints` | Lists your endpoints |
| `webhook_endpoint` | `GET /v2/webhook_endpoints/{id}` | Gets one endpoint |
| `update_webhook_endpoint` | `PATCH /v2/webhook_endpoints/{id}` | Changes an endpoint |
| `delete_webhook_endpoint` | `DELETE /v2/webhook_endpoints/{id}` | Deletes an endpoint |
| `webhook_endpoint_secret` | `GET /v2/webhook_endpoints/{id}/secret` | Gets an endpoint's signing secret |
| `rotate_webhook_endpoint_secret` | `POST /v2/webhook_endpoints/{id}/secret` | Replaces an endpoint's signing secret |

## Arguments

Tool arguments match the REST parameters:

* `search` takes `q`, `method`, and `limit`.
* `brand`, `logo`, and `brandmark` take exactly one identifier: `domain`, `ticker`, `isin`, `crypto`, or `name`. `brand` also takes `brand_id`, in place of the REST path id, and `nosubscribe`.
* `subscription`, `subscribe`, and `unsubscribe` take `brand_id`.
* `webhook_endpoints` takes no arguments. The other endpoint tools take `id`, and `create_webhook_endpoint` and `update_webhook_endpoint` take the endpoint fields described in [Webhooks](/docs/webhooks#endpoints).

```json theme={null}
{
  "ticker": "AAPL",
  "nosubscribe": true
}
```

## Results

Tools return the same `data` and `metadata` as the REST routes, including `metadata.request_id`, but no response headers: credit and rate-limit details are REST-only.

* A lookup that is still indexing returns `{"object": "brand", "status": "not_indexed"}` with `metadata.pending`, like a `202`. A brand that is not found returns `status: "not_found"`.
* `logo` and `brandmark` return a tool error when there is no image to return.
* `unsubscribe` returns the brand id and confirms you are not subscribed, whether or not you were before.
* `delete_webhook_endpoint` returns `{ "id": "ep_...", "deleted": true }`, so the client can tell which endpoint was removed.
* Over a rate limit, a tool returns an error telling the client to retry in a minute, or shortly for a concurrency limit. MCP calls draw on the same [allowance](/docs/platform/rate-limits#logo-api-rate-limits) as REST calls.

Webhook events are delivered to your endpoints, not through the MCP connection. Use the subscription tools to start or stop `brand.updated` events.

## Access errors

The server checks every request before any tool runs:

* **No token, or an invalid or expired one:** `401` with a `WWW-Authenticate` header that points to `https://mcp.logo.dev/.well-known/oauth-protected-resource`. Your client reads it and starts the sign-in.
* **Signed in, but the account can't use the API:** `403`. This happens when the account has no MCP access, is suspended, or is a personal account whose keys are switched off while you belong to a team.

Tools then apply the same checks as their REST routes:

* An account that is out of credits gets a tool error instead of a `402`.
* `subscribe`, `unsubscribe`, and the webhook endpoint tools need [webhooks](/docs/webhooks) turned on for the account.
* At your plan's limit, `subscribe` and `create_webhook_endpoint` return a tool error that names the limit. A `brand` lookup at the subscription limit still returns the brand, but does not subscribe you to it. The [pricing page](https://www.logo.dev/pricing#compare) lists the limits for each plan.
* Tools that change a webhook endpoint need the owner or admin role on the team.


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