---
title: "Kick a brand extraction from a URL"
method: POST
path: "/dashboards/v3/styles/extract-brand"
tags: ["Dashboard v3 Surfaces"]
---

# Kick a brand extraction from a URL

`POST /dashboards/v3/styles/extract-brand`

## Request

- Base URL: `https://app.mammoth.io/api/v2`
- URL: `https://app.mammoth.io/api/v2/dashboards/v3/styles/extract-brand`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-KEY` and API key in header `X-API-SECRET` and API key in header `X-WORKSPACE-ID`

Start an async read of a site's brand (colours + font + a preview screenshot) via dash-render's /v1/extract-brand — its only outbound-network route, where the SSRF guard lives (B4). Returns a job_id; poll /jobs/{id} for the resolved {signals, screenshot} (rejected → {error}). Async, not the former in-request sync call: the extraction is a headless-Chrome navigation, which cannot run inside the browserless apiv2 pod and would hold a web worker for up to its 30s op timeout. The URL hygiene + SSRF guard ride along in the render task unchanged; the request body is unchanged so the FE only swaps its await for the same submit+poll pdf/video use.

## Request body

- ExtractBrandSpec: A URL to extract brand signals from
  - `params` ExtractBrandParams, required
    - `url` string, required: The site URL to read a brand from

## Response `201`

Document created, URL follows

- ObjectJobSchema
  - `status_code` integer, nullable
  - `job_id` integer, nullable: Created job id
  - `failure_reason` string, nullable: Failure reason if status is failure

## Other responses

- `202`: Successfully Submitted
- `400`: Bad request syntax or unsupported method
- `403`: Request forbidden -- authorization will not help

---

[API](https://skmtc.dev/mammoth/apis/mammoth-analytics.md) · [All operations](https://skmtc.dev/mammoth/apis/mammoth-analytics/llms.txt) · [OpenAPI document](https://skmtc.dev/mammoth/apis/mammoth-analytics/revisions/fe078afe239b?raw)
