Photo Booth Vendor API — Setup Guide
Upload booth photos, videos, and voice messages straight into a Brunchie event's shared album with a simple HTTP POST — setup, parameters, testing, and troubleshooting for LumaBooth, dslrBooth, and any booth that can call a URL
Connect your photo booth to Brunchie
This guide is for photo-booth operators. It shows how to send booth photos, videos, and voice messages straight into a Brunchie event's shared album with a simple HTTP upload. Works with LumaBooth, dslrBooth, or any booth software that can POST to a URL.
Need a hand? Email support@brunchie.app or use the contact page. The host you're working with can also help on the day.
How it works in one minute
You send each photo (or video, or voice message) to a web address the host gives you. Brunchie instantly posts it to the event's shared Album, and — if the host is running the Presenter on a TV — it shows up on the big screen live. No manual uploading, no matching photos to guests afterward. It just lands.
You need exactly two things from the host: an upload link and an event key. Paste them into your booth software and you're done.
Step 1 — Get the upload link + event key from the host
The host opens their event → Tools → "Connect a booth" → the "Set up LumaBooth or dslrBooth" section, and copies you:
- Upload link — a full web address with the event already built in, e.g.
https://brunchie.app/api/v1/webhooks/lumabooth?event_id=summer-wedding-a1b2c3d4Paste it whole. Don't edit it. - Event key — shown right under the link with an expiry like "Works through June 16, 2026." It's good for 7 days, then it auto-renews — so grab a fresh one the morning of the event. If the host taps Rotate, the old key stops working immediately.
The event key goes in the X-Api-Token header on every upload.
Step 2 — Configure your booth software
- Upload / webhook URL: the full link from Step 1.
- Header: name
X-Api-Token, value = the event key. - Method:
POST, form-data. - Map your fields per the table below.
That's the whole setup. Always test before the event (see below).
Upload details
POST https://brunchie.app/api/v1/webhooks/lumabooth?event_id=<event-slug>
Header
| Header | Value |
|---|---|
X-Api-Token |
Your event key (renews every 7 days) |
Parameters (form-data)
| Parameter | Required? | What it is | Example |
|---|---|---|---|
param1 |
Optional | The guest's personal QR web address from their invite. Include it and the photo is credited to that guest (their name on the post + an email copy). Leave it out (or send anything unrecognized) and the photo still posts fine — just as an anonymous booth photo. No error either way. | https://brunchie.app/qr/abc123def456 |
param2 |
Required unless sending audio only | The photo or video file's public web address (see media rules). | https://yourbooth.com/photo123.jpg |
param3 |
Yes | The media type label. | image, video, boomerang, or audio |
audio_url |
Optional | A voice-message file's public web address. Send alone for a voice-only post, or with param2 to attach it to a photo. |
https://yourbooth.com/voice123.mp3 |
You need at least one of param2 or audio_url (or both). Booth uploads always post to the shared album — there's no public/private setting to deal with on your end.
Responses
| Status | Body | Meaning |
|---|---|---|
200 |
{"success": true} |
Accepted and posted. |
401 |
(empty) | Event key missing, wrong, or expired — grab a fresh one from the host. |
500 |
Server error | On our end — get in touch right away. |
There is no 422. A missing or unrecognized guest QR is never an error; it just posts as an anonymous booth photo and returns 200.
Media rules — read these carefully
A bad link won't throw an error, but the photo won't appear. Follow these and you're set.
| Type | Formats | Max size | Notes |
|---|---|---|---|
| Image | JPG, PNG, HEIC | 10 MB | HEIC auto-converts to JPEG. |
| Video | MP4, MOV, WebM, M4V | 200 MB | Keep clips under ~15s for best results. |
| Boomerang | MP4 (short loop) | 200 MB | Shows up labelled "GIF" in the app. |
| Audio | MP3, M4A, WAV | 10 MB | Plays as a waveform. ~60s is a guideline. |
| Total per post | — | 500 MB | Combined across all files in one upload. |
The file's web address must:
- Start with
https://(nothttp://) - Be a direct, public link that returns the file immediately — no login walls, and no private or internal addresses
- Not redirect — if it bounces through a redirect before reaching the real file, our server gives up and the photo won't appear
⚠️ The one gotcha to avoid: if you send an anonymous photo (no guest QR) and the file link can't be downloaded (http instead of https, a redirect, a private/dead link), you'll still get a
200but no photo appears — nothing errors. Always use a direct publichttps://link, and glance at the Album or Presenter after your first few shots to confirm photos are landing.
Crediting a photo to a guest
At the event, each guest who RSVPs gets a personal QR code on their invite. Your booth can scan it at the start of their session. The QR encodes a web address like https://brunchie.app/qr/abc123 — send that as param1 and Brunchie credits the photo to that guest, puts their name on the post, and emails them a copy.
If your booth doesn't scan QR codes (or the guest doesn't have theirs), skip param1 entirely. The photo posts anonymously — no error, no fuss.
Where the photos show up
- Album tab — the pill tab on the event page. Every photo, video, and voice post lands here.
- Presenter (Photo Booth view) — if the host runs the Presenter on a TV, new photos appear there live. (Voice-only posts go to the Album but not the TV — the screen shows photos and videos only.)
What success looks like
The same shot, seconds after it's taken, in all three places — here's one booth photo (credited to the guest whose QR was scanned) on the Presenter TV, in the Album grid, and as a post in the feed.
On the Presenter (TV slideshow) — the newest shot heroes full-screen with a small join QR in the corner:
| Light | Dark |
|---|---|
![]() |
![]() |
In the Album tab — every booth photo collects in the shared grid:
| Light | Dark |
|---|---|
![]() |
![]() |
As a post in the feed — credited to the guest, ready for reactions and comments:
| Light | Dark |
|---|---|
![]() |
![]() |
Test before the event — every time
Always test on a brand-new throwaway event you create just for testing — never on the real event. Test photos post to whatever event the link points at.
- Create a free test event in Brunchie (about 30 seconds).
- Tools → Connect a booth → copy the upload link + event key.
- Paste them into your booth software (or use the cURL examples below).
- Open two tabs: the event's Album, and Presenter → Photo Booth view.
- Send a test upload with a guest QR (use your own invite link as
param1) → it should appear in both, within seconds, with your name on it. - Send one without
param1(anonymous) → it appears as a booth photo, no name. - Support voice messages? Test with
audio_urltoo.
Got 200 and saw the photos land? You're good to go.
cURL examples
# Photo only (with guest QR)
curl -X POST "https://brunchie.app/api/v1/webhooks/lumabooth?event_id=<event-slug>" \
-H "X-Api-Token: <event-key>" \
-d "param1=https://brunchie.app/qr/<guest-qr>" \
-d "param2=https://yourbooth.com/photo123.jpg" \
-d "param3=image"
# Photo only (anonymous — no guest QR)
curl -X POST "https://brunchie.app/api/v1/webhooks/lumabooth?event_id=<event-slug>" \
-H "X-Api-Token: <event-key>" \
-d "param2=https://yourbooth.com/photo123.jpg" \
-d "param3=image"
# Photo + voice message
curl -X POST "https://brunchie.app/api/v1/webhooks/lumabooth?event_id=<event-slug>" \
-H "X-Api-Token: <event-key>" \
-d "param1=https://brunchie.app/qr/<guest-qr>" \
-d "param2=https://yourbooth.com/photo123.jpg" \
-d "param3=image" \
-d "audio_url=https://yourbooth.com/voice123.mp3"
# Voice message only
curl -X POST "https://brunchie.app/api/v1/webhooks/lumabooth?event_id=<event-slug>" \
-H "X-Api-Token: <event-key>" \
-d "audio_url=https://yourbooth.com/voice123.mp3" \
-d "param3=audio"
Troubleshooting
| What you're seeing | What to check |
|---|---|
Getting 401 |
Event key missing, wrong, or expired. Grab a fresh one from the host (Tools → Connect a booth). Watch for stray spaces — it's case-sensitive. |
Photo not appearing, but you got 200 |
The file's web address can't be reached by our server. Confirm it's https://, a direct public link (no redirects, no login walls, not local/private). See the gotcha above. |
| Post appears but has no image | Same cause — the link returned 200 but the file download failed. Make sure the link opens the file directly in a browser, no login. |
| Video slow to appear | Videos process in the background — give it up to a minute. |
| Audio waveform not showing | Audio processing takes a few seconds; if it's still missing after 30s, get in touch. |
| Guest's photo shows but not under their name | The QR in param1 may be from a different event or garbled. Confirm the full URL is passed correctly. |
Something wrong during the event? Email support@brunchie.app — photos post in real time, so we can watch the event page live and help right away.
Quick FAQ
- Multiple photos per guest? Yes — one POST per photo; each becomes its own Album post.
- Photo + voice together? Yes — send
param2andaudio_urlin the same POST. - Booth can't scan QR codes? Just skip
param1. Photos still post, without a guest name. - Rate limit? No hard limit — a few uploads per second is totally fine.
- Is there a separate test environment? No — just create a free throwaway test event and run your checks against that (see the test section).
Related
- The photobooth: your shared album — what guests see in the app
- Presenter Mode — the live TV slideshow your booth photos appear on
Try Brunchie free
Brunchie replaces the spreadsheet, the group chat, and the half-finished invite list. Free forever for the people we built it for.
Get started




