---
title: "Resolve many brands"
method: POST
path: "/v1/web/brand"
tags: ["Brand"]
---

# Resolve many brands

`POST /v1/web/brand`

## Request

- Base URL: `https://api.hydrafetch.com`
- URL: `https://api.hydrafetch.com/v1/web/brand`
- Auth: API key in header `X-API-Key`

The same lookup for up to 50 domains at once. Only resolved brands are billed.

## Request body

- BrandBatchDto
  - `domains` string[]

## Response `201`

One entry per requested domain, in the order you sent them.

- BrandBatchResponseDto
  - `data` WebBrandDataDto[], nullable, required: One entry per requested domain, in the order you sent them. Null where unresolved.
    - `domain` string, required: The canonical domain for this company.
    - `queriedDomain` string: Only when you asked for a different domain that resolved here.
    - `aliases` string[]: Only when this brand is known by more than its canonical domain.
    - `name` object, nullable, required
    - `description` object, nullable, required
    - `tagline` object, nullable, required
    - `naics` BrandNaicsDto
      - `code` string, required
      - `title` string, required
      - `level` 'sector' | 'industry_group' | 'national_industry', required: How specific the answer is. `industry_group` is the 4-digit level, `national_industry` the 6-digit one.
      - `sector` BrandNaicsSectorDto, required
        - `code` string, required
        - `title` string, required
      - `confidence` number, required: How much evidence the classification found, not a model's self-report.
    - `assets` BrandAssetDto[], required
      - `kind` 'wordmark' | 'symbol' | 'favicon' | 'backdrop', required: What kind of mark this is.
      - `variant` 'light' | 'dark' | 'mono', required: Which background the asset is legible on. `mono` is a single-colour mark that works on both.
      - `url` string, required: Public and immutable, so it can be embedded anywhere.
      - `format` string, required
      - `resolution` BrandResolutionDto, required
        - `width` number, required
        - `height` number, required
        - `aspectRatio` number, required: Width over height — what a caller reserves layout space with.
      - `colors` BrandColorDto[], required: The colours in the asset itself. A logo's own palette is the brand's, by definition.
        - `hex` string, required
        - `name` string: Nearest CSS colour name, so a swatch reads as something and not only as six digits.
        - `weight` number, required: How much the site itself uses it — the ranking that makes this the brand's colour.
        - `role` 'primary' | 'accent' | 'background' | 'text'
      - `blurhash` object, nullable, required: Tiny placeholder hash, so a client can render something before the image lands.
    - `colors` BrandColorDto[], required
      - `hex` string, required
      - `name` string: Nearest CSS colour name, so a swatch reads as something and not only as six digits.
      - `weight` number, required: How much the site itself uses it — the ranking that makes this the brand's colour.
      - `role` 'primary' | 'accent' | 'background' | 'text'
    - `fonts` BrandFontDto[], required
      - `family` string, required
      - `weight` number, required: How much of the site's type this face sets, 1 for the most-used one.
      - `role` 'heading' | 'body': Absent when the page does not say which the face is.
    - `socials` BrandSocialDto[], required
      - `platform` string, required
      - `url` string, required
      - `handle` string: The account name, without the `@`.
    - `links` BrandLinksDto, required
      - `pricing` string
      - `blog` string
      - `careers` string
      - `contact` string
      - `privacy` string
      - `terms` string
      - `docs` string
    - `email` string
    - `legalName` string
    - `sources` object, required: Per-field provenance, keyed by field name. Lets you tell "their markup says this" from "a model guessed this".
    - `resolvedAt` object, nullable, required

## Other responses

- `400`: The request body or query failed validation.
- `401`: The X-API-Key header is missing, malformed, or names a key that no longer exists.
- `402`: The workspace has no credits left for this request. Nothing was charged and nothing was fetched.
- `403`: The key is valid but the workspace may not make this request.
- `404`: No such job, or the id belongs to another workspace.
- `422`: The target site did not respond, or we could not read that page. This is a fact about that URL rather than a fault on our side, and retrying it will not change the answer. When details.retryAfterSeconds is present, asking again before then returns this same answer. Nothing was charged.
- `429`: The workspace exceeded its per-minute request limit. Read the RateLimit headers, or Retry-After on this response, and retry after the window resets.
- `500`: Unexpected server error. Nothing was charged.
- `503`: A dependency needed for the requested formats is unavailable. Safe to retry.

---

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