{
  "id": "contextdev.brand.retrieve",
  "object": "tool",
  "name": "Retrieve Brand",
  "summary": "Resolve a company by domain, name, email, ticker, transaction descriptor, or page URL into a full brand profile.",
  "description": "Turn a domain, company name, work email, stock ticker, card or bank statement descriptor, or one exact page URL into a structured brand profile: logos and symbol marks, backdrops, brand colors, fonts, a written description and slogan, social profiles, addresses, stock and headcount information, important links, and industry classification (Context.dev's EIC taxonomy, inline on every response). Built for signup and CRM enrichment, merchant feeds, personalization, and on-brand UI generation. The body's type selects the lookup key; ticker_exchange disambiguates a ticker, country_gl a name or descriptor. Cached brand data is refreshed quarterly and maxAgeMs forces an earlier refresh; maxSpeed trades enrichment depth for latency.\n\nRaw contextdev#brand/retrieve endpoint: input is { body, queryParams, pathParams } as the provider documents them (https://docs.context.dev/api-reference/brand-intelligence/brand).",
  "category": "lookup",
  "hosted_by": "Context.dev",
  "runtime": "partner",
  "side_effects": false,
  "status": "live",
  "credits": 0,
  "price": null,
  "providers": [
    {
      "id": "contextdev",
      "name": "Context.dev",
      "price": null,
      "own_key_only": true
    }
  ],
  "mcp_name": "contextdev_brand_retrieve",
  "input_schema": {
    "type": "object",
    "properties": {
      "body": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "by_domain",
                "description": "Look the brand up by domain."
              },
              "domain": {
                "type": "string",
                "minLength": 3,
                "description": "Domain to retrieve brand data for, e.g. 'stripe.com'."
              },
              "force_language": {
                "type": "string",
                "minLength": 2,
                "description": "Force the language of the returned brand copy (a language NAME, e.g. 'english', 'french', 'japanese')."
              },
              "maxSpeed": {
                "type": "boolean",
                "description": "Optimize for speed: Context.dev skips time-consuming enrichment for a faster response at the cost of less comprehensive data. Default false."
              },
              "maxAgeMs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991,
                "description": "Maximum age in milliseconds of cached brand data before Context.dev hard-refreshes it. Default 7776000000 (3 months). Set 0 to always refresh."
              },
              "timeoutOpts": {
                "type": "object",
                "properties": {
                  "milliseconds": {
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 300000,
                    "description": "Request deadline in milliseconds (1000-300000)."
                  },
                  "behavior": {
                    "type": "string",
                    "enum": [
                      "fail",
                      "return-partial"
                    ],
                    "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
                  }
                },
                "required": [
                  "milliseconds"
                ],
                "additionalProperties": false,
                "description": "Request deadline and behavior on timeout."
              }
            },
            "required": [
              "type",
              "domain"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "by_name",
                "description": "Look the brand up by company name."
              },
              "name": {
                "type": "string",
                "minLength": 3,
                "maxLength": 30,
                "description": "Company name to resolve, e.g. 'Apple Inc'."
              },
              "country_gl": {
                "type": "string",
                "description": "Country code hint (Google gl parameter) for the lookup."
              },
              "force_language": {
                "type": "string",
                "minLength": 2,
                "description": "Force the language of the returned brand copy (a language NAME, e.g. 'english', 'french', 'japanese')."
              },
              "maxSpeed": {
                "type": "boolean",
                "description": "Optimize for speed: Context.dev skips time-consuming enrichment for a faster response at the cost of less comprehensive data. Default false."
              },
              "maxAgeMs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991,
                "description": "Maximum age in milliseconds of cached brand data before Context.dev hard-refreshes it. Default 7776000000 (3 months). Set 0 to always refresh."
              },
              "timeoutOpts": {
                "type": "object",
                "properties": {
                  "milliseconds": {
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 300000,
                    "description": "Request deadline in milliseconds (1000-300000)."
                  },
                  "behavior": {
                    "type": "string",
                    "enum": [
                      "fail",
                      "return-partial"
                    ],
                    "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
                  }
                },
                "required": [
                  "milliseconds"
                ],
                "additionalProperties": false,
                "description": "Request deadline and behavior on timeout."
              }
            },
            "required": [
              "type",
              "name"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "by_email",
                "description": "Look the brand up by a work email's domain."
              },
              "email": {
                "type": "string",
                "minLength": 1,
                "pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$",
                "description": "WORK email address, e.g. 'jane@stripe.com'. Free-provider and disposable addresses are rejected upstream with a 422 at no charge."
              },
              "force_language": {
                "type": "string",
                "minLength": 2,
                "description": "Force the language of the returned brand copy (a language NAME, e.g. 'english', 'french', 'japanese')."
              },
              "maxSpeed": {
                "type": "boolean",
                "description": "Optimize for speed: Context.dev skips time-consuming enrichment for a faster response at the cost of less comprehensive data. Default false."
              },
              "maxAgeMs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991,
                "description": "Maximum age in milliseconds of cached brand data before Context.dev hard-refreshes it. Default 7776000000 (3 months). Set 0 to always refresh."
              },
              "timeoutOpts": {
                "type": "object",
                "properties": {
                  "milliseconds": {
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 300000,
                    "description": "Request deadline in milliseconds (1000-300000)."
                  },
                  "behavior": {
                    "type": "string",
                    "enum": [
                      "fail",
                      "return-partial"
                    ],
                    "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
                  }
                },
                "required": [
                  "milliseconds"
                ],
                "additionalProperties": false,
                "description": "Request deadline and behavior on timeout."
              }
            },
            "required": [
              "type",
              "email"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "by_ticker",
                "description": "Look the brand up by stock ticker."
              },
              "ticker": {
                "type": "string",
                "minLength": 1,
                "maxLength": 15,
                "pattern": "^[A-Za-z0-9.]+$",
                "description": "Stock ticker to resolve, e.g. 'AAPL'."
              },
              "ticker_exchange": {
                "type": "string",
                "description": "Exchange code disambiguating the ticker, e.g. 'NASDAQ', 'NYSE', 'LSE'. Defaults to NASDAQ."
              },
              "force_language": {
                "type": "string",
                "minLength": 2,
                "description": "Force the language of the returned brand copy (a language NAME, e.g. 'english', 'french', 'japanese')."
              },
              "maxSpeed": {
                "type": "boolean",
                "description": "Optimize for speed: Context.dev skips time-consuming enrichment for a faster response at the cost of less comprehensive data. Default false."
              },
              "maxAgeMs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991,
                "description": "Maximum age in milliseconds of cached brand data before Context.dev hard-refreshes it. Default 7776000000 (3 months). Set 0 to always refresh."
              },
              "timeoutOpts": {
                "type": "object",
                "properties": {
                  "milliseconds": {
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 300000,
                    "description": "Request deadline in milliseconds (1000-300000)."
                  },
                  "behavior": {
                    "type": "string",
                    "enum": [
                      "fail",
                      "return-partial"
                    ],
                    "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
                  }
                },
                "required": [
                  "milliseconds"
                ],
                "additionalProperties": false,
                "description": "Request deadline and behavior on timeout."
              }
            },
            "required": [
              "type",
              "ticker"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "by_direct_url",
                "description": "Scrape brand fields from one exact page — no domain resolution, database lookup, or cross-source enrichment."
              },
              "direct_url": {
                "type": "string",
                "pattern": "^https?:\\/\\/\\S+$",
                "description": "Full http(s) URL to fetch brand data from, e.g. 'https://stripe.com/enterprise'."
              },
              "timeoutOpts": {
                "type": "object",
                "properties": {
                  "milliseconds": {
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 300000,
                    "description": "Request deadline in milliseconds (1000-300000)."
                  },
                  "behavior": {
                    "type": "string",
                    "enum": [
                      "fail",
                      "return-partial"
                    ],
                    "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
                  }
                },
                "required": [
                  "milliseconds"
                ],
                "additionalProperties": false,
                "description": "Request deadline and behavior on timeout."
              }
            },
            "required": [
              "type",
              "direct_url"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "by_transaction",
                "description": "Identify the merchant behind a card or bank statement descriptor."
              },
              "transaction_info": {
                "type": "string",
                "minLength": 3,
                "maxLength": 500,
                "description": "The raw transaction descriptor, e.g. 'SQ *COFFEE BAR 4157...' or 'AMZN Mktp US*2K4TZ'."
              },
              "country_gl": {
                "type": "string",
                "description": "Country code hint (Google gl parameter) for the lookup."
              },
              "city": {
                "type": "string",
                "description": "City to prioritize when searching for the merchant."
              },
              "mcc": {
                "description": "Merchant Category Code from the transaction, used to narrow the business category.",
                "type": [
                  "string",
                  "number"
                ]
              },
              "phone": {
                "description": "Phone number from the transaction, used to verify the match.",
                "type": [
                  "string",
                  "number"
                ]
              },
              "high_confidence_only": {
                "type": "boolean",
                "description": "Run an extra verification pass and only return a match Context.dev is confident about. Default false."
              },
              "force_language": {
                "type": "string",
                "minLength": 2,
                "description": "Force the language of the returned brand copy (a language NAME, e.g. 'english', 'french', 'japanese')."
              },
              "maxSpeed": {
                "type": "boolean",
                "description": "Optimize for speed: Context.dev skips time-consuming enrichment for a faster response at the cost of less comprehensive data. Default false."
              },
              "timeoutOpts": {
                "type": "object",
                "properties": {
                  "milliseconds": {
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 300000,
                    "description": "Request deadline in milliseconds (1000-300000)."
                  },
                  "behavior": {
                    "type": "string",
                    "enum": [
                      "fail",
                      "return-partial"
                    ],
                    "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
                  }
                },
                "required": [
                  "milliseconds"
                ],
                "additionalProperties": false,
                "description": "Request deadline and behavior on timeout."
              }
            },
            "required": [
              "type",
              "transaction_info"
            ],
            "additionalProperties": false
          }
        ],
        "description": "Exactly one lookup, selected by type: by_domain, by_name, by_email, by_ticker, by_direct_url, or by_transaction."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "kind": "endpoint"
}