---
title: "Search brands"
method: GET
path: "/v2/search"
tags: ["Search"]
---

# Search brands

`GET /v2/search`

## Request

- Base URL: `https://api.logo.dev`
- URL: `https://api.logo.dev/v2/search`
- Auth: HTTP bearer

Finds brands by name and returns candidates with their domain and logo URL. `match` searches full names and aliases; `typeahead` completes a prefix as someone types. Costs API credits on every request, at the rate in [API credits](/platform/credits#what-each-request-costs). Follow up with [Look up a brand](/api-reference/brands/look-up-a-brand) for the full profile.

## Query parameters

- `q` string, required
- `method` 'match' | 'typeahead'
- `limit` integer

## Response `200`

Matching brands, best first. An empty array when nothing matches.

- object
  - `data` V2SearchResult[], required
    - `object` 'search_result', required
    - `name` string, required
    - `domain` string, required
    - `logo_url` string, uri, required: Logo URL signed with your account's publishable key.
  - `metadata` V2Metadata, required
    - `request_id` string, required: Unique id for this request. Also sent as the `Request-Id` header.
    - `resolution` V2Resolution: How the request identified the brand.
      - `type` 'domain' | 'ticker' | 'isin' | 'crypto' | 'name' | 'brand_id', required: Which identifier the request used.
      - `value` string, required: The identifier after normalization: the registrable domain, an upper-cased ticker, and so on.
      - `method` 'direct' | 'domain' | 'security' | 'crypto' | 'search' | '', required: How the identifier reached the brand. `direct` is a brand id or a domain that is its own brand; `domain` went through an alias or redirect; `security` is a ticker or ISIN; `crypto` is a crypto token symbol; `search` is a name lookup. Empty on a cached miss.
      - `context` object, required: Reserved for brands involved in a merchant lookup. Always `{}` today.
    - `pending` V2Pending: Present only on a `202`. Tells you when to retry.
      - `reason` 'indexing' | 'resolving', required: `indexing` is a brand's first crawl; `resolving` means the identifier is still being matched to a brand.
      - `message` string, required
      - `retry_after_seconds` integer, required: Wait this long before retrying. Matches the `Retry-After` header.
      - `expires_in_seconds` integer, required: Stop polling after this long.
      - `webhook` boolean, required: Whether a `brand.indexed` webhook event carrying this request's `request_id` will be sent when the lookup settles.
      - `doc_url` string, uri, required
    - `subscription` object: Present when a brand lookup (`GET /v2/brands` or `GET /v2/brands/{id}`) ran the automatic subscribe: webhooks are on for the account, and `nosubscribe` is not `true`. See [automatic subscriptions](/brand/introduction#automatic-subscriptions).
      - `status` 'subscribed' | 'quota_exceeded', required: `subscribed`: the account is subscribed to the brand. `quota_exceeded`: the account is at its plan's subscription limit, so the brand was not subscribed. The lookup is answered and billed either way.
      - `message` string: Why the subscribe was refused. Only with `quota_exceeded`.

## Other responses

- `400`: `q` is missing, or `method` or `limit` is invalid.
- `401`: The secret key is missing, malformed, unknown, or disabled. A publishable key (`pk_`) is refused.
- `402`: Your account is out of API credits.
- `429`: Too many searches this minute. Search has its own per-minute limit, separate from lookups. Wait for `RateLimit-Reset` seconds. Not billed. See [search rate limit](/platform/rate-limits#search-rate-limit).
- `500`: Search failed. Retry.

---

[API](https://skmtc.dev/logo/apis/logo-dev-api.md) · [All operations](https://skmtc.dev/logo/apis/logo-dev-api/llms.txt) · [OpenAPI document](https://skmtc.dev/logo/apis/logo-dev-api/revisions/6251e2aca8fb?raw)
