Webhooks¶
Introduction¶
FIXR's Webhooks provider near real-time updates to be sent to your systems in response to certain triggers. Once a webhook destination has been configured, the endpoint will be sent data directly rather than having to poll an API for changes.
Configuration¶
Webhooks are triggered by events occuring on the FIXR platform. Webhooks are fired besd on the following events:
Event Name | Event Description |
---|---|
Event created |
Fires a webhook when an event is created. |
Event updated |
Fires a webhook when an event is updated. |
Event published |
Fires a webhook when an event is changed to Live. |
Event ended |
Fires a webhook when an event has ended. |
Ticket sold |
Fires a webhook whenever a ticket is purchased. |
Ticket scanned |
Fires a webhook whenever a ticket is scanned (admitting the attendee to the venue). |
Customer updated |
Fires a webhook whenever a customer updates their profile details and/or contact preferences. |
Security¶
Authentication¶
Webhooks can optionally be configured to send an Authorization
header with a bearer token so that your systems can verify webhooks are coming from the FIXR platform.
When configured, the token will be sent in the Authorization
header in the form Bearer <token>
where <token>
is the configured token.
This token is fixed and configured when a webhook endpoint is set up on organiser.fixr.co.
For example, if the token was abcdef
, the header would be Authorization: Bearer abcdef
.
When data is received via webhook, your endpoint should check the token is provided and is correct.
HTTPS¶
All configured webhook URLs must use HTTPS.
Data Structures¶
Data is sent as an application/json
POST request.
- Date/time strings are in the format
"2023-08-25T16:58:00Z"
- Monetary amounts are returned as strings, e.g
"15.25"
- Contact preference option strings can be one of the following:
"opt_in"
- User has positively opted in to receiving marketing communications
"opt_out"
- User has positively opted out of receiving marketing communications
"soft_opt_in"
- User has not explicitly opted in or out of receiving marketing communications and defaults to
true
- User has not explicitly opted in or out of receiving marketing communications and defaults to
"soft_opt_out"
- User has not explicitly opted in or out of receiving marketing communications and defaults to
false
- User has not explicitly opted in or out of receiving marketing communications and defaults to
Trigger Response Structure¶
All responses to triggers will respond with the same structure outline:
{
"event": "Trigger e.g. event_created",
"payload": {"Examples": "see below"},
"created": "String timestamp of when the message was sent",
"message_id": "ID of the message",
"fixr_account_id": "Specific ID of the FIXR Event Organiser account from where the webhook was configured"
}
Example Trigger Responses¶
The following are examples of the body of a fired webhook POST request may contain for each trigger.
Not all fields will be populated. If a field is not applicable (for instance if a ticket holder does not disclose a gender), the field will be null
.
Event Created¶
{
"event": "event_created",
"payload": {
"capacity": 150,
"category": "Courses, Training and Workshops",
"close_time": "2023-09-22T22:59:00UTC",
"created_at": "2023-09-20T10:57:14UTC",
"created_by": {
"user_uuid": "f68475c8-5a8e-4b1e-841f-13f37cc8a66b",
"first_name": "Harry",
"last_name": "Potter",
"email": "harry.potter@hogwarts.co"
},
"description": "Event Created Webhook Response Description",
"event_id": "919509149",
"event_url": "https://eventurl.com",
"last_entry": "2023-09-22T18:00:00UTC",
"name": "FIXR Event Created Webhook Response",
"open_time": "2023-09-22T04:00:00UTC",
"status": "Draft",
"tags": ["special-event", "lecture"],
"location": {
"location_id": "15128",
"name": "02 Arena",
"address": "London SE10 0DX",
"online": false,
"postcode": "SE10 0DX",
"country": "United Kingdom",
"city": "London",
"timezone": "Europe/London"
}
},
"created": "2023-09-20T10:57:15UTC",
"message_id": "8552615258943695",
"fixr_account_id": "930327450"
}
Event Updated¶
The entire event metadata is sent on an event update, even if only a single field is updated
{
"event": "event_updated",
"payload": {
"capacity": 150,
"category": "Courses, Training and Workshops",
"close_time": "2023-09-22T22:59:00UTC",
"created_at": "2023-09-20T10:57:14UTC",
"created_by": {
"user_uuid": "f68475c8-5a8e-4b1e-841f-13f37cc8a66b",
"first_name": "Harry",
"last_name": "Potter",
"email": "harry.potter@hogwarts.co"
},
"description": "Updated Description",
"event_id": "919509149",
"event_url": "https://eventurl.com",
"last_entry": "2023-09-22T18:00:00UTC",
"name": "FIXR Event Created Webhook Response",
"open_time": "2023-09-22T04:00:00UTC",
"status": "Draft",
"tags": ["special-event", "lecture"],
"location": {
"location_id": "15128",
"name": "02 Arena",
"address": "London SE10 0DX",
"online": false,
"postcode": "SE10 0DX",
"country": "United Kingdom",
"city": "London",
"timezone": "Europe/London"
}
},
"created": "2023-09-20T10:57:15UTC",
"message_id": "8552615258943696",
"fixr_account_id": "930327450"
}
Event Published¶
{
"event": "event_published",
"payload": {
"event_id": "919509149",
"name": "FIXR Event Created Webhook Response",
"status": "Live"
},
"created": "2023-09-20T12:57:15UTC",
"message_id": "8552615258943697",
"fixr_account_id": "930327450"
}
Event Ended¶
{
"event": "event_ended",
"payload": {
"capacity": 150,
"category": "Courses, Training and Workshops",
"close_time": "2023-09-22T22:59:00UTC",
"created_at": "2023-09-20T10:57:14UTC",
"created_by": {
"user_uuid": "f68475c8-5a8e-4b1e-841f-13f37cc8a66b",
"first_name": "Harry",
"last_name": "Potter",
"email": "harry.potter@hogwarts.co"
},
"description": "Updated Description",
"event_id": "919509149",
"event_url": "https://eventurl.com",
"last_entry": "2023-09-22T18:00:00UTC",
"name": "FIXR Event Created Webhook Response",
"open_time": "2023-09-22T04:00:00UTC",
"status": "Live",
"tags": ["special-event", "lecture"],
"location": {
"location_id": "15128",
"name": "02 Arena",
"address": "London SE10 0DX",
"online": false,
"postcode": "SE10 0DX",
"country": "United Kingdom",
"city": "London",
"timezone": "Europe/London"
},
"total_revenue": [
{"currency": "GBP", "amount": "150.75"},
{"currency": "USD", "amount": "52.00"}
],
"tickets_sold": 150,
"tickets_transferred": 10,
"total_orders": 120
},
"created": "2023-09-22T22:59:00UTC",
"message_id": "8552615258943698",
"fixr_account_id": "930327450"
}
Ticket Sold¶
{
"event": "ticket_sold",
"payload": {
"booking_fee": {
"amount": "0.82",
"currency": "GBP"
},
"event_id": "919509149",
"event_name": "FIXR Event Created Webhook Response",
"event_url": "https://eventurl.com",
"order_reference": "604bdd96",
"price": {
"amount": "8.0",
"currency": "GBP"
},
"promo_code": "PROMOCODE",
"reserved_at": "2023-09-20T11:11:05UTC",
"sold_at": "2023-09-20T11:11:17UTC",
"ticket_holders": [
{
"first_name": "Ron",
"last_name": "Weasley",
"email": "ron.weasley@hogwarts.co",
"date_of_birth": "1991-05-11",
"mobile_number": "+44726730425",
"gender": "m",
"gender_self_describe": null,
"user_uuid": "f68475c8-5a8e-4b1e-841f-13f37cc8a66b",
"contact_preferences_user_response": "opt_in"
}
],
"ticket_reference": "XHWFtRfJe3QTvkCsagzff3",
"ticket_type": "General Admission",
"ticket_type_category": null,
"ticket_type_id": "540568",
"timeslot": null,
"quantity": 3,
"location": {
"location_id": "15128",
"name": "02 Arena",
"address": "London SE10 0DX",
"online": false,
"postcode": "SE10 0DX",
"country": "United Kingdom",
"city": "London",
"timezone": "Europe/London"
}
},
"created": "2023-09-20T11:11:19UTC",
"message_id": "8552135679096150",
"fixr_account_id": "930327450"
}
Ticket Scanned¶
{
"event": "ticket_scanned",
"payload": {
"entry_status": "Confirmed",
"event_id": "919509149",
"event_name": "FIXR Event Created Webhook Response",
"event_url": "https://eventurl.com",
"people_in": 3,
"ticket_holders": [
{
"first_name": "Ron",
"last_name": "Weasley",
"email": "ron.weasley@hogwarts.co",
"date_of_birth": "1991-05-11",
"mobile_number": "+44726730425",
"gender": "m",
"gender_self_describe": null,
"user_uuid": "f68475c8-5a8e-4b1e-841f-13f37cc8a66b",
"contact_preferences_user_response": "opt_in"
}
],
"ticket_reference": "XHWFtRfJe3QTvkCsagzff3",
"ticket_type": "General Admission",
"ticket_type_id": "540568",
"ticket_type_category": null,
"time_in": "2023-09-20T11:16:11UTC",
"timeslot": null,
"location": {
"location_id": "15128",
"name": "02 Arena",
"address": "London SE10 0DX",
"online": false,
"postcode": "SE10 0DX",
"country": "United Kingdom",
"city": "London",
"timezone": "Europe/London"
}
},
"created": "2023-09-20T11:16:11UTC",
"message_id": "8552296675518248",
"fixr_account_id": "930327450"
}
Customer Updated¶
{
"event": "customer_updated",
"payload": {
"date_of_birth": "1991-11-05",
"email": "user@email.com",
"first_name": "Harry",
"gender": "m",
"gender_self_describe": null,
"last_name": "Potter",
"mobile_number": "+4445678910",
"preferred_language": "en",
"contact_preferences_user_response": "opt_in",
"user_uuid": "f68475c8-5a8e-4b1e-841f-13f37cc8a66b"
},
"created": "2023-09-20T10:57:15UTC",
"message_id": "8552615258943696",
"fixr_account_id": "930327450"
}