Brand

Change the saved brand with ops applied in order, or import it from a public website or a Figma file with url. Every op is validated before anything is written: an invalid op returns status invalid with the issues and the op's expected shape, and nothing changes. An import returns at once with status running and an importId; GET /v1/brand reports it, under extraction for a website or figmaDesigns for a Figma file, until it is completed or failed. A Figma file needs Figma connected in Replo: without it the call returns action_required with a connectUrl for the user to connect it. Calls with url have a daily cap per project, whether or not they start an import; past it the call returns 429 until UTC midnight, and ops still work.

Changed on

Beta — this endpoint may change before general availability.

patch/brand

Request

  • Base URL
    https://api.replo.app/v1
  • Auth
    HTTP bearer

Headers

Replo-Api-Version'2026-10-29' required

The public API version to use for this request.

Request body

urlstring uri

Import the brand from this public site instead of ops (add https:// if missing). Replo reads it on its servers into facts, palette, fonts, marks, brief, design notes and screenshots, and writes them by mode. Never restyles a site. A figma.com file link instead adds that file to the brand's designs (figmaDesigns: its frames, styles and photos); it takes no mode or parts, and needs Figma connected in Replo.

mode'replace' | 'swap' | 'fill'

With url: how the site lands on the brand. replace (default): the whole brand becomes the site's ("make my brand from this site"). swap: each part in parts becomes the site's in full, nothing else changes, the brand keeps its name ("use their fonts", "take their logo and colors"). fill: everything already set stays and the site fills only the gaps, blending field by field ("fill in the rest from this site"). Pick swap for another company's site, so its story never mixes into this brand.

partsstring[]

With url: the parts swap and fill take from the site, each written as the ops of its kind: facts → setBusiness and setOverview, colors → setColor, fonts → setFont, logo → setMarks; images adds the site's photos to brand imagery. Required for swap; on fill, omitted means all of them; refused with replace.

projectIdstring uuid required

The project whose saved brand to change.

Response

Change the saved brand with ops applied in order, or import it from a public website or a Figma file with url. Every op is validated before anything is written: an invalid op returns status invalid with the issues and the op's expected shape, and nothing changes. An import returns at once with status running and an importId; GET /v1/brand reports it, under extraction for a website or figmaDesigns for a Figma file, until it is completed or failed. A Figma file needs Figma connected in Replo: without it the call returns action_required with a connectUrl for the user to connect it. Calls with url have a daily cap per project, whether or not they start an import; past it the call returns 429 until UTC midnight, and ops still work.

status'applied' | 'partial' | 'invalid' | 'running' | 'failed' | 'action_required' required

applied: every op was written. partial: the brand ops are live but some file ops were refused (see message and files). invalid: nothing was written (see issues). The rest answer a url import, which returns at once. running: the import started, one was already running, or a Figma file hasn't changed (message says there's nothing to wait for), and keeps going on Replo's servers; follow it with get_branding until importId is completed or failed (a website in extraction, a Figma file in figmaDesigns), instead of calling again. failed: the import could not start; message says why. action_required: the person has to connect Figma outside the chat first; connectUrl and message say what, and nothing started.

versioninteger nullable required

The brand's version after the write; it is live. Null when nothing on the brand was written: only file ops, or an import that did not finish.

messagestring nullable required

On partial: which file ops were refused and what to do next. On an import: the one line for the user. On a write while a website import runs: that a replace will overwrite it. Null otherwise.

expectedstring nullable required

On invalid: the expected shape of the first refused op.

importIdstring nullable required

On a running import: its id. A website's is the one get_branding's extraction reports; a Figma file's is its file key, the importId of its figmaDesigns entry. Null otherwise.

dashboardUrlstring nullable required

On a running import: Branding, where the person can watch it. Null otherwise.

connectUrlstring nullable required

On action_required: the link where the person connects Figma. Show it to them, and call update_brand again once they say they finished. Null otherwise.

object'brand_update' required

Changes

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      added the optional property / to the response with the status

    • info

      endpoint added