Import a brand kit

Import a brand kit

POST/api/v1/brand-kits/imports

POST /brand-kits/imports
curl -X POST 'https://www.unitpost.com/api/v1/brand-kits/imports' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0' \
  -H 'Content-Type: application/json' \
  -d '{ }'
Response · 202
{
  "object": "brand_import",
  "id": "id_123",
  "status": "pending",
  "review": false,
  "source": {
    "kind": "url",
    "url": "https://example.com"
  },
  "brand_kit_id": "brand_kit_123",
  "proposal": {
    "name": "Example",
    "website_url": "https://example.com",
    "description": "string",
    "tone": "NEUTRAL",
    "voice_notes": "string",
    "industry": "string",
    "core_pages": [
      {
        "url": "https://example.com",
        "title": "string"
      }
    ],
    "extracted": {
      "colors": [
        {
          "hex": "string",
          "label": "string"
        }
      ],
      "logo_urls": [
        "string"
      ],
      "background_urls": [
        "string"
      ],
      "fonts": [
        "string"
      ]
    },
    "memory_facts": [
      {
        "key": "string",
        "content": "string"
      }
    ]
  },
  "warnings": [
    "string"
  ],
  "error": "string",
  "created_at": "2026-01-01T00:00:00.000Z",
  "updated_at": "2026-01-01T00:00:00.000Z",
  "completed_at": "2026-01-01T00:00:00.000Z"
}

Build a profile from a website (url, or a bare domain) or the brand's own words (text). It runs in the background, usually under a minute (202; follow it with Retrieve a brand kit import). By default the result is applied when it lands: to brand_kit_id, else the default profile, or a new one when the default already has content. With review: true it stops at a proposal (preview_ready) for Accept a brand kit import; one review import is open at a time, and a new one replaces it. Applying an import started here never adds a sending domain (add one with Add a domain). Requires the branding:write capability.

Request body6 fields
FieldTypeDescription
urlstringThe site to read: an https URL or a bare domain (`acme.com`).
textstringOr paste the brand's own words (an about page, a style guide).
website_urlstring | nullWith `text`: the brand's site, for the profile.
brand_kit_idstringThe profile to fill (`bk_…`). Default: the default profile, or a new one when it already has content.
reviewboolean`true` stops at the proposal for you to accept (POST …/accept); default `false` applies it when ready.
sync_visualbooleanAlso set the email branding's accent from the imported colors (the default profile only).
Response · 202 fields12 fields
FieldTypeDescription
objectrequiredstring—
idrequiredstring—
statusrequiredenumpending | running | preview_ready | completed | failed | cancelled`preview_ready`: the proposal waits for an accept (review imports) or is being applied (one-shot); with an `error` on a one-shot import, applying it failed: accept or cancel it.
reviewrequiredbooleanWhether it waits for an accept (false: applied when the crawl lands).
sourcerequiredobject—
brand_kit_idrequiredstring | nullThe profile it fills.
proposalrequiredobject | nullWhat the import found, once ready.
warningsrequiredstring[]—
errorrequiredstring | null—
created_atrequiredstring—
updated_atrequiredstring—
completed_atrequiredstring | null—
202400401403404422429

Search docs and guides

Search the docs and product guides.