
1. Authenticate
For server-side automations, open your account settings and generate an API key. Treat it as a secret — never commit it or expose it client-side.Authorization: Bearer <access_token>. See Authentication for the OAuth endpoints and PKCE requirements.
2. Get a brand ID
Image generations are scoped to a brand. You need abrandSessionId — either pick an existing brand or create a new one from a URL.
- Brand already in Bloom
- Onboard your brand
List your brands and copy any Pick a brand whose
id:status is ready. Its id is the brandSessionId you’ll use next. If the brand is still analyzing, continue to step 3.3. Wait for the brand
Passwait=true to hold the connection until the brand reaches ready, logo_required, or failed:
status: "analyzing"; you can call the endpoint again. Only start generation after the status is ready.
logo_requiredmeans Bloom needs a replacement logo before visual DNA can finish.failedincludes a non-nullfailureobject with a stablecodeand a message safe to show to the user.- While the brand is
analyzing, fields such aslogoUrlandsummarymay benull.
INVALID_URL, SCRAPE_FAILED, INSTAGRAM_FETCH_FAILED, INTERNAL_ERROR, and VISUAL_DNA_FAILED. Branch on the code and display the accompanying message; submit a new POST /brands to retry a failed initialization.
4. Start a generation
Generations are asynchronous. Bloom queues the job and returns202 immediately with the image ID.
BRAND_NOT_READY with HTTP 409. Inspect or wait on GET /brands/{id} before retrying.
5. Retrieve the image
HitGET /images/{id} to check status. Pass wait=true to hold the connection open until the generation reaches a terminal state — no polling loop needed:
ids=...&wait=true to collect many images in one call.
Response format
Successful responses are wrapped in adata envelope:
Error format
Failed responses use a consistent envelope:code; treat message as human-readable only.