Static Ads Lab
Concepts

Brands

Brand identity — name, logos, color palettes, and fonts. Every product and image ad belongs to a brand.

A brand is the top-level container for your visual identity in Static Ads Lab. Every product and every image ad belongs to exactly one brand.

Mental model

A brand is the source of truth for the look and feel that the API applies to every ad it generates for you. When you generate an image ad, the brand provides the colors, fonts, and logo treatment; the design template provides the layout; the product and audience provide the content and tone.

ID prefix: brand_.

Fields

FieldTypeDescription
idstringbrand_…
namestringBrand name
descriptionstring | nullShort brand description
color_palettesobject | nullBrand color palettes (hex values)
fontsarrayFont families the brand uses, e.g. [{ "name": "Inter" }]
logo_image_idsstring[] | nullImage IDs (img_…) for brand logos
detailsobject | nullFree-form brand metadata (mission, voice, tagline)
created_at / updated_atstringISO timestamps

Endpoints

MethodPathPurpose
POST/v1/brandsCreate a brand
GET/v1/brandsList brands
GET/v1/brands/:idGet a brand
PATCH/v1/brands/:idUpdate a brand
DELETE/v1/brands/:idDelete a brand

Common patterns

Create a brand

const response = await fetch("https://api.staticadslab.com/v1/brands", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Acme Corp",
    description: "Premium outdoor gear",
    fonts: [{ name: "Inter" }],
  }),
});
const { data } = await response.json();
console.log(data.id); // brand_...
curl -s -X POST https://api.staticadslab.com/v1/brands \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "description": "Premium outdoor gear",
    "fonts": [{ "name": "Inter" }]
  }'
import requests

response = requests.post(
    "https://api.staticadslab.com/v1/brands",
    headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "name": "Acme Corp",
        "description": "Premium outdoor gear",
        "fonts": [{"name": "Inter"}],
    },
)
print(response.json()["data"]["id"])  # brand_...

Attach logos

Upload images first via POST /v1/images, then PATCH /v1/brands/:id with the resulting IDs:

await fetch(`https://api.staticadslab.com/v1/brands/${brandId}`, {
  method: "PATCH",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    logo_image_ids: ["img_logo_dark", "img_logo_light"],
  }),
});

Pitfalls

  • A brand created via API has empty color_palettes, fonts, and logo_image_ids unless you provide them. Image ads generated against a brand with no visual data may look generic.
  • The dashboard onboarding flow can auto-extract brand identity from a Shopify URL. The API exposes per-field create/update only — there is no public auto-extract endpoint today.

Prompt for your agent

Read https://www.staticadslab.com/docs/resources/brands.mdx and help me create a brand via the API with a name, description, and a logo image I'll provide later.