Skip to content

Branding & widgets

Branding controls the look of a venue’s widgets and branded emails; widget settings enable the embeddable flows and mint the public_id used in the embed URL. Every endpoint is under /api/my-venues/:venueId/… and is operator (client role, venue-scoped) - send an Authorization: Bearer token from the Authentication flow. Image uploads are base64 data URLs in a data field (multipart is rejected at the edge). For the operator-side walkthrough see Widgets; to embed the resulting snippet see the embed reference.

Method Path Purpose Auth
GET /api/my-venues/:venueId/branding Get branding operator
PUT /api/my-venues/:venueId/branding Update branding colours/font operator
POST /api/my-venues/:venueId/branding-logo Upload brand logo operator
POST /api/my-venues/:venueId/cover-image Upload/remove cover image operator
GET /api/my-venues/:venueId/widget-settings List widget settings + theme operator
PUT /api/my-venues/:venueId/widget-settings/:type Enable/disable a widget operator
PUT /api/my-venues/:venueId/widget-theme Update widget presentation operator
POST /api/my-venues/:venueId/widget-logo Upload a widget logo operator

GET /api/my-venues/:venueId/branding returns the brand record (or defaults). PUT updates the colours and font: theme (preset name, e.g. classic), accent_color, bg_color, text_color (hex) and font_key (serif, sans or mono). The logo is set separately via branding-logo, not here.

Terminal window
curl -X PUT "https://thesidedoor.co/api/my-venues/VENUE_ID/branding" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"theme":"midnight","accent_color":"#C0A060","bg_color":"#0A0806","text_color":"#F5F1E8","font_key":"serif"}'
{ "success": true }

POST /api/my-venues/:venueId/branding-logo stores a logo (max 2 MB) on the brand record; POST /api/my-venues/:venueId/cover-image stores a cover photo (max 3 MB) on the venue, or removes it with { "remove": true }. Both return the stored url.

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/branding-logo" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"data":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."}'
{ "success": true, "url": "/assets/branding/VENUE_ID.png" }

GET /api/my-venues/:venueId/widget-settings returns per-type settings keyed by widget type (bookings, events, vouchers, combo), a global theme object and vouchers_enabled. It lazily mints a stable public_id for every type, so each always has a shareable id.

Terminal window
curl "https://thesidedoor.co/api/my-venues/VENUE_ID/widget-settings" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN"
{
"data": {
"bookings": { "widget_type": "bookings", "enabled": 0, "public_id": "3f2a9c7e-..." },
"events": { "widget_type": "events", "enabled": 0, "public_id": "8b1d..." },
"vouchers": { "widget_type": "vouchers", "enabled": 0, "public_id": "a4c9..." },
"combo": { "widget_type": "combo", "enabled": 0, "public_id": "d7e2..." }
},
"theme": { "accent_color": "#C0A060", "width": "medium", "theme_mode": "detailed" },
"vouchers_enabled": false
}

PUT /api/my-venues/:venueId/widget-settings/:type where :type is one of bookings, events, vouchers, combo. Send { enabled: true }; you may also pass width (narrow/medium/wide) and custom_css, which write through to the global theme. The response returns the stable public_id - embed the widget at https://thesidedoor.co/widget/<public_id>. Enabling vouchers requires gift vouchers to be switched on first, otherwise you get a 400.

Terminal window
curl -X PUT "https://thesidedoor.co/api/my-venues/VENUE_ID/widget-settings/bookings" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"width":"medium"}'
{ "success": true, "public_id": "3f2a9c7e-1b8d-4c2a-9f11-6a0e5d3b2c47" }

PUT /api/my-venues/:venueId/widget-theme sets global presentation shared by all widgets: width (narrow/medium/wide), theme_mode (minimal/detailed), custom_css (max 20000 chars) and the show_map, show_about, show_tandc, show_info_card, show_contact toggles. It deliberately leaves colours, logo and font untouched (those are on branding).

Terminal window
curl -X PUT "https://thesidedoor.co/api/my-venues/VENUE_ID/widget-theme" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"width":"wide","theme_mode":"detailed","show_map":true,"show_about":true,"show_tandc":true,"show_info_card":true,"show_contact":false}'
{ "success": true }

POST /api/my-venues/:venueId/widget-logo stores a per-type widget logo (max 2 MB); pass data (base64 data URL) and type (defaults to bookings). It returns the url only - save it where you need it.

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/widget-logo" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"data":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...","type":"bookings"}'
{ "success": true, "url": "/assets/widget-logos/VENUE_ID/bookings.png" }