Browse API docs

Shop look

These endpoints read and change what the look studio edits: the shop’s theme, accent color and fonts, and an event’s own look for its event page, ticket embed, seat selection and lounges. Checkout and the rest of the shop always wear the shop’s look.

Unlike the look studio, there is no preview step: a successful update applies to the live shop immediately.

Reading requires a token with Read or Read + Write permission. Updating requires Read + Write. The shop’s look is an account setting for account-wide tokens; personal co-organizer tokens can read and change the look of their assigned events only. See Authentication.

GET /admin/account_settings/look

curl \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/account_settings/look

Response (the fonts list is shortened here; it always contains the whole library):

{
  "data": {
    "theme": "dark",
    "accent_color": "#0055FF",
    "shop_heading_font": "geist",
    "shop_body_font": "geist",
    "themes": [
      { "key": "light", "scheme": "light" },
      { "key": "dark", "scheme": "dark" },
      { "key": "paper", "scheme": "light" },
      { "key": "midnight", "scheme": "dark" },
      { "key": "tinted_light", "scheme": "light" },
      { "key": "tinted_dark", "scheme": "dark" }
    ],
    "fonts": [
      { "key": "geist", "name": "Geist", "category": "sans", "body": true },
      { "key": "syne", "name": "Syne", "category": "display", "body": false },
      { "key": "literata", "name": "Literata", "category": "serif", "body": true }
    ]
  }
}
Field Type Notes
theme string One of the six theme keys below.
accent_color string Six-digit hex color such as #0055FF, used for links, buttons and highlights. The two tinted themes also derive their surfaces from it.
shop_heading_font string Font key for headings. Any font in the library.
shop_body_font string Font key for body text. Only fonts with body: true.
themes array Read-only. Every theme as { key, scheme }; scheme is light or dark.
fonts array Read-only. Every font as { key, name, category, body }. category is sans, display, serif, mono or script; body says whether it is offered for body text.

PATCH /admin/account_settings/look

Send only the fields you want to change, either inside account or directly at the JSON top level. This example switches to the Midnight theme with a purple accent, Syne headings and Inter body text:

curl -X PATCH \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"account": {"theme": "midnight", "accent_color": "#895EC9", "shop_heading_font": "syne", "shop_body_font": "inter"}}' \
  https://app.usetix.io/admin/account_settings/look

Writable fields: theme, accent_color, shop_heading_font and shop_body_font, with the values described above. Omitted fields keep their value.

Response: 200 OK with the complete data object in the same shape as GET.

Validation failures return 422 Unprocessable Entity, for example for a body font that is not offered for body text:

{
  "errors": {
    "shop_body_font": ["is not included in the list"]
  }
}

A Read token attempting PATCH receives 401 Unauthorized and nothing is changed.

GET /admin/events/:slug/look

curl \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase/look

Response:

{
  "data": {
    "shop_theme": null,
    "shop_heading_font": "syne",
    "shop_body_font": null,
    "ticket_accent_color": "#895EC9",
    "effective": {
      "theme": "dark",
      "scheme": "dark",
      "accent_color": "#895EC9",
      "heading_font": "syne",
      "body_font": "geist"
    }
  }
}
Field Type Notes
shop_theme string | null The event’s own theme. null follows the shop.
shop_heading_font string | null The event’s own heading font. null follows the shop.
shop_body_font string | null The event’s own body font, one with body: true. null follows the shop.
ticket_accent_color string | null The event color as six-digit hex. It also colors the event’s PDF ticket and Wallet pass. null follows the shop’s accent color.
effective object Read-only. What the event page actually shows: theme, its scheme (light or dark), accent_color, heading_font and body_font, with every part that follows the shop already resolved.

PATCH /admin/events/:slug/look

Send only the parts you want to change, either inside event or directly at the JSON top level. An empty string or null makes that part follow the shop again. This example gives the event the Paper theme and a green event color, and lets its headings follow the shop:

curl -X PATCH \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"event": {"shop_theme": "paper", "shop_heading_font": "", "ticket_accent_color": "#2FBF71"}}' \
  https://app.usetix.io/admin/events/spring-showcase/look

Writable fields: shop_theme, shop_heading_font, shop_body_font and ticket_accent_color. Omitted fields keep their value.

Response: 200 OK with the complete data object in the same shape as GET. Validation failures return 422 Unprocessable Entity with an errors map, as for the shop’s look.

Personal co-organizer tokens with write permission can update the look of their assigned events. Other events return 404.

Create an event with its look

POST /admin/events also accepts shop_theme, shop_heading_font, shop_body_font and ticket_accent_color, next to the other event fields. Leave them out to follow the shop.

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"title": "Poetry Night", "venue_id": 7, "starts_at": "2026-11-12T19:30:00Z", "shop_theme": "paper", "shop_heading_font": "instrument_serif", "shop_body_font": "literata", "ticket_accent_color": "#B5562E"}' \
  https://app.usetix.io/admin/events

To change the look of an existing event, use PATCH /admin/events/:slug/look.

Themes

Key Scheme Looks like
light light White surfaces with dark text.
dark dark Near-black surfaces with light text. The default for new shops.
paper light A warm off-white.
midnight dark Deep blue.
tinted_light light Light surfaces tinted with the accent color.
tinted_dark dark Dark surfaces tinted with the accent color.

Fonts

Every font can be used for headings. Only fonts marked body can be used for body text. All fonts are self-hosted by Usetix; none is loaded from Google Fonts. New shops start with geist for both.

Category Keys
sans geist (body), inter (body), dm_sans (body), manrope (body), plus_jakarta_sans (body), figtree (body), instrument_sans (body), space_grotesk (body), sora (body), work_sans (body), bricolage_grotesque (body)
display unbounded, syne, bebas_neue, anton, big_shoulders_display, bungee, shrikhand, righteous, orbitron, dela_gothic_one
serif fraunces (body), source_serif_4 (body), literata (body), instrument_serif, playfair_display, young_serif, gloock, cormorant_garamond
mono geist_mono, space_mono, jetbrains_mono
script caveat, pacifico, permanent_marker

Read the fonts list from GET /admin/account_settings/look instead of hard-coding it; the library can grow.

AI and MCP

The built-in assistant and MCP clients change the same settings through account_settings and manage_event_look. See MCP.