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

> ## Agent Instructions
> Setting up Context.dev for a user? Follow https://docs.context.dev/agent-quickstart.md. MCP clients sign in with OAuth and need no API key; application code reads CONTEXT_DEV_API_KEY.

# Brand

> Retrieve logos, colors, company details, and social links using one identifier.

Retrieve a Brand profile using a domain, company name, work email, stock ticker, transaction descriptor, or page URL. All lookup types use `POST /brand/retrieve` and return the same profile shape.

## Choose a lookup

| You have                | Lookup                                         |
| ----------------------- | ---------------------------------------------- |
| Website domain          | [By domain](/brand/lookup-by-domain)           |
| Company name            | [By name](/brand/lookup-by-name)               |
| Work email              | [By email](/brand/lookup-by-email)             |
| Stock symbol            | [By ticker](/brand/lookup-by-ticker)           |
| Bank or card descriptor | [By transaction](/brand/lookup-by-transaction) |
| Exact page to inspect   | [By page URL](/brand/lookup-by-url)            |

## Make a request

<CodeGroup>
  ```typescript TypeScript theme={null}
  import ContextDev from "context.dev";

  const client = new ContextDev({
    apiKey: process.env.CONTEXT_DEV_API_KEY,
  });

  const response = await client.brand.retrieve({
    type: "by_domain",
    domain: "stripe.com",
  });

  console.log(response.brand?.title);
  ```

  ```python Python theme={null}
  import os
  from context.dev import ContextDev

  client = ContextDev(api_key=os.environ["CONTEXT_DEV_API_KEY"])

  response = client.brand.retrieve(
      type="by_domain",
      domain="stripe.com",
  )

  print(response.brand.title if response.brand else None)
  ```

  ```ruby Ruby theme={null}
  require "cgi/core"
  require "context_dev"

  client = ContextDev::Client.new(
    api_key: ENV.fetch("CONTEXT_DEV_API_KEY")
  )

  response = client.brand.retrieve(
    body: {
      type: :by_domain,
      domain: "stripe.com",
    }
  )

  puts response.brand&.title
  ```

  ```go Go theme={null}
  package main

  import (
      "context"
      "fmt"
      "os"

      contextdev "github.com/context-dot-dev/context-go-sdk/v2"
      "github.com/context-dot-dev/context-go-sdk/v2/option"
  )

  func main() {
      client := contextdev.NewClient(
          option.WithAPIKey(os.Getenv("CONTEXT_DEV_API_KEY")),
      )

      response, err := client.Brand.Get(
          context.Background(),
          contextdev.BrandGetParams{
              OfByDomain: &contextdev.BrandGetParamsBodyByDomain{
                  Domain: "stripe.com",
              },
          },
      )
      if err != nil {
          panic(err)
      }

      fmt.Println(response.Brand.Title)
  }
  ```

  ```php PHP theme={null}
  <?php

  require __DIR__.'/vendor/autoload.php';

  use ContextDev\Client;

  $client = new Client(apiKey: getenv('CONTEXT_DEV_API_KEY'));

  // The generated Brand helper requires fields from multiple lookup types, so send the request directly.
  $raw = $client->request(
      method: 'post',
      path: 'brand/retrieve',
      body: [
          'type' => 'by_domain',
          'domain' => 'stripe.com',
      ],
  );

  $response = json_decode((string) $raw->getBody(), true, flags: JSON_THROW_ON_ERROR);
  echo $response['brand']['title'] ?? 'No brand found', PHP_EOL;
  ```

  ```bash cURL theme={null}
  curl https://api.context.dev/v1/brand/retrieve \
    --request POST \
    --header "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
    --header "Content-Type: application/json" \
    --data '{
      "type": "by_domain",
      "domain": "stripe.com"
    }'
  ```
</CodeGroup>

The request stays open until the lookup finishes. PHP-specific request details live on the [PHP SDK page](/sdks/php).

## Read the profile

Abridged response:

```json theme={null}
{"status":"ok","code":200,"brand":{"domain":"stripe.com","title":"Stripe","colors":[{"hex":"#635BFF","source":"site"}],"logos":[],"socials":[],"industries":{"eic":[{"industry":"Finance","subindustry":"Payments & Money Movement"}]}}}
```

Collections can be empty. Choose a logo by `type`, `mode`, and resolution. Store the canonical `brand.domain` alongside your input, and let users correct uncertain company details. Treat discovered addresses and contact information as data to verify when accuracy matters.

## Options

| Field                 | Accepted by                 | Effect                                                                                |
| --------------------- | --------------------------- | ------------------------------------------------------------------------------------- |
| `maxAgeMs`            | Domain, name, email, ticker | Cache freshness; defaults to 3 months, clamped to 0–1 year. `0` refreshes.            |
| `maxSpeed`            | All except page URL         | Skip slower enrichment for a less detailed response.                                  |
| `force_language`      | All except page URL         | Return text in a supported language.                                                  |
| `timeoutOpts`, `tags` | All lookup types            | [Deadlines](/optimization/timeouts) and [usage labels](/optimization/usage-and-logs). |

## Expected failures

No-match results can return `400 NOT_FOUND` or `404 NOT_FOUND`; inspect `error_code`. An inaccessible domain can return `WEBSITE_NOT_FOUND`, `WEBSITE_ACCESS_ERROR`, or `WEBSITE_BLOCKED`.

Email rejection and short cold-domain deadlines return 422. See the lookup guides for recovery. When `partial: true`, unfinished fields are omitted; do not treat the result as a complete profile.

The [Brand reference](/api-reference/brand-intelligence/brand) lists every field. For visual tokens, use [Styleguide](/brand/styleguide); for a direct image embed, use [Logo Link](/brand/logo-link).
