Webhooks
List recent outbound events
Returns one canonical row per source event, newest first. REST-hook
integrations use this endpoint to load representative sample data
whose keys and types match the live webhook envelope. Live events are
returned by default; request mode=test or mode=all explicitly when
validating sandbox activity. Event rows are retained for 90 days and
require the dedicated EVENTS_READ scope.
GET
https://dashboard.perkstar.co.uk/api/v1
/
events
List recent outbound events
curl --request GET \
--url https://dashboard.perkstar.co.uk/api/v1/events \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://dashboard.perkstar.co.uk/api/v1/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://dashboard.perkstar.co.uk/api/v1/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://dashboard.perkstar.co.uk/api/v1/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"has_more": true,
"next_cursor": "<string>",
"limit": 123,
"data": [
{
"id": "whd_01JEXAMPLE",
"type": "transaction.created",
"created": 1785312000,
"orgId": "org_123",
"data": {
"transactionId": "txn_123",
"enrollmentId": "enr_123",
"cardId": "card_123",
"type": "STAMP",
"delta": 1,
"balanceAfter": 6,
"occurredAt": "2026-07-30T10:00:00.000Z"
}
}
]
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Opaque cursor returned in next_cursor.
Required range:
1 <= x <= 200Repeat or comma-separate dotted event names.
Stable dotted wire-format name for an outbound event.
Available options:
customer.enrolled, customer.unenrolled, customer.anonymized, customer.group_changed, wallet.installed, card.scanned, card.expired, referral.created, transaction.created, coupon.redeemed, reward.redeemed, tier.changed, ticket.purchased, ticket.cancelled, ticket.refunded, gift.purchased, gift.redeemed, multipass.purchased, membership.purchased, membership.renewed, membership.cancelled, feedback.submitted, automation.fired, broadcast.sent, booking.created, booking.confirmed, booking.attended, booking.no_show, booking.cancelled, webhook.test Return only events whose payload contains this card ID.
Return only events whose payload contains this customer ID.
Available options:
live, test, all Was this page helpful?
⌘I
List recent outbound events
curl --request GET \
--url https://dashboard.perkstar.co.uk/api/v1/events \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://dashboard.perkstar.co.uk/api/v1/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://dashboard.perkstar.co.uk/api/v1/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://dashboard.perkstar.co.uk/api/v1/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"has_more": true,
"next_cursor": "<string>",
"limit": 123,
"data": [
{
"id": "whd_01JEXAMPLE",
"type": "transaction.created",
"created": 1785312000,
"orgId": "org_123",
"data": {
"transactionId": "txn_123",
"enrollmentId": "enr_123",
"cardId": "card_123",
"type": "STAMP",
"delta": 1,
"balanceAfter": 6,
"occurredAt": "2026-07-30T10:00:00.000Z"
}
}
]
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"message": "<string>",
"code": "<string>",
"param": "<string>"
}
}
