Skip to main content

Setting up Custom Webhooks (Advanced)

A technical guide to custom webhooks in Snappic. Covers webhook types (Session, Share, Survey, Competition Win), JSON payload formats, common data fields, security signatures, and the automatic retry policy.

Written by Damir

Setting up Custom Webhooks (Advanced)

Webhooks allow you to receive automatic notifications when specific events happen in your photobooth experience. When an event occurs, we'll send data to a URL you specify, letting you integrate with your own systems in real-time.

Setting Up Webhooks

  1. Go to your event settings in the dashboard

  2. Navigate to the Webhooks section

  3. Enter your webhook URL (must be HTTPS)

  4. Click Verify to test the connection

  5. Use the Send Test button to receive sample data

Webhook Types

Session Webhook

When it's sent: Each time a photo, GIF, video, or AI-generated image is captured.

What you receive:

  • Unique session identifier

  • Direct link to the media file

  • Link to the microsite page where the photo can be viewed/shared

  • Type of session (still photo, GIF, video, or AI-generated)

  • Device information (which device captured the session)

  • Template IDs used

Example:

{
"type": "session",
"event_id": 1,
"session": {
"id": "abc123xyz",
"direct_url": "https://cdn.example.com/sessions/photo.jpg",
"site_url": "https://photos.example.com/view/abc123xyz",
"type": "still",
"device": {
"id": 42,
"name": "iPad Pro - Main Booth",
"device_info": "iOS 17.0"
},
"still_template_id": 123,
"gif_template_id": 456
}
}

Share Webhook

When it's sent: Each time someone shares their photo via email or SMS.

What you receive:

  • Session details (ID, URLs, type)

  • How it was shared (email or SMS)

  • The recipient's contact information

  • Any data capture form responses collected

Example:

{
"type": "share",
"event_id": 1,
"session": {
"id": "abc123xyz",
"direct_url": "https://cdn.example.com/sessions/photo.jpg",
"site_url": "https://photos.example.com/view/abc123xyz",
"type": "still"
},
"share": {
"id": "share789",
"type": "email",
"value": "[email protected]"
},
"data_capture": {
"sections": [
{
"title": "Contact Information",
"position": 0, "fields": [
{
"field_id": "email_1",
"field_title": "Email Address",
"field_type": "email",
"value": "[email protected]",
"required": true
}
]
}
]
}
}

Survey Webhook

When it's sent: Each time someone completes a survey or data capture form.

What you receive:

  • Session details (ID, URLs, type)

  • When the survey was completed

  • All form responses organized by section

Example:

{
"type": "survey",
"event_id": 1,
"session": {
"id": "abc123xyz",
"direct_url": "https://cdn.example.com/sessions/photo.jpg",
"site_url": "https://photos.example.com/view/abc123xyz",
"type": "still"
},
"survey": {
"completed_at": "2025-01-15T14:30:00+00:00",
"data_capture": {
"sections": [
{
"title": "Feedback",
"position": 0,
"fields": [
{
"field_id": "rating_1",
"field_title": "How was your experience?",
"field_type": "rating",
"value": "5",
"required": true
},
{
"field_id": "text_1",
"field_title": "Any comments?",
"field_type": "text",
"value": "Had a great time!",
"required": false
}
]
}
]
}
}
}

Competition Win Webhook

When it's sent: Each time someone wins a prize in a competition (e.g., scratch card game).

What you receive:

  • Session details (ID, URLs, type)

  • Competition information

  • Prize details (name, images, winning message)

  • Winner's contact information

  • Prize redemption QR code URL

  • Any data capture form responses

Example:

{
"type": "competition_win",
"event_id": 1,
"session": {
"id": "abc123xyz",
"direct_url": "https://cdn.example.com/sessions/photo.jpg",
"site_url": "https://photos.example.com/view/abc123xyz",
"type": "still"
},
"competition": {
"id": 1,
"type": "scratch"
},
"prize_win": {
"id": "win456",
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"win_id": "WIN001",
"date": "2025-01-15T14:30:00+00:00",
"valid": true,
"win_image_qr_url": "https://cdn.example.com/prizes/qr/win456.png"
},
"prize": {
"id": 1,
"name": "Free Coffee",
"winning_text": "Congratulations! You've won a free coffee!",
"image_url": "https://cdn.example.com/prizes/coffee.png",
"winning_image_url": "https://cdn.example.com/prizes/coffee-winner.png"
},
"winner": {
"type": "email",
"value": "[email protected]"
},
"data_capture": {
"sections": []
}
}

Common Data Fields

Field

Description

type

The webhook type: session, share, survey, or competition_win

event_id

Your event's unique identifier

session.id

Unique identifier for the photo session

session.direct_url

Direct link to download the media file

session.site_url

Link to the microsite page for viewing/sharing

session.type

Type of content: still, gif, video, or ai

Session Types

Type

Description

still

A single photo

gif

An animated GIF

video

A video recording

ai

An AI-generated or AI-enhanced image

Retry Policy

If your webhook endpoint doesn't respond with a success code (200-299), we'll automatically retry the delivery:

  • Up to 3 retry attempts

  • 10 second delay between retries

  • After 3 failed attempts, the webhook is marked as failed

You can manually retry failed webhooks from the Webhooks section in your event settings.

Security

Each webhook request includes an X-Signature header containing an HMAC-SHA256 signature. You can use this along with your secret key (shown in the webhook settings) to verify that requests are genuinely from our system.

Did this answer your question?