For agents: read the markdown version of these docs →

Brand extraction

Given any URL, the brand endpoint returns the brand’s logos, dominant colors, backdrop images, and brand name extracted from the registered domain. Use it to pre-fill intro templates, pick a background that matches the target product’s palette, or surface brand metadata in an agent UI before a recording starts.

This endpoint is read-only. It does not store anything against the caller’s account.

When to use it

  • Pre-fill the intro template with the target product’s logo and brand color.
  • Choose a background gradient that matches the target’s palette.
  • Show brand assets in an agent UI when confirming a recording request.
  • Build a launch landing page or comparison page that needs brand assets from any domain.

Endpoint

  • POST /v1/agent/brand
    • Body: { "url": "https://..." }
    • Response: HTTP 200 with the BrandExtractionResult envelope on every call. Extraction failures are reported inside the body, not via HTTP status.
    • Auth: API key, or an MCP-issued OAuth access token if you call this through the MCP server.

Response shape

Success:

{
  "ok": true,
  "source_url": "https://stripe.com/",
  "data": {
    "brand_name": "Stripe",
    "logos": [
      { "url": "...", "format": "svg", "kind": "wordmark" }
    ],
    "colors": [
      { "hex": "#635BFF", "role": "primary" }
    ],
    "backdrop_images": [
      { "url": "..." }
    ]
  }
}

Failure:

{
  "ok": false,
  "source_url": "https://stripe.com/",
  "error": {
    "code": "ACCESS_BLOCKED",
    "message": "Brand site blocked the brand-extraction fetch.",
    "status": 403
  }
}

status on the error object is set when the underlying fetch returned an HTTP status worth surfacing.

Domain normalization

The endpoint always fetches the registered domain (eTLD+1), not the exact URL you sent.

  • https://help.stripe.com/articles/123 → stripe.com
  • https://www.stripe.com/pricing → stripe.com
  • https://stripe.com/ → stripe.com

This keeps brand results stable regardless of which page on the site you asked about.

Error codes

error.code is one of:

  • INVALID_URL: The URL is malformed or unsupported.
  • ACCESS_BLOCKED: The target site refused the request.
  • NOT_FOUND: The fetch reached the site but no brand content was found.
  • SERVER_ERROR: The site returned a server-side failure.
  • NETWORK_ERROR: Transport-level failure.
  • EMPTY_CONTENT: The fetch succeeded but the response was empty.

HTTP-level errors are reserved for client-side problems:

  • 400 when the request body is missing url or is malformed.
  • 401 when auth is missing or invalid.

Example

curl -X POST https://api.slideshot.ai/v1/agent/brand \
  -H "x-api-key: $SLIDESHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://stripe.com" }'

The CLI exposes the same behavior with slideshot brand fetch https://stripe.com.