Create Brand Kit
Changed onCreate a brand kit — from a URL (extraction) or from direct fields (manual).
Pass url to run server-side extraction of brand info from a website, OR pass the manual token fields (colors / fonts / logo_file_ids with a name) to build a kit from what you already hold — the same write the web app's manual onboarding performs, for brands without a website. Those two are mutually exclusive, enforced by the request schema.
name is NOT exclusive with url: send both to extract the brand and title the kit with the name you supply. The extracted company_name is left as extracted — naming a kit is not asserting what the company is called. At least one of url or name is required.
Honors idempotency_key through the shared pipeline (a keyed retry replays the stored result instead of minting a duplicate kit). A stored result whose kit was DELETED since does not replay: the stale record is invalidated and the create re-executes fresh (loud stale_replay_invalidated marker). Brand create is NOT metered on either path — no billing runs here — so the response carries the zero-credit deterministic usage receipt.
Request
- Base URLhttps://api.moda.app/v1
- URLhttps://api.moda.app/v1/brand-kits
- AuthHTTP bearer
Headers
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.
Request body
Example request
{
"logo_file_ids": [
"file_01HT9WK8N3M2J4A5Z6P7Q8R9TV"
]
}Response
Successful Response
Changes
- info
added the new optional request property
- info
added the new optional request property
- info
added the new optional request property
- info
added the new optional request property
- info
added the new optional request property
- info
the request property
became optional - info
request property
list-of-types was widened by adding typesnullto media typeapplication/json - info
added the non-success 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