Skip to main content
Brand API turns a company domain or work email into a structured brand profile: name, description, logos, colors, social profiles, and key links. Every returned field carries its own source, so your product can show where a value came from. Send a domain or email to POST /v1/brand/retrieve. Hermai returns cached data when it has a recent profile, and starts a new extraction when it does not.

Retrieve a brand profile

Send exactly one of domain or email.
When you send email, Hermai keeps only the domain. It never stores or forwards the mailbox local part.

Request body

Response

This example runs against stripe.com. Response shown trimmed for length; a live call returns more logos, colors, socials, and links than shown here.

Top level fields

Field provenance

Every field in brand carries where Hermai found it: origin is one of: There is no confidence score on any field. Use origin and source to judge how much to trust a value.

Description

description is the company’s own self authored summary, not a Hermai generated summary. Hermai checks sources in this priority order and uses the first one that passes:
  1. A JSON-LD Organization description, only when the JSON-LD confirms the organization belongs to the requested domain. An unconfirmed JSON-LD organization description is dropped, not used as a fallback.
  2. The og:description meta tag.
  3. The plain <meta name="description"> tag.
Hermai caps a description at 500 characters and cuts at the end of the last full sentence inside that limit. It never appends an ellipsis. Hermai rejects very short text, interstitial or bot challenge pages, cookie and consent notices, and keyword stuffed text. When nothing passes, description is absent. A real example, from stripe.com:

Status values

Cold lookups and polling

A domain Hermai has a fresh profile for returns immediately with status set to ok, partial, or one of the other terminal values. A domain Hermai has not extracted recently starts a new extraction. If it does not finish within wait_ms, POST /v1/brand/retrieve returns HTTP 202 with status set to pending:
Wait pending.poll_after_ms, then call POST /v1/brand/poll with the token:
Poll again with the same token while the response keeps returning 202 and status: pending. A token stays valid for 5 minutes. Once extraction finishes, poll returns HTTP 200 with the finished profile. Polling itself is free. The first terminal delivery, whether from retrieve or from poll, bills under the normal rule below.

Applying the theme

application_theme gives you ready made tokens for styling your product with this company’s branding, so you do not have to rank logos or pick an accent color yourself. Each identity slot carries asset (a logo, or null), show_company_name (whether to also render the company name next to the asset), and fallback (what to show when asset is null, such as monogram or asset_with_company_name).

Billing

A successful profile bills one ordinary Hermai credit, the same credit pool as every other Hermai endpoint. Hermai bills when status is ok or partial and the profile has at least one of: a name, a logo, or a color. A partial result that only carries a description, a social profile, or a link, with no name, logo, or color, does not bill. Pending results and failed lookups never bill.

Rate limits

Brand endpoints apply three limits on top of each other. Warm requests, served from a recent cached profile, only count against the first two. Cold requests, which start a new extraction, count against all three. Standard per key rate limit, shared with every other Hermai endpoint: Brand specific workspace limit, shared by every key in your workspace: Cold extraction limit, applied only to lookups that start a new extraction: Any of the three returns HTTP 429 when exceeded.

Anonymous brand demo

POST /v1/brand/demo runs a brand lookup without an API key and without spending credits. It takes a domain only and returns a smaller public projection: status, domain, and brand.name, brand.description, brand.logos, brand.colors. It never returns socials, links, or usage.
A cold demo lookup returns HTTP 202 with status: pending and a poll_after_ms hint. Repost the same domain after that delay. There is no poll token on the demo endpoint. The demo endpoint applies its own limits, separate from the authenticated limits above: Each of these returns HTTP 429 with a Retry-After header.

Errors

Errors use the standard API envelope:
retry_after is present only on rate limit errors, in seconds. It is absent on every other error. A 5xx response, such as BRAND_RESPONSE_INVALID, means Hermai failed on its own side. Retry the request.

Authentication

Use the same Bearer token as every other Hermai API route. See API keys.