Callbacks
Inbound webhooks from partner systems — e.g. the the registry access-control callback that records a gate tap. Authenticated by a shared secret header (not a user bearer token), so these routes must never be exposed to the public frontend.
POST the registry Access Control Callback {{url}}/callbacks/waas ▸
Public webhook — called by the TerraGo platform (not by the TerraGo frontend/app) to push real-time events into TerraGo: access-control taps at a gate/zone/location, wallet top-up confirmations, and SMS delivery receipts. Routes internally based on the event field.
Request Body (envelope)
- event (
string, required): One of: ACCESSCONTROL/ZONECHECKIN/ZONECHECKOUT/DENIED— a tap-in/tap-out/denied event at a gate.datashape:{ zoneid, person_id, status }.WALLETTRANSACTIONCALLBACK— a parent's wallet top-up. Onlytype: "Top Up"payloads are processed; triggers a billing cycle for the parent.SMS_CALLBACK— delivery status for a previously sent SMS.datashape:{ phone, status: "delivered"|"failed", response }. Updates the matching Communication log entry.- data (
object, required): Event-specific payload, see above.
Notes
- No bearer token — authenticity relies on this being a server-to-server call from the the registry platform.
ACCESS_CONTROLevents are queued ({"queued": true}) and processed asynchronously, ultimately creating roll call / access log records. - Unrecognized
eventvalues are logged as warnings and otherwise ignored.
Response
200 acknowledgement (data); the tap event is recorded and processed. Returns 403 if the shared-secret header is missing or invalid.
Auth
Bearer token (inherited)Request Body
// {
// "event": "ZONE_CHECKOUT",
// "data":{
// "person_id":"55998eaf-93e6-4f2b-b0bc-bdeae82255f2",
// "first_name":"Disi",
// "last_name":"New",
// "zone_id":"55169604-66a9-4eba-b35b-2448ea21ba86",
// "zone":"KAP 123","zone_type":"Mobile",
// "zone_tags":[
// {"id":"84561c7c-125c-4a96-97c8-3ba7ea5ca2e1","name":"Foundation","description":null,"entity":"universal","color_code":"#FF9500"},
// {"id":"5ac13004-3e77-4e9e-a9b8-be8080ce845e","name":"BACKSTAGE ACCESS","description":"test","entity":"universal","color_code":"#34C759"},
// {"id":"27ba6b10-c659-408f-beb1-dc650d5d5034","name":"VIP ACCESS","description":"VIP ACCESS","entity":"universal","color_code":"#9351E8"},
// {"id":"d4b18b8f-eaa6-44e1-8655-d75f146c0933","name":"PM School Tag","description":"PM School Tag","entity":"universal","color_code":"#EA0D8D"}
// ],
// "third_party_id":"09e85c35-5998-4362-beed-297c92a4e851",
// "checkin_at":"2026-03-22 16:41:07",
// "checkout_at":"2026-03-22 16:41:12",
// "status":"Checked Out"
// }
// }
{
"event": "ZONE_CHECKIN",
"data": {
"person_id": "2f2ee36a-bfa5-4b07-b999-d41149125655",
"first_name": "Pink",
"last_name": "Terra",
"zone_id": "55169604-66a9-4eba-b35b-2448ea21ba86",
"zone": "KAP 123",
"zone_type": "Mobile",
"access_log_mode": "Manual",
"zone_metadata": [
{
"key": "make",
"value": "Isuzu Dmax"
},
{
"key": "model",
"value": "NQR"
},
{
"key": "capacity",
"value": 32
},
{
"key": "consumption",
"value": "3"
},
{
"key": "fuel_type",
"value": "Petrol"
}
],
"zone_tags": [
{
"id": "84561c7c-125c-4a96-97c8-3ba7ea5ca2e1",
"name": "Foundation",
"description": null,
"entity": "universal",
"color_code": "#FF9500"
},
{
"id": "5ac13004-3e77-4e9e-a9b8-be8080ce845e",
"name": "BACKSTAGE ACCESS",
"description": "test",
"entity": "universal",
"color_code": "#34C759"
},
{
"id": "27ba6b10-c659-408f-beb1-dc650d5d5034",
"name": "VIP ACCESS",
"description": "VIP ACCESS",
"entity": "universal",
"color_code": "#9351E8"
},
{
"id": "d4b18b8f-eaa6-44e1-8655-d75f146c0933",
"name": "PM School Tag",
"description": "PM School Tag",
"entity": "universal",
"color_code": "#EA0D8D"
}
],
"third_party_id": "6c9c0aca-ec65-4dba-9717-f5a006d54503",
"checkin_at": "2026-03-22 16:41:07",
"checkout_at": null,
"status": "Checked In"
}
}