API reference · Platform & integration
Ticketing gate
POST Link a gate device and register its P-256 public key (GATE_STAFF, MANAGER or OWNER)
POST /ticketing/gate/device
The device signs every scan batch with the matching private key.
Headers
| Name | Notes |
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: GateDeviceRequest · Response: GenericResponseGateDeviceResponse
curl -X POST "https://api.bridgemoni.com/ticketing/gate/device" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"organiserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"label": "string",
"publicKeyX": "string",
"publicKeyY": "string"
}'
{
"organiserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"label": "string",
"publicKeyX": "string",
"publicKeyY": "string"
}
{
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"organiserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"label": "string",
"status": "ACTIVE",
"lastSequence": 0,
"lastSyncAt": "2026-09-25T10:00:00Z",
"occurrenceReferences": [
"b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
]
},
"description": "OK"
}
Responses
POST Assign a gate device to an occurrence (MANAGER or OWNER)
POST /ticketing/gate/device/{reference}/assign
Headers
| Name | Notes |
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
Example
Request body: GateAssignRequest · Response: GenericResponseGateDeviceResponse
curl -X POST "https://api.bridgemoni.com/ticketing/gate/device/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/assign" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
}'
{
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
}
{
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"organiserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"label": "string",
"status": "ACTIVE",
"lastSequence": 0,
"lastSyncAt": "2026-09-25T10:00:00Z",
"occurrenceReferences": [
"b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
]
},
"description": "OK"
}
Responses
POST Revoke a gate device; it can no longer sync or scan (MANAGER or OWNER)
POST /ticketing/gate/device/{reference}/revoke
Headers
| Name | Notes |
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
Example
Request body: GateRevokeRequest · Response: GenericResponseGateDeviceResponse
curl -X POST "https://api.bridgemoni.com/ticketing/gate/device/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/revoke" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"reason": "string"
}'
{
"reason": "string"
}
{
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"organiserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"label": "string",
"status": "ACTIVE",
"lastSequence": 0,
"lastSyncAt": "2026-09-25T10:00:00Z",
"occurrenceReferences": [
"b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
]
},
"description": "OK"
}
Responses
GET Gate findings for an occurrence (any organiser member)
GET /ticketing/gate/occurrence/{reference}/findings
Headers
| Name | Notes |
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
Example
Response: GenericResponseListGateFindingResponse
curl -X GET "https://api.bridgemoni.com/ticketing/gate/occurrence/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/findings" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV"
{
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"kind": "DUPLICATE_ENTRY",
"ticketReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"detail": "string",
"creationDateTime": "2026-09-25T10:00:00Z"
}
],
"description": "OK"
}
Responses
GET The gate manifest for an occurrence: keys, policy and ticket changes since a version
GET /ticketing/gate/occurrence/{reference}/manifest
Paged at 100, ordered by change version then ticket. Keep paging while complete is false.
Headers
| Name | Notes |
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
X-Gate-Device | |
Path parameters
Query parameters
| Name | Default |
since | Optional |
after | Optional |
Example
Response: GenericResponseManifestResponse
curl -X GET "https://api.bridgemoni.com/ticketing/gate/occurrence/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/manifest" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV"
{
"data": {
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"manifestVersion": 0,
"complete": true,
"serverTime": "2026-09-25T10:00:00Z",
"doorsAt": "2026-09-25T10:00:00Z",
"endsAt": "2026-09-25T10:00:00Z",
"policy": {
"policyExpiresAt": "2026-09-25T10:00:00Z",
"offlinePermitted": true,
"rotatingStepSeconds": 0,
"rotatingSkewSteps": 0
},
"keys": [
{
"kid": "string",
"alg": "string",
"crv": "string",
"x": "string",
"y": "string",
"status": "PENDING"
}
],
"tickets": [
{
"ref": "string",
"gen": 0,
"status": "ISSUED",
"tier": "string",
"seat": "string",
"entry": "SINGLE",
"name": "string",
"restricted": true,
"seed": "string",
"changedVersion": 0
}
],
"nextSince": 0,
"nextAfter": "string"
},
"description": "OK"
}
Responses
POST Online scan: the server decides and records admission atomically
POST /ticketing/gate/scan
Headers
| Name | Notes |
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
X-Gate-Device | |
Content-Type | application/json |
Example
Request body: ScanRequest · Response: GenericResponseScanResponse
curl -X POST "https://api.bridgemoni.com/ticketing/gate/scan" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"credential": "string",
"direction": "string",
"localId": "string"
}'
{
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"credential": "string",
"direction": "string",
"localId": "string"
}
{
"data": {
"result": "ADMITTED",
"ticketReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"tierCode": "string",
"seat": "string",
"attendeeName": "string",
"message": "string",
"previouslyAdmittedAt": "2026-09-25T10:00:00Z"
},
"description": "OK"
}
Responses
POST Upload a signed batch of offline scans
POST /ticketing/gate/scan-batch
Sequenced per device; a gap is recorded and the batch still accepted. Two devices admitting one single-entry ticket raise a duplicate-entry finding.
Headers
| Name | Notes |
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: ScanBatchRequest · Response: GenericResponseScanBatchResponse
curl -X POST "https://api.bridgemoni.com/ticketing/gate/scan-batch" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sequence": 0,
"manifestVersionAtScan": 0,
"scans": [
{
"localId": "string",
"ticketRef": "string",
"generation": 0,
"result": "ADMITTED",
"direction": "string",
"scannedAtEpoch": 0
}
],
"signature": "string"
}'
{
"deviceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"occurrenceReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sequence": 0,
"manifestVersionAtScan": 0,
"scans": [
{
"localId": "string",
"ticketRef": "string",
"generation": 0,
"result": "ADMITTED",
"direction": "string",
"scannedAtEpoch": 0
}
],
"signature": "string"
}
{
"data": {
"accepted": 0,
"sequenceGap": true,
"duplicateEntryFindings": [
"string"
]
},
"description": "OK"
}
Responses