brand-kits

Get Brand Extraction

Changed on

Poll a brand extraction started with POST /v1/brand-kits/extractions.

completed carries extraction: the brand fields of a kit read (colours, fonts, logos, screenshot, personality, company copy) with asset URLs signed at this poll. Jobs stay pollable for an hour; after that, and for a job started on another team, this is a 404.

get/brand-kits/extractions/{job_id}

Request

  • Base URL
    https://api.moda.app/v1
  • URL
    https://api.moda.app/v1/brand-kits/extractions/{job_id}
  • Auth
    HTTP bearer

Path parameters

job_idstring required

Headers

Moda-Version'2026-04-12' | '2026-05-01'
Example:2026-05-01

Calendar-dated API version pin. New integrations should pin 2026-05-01 to opt into the newest response shapes. For back-compat the server also accepts requests with no header and resolves them to the current default (today: 2026-04-12); that default advances on each sunset date. Any unsupported value returns 400 unsupported_version.

Response

Successful Response

job_idstring required

Extraction job id; poll GET /v1/brand-kits/extractions/{job_id}.

status'queued' | 'running' | 'completed' | 'failed' required

queued → running → completed or failed. Only the last two are final.

messagestring required

Human-readable progress or outcome.

errorstring nullable

Failure reason when status is failed.

codestring nullable

Machine-readable failure when status is failed: scrape_failed (the site could not be read or yielded nothing), extraction_timeout or extraction_failed.

retry_after_secondsinteger nullable

Suggested wait before the next poll; null once the job is final.

extractionobject nullable

The brand, once status is completed: company_name, company_url, company_description, tagline, brand_values, brand_tone_of_voice, colors, fonts, logos (each image with a file_id and a signed url), screenshot ({file_id, url, captured_at, source_url} or null) and personality ({tone, energy} or null) — the brand fields of a kit read, with no kit created. URLs are signed at each poll. The files are kept for 24 hours: a file_id attached to a brand kit in that window stays with the kit; any other stops resolving after it (URLs already signed keep working until they lapse).

replayedboolean nullable

true when an idempotency key replayed the first start.

Changes