Skip to main content

How to Use Webhooks to integrate with services like IFTTT or Zapier

Shane McLoughlin avatar
Written by Shane McLoughlin
Updated yesterday

Booth.Events supports webhooks for integrating with third-party services such as IFTTT, Zapier, or any platform that can receive an HTTP POST call.

Important: Webhooks are advanced functionality. We recommend using them only if you’re technically skilled and very comfortable with technology. Booth.Events does not provide setup support for integrations with third-party services via webhooks.


Requirements

  • Pro+ subscription (includes a free 14-day trial).

  • A third-party service capable of receiving webhook calls.


Types of Webhooks

Booth.Events offers two webhook options. You can use one or both:

1. Upload Webhook

  • Triggered every time a file is uploaded to one of your galleries.

    Includes:

    • URL to the media page

    • Direct download link for the media file

  • Best for: Copying media to a storage service like Dropbox or Google Drive.

2. Share Webhook (added February 2025)

  • Triggered every time a guest enters their phone number or email address on the share screen of the iOS app.

    Includes:

    • Contact information entered by guests

    • Event details


Choosing the Right Webhook

Your Goal

Recommended Webhook

Save/copy media to another service (e.g., Dropbox)

Upload Webhook

Collect guest contact details when Data Collection is ON

Either Upload or Share Webhook

Collect guest contact details when Data Collection is OFF

Share Webhook


Tip: If you need both media URLs and guest contact details, you may want to enable both webhooks.

How to set your Webhook URLs

To turn it on go to your Account page, and in the Sharing Settings section hit Open on the Webhook block:

Sharing Settings on the Account  Page

Sharing Settings on the Account page

In the popup, paste in the URL where you wish the webhook request to be made to.

Showing a configured Share Webhook

How to Test

  1. Visit webhook.site and copy your personal webhook URL.

  2. In the Booth.Events dashboard, open the Webhook popup.

  3. Paste your webhook.site URL into the appropriate webhook field.

  4. Launch your event in the iOS app (testing in Preview will not trigger the webhook).

  5. Take a photo or perform the action that should trigger the webhook.

  6. Check your webhook.site page to see the incoming POST request and data.


How to Turn Off a Webhook

  1. Open the Webhook popup in the dashboard.

  2. Delete any URLs from the webhook fields so they are blank.

  3. Click Save Changes.


Technical Details

Each webhook request is an HTTP POST request with a JSON body, with Content-Type set to application/json


Upload Webhook Technical Details


Payload Values (JSON)

  • contentType (string) : image/jpeg or video/mp4

  • dataCollectionResponse (object) : if the data collection feature is turned on this contains the response of the user

  • eventId (string) : the ID of the event for this gallery

  • eventIdUser (string) : if you set a custom ID for this event then it will be present here, otherwise null

  • galleryDate (string of ISO 8601 date format) : the date set on the event of the gallery

  • galleryId (string) : the unique gallery ID

  • galleryName & value3 (string) : The gallery name

  • galleryPageUrl (string) : The URL of your gallery page on Shared.Gallery

  • gallerySlug (string) : The gallery slug, originally derived from the gallery name

  • height (number) : pixel height

  • isCollage (boolean) : true if this is generated from a template

  • kBytes: (number) : size in kilobytes of file

  • kBytesThumb: (number) : size in kilobytes of thumbnail of file

  • mediaPageUrl (string) : the URL of the Shared.Gallery media page for this file

  • sessionPageUrl (string) : the URL of the Shared.Gallery page for the session this file is in

  • shutterDate & value2 (string, ISO 8601 date format) : the date and time the photo/video was taken

  • url & value1 (string) : the publicly accessible URL to download the file

  • urlThumb (string) : the publicly accessible URL to download the thumbnail of file

  • width (number) : pixel width


Payload Example (JSON), WITHOUT dataCollectionResponse

{   "contentType": "image/jpeg",   "isCollage": false,   "width": 3024,   "height": 4032,   "kBytes": 3696,   "kBytesThumb": 18,   "url": "https://solo-s.b-cdn.net/sharedgallery.appspot.com/abc123/VFRGsI39SnCH6NKUBOmd/0013-My_Event_Name-d3.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=firebase-adminsdk-9elxx%40sharedgallery.iam.gserviceaccount.com%2F20240324%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20240324T195357Z&X-Goog-Expires=604000&X-Goog-SignedHeaders=host&X-Goog-Signature=36a68d5113b444620f5e78d8ee96f72b8088826dd22a2b52065ffeff1b6eaa55a450fefbb28986a8cb4e496d94bc5cc6436fb227555546651d706870b720e94d2dc8c7191512a8aa21a890a9da1f131924399d6c178df7abcc4e6981517b25563091475dd6daa82697b8a31ad63ac966c0349bf1327b88a477dd233c93566af5b17b12f2a236f94bfa84af804f50533dfe7c3cd5ece2978038aaa5c6230101001b35c47b70e28653084ebd83a22cb1d453aa847c82d0c4228022db9407c78140dc1341468b3fb63f2592e458df29461c5d91c5db9abb77507f74e59e121ee143a086f21891b23a365bc43a367912dfacf4b30ad271d722dc1f806b35489548e3z",   "urlThumb": "https://solo-s.b-cdn.net/sharedgallery.appspot.com/abc123/VFRGsI39SnCH6NKUBOmd/0013-My_Event_Name-d3_genThumb.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=firebase-adminsdk-9elxx%40sharedgallery.iam.gserviceaccount.com%2F20240324%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20240324T195357Z&X-Goog-Expires=604000&X-Goog-SignedHeaders=host&X-Goog-Signature=9f441b36c34c8ed9c0be7d4f7c162d71ae4037f6ee81a1d6e67e9c496ab23bb2c4c800615bf7cb8261e3f0f9d6ed6102758c331a08d484b631378211ea38a3e1fe37d0cb9cfe7ab3cda70bb4c58f82fb9ba30c1ad4a377a0e035260aa7d28704d3ad141fde510e9ddef2040756152c3f2f737072bd5376572c37ae8d19a17cd7f5a137d9a87bd414e2b44e8b1612634e2f1fa7cc3f1d917a43b9a332fc2d637ebbd3aef6de192bbcaad08320a3c6c6c8333191f7eb336b066368fc0d501a97abc2b7ed0111c16fe009b3b13ab004c9ff270f25c61d1fa55a28243f7c912ab03521afc09f2bcf45366f7ce71d81d717352b4d2cc1c358dd509b878eec5abd8898z",   "eventId": "zYrJegcdonasZm9zp131",   "eventIdUser": null,   "shutterDate": "2024-03-24T15:53:48-04:00",   "galleryId": "VFRGsI39SnCH6NKUBOmd",   "galleryName": "My Event Name",   "gallerySlug": "my-event-name",   "galleryDate": "2024-03-09T22:30:47.000Z",   "galleryPageUrl": "https://shared.gallery/of/abc123/my-event-name",   "mediaPageUrl": "https://shared.gallery/of/abc123/my-event-name/m/pMvsCmU2iQmApFmlzQHd",   "sessionPageUrl": "https://shared.gallery/of/abc123/my-event-name/s/eH7NdRY59g6OE6tw83wj",   "value1": "https://solo-s.b-cdn.net/sharedgallery.appspot.com/abc123/VFRGsI39SnCH6NKUBOmd/0013-My_Event_Name-d3.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=firebase-adminsdk-9elxx%40sharedgallery.iam.gserviceaccount.com%2F20240324%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20240324T195357Z&X-Goog-Expires=604000&X-Goog-SignedHeaders=host&X-Goog-Signature=36a68d5113b444620f5e78d8ee96f72b8088826dd22a2b52065ffeff1b6eaa55a450fefbb28986a8cb4e496d94bc5cc6436fb227555546651d706870b720e94d2dc8c7191512a8aa21a890a9da1f131924399d6c178df7abcc4e6981517b25563091475dd6daa82697b8a31ad63ac966c0349bf1327b88a477dd233c93566af5b17b12f2a236f94bfa84af804f50533dfe7c3cd5ece2978038aaa5c6230101001b35c47b70e28653084ebd83a22cb1d453aa847c82d0c4228022db9407c78140dc1341468b3fb63f2592e458df29461c5d91c5db9abb77507f74e59e121ee143a086f21891b23a365bc43a367912dfacf4b30ad271d722dc1f806b35489548e3z",   "value2": "2024-03-24T15:53:48-04:00",   "value3": "My Event Name" }


Payload Example, WITH dataCollectionResponse


{   "contentType": "image/jpeg",   "isCollage": false,   "width": 3024,   "height": 4032,   "kBytes": 3103,   "kBytesThumb": 125,   "url": "https://solo-s.b-cdn.....",   "urlThumb": "https://solo-s.b-cdn....",   "dataCollectionResponse": {     "createdDate": "2025-01-15T11:23:06-05:00",     "responses": [       {         "question": {           "optional": true,           "type": "string",           "name": "First Name",           "text": "First Name"         }       },       {         "question": {           "text": "Last Name",           "type": "string",           "name": "Last Name",           "optional": true         }       },       {         "question": {           "text": "I agree to the terms and conditions",           "type": "checkbox",           "name": "I agree to the terms and conditions",           "optional": true         }       },       {         "answer": "tim@boot...",         "question": {           "optional": false,           "type": "email",           "name": "Email",           "text": "Email"         }       },       {         "answer": "1(234) 567-8900",         "question": {           "text": "Phone Number",           "type": "phone_number",           "name": "Phone Number",           "optional": false         }       }     ]   },   "eventId": "0ajuds2IODblW79dobzm",   "eventIdUser": null,   "shutterDate": "2025-01-15T11:23:29-05:00",   "captureType": "photo",   "galleryId": "9VDWZqryjdqxKgUaiE8U",   "galleryName": "upcoming event.",   "gallerySlug": "upcoming-event",   "galleryDate": "2026-07-04T16:00:00.000Z",   "galleryPageUrl": "https://gallery.timcarrphoto.co...",   "mediaPageUrl": "https://gallery.timcarrphoto.co...",   "sessionPageUrl": "https://gallery.timcarrphoto.co...",   "value1": "https://solo-s.b-cdn.n...",   "value2": "2025-01-15T11:23:29-05:00",   "value3": "upcoming event.",   "sessionId": "iTaKk6G6BI2Q7xOxMK6p",   "sessionIndex": 0 }


Share Webhook Technical Details


Please note that since this webhook runs each time a guest enters an email or phone number, and since guests can enter multiple email addresses & phone numbers, that means that you can receive multiple share webhook calls for one single guest session. You can key on the sessionId field to de-duplicate or overwrite data, as the newest call for a given session will have all of the data.



Payload Values (JSON)

  • createdDate (string) : the date the session was created, in ISO 8601 format

  • dataCollectionResponse (object) : if the data collection feature is turned on this contains the response of the user

  • phoneNumber (array of strings) : all of the phone numbers entered on the share screen of the iOS app for this session so far, in E.164 format. Note: phone numbers entered with the Data Collection feature are not included, use dataCollectionResponse for this

  • email (array of strings) : all of the email addresses entered on the share screen of the iOS app for this session so far. Note: email addresses entered with the Data Collection feature are not included, use dataCollectionResponse for this

  • galleryId (string) : the ID of the gallery, which uniquely identifies this gallery

  • galleryName (string) : the name of the gallery (same as the event name)

  • gallerySlug (string) : the slug of the gallery (originally derived from the gallery name)

  • galleryDate (string) : the date of the gallery (same as the event date), in ISO 8601 format

  • galleryPageUrl (string) : the URL of the gallery

  • sessionPageUrl (string) : the URL of the session

  • sessionId (string) : the ID of the session, which uniquely identifies this session

  • sessionIndex (number) : a monotonically increasing index number of the session; this value does not relate to when the session was created, it relates to when the session was uploaded

  • media (array of strings) : the media IDs that are in this session

  • mediaObjects (array of objects) : the media in this session

  • value1 : same as sessionPageUrl

  • value2 : same as email

  • value3 : same as phoneNumber


Payload Example, WITH dataCollectionResponse

{   "createdDate": "2025-02-03T21:25:21.000Z",   "dataCollectionResponse": {     "createdDate": "2025-02-03T16:25:01-05:00",     "responses": [       {         "question": {           "text": "I agree to the terms and conditions",           "name": "I agree to the terms and conditions",           "type": "checkbox",           "optional": true         }       },       {         "answer": "[email protected]",         "question": {           "optional": true,           "type": "email",           "name": "Email",           "text": "Email"         }       },       {         "question": {           "text": "Phone Number",           "type": "phone_number",           "name": "Phone Number",           "optional": true         }       }     ]   },   "phoneNumber": [     "+12891234567"   ],   "email": null,   "galleryId": "ayuwM4hFkmRtQrE6Oabc",   "galleryName": "upcoming event",   "gallerySlug": "upcoming-event",   "galleryDate": "2025-02-01T17:00:00.000Z",   "galleryPageUrl": "https://timcarrphoto.com/upcoming-event",   "sessionPageUrl": "https://timcarrphoto.com/upcoming-event/s/f66uAOitdoDv8ACezNms",   "sessionId": "f66uAOitdoDv8ACezNms",   "sessionIndex": 13,   "media": [     "3rwpfma8N6MAnS2kvqEQ",     "PocakN6oa3j2AVtO2LvM"   ],   "mediaObjects": [     {       "createdDate": "2025-02-03T21:25:21.000Z",       "contentType": "image/jpeg",       "path": "solodigitalis/ayuwM4hFkmRtQrE6Oafe/0031-upcoming_event-d100.jpg",       "kBytes": 1440,       "pathThumb": "solodigitalis/ayuwM4hFkmRtQrE6Oafe/0031-upcoming_event-d100_genThumb.jpg",       "kBytesThumb": 117,       "isCollage": false,       "width": 3088,       "height": 2316,       "filename": "0031-upcoming_event-d100.jpg",       "origPath": "solodigitalis/ayuwM4hFkmRtQrE6Oafe/22A68D61-5046-42E7-941D-91CD11704834_1.jpg",       "blurData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAMElEQVR4nGNYMjHPyVp7Qme5ihQzw74NUwqz4j7//2tqrMbQVV+wOTUyLymYgYkBADRkDuQSSfWuAAAAAElFTkSuQmCC",       "templateId": "klRQiS3GPyZT2RvAj2Mc",       "captureType": "photo",       "id": "3rwpfma8N6MAnS2kvqEQ"     },     {       "createdDate": "2025-02-03T21:25:26.000Z",       "contentType": "image/jpeg",       "path": "solodigitalis/ayuwM4hFkmRtQrE6Oafe/0032-upcoming_event-d100-template.jpg",       "kBytes": 561,       "pathThumb": "solodigitalis/ayuwM4hFkmRtQrE6Oafe/0032-upcoming_event-d100-template_genThumb.jpg",       "kBytesThumb": 94,       "isCollage": true,       "width": 1844,       "height": 1240,       "filename": "0032-upcoming_event-d100-template.jpg",       "origPath": "solodigitalis/ayuwM4hFkmRtQrE6Oafe/22A68D61-5046-42E7-941D-91CD11704834_2.jpg",       "blurData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAMElEQVR4nGNYNa3Y01F/Wn+tuhQzw961k0ozEz7+/2Ogp8zQ11K8Li08JyOUkYkBADrODxal2eoGAAAAAElFTkSuQmCC",       "templateId": "klRQiS3GPyZT2RvAj2Mc",       "captureType": "photo",       "id": "PocakN6oa3j2AVtO2LvM"     }   ],   "value1": "https://timcarrphoto.com/upcoming-event/s/f66uAOitdoDv8ACezNms",   "value2": null,   "value3": [     "+12891234567"   ] }

Use Webhooks with Dropbox

You can connect many different services like Google Drive, Box, OneDrive etc - but we'll focus on Dropbox in this article.

IFTTT is a third-party service: we cannot make any guarantee about the accuracy of the content of this article with respect to third-parties.

Please note we do not offer support for third-party services like IFTTT.


See also

IFTTT Subscription / Plan levels

At the time of writing there are three plan levels available on IFTTT: free, Pro, and Pro+.

This article has two options for creating the IFTTT Applet:

  • Easier: IFTTT "Receive a web request" Applet

    • this easier option requires a IFTTT Pro subscription which is cheaper than the IFTTT Pro+ subscription

    • you have less control, for example you cannot choose how files are named

  • Advanced: IFTTT "Receive a web request with a JSON payload" Applet with Filter Code

    • this advanced option requires a IFTTT Pro+ subscription

    • you have full control; for example you can change how files are named and name them differently if they are templates/collages versus originals; this assumes you are able to understand & update the JavaScript code we give you in the article below


So, pick ONE of the following two sections. Not sure which? Then definitely pick the easier one!



Easier: IFTTT "Receive a web request" Applet

This option requires a Booth.Events Pro+ subscription and an IFTTT Pro subscription.


First you need to get your webhook URL from IFTTT and paste it into Booth.Events:

  1. Open this IFTTT page: https://ifttt.com/maker_webhooks

  2. Hit the "Documentation" button:

"Documentation" button

  1. On the resulting page scroll down to the section titled "To trigger an Event with 3 JSON values", type in an event name like boothevents_upload into the placeholder as shown in the screenshot below, and then copy the whole URL to your clipboard. The URL will look like this: https://maker.ifttt.com/trigger/boothevents_upload/with/key/kvub0DQfNV0RjOuGFmd7MwwoJsfiwoAaF89VRQJzzzz

Keep note of this event name (boothevents_upload in our example above), as you will use it later below. You can use any event name you want (it's not related to events on Booth.Events)


  1. On the Booth.Events account page, open the webhook block, paste the URL in, and hit Save Changes:


Next we need to create the actual Applet on IFTTT.


  1. Create a new Applet on IFTTT and hit the "Add" button:

  1. Search for "webhook" and hit the "Webhooks" service:

  1. Choose the service called "Receive a web request":

  1. In "Event Name" enter the event name from the previous section, then hit "Create trigger". In our example we used boothevents_upload :

  1. In the "Then That" box hit "Add":

  1. In the list of available connections choose Dropbox (you can search for it or scroll down to it):

  1. Choose "Add file form URL":

  1. On the action settings screen you need to set all 4 values:

    Dropbox account: connect your Dropbox account first

    File URL: hit Add Ingredient and then choose Value1

    File name: erase what's there, hit Add Ingredient, and then choose Value2

    Dropbox folder path: erase what's there, type in a path like IFTTT/Booth.Events/ , then hit Add Ingredient and choose Value3

    Then hit Create Action.

    If you've done this correctly you'll see something like this:

  1. On the next screen hit Continue

  2. Give the Applet a title you like (doesn't matter what it is), and hit Finish


That's it! Now try shooting some photos on the iOS App and then reload the IFTTT page: you should see that the Applet runs. Then check your Dropbox and you should see the files have been saved at the folder path you entered.






Advanced: IFTTT "Receive a web request with a JSON payload" Applet with Filter Code

This option requires a Booth.Events Pro+ subscription and an IFTTT Pro+ subscription.


First we need to get our webhook URL from IFTTT and paste it into Booth.Events. Note that this is not the same URL as the Eaiser path above.

Follow these steps:

  1. Open this IFTTT page: https://ifttt.com/maker_webhooks

  2. Hit the "Documentation" button:

"Documentation" button

  1. On the resulting page scroll down to the section titled "To trigger an Event with an arbitrary JSON payload", type in an event name like boothevents_upload into the placeholder as shown in the screenshot below, and then copy the whole URL to your clipboard. The URL will look like this: https://maker.ifttt.com/trigger/boothevents_upload/json/with/key/kvub0DQfNV0RjOuGFmd7MwwoJsfiwoAaF89VRQJzzzz

Keep note of this event name (boothevents_upload in our example above), as you will use it later below. You can use any event name you want (it's not related to events on Booth.Events)


  1. On the Booth.Events account page, open the webhook block, paste the URL in, and hit Save Changes:


Next we need to create the actual Applet on IFTTT.


  1. Create a new Applet on IFTTT and hit the "Add" button:

  1. Search for "webhook" and hit the "Webhooks" service:

  1. Choose the service called "Receive a web request with a JSON payload":

  1. In "Event Name" enter the event name from the previous section, then hit "Create trigger". In our example we used boothevents_upload :

  1. In the "Then That" box hit "Add":

  1. In the list of available connections choose Dropbox (you can search for it or scroll down to it):

  1. Choose "Add file form URL":

  1. On the action settings screen you need to set the values like this:

    Dropbox account: connect your Dropbox account first

    File URL: the value you enter here is not going to be used (it will be replaced by Filter Code), but you must enter a value. So enter "temp"

    File name: this value is also not going to be used. Luckily there's already a default value for you, so you can just use that.

    Dropbox folder path: this value is also not going to be used. Luckily there's already a default value for you, so you can just use that.

    Then hit Create Action.

  2. Hit the "+" between "If" and "Then":

  1. Hit the "+" next to Filter Code

  2. On the left side, paste in this TypeScript (JavaScript) code:

const payload = JSON.parse(MakerWebhooks.jsonEvent.JsonPayload)  // Here we set the filename differently if it is a collage or not const isVideo = payload.contentType !== 'image/jpeg' const filename = `${Meta.triggerTime}${payload.isCollage || isVideo ? `-template` : `-original`}`  Dropbox.addFileFromUrl.setFilename(filename) Dropbox.addFileFromUrl.setUrl(payload.url) Dropbox.addFileFromUrl.setPath(`IFTTT/Booth.Events/${payload.galleryName}`)

... and then hit Add filter:

  1. On the next screen hit Continue

  2. Give the Applet a title you like (doesn't matter what it is), and hit Finish


That's it! Now try shooting some photos on the iOS App and then reload the IFTTT page: you should see that the Applet runs. Then check your Dropbox and you should see the files have been saved.

You can modify the Filter Code of course, to change where the files are saved or to change the filenames.

Did this answer your question?