Hermeseus

Webhooks

The platform captures upstream activity events and exposes them as a polling API, so you do not stand up your own receiver.

You do not register a callback URL. Instead you query the latest known state of a product, product-type, or booking. Send SessionId as a query parameter.

Read the latest event

GET/Activity/v2/webhook-events/{event}/{uuid}

Access requires the permission activity_webhook_events

Pass the event name and the entity uuid. You get the most recent event of that type for that entity.

Event types

EventFires when
product_availableA product becomes available.
product_updatedA product's content changes.
product_type_availableA variant becomes available.
product_type_not_availableA variant becomes unavailable.
product_type_content_updatedA variant's content changes.
product_type_pricing_updatedA variant's price changes.
product_type_availability_updatedA variant's availability changes.
booking_status_updatedA booking's status changes.
booking_data_updatedA booking's data changes.
booking_tickets_updatedA booking's tickets change.

Query parameters

NameTypeRequiredDefaultDescription
historybooleanNofalseReturn a list of past events instead of the latest one.
limitintegerNo20History size, 1 to 50. Presence of limit turns on history mode.
curl "https://api.hermeseus.com/api/Activity/v2/webhook-events/booking_status_updated/1d59a17e-9726-4283-a5b7-bab7886e4709?SessionId=8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"
const uuid = "1d59a17e-9726-4283-a5b7-bab7886e4709";
const res = await fetch(`https://api.hermeseus.com/api/Activity/v2/webhook-events/booking_status_updated/${uuid}?SessionId=8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f`);
const data = await res.json();
import requests

uuid = "1d59a17e-9726-4283-a5b7-bab7886e4709"
res = requests.get(
    f"https://api.hermeseus.com/api/Activity/v2/webhook-events/booking_status_updated/{uuid}",
    params={"SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"},
)

data = res.json()

Response

Latest mode returns the newest event, or found: false when there is none.

{
  "event": "booking_status_updated",
  "primaryUuid": "1d59a17e-9726-4283-a5b7-bab7886e4709",
  "found": true,
  "id": 55213,
  "receivedAt": "2026-10-14T11:02:03.000+08:00",
  "eventTimestamp": "2026-10-14T11:02:00.000+08:00",
  "payload": { "currentStatus": "APPROVED" }
}

History mode returns count and an items array of the same objects.

Do not poll in a tight loop. Poll on a sensible interval, or check the event right after an action that would change it. For booking issuance, read booking_status_updated instead of re-fetching the booking repeatedly.