{
  "openapi": "3.1.0",
  "info": {
    "title": "Logo.dev API",
    "description": "Logo.dev serves brand assets from two hosts, each with its own key:\n\n- **Logo.dev CDN** (`img.logo.dev`) returns a logo image. Authenticate with a **publishable key** in the `token` query parameter. It is safe in client-side code.\n- **Logo.dev API** (`api.logo.dev`) returns JSON. Authenticate with a **secret key** in the `Authorization: Bearer` header. Call it only from your server.\n\nGet your keys from the [dashboard](https://www.logo.dev/dashboard/api-keys).",
    "version": "2.0.0",
    "contact": {
      "name": "Logo.dev Support",
      "email": "support@logo.dev",
      "url": "https://docs.logo.dev"
    }
  },
  "servers": [
    {
      "url": "https://api.logo.dev",
      "description": "REST APIs (Brand Search, Brand Data)"
    }
  ],
  "tags": [
    {
      "name": "Logo CDN",
      "description": "Logo images served from img.logo.dev. Authenticate with a publishable key in the `token` query parameter. Metered in CDN requests."
    },
    {
      "name": "Brands",
      "description": "Brand profiles, logos, and brandmarks as JSON from api.logo.dev. Metered in API credits."
    },
    {
      "name": "Logos",
      "description": "A brand's logo or brandmark as JSON, with a temporary download URL, dimensions, and a blurhash."
    },
    {
      "name": "Search",
      "description": "Find brands by name."
    },
    {
      "name": "Subscriptions",
      "description": "Choose which brands send you webhook events."
    },
    {
      "name": "Webhook endpoints",
      "description": "Manage the URLs that receive webhook events."
    },
    {
      "name": "Transaction Enrichment API",
      "description": "Turn a card transaction descriptor into a merchant identity. Private beta."
    }
  ],
  "paths": {
    "/{domain}": {
      "servers": [
        {
          "url": "https://img.logo.dev"
        }
      ],
      "get": {
        "tags": [
          "Logo CDN"
        ],
        "summary": "Get a logo",
        "description": "Get a logo image by domain, brand name, stock ticker, ISIN, crypto symbol, stock exchange, or market index.",
        "operationId": "getLogo",
        "security": [
          {
            "publishableKey": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "description": "The company's domain, such as `stripe.com`. For another lookup, replace `/{domain}` with a path from the table.",
            "schema": {
              "type": "string",
              "examples": [
                "stripe.com"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/size"
          },
          {
            "$ref": "#/components/parameters/height"
          },
          {
            "$ref": "#/components/parameters/width"
          },
          {
            "$ref": "#/components/parameters/format"
          },
          {
            "$ref": "#/components/parameters/theme"
          },
          {
            "$ref": "#/components/parameters/greyscale"
          },
          {
            "$ref": "#/components/parameters/retina"
          },
          {
            "$ref": "#/components/parameters/fallback"
          },
          {
            "$ref": "#/components/parameters/redirect"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/LogoImage"
          },
          "202": {
            "$ref": "#/components/responses/CdnPending"
          },
          "400": {
            "$ref": "#/components/responses/CdnBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/CdnForbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/CdnServerError"
          }
        },
        "x-mint": {
          "metadata": {
            "description": "Get a logo image by domain, brand name, stock ticker, ISIN, crypto symbol, stock exchange, or market index."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>\n\nReturns a logo image. Put the identifier in the path. The query parameters work the same for every lookup.\n\n| Lookup | Path |\n| --- | --- |\n| Domain | `/stripe.com` |\n| Brand name | `/name/Stripe` |\n| Stock ticker | `/ticker/AAPL` |\n| ISIN | `/isin/US0378331005` |\n| Crypto symbol | `/crypto/BTC` |\n| Stock exchange | `/exchange/NYSE` |\n| Market index | `/index/SPX` |\n\n- For a ticker outside the US, add the exchange suffix, such as `7203.T`.\n- URL-encode a name that has spaces or special characters. `/name` also takes `strategy`: `match` (the default) for the closest name, or `suggest` for the most popular prefix match.\n- A lookup with no logo returns a generated monogram, unless you set `fallback=404`. A malformed ticker, crypto symbol, exchange, or index returns `400`."
        },
        "x-codeSamples": [
          {
            "lang": "html",
            "label": "By domain",
            "source": "<img src=\"https://img.logo.dev/stripe.com?token=LOGO_DEV_PUBLISHABLE_KEY\" alt=\"Stripe logo\" />"
          },
          {
            "lang": "html",
            "label": "By name",
            "source": "<img src=\"https://img.logo.dev/name/Stripe?token=LOGO_DEV_PUBLISHABLE_KEY\" alt=\"Stripe logo\" />"
          },
          {
            "lang": "html",
            "label": "By ticker",
            "source": "<img src=\"https://img.logo.dev/ticker/AAPL?token=LOGO_DEV_PUBLISHABLE_KEY\" alt=\"Apple logo\" />"
          },
          {
            "lang": "html",
            "label": "By ISIN",
            "source": "<img src=\"https://img.logo.dev/isin/US0378331005?token=LOGO_DEV_PUBLISHABLE_KEY\" alt=\"Apple logo\" />"
          },
          {
            "lang": "html",
            "label": "By crypto",
            "source": "<img src=\"https://img.logo.dev/crypto/BTC?token=LOGO_DEV_PUBLISHABLE_KEY\" alt=\"Bitcoin logo\" />"
          },
          {
            "lang": "html",
            "label": "By exchange",
            "source": "<img src=\"https://img.logo.dev/exchange/NYSE?token=LOGO_DEV_PUBLISHABLE_KEY\" alt=\"New York Stock Exchange logo\" />"
          },
          {
            "lang": "html",
            "label": "By index",
            "source": "<img src=\"https://img.logo.dev/index/SPX?token=LOGO_DEV_PUBLISHABLE_KEY\" alt=\"S&amp;P 500 logo\" />"
          },
          {
            "lang": "jsx",
            "label": "By domain",
            "source": "<img\n  src={`https://img.logo.dev/stripe.com?token=${process.env.NEXT_PUBLIC_LOGO_DEV_KEY}`}\n  alt=\"Stripe logo\"\n/>"
          },
          {
            "lang": "jsx",
            "label": "By name",
            "source": "<img\n  src={`https://img.logo.dev/name/Stripe?token=${process.env.NEXT_PUBLIC_LOGO_DEV_KEY}`}\n  alt=\"Stripe logo\"\n/>"
          },
          {
            "lang": "jsx",
            "label": "By ticker",
            "source": "<img\n  src={`https://img.logo.dev/ticker/AAPL?token=${process.env.NEXT_PUBLIC_LOGO_DEV_KEY}`}\n  alt=\"Apple logo\"\n/>"
          },
          {
            "lang": "jsx",
            "label": "By ISIN",
            "source": "<img\n  src={`https://img.logo.dev/isin/US0378331005?token=${process.env.NEXT_PUBLIC_LOGO_DEV_KEY}`}\n  alt=\"Apple logo\"\n/>"
          },
          {
            "lang": "jsx",
            "label": "By crypto",
            "source": "<img\n  src={`https://img.logo.dev/crypto/BTC?token=${process.env.NEXT_PUBLIC_LOGO_DEV_KEY}`}\n  alt=\"Bitcoin logo\"\n/>"
          },
          {
            "lang": "jsx",
            "label": "By exchange",
            "source": "<img\n  src={`https://img.logo.dev/exchange/NYSE?token=${process.env.NEXT_PUBLIC_LOGO_DEV_KEY}`}\n  alt=\"New York Stock Exchange logo\"\n/>"
          },
          {
            "lang": "jsx",
            "label": "By index",
            "source": "<img\n  src={`https://img.logo.dev/index/SPX?token=${process.env.NEXT_PUBLIC_LOGO_DEV_KEY}`}\n  alt=\"S&amp;P 500 logo\"\n/>"
          },
          {
            "lang": "bash",
            "label": "By domain",
            "source": "# Prints the status code and image type. The logo itself is not saved.\ncurl --silent --output /dev/null \\\n  --write-out \"%{http_code} %{content_type}\\n\" \\\n  \"https://img.logo.dev/stripe.com?token=LOGO_DEV_PUBLISHABLE_KEY&size=128&format=png\""
          },
          {
            "lang": "bash",
            "label": "By name",
            "source": "# Prints the status code and image type. The logo itself is not saved.\ncurl --silent --output /dev/null \\\n  --write-out \"%{http_code} %{content_type}\\n\" \\\n  \"https://img.logo.dev/name/Stripe?token=LOGO_DEV_PUBLISHABLE_KEY&size=128&format=png\""
          },
          {
            "lang": "bash",
            "label": "By ticker",
            "source": "# Prints the status code and image type. The logo itself is not saved.\ncurl --silent --output /dev/null \\\n  --write-out \"%{http_code} %{content_type}\\n\" \\\n  \"https://img.logo.dev/ticker/AAPL?token=LOGO_DEV_PUBLISHABLE_KEY&size=128&format=png\""
          },
          {
            "lang": "bash",
            "label": "By ISIN",
            "source": "# Prints the status code and image type. The logo itself is not saved.\ncurl --silent --output /dev/null \\\n  --write-out \"%{http_code} %{content_type}\\n\" \\\n  \"https://img.logo.dev/isin/US0378331005?token=LOGO_DEV_PUBLISHABLE_KEY&size=128&format=png\""
          },
          {
            "lang": "bash",
            "label": "By crypto",
            "source": "# Prints the status code and image type. The logo itself is not saved.\ncurl --silent --output /dev/null \\\n  --write-out \"%{http_code} %{content_type}\\n\" \\\n  \"https://img.logo.dev/crypto/BTC?token=LOGO_DEV_PUBLISHABLE_KEY&size=128&format=png\""
          },
          {
            "lang": "bash",
            "label": "By exchange",
            "source": "# Prints the status code and image type. The logo itself is not saved.\ncurl --silent --output /dev/null \\\n  --write-out \"%{http_code} %{content_type}\\n\" \\\n  \"https://img.logo.dev/exchange/NYSE?token=LOGO_DEV_PUBLISHABLE_KEY&size=128&format=png\""
          },
          {
            "lang": "bash",
            "label": "By index",
            "source": "# Prints the status code and image type. The logo itself is not saved.\ncurl --silent --output /dev/null \\\n  --write-out \"%{http_code} %{content_type}\\n\" \\\n  \"https://img.logo.dev/index/SPX?token=LOGO_DEV_PUBLISHABLE_KEY&size=128&format=png\""
          }
        ]
      }
    },
    "/name/{brand}": {
      "servers": [
        {
          "url": "https://img.logo.dev"
        }
      ],
      "get": {
        "tags": [
          "Logo CDN"
        ],
        "summary": "Get a logo by brand name",
        "description": "Returns the best-match logo for a brand name. URL-encode names with spaces or special characters. This is a convenience wrapper over Search that returns the top result's logo. See [Get a logo](/api-reference/logo-cdn/get-a-logo) for every lookup.",
        "operationId": "getLogoByName",
        "security": [
          {
            "publishableKey": []
          }
        ],
        "parameters": [
          {
            "name": "brand",
            "in": "path",
            "required": true,
            "description": "URL-encoded brand name.",
            "schema": {
              "type": "string",
              "examples": [
                "shopify"
              ]
            }
          },
          {
            "name": "strategy",
            "in": "query",
            "required": false,
            "description": "`match` returns the closest name. `suggest` returns the most popular prefix match.",
            "schema": {
              "type": "string",
              "enum": [
                "match",
                "suggest"
              ],
              "default": "match"
            }
          },
          {
            "$ref": "#/components/parameters/size"
          },
          {
            "$ref": "#/components/parameters/height"
          },
          {
            "$ref": "#/components/parameters/width"
          },
          {
            "$ref": "#/components/parameters/format"
          },
          {
            "$ref": "#/components/parameters/theme"
          },
          {
            "$ref": "#/components/parameters/greyscale"
          },
          {
            "$ref": "#/components/parameters/retina"
          },
          {
            "$ref": "#/components/parameters/fallback"
          },
          {
            "$ref": "#/components/parameters/redirect"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/LogoImage"
          },
          "202": {
            "$ref": "#/components/responses/CdnPending"
          },
          "400": {
            "$ref": "#/components/responses/CdnBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/CdnForbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/CdnServerError"
          }
        }
      }
    },
    "/ticker/{ticker}": {
      "servers": [
        {
          "url": "https://img.logo.dev"
        }
      ],
      "get": {
        "tags": [
          "Logo CDN"
        ],
        "summary": "Get a logo by stock ticker",
        "description": "Returns a company's logo for a stock ticker symbol. Defaults to US exchanges; append an exchange suffix for others (e.g. `AAPL.L`, `7203.T`). See [Get a logo](/api-reference/logo-cdn/get-a-logo) for every lookup.",
        "operationId": "getLogoByTicker",
        "security": [
          {
            "publishableKey": []
          }
        ],
        "parameters": [
          {
            "name": "ticker",
            "in": "path",
            "required": true,
            "description": "Stock ticker symbol, optionally with an exchange suffix.",
            "schema": {
              "type": "string",
              "examples": [
                "AAPL"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/size"
          },
          {
            "$ref": "#/components/parameters/height"
          },
          {
            "$ref": "#/components/parameters/width"
          },
          {
            "$ref": "#/components/parameters/format"
          },
          {
            "$ref": "#/components/parameters/theme"
          },
          {
            "$ref": "#/components/parameters/greyscale"
          },
          {
            "$ref": "#/components/parameters/retina"
          },
          {
            "$ref": "#/components/parameters/fallback"
          },
          {
            "$ref": "#/components/parameters/redirect"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/LogoImage"
          },
          "202": {
            "$ref": "#/components/responses/CdnPending"
          },
          "400": {
            "$ref": "#/components/responses/CdnBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/CdnForbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/CdnServerError"
          }
        }
      }
    },
    "/isin/{isin}": {
      "servers": [
        {
          "url": "https://img.logo.dev"
        }
      ],
      "get": {
        "tags": [
          "Logo CDN"
        ],
        "summary": "Get a logo by ISIN",
        "description": "Returns a company's logo for an ISIN (International Securities Identification Number). See [Get a logo](/api-reference/logo-cdn/get-a-logo) for every lookup.",
        "operationId": "getLogoByIsin",
        "security": [
          {
            "publishableKey": []
          }
        ],
        "parameters": [
          {
            "name": "isin",
            "in": "path",
            "required": true,
            "description": "ISIN code.",
            "schema": {
              "type": "string",
              "examples": [
                "US0378331005"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/size"
          },
          {
            "$ref": "#/components/parameters/height"
          },
          {
            "$ref": "#/components/parameters/width"
          },
          {
            "$ref": "#/components/parameters/format"
          },
          {
            "$ref": "#/components/parameters/theme"
          },
          {
            "$ref": "#/components/parameters/greyscale"
          },
          {
            "$ref": "#/components/parameters/retina"
          },
          {
            "$ref": "#/components/parameters/fallback"
          },
          {
            "$ref": "#/components/parameters/redirect"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/LogoImage"
          },
          "202": {
            "$ref": "#/components/responses/CdnPending"
          },
          "400": {
            "$ref": "#/components/responses/CdnBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/CdnForbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/CdnServerError"
          }
        }
      }
    },
    "/crypto/{symbol}": {
      "servers": [
        {
          "url": "https://img.logo.dev"
        }
      ],
      "get": {
        "tags": [
          "Logo CDN"
        ],
        "summary": "Get a cryptocurrency logo by symbol",
        "description": "Returns a cryptocurrency logo for a coin symbol such as `btc` or `eth`. See [Get a logo](/api-reference/logo-cdn/get-a-logo) for every lookup.",
        "operationId": "getLogoByCrypto",
        "security": [
          {
            "publishableKey": []
          }
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "description": "Cryptocurrency symbol.",
            "schema": {
              "type": "string",
              "examples": [
                "btc"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/size"
          },
          {
            "$ref": "#/components/parameters/height"
          },
          {
            "$ref": "#/components/parameters/width"
          },
          {
            "$ref": "#/components/parameters/format"
          },
          {
            "$ref": "#/components/parameters/theme"
          },
          {
            "$ref": "#/components/parameters/greyscale"
          },
          {
            "$ref": "#/components/parameters/retina"
          },
          {
            "$ref": "#/components/parameters/fallback"
          },
          {
            "$ref": "#/components/parameters/redirect"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/LogoImage"
          },
          "202": {
            "$ref": "#/components/responses/CdnPending"
          },
          "400": {
            "$ref": "#/components/responses/CdnBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/CdnForbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/CdnServerError"
          }
        }
      }
    },
    "/exchange/{exchange}": {
      "servers": [
        {
          "url": "https://img.logo.dev"
        }
      ],
      "get": {
        "tags": [
          "Logo CDN"
        ],
        "summary": "Get a logo by stock exchange",
        "description": "Returns the logo for a stock exchange by its code, e.g. `NYSE`, `NASDAQ`, or `LSE`. See [Get a logo](/api-reference/logo-cdn/get-a-logo) for every lookup.",
        "operationId": "getLogoByExchange",
        "security": [
          {
            "publishableKey": []
          }
        ],
        "parameters": [
          {
            "name": "exchange",
            "in": "path",
            "required": true,
            "description": "Stock exchange code.",
            "schema": {
              "type": "string",
              "examples": [
                "NYSE"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/size"
          },
          {
            "$ref": "#/components/parameters/height"
          },
          {
            "$ref": "#/components/parameters/width"
          },
          {
            "$ref": "#/components/parameters/format"
          },
          {
            "$ref": "#/components/parameters/theme"
          },
          {
            "$ref": "#/components/parameters/greyscale"
          },
          {
            "$ref": "#/components/parameters/retina"
          },
          {
            "$ref": "#/components/parameters/fallback"
          },
          {
            "$ref": "#/components/parameters/redirect"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/LogoImage"
          },
          "202": {
            "$ref": "#/components/responses/CdnPending"
          },
          "400": {
            "$ref": "#/components/responses/CdnBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/CdnForbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/CdnServerError"
          }
        }
      }
    },
    "/index/{symbol}": {
      "servers": [
        {
          "url": "https://img.logo.dev"
        }
      ],
      "get": {
        "tags": [
          "Logo CDN"
        ],
        "summary": "Get a logo by market index",
        "description": "Returns the logo for a market index by its symbol, e.g. `SPX`, `DJI`, or `IXIC`. See [Get a logo](/api-reference/logo-cdn/get-a-logo) for every lookup.",
        "operationId": "getLogoByIndex",
        "security": [
          {
            "publishableKey": []
          }
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "description": "Market index symbol.",
            "schema": {
              "type": "string",
              "examples": [
                "SPX"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/size"
          },
          {
            "$ref": "#/components/parameters/height"
          },
          {
            "$ref": "#/components/parameters/width"
          },
          {
            "$ref": "#/components/parameters/format"
          },
          {
            "$ref": "#/components/parameters/theme"
          },
          {
            "$ref": "#/components/parameters/greyscale"
          },
          {
            "$ref": "#/components/parameters/retina"
          },
          {
            "$ref": "#/components/parameters/fallback"
          },
          {
            "$ref": "#/components/parameters/redirect"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/LogoImage"
          },
          "202": {
            "$ref": "#/components/responses/CdnPending"
          },
          "400": {
            "$ref": "#/components/responses/CdnBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/CdnForbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/CdnServerError"
          }
        }
      }
    },
    "/transaction": {
      "servers": [
        {
          "url": "https://www.logo.dev/api",
          "description": "Transaction beta on Vercel"
        }
      ],
      "post": {
        "tags": [
          "Transaction Enrichment API"
        ],
        "summary": "Identify a merchant",
        "description": "Identify the merchant behind a merchant name or card descriptor. Every non-empty `transaction` returns one row: `matched` with a merchant domain, or `cleaned` with a display name and no domain.\n\nTransaction is a private beta with its own host and its own `tx_beta_` key. Errors use a single `error` string, not the Logo.dev API error object. Read the [Transaction guide](/transaction/introduction) for access, the daily allowance, and how to act on a row. Descriptor matching is experimental.",
        "operationId": "identifyMerchant",
        "x-mint": {
          "metadata": {
            "description": "Identify a merchant domain and brand record. Private beta with a [daily allowance](/transaction/introduction#daily-allowance)."
          }
        },
        "security": [
          {
            "transactionBetaKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "transaction"
                ],
                "properties": {
                  "transaction": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 1024,
                    "description": "The merchant name or card descriptor. The API trims surrounding whitespace, then the value must be 1 to 1,024 characters.",
                    "examples": [
                      "Starbucks"
                    ]
                  },
                  "country_code": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 2,
                    "description": "ISO 3166-1 alpha-2 country code, such as `US` or `GB`. Lowercase is accepted. The code is a hint for ambiguous names. It does not restrict results to that country. An unknown code returns `400`. With `transaction_context`, the codes `AQ`, `AX`, `TF`, and `VA` return `400`.",
                    "examples": [
                      "US"
                    ]
                  },
                  "transaction_context": {
                    "type": "object",
                    "additionalProperties": false,
                    "description": "The real transaction values. Send them to identify the other party as a person or an organization, and to name the platform the purchase ran through. With context, the response adds `entity_type`.\n\nWhen you send the object, `date`, `amount`, `currency`, and `entry_type` are required. The API fills in no placeholder values. Incomplete context returns `400` and does not count against the daily allowance.\n\nThe merchant string, the context, and the account holder details go to Logo.dev's enrichment provider. Each lookup carries its own context. The beta keeps no account history across lookups.",
                    "required": [
                      "date",
                      "amount",
                      "currency",
                      "entry_type"
                    ],
                    "properties": {
                      "date": {
                        "type": "string",
                        "format": "date",
                        "description": "The posted date as `YYYY-MM-DD`, from `1970-01-01` to tomorrow in UTC.",
                        "examples": [
                          "2026-09-04"
                        ]
                      },
                      "amount": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1000000000000,
                        "description": "A nonnegative amount in the currency's major units, such as dollars, up to 1,000,000,000,000.",
                        "examples": [
                          10
                        ]
                      },
                      "currency": {
                        "type": "string",
                        "description": "An ISO 4217 code that the beta supports. Lowercase is accepted. An unsupported code returns `400`. Supported codes: EUR, AED, AFN, XCD, ALL, AMD, AOA, ARS, USD, AUD, AWG, AZN, BAM, BBD, BDT, XOF, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, INR, NOK, BWP, BYR, BZD, CAD, CDF, XAF, CHF, NZD, CLP, CNY, COP, CRC, CUP, CVE, ANG, CZK, DJF, DKK, DOP, DZD, EGP, MAD, ERN, ETB, FJD, FKP, GBP, GEL, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HUF, IDR, ILS, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, ZAR, LYD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MUR, MVR, MWK, MXN, MYR, MZN, XPF, NGN, NIO, NPR, OMR, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLL, SOS, SRD, SSP, STD, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, UYU, UZS, VEF, VND, VUV, WST, YER, ZMW, ZWL, HRK.",
                        "examples": [
                          "USD"
                        ]
                      },
                      "entry_type": {
                        "type": "string",
                        "enum": [
                          "incoming",
                          "outgoing"
                        ],
                        "description": "The direction of the money, from the bank account owner's side."
                      },
                      "account_holder": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "type"
                        ],
                        "description": "The bank account owner. Send it when the account holder matters, for example to tell a person from a business.",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "consumer",
                              "business"
                            ],
                            "description": "Whether the bank account owner is a consumer or a business."
                          },
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 1024,
                            "description": "The bank account owner's name. The API trims surrounding whitespace. Send it when a descriptor holds several names and the owner's name helps pick out the other party."
                          }
                        }
                      }
                    }
                  }
                },
                "description": "The body takes no fields other than these. An unrecognized field returns `400`."
              },
              "examples": {
                "merchant": {
                  "value": {
                    "transaction": "Starbucks",
                    "country_code": "US"
                  }
                },
                "context": {
                  "value": {
                    "transaction": "SQ* STARBUCKS 10 Union Sq",
                    "country_code": "US",
                    "transaction_context": {
                      "date": "2026-09-04",
                      "amount": 10,
                      "currency": "USD",
                      "entry_type": "outgoing",
                      "account_holder": {
                        "type": "consumer"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A `matched` row or a `cleaned` row. Every non-empty `transaction` returns one. The examples are illustrative: they show the shape, not the result for a particular string.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Your daily request limit. See [daily allowance](/transaction/introduction#daily-allowance).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests remaining after this call.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Next midnight UTC as Unix seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "domain",
                    "name",
                    "entity_id",
                    "logo_url",
                    "parent",
                    "intermediary",
                    "status",
                    "match_type",
                    "confidence"
                  ],
                  "properties": {
                    "domain": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The merchant's domain. `null` on a `cleaned` row."
                    },
                    "name": {
                      "type": "string",
                      "description": "The display name. Present for every non-empty `transaction`.\n\n- When Brand resolves a brand for the domain, its name wins.\n- Otherwise it is the name the transaction lookup returned.\n- On a `cleaned` row it is the descriptor, tidied into a display name.\n\nDescriptors arrive in one case, so a tidied name reads `Fedex`, not `FedEx`. When the Logo.dev brand corpus holds the same name, a `cleaned` row takes the company's own spelling. Only the name changes. The row stays `cleaned` at the same `confidence`.",
                      "examples": [
                        "Starbucks"
                      ]
                    },
                    "entity_type": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "enum": [
                        "person",
                        "organization",
                        null
                      ],
                      "description": "Present only when the request includes `transaction_context`. `person` or `organization`, as the enrichment provider classified the other party, or `null` when it classified nobody.\n\nA `null` does not mean the API found no merchant. A later stage can identify one, so a `matched` row can carry `null` here. A person always comes back as a `cleaned` row.\n\nWithout context, the API does not detect people. It treats a personal name as a merchant name, so `Jane Doe` can match an organization with a similar name."
                    },
                    "entity_id": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The merchant's Logo.dev brand id, the same id Brand uses. A brand keeps its id when its domain changes, so key your records on `entity_id`, not `domain`.\n\nA row with an id has two sources that agree: the pipeline identified the merchant, and Brand resolves a brand for the same domain. Branch on `entity_id`, not on `confidence`.\n\n`null` on a `cleaned` row, and on a `matched` row when Brand resolves no brand for the domain. A domain that Logo.dev has not indexed yet also returns `null`. A later lookup can return an id after the first crawl finishes.",
                      "examples": [
                        "brand_5k2mq8h0000g00400000000017"
                      ]
                    },
                    "logo_url": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "uri",
                      "description": "The Logo.dev CDN URL for the merchant's logo. `null` on a `cleaned` row. The URL has no token. Add your publishable key before you show it: `https://img.logo.dev/starbucks.com?token=LOGO_DEV_PUBLISHABLE_KEY`. The same applies to `logo_url` in `parent` and `intermediary`.",
                      "examples": [
                        "https://img.logo.dev/starbucks.com"
                      ]
                    },
                    "parent": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "The company that owns the merchant, or `null`. It sits beside the merchant and never replaces it: a lookup for Facebook returns Facebook in `domain`, with Meta here.\n\nGroup totals on `parent.entity_id` to add up one company's brands. Facebook, Instagram, and WhatsApp become Meta. The owner's `entity_id` is the same id it has when it is the merchant, so the two join on one column.\n\n`parent` is the nearest owner that Logo.dev records, not the top of the chain. Jaguar returns JLR, and JLR returns Tata Motors. To find the top, look up each parent in turn.\n\nCoverage is thin. Logo.dev records a small, hand-verified list of ownership pairs, so most rows return `null`. A `null` means Logo.dev records no owner for this merchant. It does not mean the merchant is independent. `parent` is also `null` on a `cleaned` row, and when Brand resolves no brand for the owner's domain.\n\nA rebrand onto a new domain can come back as a new identity. `parent` joins it to the old one only when both domains are in the ownership list.",
                      "required": [
                        "domain",
                        "name",
                        "entity_id",
                        "logo_url"
                      ],
                      "properties": {
                        "domain": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The owner's domain.",
                          "examples": [
                            "meta.com"
                          ]
                        },
                        "name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The owner's display name, from Brand.",
                          "examples": [
                            "Meta"
                          ]
                        },
                        "entity_id": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The owner's Logo.dev brand id, the same id Brand uses.",
                          "examples": [
                            "brand_9r3hx5f0000g00400000000021"
                          ]
                        },
                        "logo_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The Logo.dev CDN URL for the owner's logo, with no token.",
                          "examples": [
                            "https://img.logo.dev/meta.com"
                          ]
                        }
                      }
                    },
                    "intermediary": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "The platform the purchase ran through, or `null`. The merchant stays in `domain`. A coffee paid through Square returns the coffee shop, with Square here. The platform gets the same lookup as the merchant, keyed by its own domain, so you can group totals by platform on `intermediary.entity_id`.\n\n`intermediary` is `null` in these cases:\n\n- The platform sold the item itself. A DashPass subscription is a purchase from DoorDash, so that row names DoorDash in `domain`.\n- The API identified no platform. This does not mean no platform was involved.\n\nWithout `transaction_context`, the API fills `intermediary` only when the enrichment provider answers the whole descriptor with a platform. The merchant checks then refuse the platform as the seller, and the API looks up the text after the prefix on its own. When the provider resolves the seller directly from a prefixed descriptor, `intermediary` stays `null` on a correct row. Send `transaction_context` when you need the platform named reliably.\n\nA `cleaned` row can keep a platform. This happens when the checks reject the platform's domain and the text after the prefix identifies nobody.",
                      "required": [
                        "domain",
                        "name",
                        "entity_id",
                        "logo_url"
                      ],
                      "properties": {
                        "domain": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The platform's domain, or `null`.",
                          "examples": [
                            "squareup.com"
                          ]
                        },
                        "name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The platform's display name, or `null`. Brand's name wins when there is one.",
                          "examples": [
                            "Square"
                          ]
                        },
                        "entity_id": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The platform's Logo.dev brand id, or `null` when Brand resolves no brand for its domain.",
                          "examples": [
                            "brand_7c1pz4d0000g00400000000052"
                          ]
                        },
                        "logo_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The Logo.dev CDN URL for the platform's logo, with no token, or `null` when it has no domain.",
                          "examples": [
                            "https://img.logo.dev/squareup.com"
                          ]
                        }
                      }
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "matched",
                        "cleaned"
                      ],
                      "description": "`matched` when the API identified a merchant domain. `cleaned` when it did not. There is no not-found result: a `cleaned` row is an answer, with a tidied display name and `null` in `domain`, `entity_id`, `logo_url`, and `parent`.\n\nA row is `cleaned` for one of two reasons:\n\n- Nothing identified the descriptor.\n- A candidate domain failed a merchant check. The checks catch repeated hostnames, directory and profile hosts, a known platform in the merchant's place, and known descriptor conflicts. They run on saved results and on new lookups.\n\nA failed check drops the domain and uses the tidied descriptor as the name. A platform that a check removes from the merchant's place still comes back in `intermediary`. An organization with no usable website also comes back `cleaned`. The API never puts a payment processor's or parent company's domain in place of the merchant's."
                    },
                    "match_type": {
                      "type": "string",
                      "enum": [
                        "enriched_context",
                        "descriptor_domain",
                        "resolved_entity",
                        "searched_name",
                        "cleaned_descriptor"
                      ],
                      "description": "The pipeline stage that produced the row, strongest first. The set is closed.\n\n- `enriched_context`: identified from the full transaction, with entry type and account holder.\n- `descriptor_domain`: the descriptor printed the merchant's own domain.\n- `resolved_entity`: identified from the descriptor alone, with no transaction context.\n- `searched_name`: the Logo.dev brand corpus recognized the cleaned name.\n- `cleaned_descriptor`: nothing identified the merchant. `name` holds the tidied descriptor.\n\n`descriptor_domain` and `searched_name` are fallbacks. They run only when the enrichment provider identifies nobody. A descriptor that the provider recognizes never reaches them: `CHEWY.COM XXX-XXX-7111 FL` prints a domain and still returns `resolved_entity`. Both fallbacks face the same merchant checks, so a row that fails them comes back `cleaned`.\n\nRead `match_type` from the row. Do not predict it from the descriptor, because the same string can take a different path as the provider's coverage changes."
                    },
                    "confidence": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1,
                      "description": "A score from 0 to 1. Two inputs set it: the `match_type` that produced the row, and whether Brand resolves a brand for the same domain. A printed domain scores above a name resolved from the descriptor, and a corpus search scores below it. A failed merchant check sends the row to the floor. A `matched` row with no brand has a lower score and a `null` `entity_id`.\n\nThe same input always gets the same score, so two runs of a batch compare cleanly.\n\nLogo.dev publishes no cut-off, because the right line depends on what the row feeds. Use the score to rank and triage, for example to sort a review queue. To branch, read `entity_id`. Logo.dev can recalibrate the score without changing which rows have an id. A high score does not guarantee accuracy."
                    }
                  }
                },
                "examples": {
                  "matched": {
                    "value": {
                      "domain": "starbucks.com",
                      "name": "Starbucks",
                      "entity_id": "brand_5k2mq8h0000g00400000000017",
                      "logo_url": "https://img.logo.dev/starbucks.com",
                      "parent": null,
                      "intermediary": null,
                      "status": "matched",
                      "match_type": "resolved_entity",
                      "confidence": 0.8
                    }
                  },
                  "matchedWithContext": {
                    "value": {
                      "domain": "starbucks.com",
                      "name": "Starbucks",
                      "entity_type": "organization",
                      "entity_id": "brand_5k2mq8h0000g00400000000017",
                      "logo_url": "https://img.logo.dev/starbucks.com",
                      "parent": null,
                      "intermediary": {
                        "domain": "squareup.com",
                        "name": "Square",
                        "entity_id": "brand_7c1pz4d0000g00400000000052",
                        "logo_url": "https://img.logo.dev/squareup.com"
                      },
                      "status": "matched",
                      "match_type": "enriched_context",
                      "confidence": 0.95
                    }
                  },
                  "ownedByAParent": {
                    "value": {
                      "domain": "facebook.com",
                      "name": "Facebook",
                      "entity_id": "brand_2n8vt6b0000g00400000000038",
                      "logo_url": "https://img.logo.dev/facebook.com",
                      "parent": {
                        "domain": "meta.com",
                        "name": "Meta",
                        "entity_id": "brand_9r3hx5f0000g00400000000021",
                        "logo_url": "https://img.logo.dev/meta.com"
                      },
                      "intermediary": null,
                      "status": "matched",
                      "match_type": "resolved_entity",
                      "confidence": 0.8
                    }
                  },
                  "uncorroborated": {
                    "value": {
                      "domain": "bluedoorpub.com",
                      "name": "Blue Door Pub",
                      "entity_id": null,
                      "logo_url": "https://img.logo.dev/bluedoorpub.com",
                      "parent": null,
                      "intermediary": null,
                      "status": "matched",
                      "match_type": "resolved_entity",
                      "confidence": 0.55
                    }
                  },
                  "cleaned": {
                    "value": {
                      "domain": null,
                      "name": "Jane Doe",
                      "entity_id": null,
                      "logo_url": null,
                      "parent": null,
                      "intermediary": null,
                      "status": "cleaned",
                      "match_type": "cleaned_descriptor",
                      "confidence": 0.1
                    }
                  },
                  "cleanedWithPlatform": {
                    "value": {
                      "domain": null,
                      "name": "Xqzv Deli",
                      "entity_type": "organization",
                      "entity_id": null,
                      "logo_url": null,
                      "parent": null,
                      "intermediary": {
                        "domain": "squareup.com",
                        "name": "Square",
                        "entity_id": "brand_7c1pz4d0000g00400000000052",
                        "logo_url": "https://img.logo.dev/squareup.com"
                      },
                      "status": "cleaned",
                      "match_type": "cleaned_descriptor",
                      "confidence": 0.1
                    }
                  },
                  "person": {
                    "value": {
                      "domain": null,
                      "name": "Jane Doe",
                      "entity_type": "person",
                      "entity_id": null,
                      "logo_url": null,
                      "parent": null,
                      "intermediary": null,
                      "status": "cleaned",
                      "match_type": "cleaned_descriptor",
                      "confidence": 0.1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "The request failed validation: invalid JSON, an empty or oversized `transaction`, an unknown `country_code`, invalid or incomplete `transaction_context`, or an unknown field. It does not count against the daily allowance.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "invalidInput": {
                    "value": {
                      "error": "Provide transaction (1–1,024 characters), an optional country_code, and optional transaction_context. Context requires a valid date, nonnegative amount, supported currency, and incoming/outgoing entry_type. Account-holder details require consumer/business type. Unknown fields are rejected."
                    }
                  },
                  "invalidJson": {
                    "value": {
                      "error": "Invalid JSON"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "The `Authorization` header is missing, or the beta key is malformed, unknown, or replaced by a newer key.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "malformedKey": {
                    "value": {
                      "error": "Invalid transaction beta key"
                    }
                  },
                  "unknownKey": {
                    "value": {
                      "error": "Unauthorized"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "The beta is not on for this account. Access belongs to a Logo.dev account, so this applies to everyone on it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "noAccess": {
                    "value": {
                      "error": "Transaction beta access is not enabled"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "Another request is already looking up the same transaction. Wait for `Retry-After` and send the request again to read the saved result. The original request, the `409`, and the retry all count against the daily allowance.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "inProgress": {
                    "value": {
                      "error": "This transaction is already being looked up. Retry shortly."
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Your daily request limit. See [daily allowance](/transaction/introduction#daily-allowance).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests remaining after this call.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Next midnight UTC as Unix seconds.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before you retry. Always `2`.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "413": {
            "description": "The request body is larger than 8,192 bytes.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "tooLarge": {
                    "value": {
                      "error": "Request body too large"
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "The `Content-Type` is not `application/json`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "wrongType": {
                    "value": {
                      "error": "Use Content-Type: application/json"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "A rate limit applies. Wait for `Retry-After` before you send the request again.\n\n- The daily allowance is spent. The response has the usage headers, and `Retry-After` counts the seconds to the next midnight UTC.\n- More than 60 requests in one minute. The response has `Retry-After` and no usage headers.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "dailyLimit": {
                    "value": {
                      "error": "Daily limit of beta requests reached"
                    }
                  },
                  "burstLimit": {
                    "value": {
                      "error": "Too many requests"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Your daily request limit. See [daily allowance](/transaction/introduction#daily-allowance).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests remaining after this call.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Next midnight UTC as Unix seconds.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before you retry.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Enrichment, storage, or the access check is unavailable. The API returns this error, not a `cleaned` row. A failed lookup still counts against the daily allowance.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "unavailable": {
                    "value": {
                      "error": "Transaction is temporarily unavailable"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Your daily request limit. See [daily allowance](/transaction/introduction#daily-allowance).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests remaining after this call.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Next midnight UTC as Unix seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/v2/brands": {
      "get": {
        "tags": [
          "Brands"
        ],
        "summary": "Look up a brand",
        "description": "Returns a brand's profile from one identifier: a domain, ticker, ISIN, crypto symbol, or name. Send exactly one. A brand Logo.dev has not indexed yet returns `202` while it is fetched; retry after 30 seconds. Costs API credits at the rate in [API credits](/platform/credits#what-each-request-costs). Billed once per brand domain per 24 hours, and only when the brand is ready. Merchant descriptors are not accepted yet.",
        "operationId": "v2GetBrand",
        "x-mint": {
          "metadata": {
            "description": "Look up a brand by domain, ticker, ISIN, crypto symbol, or name and get its name, colors, socials, logo, and brandmark.",
            "tag": "5 credits"
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2Domain"
          },
          {
            "$ref": "#/components/parameters/V2Ticker"
          },
          {
            "$ref": "#/components/parameters/V2Isin"
          },
          {
            "$ref": "#/components/parameters/V2Crypto"
          },
          {
            "$ref": "#/components/parameters/V2Name"
          },
          {
            "$ref": "#/components/parameters/V2NoSubscribe"
          },
          {
            "$ref": "#/components/parameters/V2Merchant"
          }
        ],
        "responses": {
          "200": {
            "description": "The brand is ready.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Brand"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "brand",
                    "id": "brand_4x0wr3g0000g00400000000004",
                    "slug": "stripe",
                    "domain": "stripe.com",
                    "status": "ready",
                    "name": "Stripe",
                    "description": "Payments infrastructure for the internet.",
                    "indexed_at": "2026-09-01T12:00:00Z",
                    "is_profane": false,
                    "socials": {
                      "twitter": "https://x.com/stripe",
                      "linkedin": "https://www.linkedin.com/company/stripe"
                    },
                    "colors": [
                      {
                        "r": 99,
                        "g": 91,
                        "b": 255,
                        "hex": "#635bff",
                        "oklch": {
                          "l": 0.5854,
                          "c": 0.2416,
                          "h": 277.12
                        }
                      }
                    ],
                    "logo": {
                      "url": "https://img.logo.dev/assets/SEALED_TOKEN",
                      "etag": "9f2c1e7a4b8d3f60",
                      "blurhash": "LKO2?U%2Tw=w]~RBVZRi};RPxuwH",
                      "source": {
                        "width": 512,
                        "height": 512,
                        "format": "svg",
                        "has_transparency": true,
                        "is_vector": true
                      },
                      "last_updated_at": "2026-08-01T09:00:00Z",
                      "expires_at": "2026-09-28T13:00:00Z"
                    },
                    "brandmark": null,
                    "social_banners": []
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    },
                    "subscription": {
                      "status": "subscribed"
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Logo.dev is still indexing this brand. Retry after `Retry-After` seconds; retries are not billed.",
            "headers": {
              "Retry-After": {
                "$ref": "#/components/headers/V2RetryAfter"
              },
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "brand",
                    "status": "not_indexed"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    },
                    "pending": {
                      "reason": "indexing",
                      "message": "This brand is being indexed for the first time and is usually ready within a minute. Retry the same request after 30 seconds; retries are not billed.",
                      "retry_after_seconds": 30,
                      "expires_in_seconds": 300,
                      "webhook": false,
                      "doc_url": "https://www.logo.dev/docs/platform/errors#not-found-vs-still-indexing-202"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Send exactly one identifier, in a valid format.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "exactly one of domain, ticker, isin, crypto, name, merchant is required"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/V2PaymentRequired"
          },
          "403": {
            "$ref": "#/components/responses/V2Forbidden"
          },
          "404": {
            "description": "No brand matches this identifier.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    },
                    "docs_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation for this status."
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "brand",
                    "status": "not_found"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    }
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/V2RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/V2ServerError"
          }
        },
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "By domain",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands?domain=stripe.com\""
          },
          {
            "lang": "bash",
            "label": "By ticker",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands?ticker=AAPL\""
          },
          {
            "lang": "bash",
            "label": "By ISIN",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands?isin=US0378331005\""
          },
          {
            "lang": "bash",
            "label": "By crypto",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands?crypto=BTC\""
          },
          {
            "lang": "bash",
            "label": "By name",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands?name=Stripe\""
          },
          {
            "lang": "javascript",
            "label": "By domain",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands?domain=stripe.com\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By ticker",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands?ticker=AAPL\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By ISIN",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands?isin=US0378331005\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By crypto",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands?crypto=BTC\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By name",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands?name=Stripe\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "python",
            "label": "By domain",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands\",\n    params={\"domain\": \"stripe.com\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By ticker",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands\",\n    params={\"ticker\": \"AAPL\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By ISIN",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands\",\n    params={\"isin\": \"US0378331005\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By crypto",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands\",\n    params={\"crypto\": \"BTC\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By name",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands\",\n    params={\"name\": \"Stripe\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          }
        ]
      }
    },
    "/v2/brands/{id}": {
      "get": {
        "tags": [
          "Brands"
        ],
        "summary": "Get a brand by id",
        "description": "Returns a brand's profile by its id, the `data.id` from an earlier response. The response is the same as looking the brand up by domain, and it is billed the same way.",
        "operationId": "v2GetBrandById",
        "x-mint": {
          "metadata": {
            "description": "Fetch a brand's profile by its stable brand id.",
            "tag": "5 credits"
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2BrandIdPath"
          },
          {
            "$ref": "#/components/parameters/V2NoSubscribe"
          }
        ],
        "responses": {
          "200": {
            "description": "The brand is ready.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Brand"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "brand",
                    "id": "brand_4x0wr3g0000g00400000000004",
                    "slug": "stripe",
                    "domain": "stripe.com",
                    "status": "ready",
                    "name": "Stripe",
                    "description": "Payments infrastructure for the internet.",
                    "indexed_at": "2026-09-01T12:00:00Z",
                    "is_profane": false,
                    "socials": {
                      "twitter": "https://x.com/stripe",
                      "linkedin": "https://www.linkedin.com/company/stripe"
                    },
                    "colors": [
                      {
                        "r": 99,
                        "g": 91,
                        "b": 255,
                        "hex": "#635bff",
                        "oklch": {
                          "l": 0.5854,
                          "c": 0.2416,
                          "h": 277.12
                        }
                      }
                    ],
                    "logo": {
                      "url": "https://img.logo.dev/assets/SEALED_TOKEN",
                      "etag": "9f2c1e7a4b8d3f60",
                      "blurhash": "LKO2?U%2Tw=w]~RBVZRi};RPxuwH",
                      "source": {
                        "width": 512,
                        "height": 512,
                        "format": "svg",
                        "has_transparency": true,
                        "is_vector": true
                      },
                      "last_updated_at": "2026-08-01T09:00:00Z",
                      "expires_at": "2026-09-28T13:00:00Z"
                    },
                    "brandmark": null,
                    "social_banners": []
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    },
                    "subscription": {
                      "status": "subscribed"
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Logo.dev is still indexing this brand. Retry after `Retry-After` seconds; retries are not billed.",
            "headers": {
              "Retry-After": {
                "$ref": "#/components/headers/V2RetryAfter"
              },
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "brand",
                    "status": "not_indexed"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    },
                    "pending": {
                      "reason": "indexing",
                      "message": "This brand is being indexed for the first time and is usually ready within a minute. Retry the same request after 30 seconds; retries are not billed.",
                      "retry_after_seconds": 30,
                      "expires_in_seconds": 300,
                      "webhook": false,
                      "doc_url": "https://www.logo.dev/docs/platform/errors#not-found-vs-still-indexing-202"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "The brand id is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "id must start with \"brand_\": bad format",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/V2PaymentRequired"
          },
          "403": {
            "$ref": "#/components/responses/V2Forbidden"
          },
          "404": {
            "description": "No brand matches this identifier.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    },
                    "docs_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation for this status."
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "brand",
                    "status": "not_found"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    }
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/V2RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/V2ServerError"
          }
        }
      }
    },
    "/v2/brands/logo": {
      "get": {
        "tags": [
          "Logos"
        ],
        "summary": "Get a logo",
        "description": "Returns the brand's square logo as JSON with a temporary download `url`, the source dimensions, and a placeholder blurhash. It does not return image bytes. Send exactly one identifier. Costs API credits at the rate in [API credits](/platform/credits#what-each-request-costs). Billed once per brand domain per 24 hours. A ready brand with no logo is still billed.",
        "operationId": "v2GetBrandLogo",
        "x-mint": {
          "metadata": {
            "description": "Get a brand's logo with a temporary download URL, dimensions, and blurhash.",
            "tag": "2 credits"
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2Domain"
          },
          {
            "$ref": "#/components/parameters/V2Ticker"
          },
          {
            "$ref": "#/components/parameters/V2Isin"
          },
          {
            "$ref": "#/components/parameters/V2Crypto"
          },
          {
            "$ref": "#/components/parameters/V2Name"
          },
          {
            "$ref": "#/components/parameters/V2Merchant"
          }
        ],
        "responses": {
          "200": {
            "description": "The brand is ready and has a logo.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2ImageResource"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "image",
                    "kind": "logo",
                    "brand_id": "brand_4x0wr3g0000g00400000000004",
                    "status": "ready",
                    "url": "https://img.logo.dev/assets/SEALED_TOKEN",
                    "etag": "9f2c1e7a4b8d3f60",
                    "blurhash": "LKO2?U%2Tw=w]~RBVZRi};RPxuwH",
                    "source": {
                      "width": 512,
                      "height": 512,
                      "format": "svg",
                      "has_transparency": true,
                      "is_vector": true
                    },
                    "last_updated_at": "2026-08-01T09:00:00Z",
                    "expires_at": "2026-09-28T13:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Logo.dev is still indexing this brand. Retry after `Retry-After` seconds; retries are not billed.",
            "headers": {
              "Retry-After": {
                "$ref": "#/components/headers/V2RetryAfter"
              },
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "image",
                    "status": "not_indexed"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    },
                    "pending": {
                      "reason": "indexing",
                      "message": "This brand is being indexed for the first time and is usually ready within a minute. Retry the same request after 30 seconds; retries are not billed.",
                      "retry_after_seconds": 30,
                      "expires_in_seconds": 300,
                      "webhook": false,
                      "doc_url": "https://www.logo.dev/docs/platform/errors#not-found-vs-still-indexing-202"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Send exactly one identifier, in a valid format.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "exactly one of domain, ticker, isin, crypto, name, merchant is required"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/V2PaymentRequired"
          },
          "403": {
            "$ref": "#/components/responses/V2Forbidden"
          },
          "404": {
            "description": "No brand matches, or the brand has no logo.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    },
                    "docs_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation for this status."
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "image",
                    "status": "not_found"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    }
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/V2RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/V2ServerError"
          }
        },
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "By domain",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/logo?domain=stripe.com\""
          },
          {
            "lang": "bash",
            "label": "By ticker",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/logo?ticker=AAPL\""
          },
          {
            "lang": "bash",
            "label": "By ISIN",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/logo?isin=US0378331005\""
          },
          {
            "lang": "bash",
            "label": "By crypto",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/logo?crypto=BTC\""
          },
          {
            "lang": "bash",
            "label": "By name",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/logo?name=Stripe\""
          },
          {
            "lang": "javascript",
            "label": "By domain",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/logo?domain=stripe.com\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By ticker",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/logo?ticker=AAPL\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By ISIN",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/logo?isin=US0378331005\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By crypto",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/logo?crypto=BTC\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By name",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/logo?name=Stripe\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "python",
            "label": "By domain",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/logo\",\n    params={\"domain\": \"stripe.com\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By ticker",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/logo\",\n    params={\"ticker\": \"AAPL\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By ISIN",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/logo\",\n    params={\"isin\": \"US0378331005\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By crypto",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/logo\",\n    params={\"crypto\": \"BTC\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By name",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/logo\",\n    params={\"name\": \"Stripe\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          }
        ]
      }
    },
    "/v2/brands/brandmark": {
      "get": {
        "tags": [
          "Logos"
        ],
        "summary": "Get a brandmark",
        "description": "Returns the brand's brandmark, the wide logo lockup, as JSON with a temporary download `url`, the source dimensions, and a placeholder blurhash. It does not return image bytes. Send exactly one identifier. Costs API credits at the rate in [API credits](/platform/credits#what-each-request-costs). Billed once per brand domain per 24 hours. A ready brand with no brandmark is still billed.",
        "operationId": "v2GetBrandBrandmark",
        "x-mint": {
          "metadata": {
            "description": "Get a brand's brandmark with a temporary download URL, dimensions, and blurhash.",
            "tag": "3 credits"
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2Domain"
          },
          {
            "$ref": "#/components/parameters/V2Ticker"
          },
          {
            "$ref": "#/components/parameters/V2Isin"
          },
          {
            "$ref": "#/components/parameters/V2Crypto"
          },
          {
            "$ref": "#/components/parameters/V2Name"
          },
          {
            "$ref": "#/components/parameters/V2Merchant"
          }
        ],
        "responses": {
          "200": {
            "description": "The brand is ready and has a brandmark.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2ImageResource"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "image",
                    "kind": "brandmark",
                    "brand_id": "brand_4x0wr3g0000g00400000000004",
                    "status": "ready",
                    "url": "https://img.logo.dev/assets/SEALED_TOKEN",
                    "etag": "9f2c1e7a4b8d3f60",
                    "blurhash": "LKO2?U%2Tw=w]~RBVZRi};RPxuwH",
                    "source": {
                      "width": 512,
                      "height": 512,
                      "format": "svg",
                      "has_transparency": true,
                      "is_vector": true
                    },
                    "last_updated_at": "2026-08-01T09:00:00Z",
                    "expires_at": "2026-09-28T13:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Logo.dev is still indexing this brand. Retry after `Retry-After` seconds; retries are not billed.",
            "headers": {
              "Retry-After": {
                "$ref": "#/components/headers/V2RetryAfter"
              },
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "image",
                    "status": "not_indexed"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    },
                    "pending": {
                      "reason": "indexing",
                      "message": "This brand is being indexed for the first time and is usually ready within a minute. Retry the same request after 30 seconds; retries are not billed.",
                      "retry_after_seconds": 30,
                      "expires_in_seconds": 300,
                      "webhook": false,
                      "doc_url": "https://www.logo.dev/docs/platform/errors#not-found-vs-still-indexing-202"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Send exactly one identifier, in a valid format.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "exactly one of domain, ticker, isin, crypto, name, merchant is required"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/V2PaymentRequired"
          },
          "403": {
            "$ref": "#/components/responses/V2Forbidden"
          },
          "404": {
            "description": "No brand matches, or the brand has no brandmark.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2RateLimitReset"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Unsettled"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    },
                    "docs_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation for this status."
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "image",
                    "status": "not_found"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
                    "resolution": {
                      "type": "domain",
                      "value": "stripe.com",
                      "method": "direct",
                      "context": {}
                    }
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/V2RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/V2ServerError"
          }
        },
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "By domain",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/brandmark?domain=stripe.com\""
          },
          {
            "lang": "bash",
            "label": "By ticker",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/brandmark?ticker=AAPL\""
          },
          {
            "lang": "bash",
            "label": "By ISIN",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/brandmark?isin=US0378331005\""
          },
          {
            "lang": "bash",
            "label": "By crypto",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/brandmark?crypto=BTC\""
          },
          {
            "lang": "bash",
            "label": "By name",
            "source": "curl --header \"Authorization: Bearer $LOGO_DEV_SECRET_KEY\" \\\n  \"https://api.logo.dev/v2/brands/brandmark?name=Stripe\""
          },
          {
            "lang": "javascript",
            "label": "By domain",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/brandmark?domain=stripe.com\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By ticker",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/brandmark?ticker=AAPL\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By ISIN",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/brandmark?isin=US0378331005\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By crypto",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/brandmark?crypto=BTC\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "javascript",
            "label": "By name",
            "source": "const res = await fetch(\"https://api.logo.dev/v2/brands/brandmark?name=Stripe\", {\n  headers: { Authorization: `Bearer ${process.env.LOGO_DEV_SECRET_KEY}` },\n});\nconst { data, metadata } = await res.json();"
          },
          {
            "lang": "python",
            "label": "By domain",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/brandmark\",\n    params={\"domain\": \"stripe.com\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By ticker",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/brandmark\",\n    params={\"ticker\": \"AAPL\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By ISIN",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/brandmark\",\n    params={\"isin\": \"US0378331005\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By crypto",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/brandmark\",\n    params={\"crypto\": \"BTC\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          },
          {
            "lang": "python",
            "label": "By name",
            "source": "import os, requests\n\nres = requests.get(\n    \"https://api.logo.dev/v2/brands/brandmark\",\n    params={\"name\": \"Stripe\"},\n    headers={\"Authorization\": f\"Bearer {os.environ['LOGO_DEV_SECRET_KEY']}\"},\n)\ndata = res.json()[\"data\"]"
          }
        ]
      }
    },
    "/v2/search": {
      "get": {
        "tags": [
          "Search"
        ],
        "summary": "Search brands",
        "description": "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.",
        "operationId": "v2SearchBrands",
        "x-mint": {
          "metadata": {
            "description": "Search brands by name, with match or typeahead ranking, and get each candidate's domain and logo URL.",
            "tag": "1 credit / 1,000 searches"
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "The name to search for.",
            "schema": {
              "type": "string",
              "examples": [
                "sweetgreen"
              ]
            }
          },
          {
            "name": "method",
            "in": "query",
            "required": false,
            "description": "`match` for full names, `typeahead` for partial input.",
            "schema": {
              "type": "string",
              "enum": [
                "match",
                "typeahead"
              ],
              "default": "match"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Results to return.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching brands, best first. An empty array when nothing matches.",
            "headers": {
              "Request-Id": {
                "$ref": "#/components/headers/V2RequestId"
              },
              "Credits-Charged": {
                "$ref": "#/components/headers/V2CreditsCharged"
              },
              "Credits-Remaining": {
                "$ref": "#/components/headers/V2CreditsRemaining"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2SearchRateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2SearchRateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2SearchRateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/V2SearchResult"
                      }
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": [
                    {
                      "object": "search_result",
                      "name": "Sweetgreen",
                      "domain": "sweetgreen.com",
                      "logo_url": "https://img.logo.dev/sweetgreen.com?token=LOGO_DEV_PUBLISHABLE_KEY"
                    }
                  ],
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "400": {
            "description": "`q` is missing, or `method` or `limit` is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "q is required",
                    "target": "q"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/V2SearchPaymentRequired"
          },
          "429": {
            "$ref": "#/components/responses/V2SearchRateLimited"
          },
          "500": {
            "description": "Search failed. Retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to search"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            },
            "headers": {
              "RateLimit-Limit": {
                "$ref": "#/components/headers/V2SearchRateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/V2SearchRateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/V2SearchRateLimitReset"
              }
            }
          }
        }
      }
    },
    "/v2/brands/{id}/subscription": {
      "get": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Get a brand subscription",
        "description": "Returns your account's subscription to this brand, if there is one. Subscriptions decide which brands send you `brand.updated` events.",
        "operationId": "v2GetBrandSubscription",
        "x-mint": {
          "metadata": {
            "description": "Check whether your account is subscribed to a brand's update events."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2BrandIdPath"
          }
        ],
        "responses": {
          "200": {
            "description": "The subscription.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Subscription"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "subscription",
                    "id": "sub_7m2k9q4r8t0v1w3x5y6z8a9b0c",
                    "brand_id": "brand_4x0wr3g0000g00400000000004",
                    "created_at": "2026-09-21T12:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The brand id is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "id must start with \"brand_\": bad format",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "404": {
            "description": "You are not subscribed to this brand.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "resource_missing",
                    "message": "no subscription for this brand",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "500": {
            "description": "Reading the subscription failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to read subscription"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Subscribe to a brand",
        "description": "Subscribes your account to `brand.updated` events for this brand. Safe to repeat: it returns `201` the first time and `200` after that, with the same body. Needs a paid plan. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2SubscribeToBrand",
        "x-mint": {
          "metadata": {
            "description": "Subscribe your account to update events for one brand."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2BrandIdPath"
          }
        ],
        "responses": {
          "200": {
            "description": "You were already subscribed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Subscription"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "subscription",
                    "id": "sub_7m2k9q4r8t0v1w3x5y6z8a9b0c",
                    "brand_id": "brand_4x0wr3g0000g00400000000004",
                    "created_at": "2026-09-21T12:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "201": {
            "description": "The subscription was created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2Subscription"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "subscription",
                    "id": "sub_7m2k9q4r8t0v1w3x5y6z8a9b0c",
                    "brand_id": "brand_4x0wr3g0000g00400000000004",
                    "created_at": "2026-09-21T12:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The brand id is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "id must start with \"brand_\": bad format",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "404": {
            "description": "No brand has this id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "resource_missing",
                    "message": "no brand with this id",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "409": {
            "$ref": "#/components/responses/V2LimitExceeded"
          },
          "500": {
            "description": "Creating the subscription failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to create subscription"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Unsubscribe from a brand",
        "description": "Stops `brand.updated` events for this brand. Returns `204` whether or not a subscription existed. Needs a paid plan. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2UnsubscribeFromBrand",
        "x-mint": {
          "metadata": {
            "description": "Stop update events for one brand."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2BrandIdPath"
          }
        ],
        "responses": {
          "204": {
            "description": "Unsubscribed. No body."
          },
          "400": {
            "description": "The brand id is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "id must start with \"brand_\": bad format",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "500": {
            "description": "Deleting the subscription failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to delete subscription"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      }
    },
    "/v2/webhook_endpoints": {
      "post": {
        "tags": [
          "Webhook endpoints"
        ],
        "summary": "Create a webhook endpoint",
        "description": "Registers a URL to receive webhook events. Needs a paid plan and the owner or admin role. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2CreateWebhookEndpoint",
        "x-mint": {
          "metadata": {
            "description": "Register a URL to receive brand webhook events."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/V2WebhookEndpointInput"
                  }
                ],
                "required": [
                  "url"
                ]
              },
              "example": {
                "url": "https://hooks.example.com/logo-dev",
                "description": "Production",
                "filter_types": [
                  "brand.updated"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The endpoint was created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2WebhookEndpoint"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "webhook_endpoint",
                    "id": "ep_2mX9kL4pQ7rT1vW3yZ5aB8cD0e",
                    "url": "https://hooks.example.com/logo-dev",
                    "description": "Production",
                    "disabled": false,
                    "filter_types": [
                      "brand.updated"
                    ],
                    "created_at": "2026-09-21T12:00:00Z",
                    "updated_at": "2026-09-21T12:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is invalid: a blank `url`, an unknown event type, or malformed JSON.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "unknown event type 'brand.deleted': must be one of brand.updated, brand.indexed: bad format"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "409": {
            "$ref": "#/components/responses/V2LimitExceeded"
          },
          "500": {
            "description": "Managing the endpoint failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to manage webhook endpoint"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Webhook endpoints"
        ],
        "summary": "List webhook endpoints",
        "description": "Returns every webhook endpoint on your team. Not paginated. Needs a paid plan. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2ListWebhookEndpoints",
        "x-mint": {
          "metadata": {
            "description": "List your team's webhook endpoints."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "All endpoints. An empty array when there are none.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/V2WebhookEndpoint"
                      }
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": [
                    {
                      "object": "webhook_endpoint",
                      "id": "ep_2mX9kL4pQ7rT1vW3yZ5aB8cD0e",
                      "url": "https://hooks.example.com/logo-dev",
                      "description": "Production",
                      "disabled": false,
                      "filter_types": [
                        "brand.updated"
                      ],
                      "created_at": "2026-09-21T12:00:00Z",
                      "updated_at": "2026-09-21T12:00:00Z"
                    }
                  ],
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "500": {
            "description": "Managing the endpoint failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to manage webhook endpoint"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      }
    },
    "/v2/webhook_endpoints/{id}": {
      "get": {
        "tags": [
          "Webhook endpoints"
        ],
        "summary": "Get a webhook endpoint",
        "description": "Returns one webhook endpoint. Needs a paid plan. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2GetWebhookEndpoint",
        "x-mint": {
          "metadata": {
            "description": "Get one webhook endpoint."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2EndpointIdPath"
          }
        ],
        "responses": {
          "200": {
            "description": "The endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2WebhookEndpoint"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "webhook_endpoint",
                    "id": "ep_2mX9kL4pQ7rT1vW3yZ5aB8cD0e",
                    "url": "https://hooks.example.com/logo-dev",
                    "description": "Production",
                    "disabled": false,
                    "filter_types": [
                      "brand.updated"
                    ],
                    "created_at": "2026-09-21T12:00:00Z",
                    "updated_at": "2026-09-21T12:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "404": {
            "description": "No webhook endpoint has this id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "resource_missing",
                    "message": "no webhook endpoint with this id",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "500": {
            "description": "Managing the endpoint failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to manage webhook endpoint"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Webhook endpoints"
        ],
        "summary": "Update a webhook endpoint",
        "description": "Changes an endpoint. Send only the fields to change; omitted fields keep their value. Send `filter_types: []` to receive every event type. Needs a paid plan and the owner or admin role. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2UpdateWebhookEndpoint",
        "x-mint": {
          "metadata": {
            "description": "Change a webhook endpoint's URL, description, event types, or disabled state."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2EndpointIdPath"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/V2WebhookEndpointInput"
                  }
                ]
              },
              "example": {
                "url": "https://hooks.example.com/logo-dev",
                "description": "Production",
                "filter_types": [
                  "brand.updated"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2WebhookEndpoint"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "webhook_endpoint",
                    "id": "ep_2mX9kL4pQ7rT1vW3yZ5aB8cD0e",
                    "url": "https://hooks.example.com/logo-dev",
                    "description": "Production",
                    "disabled": false,
                    "filter_types": [
                      "brand.updated"
                    ],
                    "created_at": "2026-09-21T12:00:00Z",
                    "updated_at": "2026-09-21T12:00:00Z"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is invalid: a blank `url`, an unknown event type, or malformed JSON.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "unknown event type 'brand.deleted': must be one of brand.updated, brand.indexed: bad format"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "404": {
            "description": "No webhook endpoint has this id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "resource_missing",
                    "message": "no webhook endpoint with this id",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "500": {
            "description": "Managing the endpoint failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to manage webhook endpoint"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Webhook endpoints"
        ],
        "summary": "Delete a webhook endpoint",
        "description": "Deletes an endpoint. Deliveries to it stop. Needs a paid plan and the owner or admin role. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2DeleteWebhookEndpoint",
        "x-mint": {
          "metadata": {
            "description": "Delete a webhook endpoint."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2EndpointIdPath"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted. No body."
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "404": {
            "description": "No webhook endpoint has this id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "resource_missing",
                    "message": "no webhook endpoint with this id",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "500": {
            "description": "Managing the endpoint failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to manage webhook endpoint"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      }
    },
    "/v2/webhook_endpoints/{id}/secret": {
      "get": {
        "tags": [
          "Webhook endpoints"
        ],
        "summary": "Get a webhook signing secret",
        "description": "Returns the endpoint's signing secret, used to verify deliveries. Any team member can read it. Needs a paid plan. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2GetWebhookEndpointSecret",
        "x-mint": {
          "metadata": {
            "description": "Read a webhook endpoint's signing secret."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2EndpointIdPath"
          }
        ],
        "responses": {
          "200": {
            "description": "The current secret.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2WebhookEndpointSecret"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "webhook_endpoint_secret",
                    "key": "WEBHOOK_SIGNING_SECRET"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "404": {
            "description": "No webhook endpoint has this id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "resource_missing",
                    "message": "no webhook endpoint with this id",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "500": {
            "description": "Managing the endpoint failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to manage webhook endpoint"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Webhook endpoints"
        ],
        "summary": "Rotate a webhook signing secret",
        "description": "Replaces the endpoint's signing secret and returns the new one. Update your verification code with it. Needs a paid plan and the owner or admin role. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "operationId": "v2RotateWebhookEndpointSecret",
        "x-mint": {
          "metadata": {
            "description": "Replace a webhook endpoint's signing secret."
          },
          "content": "<Card title=\"Get your API keys\" icon=\"key\" href=\"https://www.logo.dev/dashboard/api-keys\" horizontal arrow>\n  Your dashboard has a publishable key for the Logo.dev CDN and a secret key for the Logo.dev API. Every plan includes both.\n</Card>"
        },
        "security": [
          {
            "secretKey": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/V2EndpointIdPath"
          }
        ],
        "responses": {
          "200": {
            "description": "The new secret.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/V2WebhookEndpointSecret"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2Metadata"
                    }
                  },
                  "required": [
                    "data",
                    "metadata"
                  ]
                },
                "example": {
                  "data": {
                    "object": "webhook_endpoint_secret",
                    "key": "WEBHOOK_SIGNING_SECRET"
                  },
                  "metadata": {
                    "request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/V2Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/V2WebhooksNotEnabled"
          },
          "404": {
            "description": "No webhook endpoint has this id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "resource_missing",
                    "message": "no webhook endpoint with this id",
                    "target": "id"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          },
          "500": {
            "description": "Managing the endpoint failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2Error"
                },
                "example": {
                  "error": {
                    "code": "internal",
                    "message": "failed to manage webhook endpoint"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "publishableKey": {
        "type": "apiKey",
        "in": "query",
        "name": "token",
        "description": "Your publishable key (`pk_`). Safe in client-side code. Works only with the Logo.dev CDN."
      },
      "secretKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Your secret key (`sk_`), as `Bearer sk_...`. Call the Logo.dev API only from your server."
      },
      "transactionBetaKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "tx_beta_…",
        "description": "Transaction-only beta key, issued with your beta access and always visible in the Transaction Playground. Existing Logo.dev secret keys do not authenticate this beta."
      }
    },
    "parameters": {
      "size": {
        "name": "size",
        "in": "query",
        "required": false,
        "description": "Width and height in pixels. Aspect ratio is preserved. Max 800: a larger value is clipped to 800. `retina=true` doubles the result after the clip. Keep raster formats at or below 600.",
        "schema": {
          "type": "integer",
          "default": 128,
          "minimum": 1
        }
      },
      "height": {
        "name": "height",
        "in": "query",
        "required": false,
        "description": "Height in pixels (short form: `h`). Overrides the height taken from `size` when set; the image is fit within width × height with aspect ratio preserved. Max 800 (larger is clipped).",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 800
        }
      },
      "width": {
        "name": "width",
        "in": "query",
        "required": false,
        "description": "Width in pixels (short form: `w`). Overrides the width taken from `size` when set; the image is fit within width × height with aspect ratio preserved. Max 800 (larger is clipped).",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 800
        }
      },
      "format": {
        "name": "format",
        "in": "query",
        "required": false,
        "description": "Image format.",
        "schema": {
          "type": "string",
          "enum": [
            "jpg",
            "png",
            "webp"
          ],
          "default": "jpg"
        }
      },
      "theme": {
        "name": "theme",
        "in": "query",
        "required": false,
        "description": "Adjusts logo colors for a light or a dark background. `auto` is the same as `light`. Works on logos with transparency, so set `format=png` or `format=webp` with it. Do not send `theme=dark` with `jpg`, the default format: the request can return `404`.",
        "schema": {
          "type": "string",
          "enum": [
            "auto",
            "light",
            "dark"
          ],
          "default": "light"
        }
      },
      "greyscale": {
        "name": "greyscale",
        "in": "query",
        "required": false,
        "description": "Return a black-and-white version of the logo. The American spelling `grayscale` is also accepted.",
        "schema": {
          "type": "boolean",
          "default": false
        }
      },
      "retina": {
        "name": "retina",
        "in": "query",
        "required": false,
        "description": "Render at 2x the requested size for high-density displays.",
        "schema": {
          "type": "boolean",
          "default": false
        }
      },
      "fallback": {
        "name": "fallback",
        "in": "query",
        "required": false,
        "description": "Behavior when no logo is found. `monogram` returns a generated monogram with HTTP 200; `404` returns HTTP 404 instead.",
        "schema": {
          "type": "string",
          "enum": [
            "monogram",
            "404"
          ],
          "default": "monogram"
        }
      },
      "V2Domain": {
        "name": "domain",
        "in": "query",
        "required": false,
        "description": "A company domain. Reduced to its registrable domain, so `www.stripe.com` looks up `stripe.com`. Send exactly one identifier.",
        "schema": {
          "type": "string",
          "examples": [
            "stripe.com"
          ]
        }
      },
      "V2Ticker": {
        "name": "ticker",
        "in": "query",
        "required": false,
        "description": "The stock or ETF symbol, in any case, with no exchange prefix: `aapl` and `AAPL` return the same brand. A bare symbol resolves against US exchanges. For a listing on another exchange, add the [exchange suffix](/logo-images/ticker#exchange-suffixes), such as `7203.T`. Send exactly one identifier.",
        "schema": {
          "type": "string",
          "examples": [
            "aapl"
          ]
        }
      },
      "V2Isin": {
        "name": "isin",
        "in": "query",
        "required": false,
        "description": "An ISIN. Case-insensitive. Send exactly one identifier.",
        "schema": {
          "type": "string",
          "examples": [
            "US0378331005"
          ]
        }
      },
      "V2Crypto": {
        "name": "crypto",
        "in": "query",
        "required": false,
        "description": "A crypto token symbol. Case-insensitive. Send exactly one identifier.",
        "schema": {
          "type": "string",
          "examples": [
            "BTC"
          ]
        }
      },
      "V2Name": {
        "name": "name",
        "in": "query",
        "required": false,
        "description": "A brand name. Resolved to the top search match. Send exactly one identifier.",
        "schema": {
          "type": "string",
          "examples": [
            "Stripe"
          ]
        }
      },
      "V2BrandIdPath": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "A brand id, as returned in `data.id`.",
        "schema": {
          "type": "string",
          "examples": [
            "brand_4x0wr3g0000g00400000000004"
          ]
        }
      },
      "V2NoSubscribe": {
        "name": "nosubscribe",
        "in": "query",
        "required": false,
        "description": "Send `true` to skip the automatic subscription to this brand. Only matters when webhooks are enabled on your account.",
        "schema": {
          "type": "string",
          "enum": [
            "true"
          ]
        }
      },
      "V2EndpointIdPath": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "A webhook endpoint id.",
        "schema": {
          "type": "string",
          "examples": [
            "ep_2mX9kL4pQ7rT1vW3yZ5aB8cD0e"
          ]
        }
      },
      "V2Merchant": {
        "name": "merchant",
        "in": "query",
        "required": false,
        "description": "A card-statement merchant descriptor. Announced but not yet enabled for any account, so it currently answers `403`. Send exactly one identifier.",
        "schema": {
          "type": "string",
          "examples": [
            "SQ *BLUE BOTTLE COFFEE"
          ]
        }
      },
      "redirect": {
        "name": "redirect",
        "in": "query",
        "required": false,
        "description": "What to return when the domain reaches a brand only through a redirect to another domain, such as an old domain that now points to a new company. `follow` returns the logo of the domain it redirects to. `404` returns `404` instead, whatever `fallback` is set to. See [skip domains that redirect](/logo-images/introduction#skip-domains-that-redirect).",
        "schema": {
          "type": "string",
          "enum": [
            "follow",
            "404"
          ],
          "default": "follow"
        }
      }
    },
    "responses": {
      "LogoImage": {
        "description": "The logo image. When no logo exists and `fallback` is `monogram` (the default), a generated monogram is returned with this same 200 status.",
        "content": {
          "image/jpeg": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          },
          "image/png": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          },
          "image/webp": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          },
          "image/svg+xml": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "A missing or invalid publishable key, or a request from a domain the key does not allow.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "msg": "invalid api token. get an api token by creating an account at https://www.logo.dev/",
              "docs_url": "https://www.logo.dev/docs/platform/api-keys"
            }
          }
        }
      },
      "NotFound": {
        "description": "No logo, with `fallback=404` set, or a domain that resolves only through a redirect, with `redirect=404` set. Also an invalid parameter value, such as `format=gif`, on every lookup except `/isin` and `/name`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "err": "not found",
              "docs_url": "https://www.logo.dev/docs/platform/errors"
            }
          }
        }
      },
      "V2Unauthorized": {
        "description": "The secret key is missing, malformed, unknown, or disabled. A publishable key (`pk_`) is refused.",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/V2AuthError"
                },
                {
                  "$ref": "#/components/schemas/V2Error"
                }
              ]
            },
            "example": {
              "msg": "invalid api token. make sure to use your secret key.",
              "docs_url": "https://www.logo.dev/docs/platform/api-keys"
            }
          }
        }
      },
      "V2PaymentRequired": {
        "description": "Your account is out of API credits.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/V2Error"
            },
            "example": {
              "error": {
                "code": "insufficient_credits",
                "message": "out of credits for the brand API. purchase credits at https://www.logo.dev/dashboard"
              },
              "docs_url": "https://www.logo.dev/docs/platform/errors"
            }
          }
        }
      },
      "V2RateLimited": {
        "description": "Too many brand requests per minute, or too many open at once. Wait for `RateLimit-Reset` seconds.",
        "headers": {
          "RateLimit-Limit": {
            "$ref": "#/components/headers/V2RateLimitLimit"
          },
          "RateLimit-Remaining": {
            "$ref": "#/components/headers/V2RateLimitRemaining"
          },
          "RateLimit-Reset": {
            "$ref": "#/components/headers/V2RateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/V2Error"
            },
            "example": {
              "error": {
                "code": "rate_limited",
                "message": "rate limit reached. no more than 100 brand requests per minute per account."
              },
              "docs_url": "https://www.logo.dev/docs/platform/rate-limits"
            }
          }
        }
      },
      "V2ServerError": {
        "description": "Something failed on our side. Retry, and contact support with the `Request-Id` if it persists.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/V2Error"
            },
            "example": {
              "error": {
                "code": "internal",
                "message": "failed to resolve brand"
              },
              "docs_url": "https://www.logo.dev/docs/platform/errors"
            }
          }
        }
      },
      "V2WebhooksNotEnabled": {
        "description": "Your plan does not include webhooks, or your role cannot change them. See [Who can use webhooks](/webhooks#who-can-use-webhooks).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/V2Error"
            },
            "example": {
              "error": {
                "code": "forbidden",
                "message": "organization admin role required to change webhooks"
              },
              "docs_url": "https://www.logo.dev/docs/platform/errors"
            }
          }
        }
      },
      "CdnPending": {
        "description": "The first request for a domain that Logo.dev is still fetching. The body is an image, cached for 5 minutes. Later requests return the logo.",
        "content": {
          "image/jpeg": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          },
          "image/png": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          },
          "image/webp": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          },
          "image/svg+xml": {
            "schema": {
              "type": "string",
              "format": "binary"
            }
          }
        }
      },
      "CdnBadRequest": {
        "description": "A malformed ticker, crypto symbol, exchange, or index, or an invalid parameter on `/isin` or `/name`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "err": "invalid ticker=ZZZZZZ",
              "docs_url": "https://www.logo.dev/docs/platform/errors"
            }
          }
        }
      },
      "CdnForbidden": {
        "description": "The account is suspended or flagged, or the team has turned off personal keys.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "CdnServerError": {
        "description": "Logo.dev could not fetch the logo. Retry.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "err": "failed to fetch",
              "docs_url": "https://www.logo.dev/docs/platform/errors"
            }
          }
        }
      },
      "RateLimited": {
        "description": "A Community plan limit was exceeded: the monthly CDN request limit, or a per-minute limit for the account or the client IP address. The per-minute limits send `Retry-After`. Paid plans have none of these limits. See [Logo.dev CDN limits](/platform/rate-limits#logo-cdn-limits).",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfterMinute"
          },
          "Cache-Control": {
            "description": "Always `no-store`, so the rejection is never served again from a cache once the account recovers.",
            "schema": {
              "type": "string",
              "examples": [
                "no-store"
              ]
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "per_ip": {
                "value": {
                  "msg": "rate limit exceeded. free accounts are limited to 100 requests per minute per IP address. upgrade your account at https://www.logo.dev/pricing"
                }
              },
              "per_account": {
                "value": {
                  "msg": "rate limit exceeded. free accounts are limited to 500 requests per minute. upgrade your account at https://www.logo.dev/pricing"
                }
              },
              "monthly": {
                "value": {
                  "msg": "monthly request limit exceeded. upgrade your account at https://www.logo.dev/pricing"
                }
              }
            }
          }
        }
      },
      "V2Forbidden": {
        "description": "The request is refused. Not billed. The identifier type you sent is not yet enabled for any account (`merchant`), the account is suspended, or personal keys are turned off because you belong to a team. The last two return a `msg` field, as an authentication error does.",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/V2Error"
                },
                {
                  "$ref": "#/components/schemas/V2AuthError"
                }
              ]
            },
            "examples": {
              "merchant": {
                "value": {
                  "error": {
                    "code": "forbidden",
                    "message": "merchant lookups are not yet available",
                    "target": "merchant"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              },
              "suspended": {
                "value": {
                  "msg": "account suspended. contact team@logo.dev for more information",
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "V2LimitExceeded": {
        "description": "Your account is at its plan's limit for this resource. Delete one, or upgrade. See [plan limits](/webhooks#plan-limits).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/V2Error"
            },
            "examples": {
              "subscriptions": {
                "value": {
                  "error": {
                    "code": "limit_exceeded",
                    "message": "brand subscription limit reached. the pro plan allows {limit} subscriptions: limit exceeded"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              },
              "webhook_endpoints": {
                "value": {
                  "error": {
                    "code": "limit_exceeded",
                    "message": "webhook endpoint limit reached. the pro plan allows {limit} endpoints: limit exceeded"
                  },
                  "docs_url": "https://www.logo.dev/docs/platform/errors"
                }
              }
            }
          }
        }
      },
      "V2SearchRateLimited": {
        "description": "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).",
        "headers": {
          "RateLimit-Limit": {
            "$ref": "#/components/headers/V2SearchRateLimitLimit"
          },
          "RateLimit-Remaining": {
            "$ref": "#/components/headers/V2SearchRateLimitRemaining"
          },
          "RateLimit-Reset": {
            "$ref": "#/components/headers/V2SearchRateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/V2Error"
            },
            "example": {
              "error": {
                "code": "rate_limited",
                "message": "rate limit reached. no more than {limit} search requests per minute per account."
              },
              "docs_url": "https://www.logo.dev/docs/platform/rate-limits"
            }
          }
        }
      },
      "V2SearchPaymentRequired": {
        "description": "Your account is out of API credits.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/V2Error"
            },
            "example": {
              "error": {
                "code": "insufficient_credits",
                "message": "out of credits for the brand API. purchase credits at https://www.logo.dev/dashboard"
              },
              "docs_url": "https://www.logo.dev/docs/platform/errors"
            }
          }
        },
        "headers": {
          "RateLimit-Limit": {
            "$ref": "#/components/headers/V2SearchRateLimitLimit"
          },
          "RateLimit-Remaining": {
            "$ref": "#/components/headers/V2SearchRateLimitRemaining"
          },
          "RateLimit-Reset": {
            "$ref": "#/components/headers/V2SearchRateLimitReset"
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "description": "A short error. Some errors use `msg` and others use `err`. Branch on the status code, not on the field or its text.",
        "properties": {
          "msg": {
            "type": "string"
          },
          "err": {
            "type": "string"
          },
          "docs_url": {
            "type": "string",
            "format": "uri",
            "description": "A docs page about this class of error. Added to every JSON error response."
          }
        }
      },
      "V2Resolution": {
        "type": "object",
        "description": "How the request identified the brand.",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "domain",
              "ticker",
              "isin",
              "crypto",
              "name",
              "brand_id"
            ],
            "description": "Which identifier the request used."
          },
          "value": {
            "type": "string",
            "description": "The identifier after normalization: the registrable domain, an upper-cased ticker, and so on."
          },
          "method": {
            "type": "string",
            "enum": [
              "direct",
              "domain",
              "security",
              "crypto",
              "search",
              ""
            ],
            "description": "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": {
            "type": "object",
            "description": "Reserved for brands involved in a merchant lookup. Always `{}` today."
          }
        },
        "required": [
          "type",
          "value",
          "method",
          "context"
        ]
      },
      "V2Pending": {
        "type": "object",
        "description": "Present only on a `202`. Tells you when to retry.",
        "properties": {
          "reason": {
            "type": "string",
            "enum": [
              "indexing",
              "resolving"
            ],
            "description": "`indexing` is a brand's first crawl; `resolving` means the identifier is still being matched to a brand."
          },
          "message": {
            "type": "string"
          },
          "retry_after_seconds": {
            "type": "integer",
            "description": "Wait this long before retrying. Matches the `Retry-After` header.",
            "examples": [
              30
            ]
          },
          "expires_in_seconds": {
            "type": "integer",
            "description": "Stop polling after this long.",
            "examples": [
              300
            ]
          },
          "webhook": {
            "type": "boolean",
            "description": "Whether a `brand.indexed` webhook event carrying this request's `request_id` will be sent when the lookup settles."
          },
          "doc_url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "reason",
          "message",
          "retry_after_seconds",
          "expires_in_seconds",
          "webhook",
          "doc_url"
        ]
      },
      "V2Metadata": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Unique id for this request. Also sent as the `Request-Id` header.",
            "examples": [
              "request_01k6z8m2a4b5c6d7e8f9g0h1j2"
            ]
          },
          "resolution": {
            "allOf": [
              {
                "$ref": "#/components/schemas/V2Resolution"
              }
            ],
            "description": "Brand and image lookups only."
          },
          "pending": {
            "allOf": [
              {
                "$ref": "#/components/schemas/V2Pending"
              }
            ],
            "description": "`202` responses only."
          },
          "subscription": {
            "type": "object",
            "description": "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).",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "subscribed",
                  "quota_exceeded"
                ],
                "description": "`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": {
                "type": "string",
                "description": "Why the subscribe was refused. Only with `quota_exceeded`."
              }
            },
            "required": [
              "status"
            ]
          }
        },
        "required": [
          "request_id"
        ]
      },
      "V2Error": {
        "type": "object",
        "description": "Error envelope for v2 routes.",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "invalid_request",
                  "unauthorized",
                  "forbidden",
                  "resource_missing",
                  "insufficient_credits",
                  "rate_limited",
                  "limit_exceeded",
                  "internal"
                ]
              },
              "message": {
                "type": "string"
              },
              "target": {
                "type": "string",
                "description": "The parameter at fault, when there is exactly one."
              }
            },
            "required": [
              "code",
              "message"
            ]
          },
          "docs_url": {
            "type": "string",
            "format": "uri",
            "description": "Documentation for this class of error."
          }
        },
        "required": [
          "error"
        ]
      },
      "V2AuthError": {
        "type": "object",
        "description": "Returned when the secret key is missing, malformed, unknown, or disabled, before the request reaches the v2 route.",
        "properties": {
          "msg": {
            "type": "string"
          },
          "docs_url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "msg"
        ]
      },
      "V2Color": {
        "type": "object",
        "properties": {
          "r": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255
          },
          "g": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255
          },
          "b": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255
          },
          "hex": {
            "type": "string",
            "examples": [
              "#635bff"
            ]
          },
          "oklch": {
            "type": "object",
            "properties": {
              "l": {
                "type": "number",
                "description": "Lightness, 0 to 1."
              },
              "c": {
                "type": "number",
                "description": "Chroma. Usually below 0.4."
              },
              "h": {
                "type": "number",
                "description": "Hue in degrees, 0 to 360. `0` when chroma is 0."
              }
            },
            "required": [
              "l",
              "c",
              "h"
            ]
          }
        },
        "required": [
          "r",
          "g",
          "b",
          "hex",
          "oklch"
        ]
      },
      "V2ImageSource": {
        "type": "object",
        "description": "The source file behind the image.",
        "properties": {
          "width": {
            "type": "integer"
          },
          "height": {
            "type": "integer"
          },
          "format": {
            "type": "string",
            "enum": [
              "png",
              "jpg",
              "svg",
              "webp",
              "gif",
              "ico",
              "avif"
            ],
            "description": "Omitted when the format is not recognized."
          },
          "has_transparency": {
            "type": "boolean"
          },
          "is_vector": {
            "type": "boolean"
          }
        },
        "required": [
          "width",
          "height",
          "has_transparency",
          "is_vector"
        ]
      },
      "V2Image": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Temporary signed download URL. It stops working at `expires_at`: download and host the image yourself. Add `size`, `format` (`png`, `jpg`, `webp`), or `theme` (`light`, `dark`) to format the download. Downloads do not count toward CDN image usage."
          },
          "etag": {
            "type": "string",
            "description": "Identifies this version of the source image, and is the same on every route. Save it and download again only when it changes."
          },
          "blurhash": {
            "type": "string",
            "description": "Compact blurred placeholder for the image."
          },
          "source": {
            "$ref": "#/components/schemas/V2ImageSource"
          },
          "last_updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the image last changed. `null` if it has not changed since the brand was indexed."
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "description": "When `url` stops working, about 24 hours after the request."
          }
        },
        "required": [
          "url",
          "etag",
          "blurhash",
          "source",
          "last_updated_at",
          "expires_at"
        ]
      },
      "V2Brand": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "brand"
          },
          "id": {
            "type": "string",
            "description": "The brand's id. Stable across domain changes; use it to key your records.",
            "examples": [
              "brand_4x0wr3g0000g00400000000004"
            ]
          },
          "slug": {
            "type": "string",
            "description": "Readable label for display. It can change and is not accepted for lookups; use `id`."
          },
          "domain": {
            "type": [
              "string",
              "null"
            ],
            "description": "The brand's own domain, which can differ from the one you sent. `null` for brands with no website, such as some crypto tokens."
          },
          "status": {
            "type": "string",
            "const": "ready"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "indexed_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the record was last refreshed."
          },
          "is_profane": {
            "type": "boolean",
            "description": "`true` when the brand may carry NSFW imagery."
          },
          "socials": {
            "type": "object",
            "description": "Profile URLs keyed by network. Networks with no profile are omitted.",
            "propertyNames": {
              "enum": [
                "facebook",
                "github",
                "instagram",
                "linkedin",
                "pinterest",
                "reddit",
                "snapchat",
                "telegram",
                "tumblr",
                "twitter",
                "wechat",
                "whatsapp",
                "wikipedia",
                "youtube"
              ]
            },
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            }
          },
          "colors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/V2Color"
            },
            "description": "Brand colors, most dominant first."
          },
          "logo": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/V2Image"
              },
              {
                "type": "null"
              }
            ],
            "description": "The primary logo. `null` when the brand has none."
          },
          "brandmark": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/V2Image"
              },
              {
                "type": "null"
              }
            ],
            "description": "The wide logo lockup: the symbol and wordmark together for most brands, or the wordmark alone for pure-type brands. `null` when the brand has none. See [brandmark](/concepts#brandmark)."
          },
          "social_banners": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/V2Image"
            },
            "description": "Banner images. Empty when there are none."
          }
        },
        "required": [
          "object",
          "id",
          "slug",
          "domain",
          "status",
          "name",
          "description",
          "indexed_at",
          "is_profane",
          "socials",
          "colors",
          "logo",
          "brandmark",
          "social_banners"
        ]
      },
      "V2ImageResource": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "object": {
                "type": "string",
                "const": "image"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "logo",
                  "brandmark"
                ],
                "description": "`logo` or `brandmark`."
              },
              "brand_id": {
                "type": "string",
                "examples": [
                  "brand_4x0wr3g0000g00400000000004"
                ]
              },
              "status": {
                "type": "string",
                "const": "ready"
              }
            },
            "required": [
              "object",
              "kind",
              "brand_id",
              "status"
            ]
          },
          {
            "$ref": "#/components/schemas/V2Image"
          }
        ]
      },
      "V2Unsettled": {
        "type": "object",
        "description": "Body of a `202` or `404` lookup: only the object type and status.",
        "properties": {
          "object": {
            "type": "string",
            "enum": [
              "brand",
              "image"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "not_indexed",
              "not_found"
            ]
          }
        },
        "required": [
          "object",
          "status"
        ]
      },
      "V2SearchResult": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "search_result"
          },
          "name": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "logo_url": {
            "type": "string",
            "format": "uri",
            "description": "Logo URL signed with your account's publishable key."
          }
        },
        "required": [
          "object",
          "name",
          "domain",
          "logo_url"
        ]
      },
      "V2Subscription": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "subscription"
          },
          "id": {
            "type": "string",
            "examples": [
              "sub_7m2k9q4r8t0v1w3x5y6z8a9b0c"
            ]
          },
          "brand_id": {
            "type": "string",
            "examples": [
              "brand_4x0wr3g0000g00400000000004"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "object",
          "id",
          "brand_id",
          "created_at"
        ]
      },
      "V2WebhookEndpoint": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "webhook_endpoint"
          },
          "id": {
            "type": "string",
            "examples": [
              "ep_2mX9kL4pQ7rT1vW3yZ5aB8cD0e"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string",
            "description": "Empty string when unset."
          },
          "disabled": {
            "type": "boolean",
            "description": "`true` when you switched the endpoint off, or when deliveries were stopped after sustained failures."
          },
          "filter_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "brand.updated",
                "brand.indexed"
              ]
            },
            "description": "Event types this endpoint receives. An empty array means all of them."
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "object",
          "id",
          "url",
          "description",
          "disabled",
          "filter_types",
          "created_at",
          "updated_at"
        ]
      },
      "V2WebhookEndpointSecret": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "webhook_endpoint_secret"
          },
          "key": {
            "type": "string",
            "description": "The endpoint's signing secret. Use it to verify that deliveries come from Logo.dev."
          }
        },
        "required": [
          "object",
          "key"
        ]
      },
      "V2WebhookEndpointInput": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Where deliveries are sent."
          },
          "description": {
            "type": "string"
          },
          "filter_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "brand.updated",
                "brand.indexed"
              ]
            },
            "description": "Event types to receive. Omit or send `[]` for all of them."
          },
          "disabled": {
            "type": "boolean",
            "description": "Send `true` to create or keep the endpoint switched off."
          }
        }
      }
    },
    "headers": {
      "V2RetryAfter": {
        "description": "Seconds to wait before retrying. Always `30`.",
        "schema": {
          "type": "integer",
          "examples": [
            30
          ]
        }
      },
      "V2RequestId": {
        "description": "Unique id for this request. Include it when you contact support.",
        "schema": {
          "type": "string"
        }
      },
      "V2RateLimitLimit": {
        "description": "Brand requests allowed per minute for your account.",
        "schema": {
          "type": "integer"
        }
      },
      "V2RateLimitRemaining": {
        "description": "Brand requests left in the current minute.",
        "schema": {
          "type": "integer"
        }
      },
      "V2RateLimitReset": {
        "description": "Seconds until the current window resets.",
        "schema": {
          "type": "integer"
        }
      },
      "V2CreditsCharged": {
        "description": "`1` when this request was billed, `0` when it was not.",
        "schema": {
          "type": "integer",
          "enum": [
            0,
            1
          ]
        }
      },
      "V2CreditsRemaining": {
        "description": "Your remaining API credit balance. Omitted when no balance is available.",
        "schema": {
          "type": "string",
          "examples": [
            "18966.99"
          ]
        }
      },
      "RetryAfterMinute": {
        "description": "Seconds to wait before retrying. Always `60`, the length of the per-minute window.",
        "schema": {
          "type": "integer",
          "examples": [
            60
          ]
        }
      },
      "V2SearchRateLimitLimit": {
        "description": "Search requests allowed per minute for your account. Search has its own pool, separate from brand lookups.",
        "schema": {
          "type": "integer"
        }
      },
      "V2SearchRateLimitRemaining": {
        "description": "Search requests left in the current minute.",
        "schema": {
          "type": "integer"
        }
      },
      "V2SearchRateLimitReset": {
        "description": "Seconds until the current search window resets.",
        "schema": {
          "type": "integer"
        }
      }
    }
  }
}
