Skip to main content

WebHook Payload Models

Events Bridge exposes two endpoints that return a fully populated example of each WebHook payload. They exist purely so you can build and test a receiver before any real detection has happened — point a code generator at them, save them as test fixtures, or paste one into your own service to check that it deserializes.

The response is a static, hard-coded sample. Nothing is looked up, nothing is stored, and the values are the same on every call apart from messageId and the timestamps.

These two endpoints require no authentication

Unlike every other Events Bridge API, /api/v1/webhook-models/* is anonymous — no JWT, no login. They return a fixed schema example and expose no customer data. This makes them convenient in a build pipeline, where you may not want to hold credentials.

API Endpoints

  • HTTP Method: GET
  • Endpoints:
    • /api/v1/webhook-models/face — returns a WebHookFaceRecPayload
    • /api/v1/webhook-models/lpr — returns a WebHookLprPayload
  • Private Server Base URL: https://10.0.0.123:5022
  • Cloud Server Base URL: https://customername.econnectcloud.com/eventsbridge

Authentication

None. See the note above.

Code Examples

using eConnect.EventsBridge.Sdk;
using eConnect.EventsBridge.Sdk.Client;

// Assuming sdk is already initialized.
// These two endpoints are anonymous - the SDK works, but a plain
// HttpClient with no Authorization header works just as well.

var faceModel = await sdk.GetFacePayloadModelExampleAsync();
var lprModel = await sdk.GetLprPayloadModelExampleAsync();

Console.WriteLine($"Face discriminator: {faceModel.PublishType}"); // WebHookFaceRecPayload
Console.WriteLine($"Face source: {faceModel.SourceName}");
Console.WriteLine($"Detected person: {faceModel.Payload.PersonInfo.FirstName} {faceModel.Payload.PersonInfo.LastName}");

Console.WriteLine($"Lpr discriminator: {lprModel.PublishType}"); // WebHookLprPayload
Console.WriteLine($"Detected plate: {lprModel.Payload.LprPlateInfo.Plate}");

Raw Sample — Face

Request

GET https://10.0.0.123:5022/api/v1/webhook-models/face

Response

  • 200 OK: The example payload was returned. This endpoint has no failure path of its own.
{
"publishType": "WebHookFaceRecPayload",
"sourceName": "eConnect Fr Location A",
"externalId": "01010101-2222-3333-4444-123456789103",
"fields": [
{
"fieldName": "TenantId",
"fieldValue": "123456"
}
],
"serverContext": null,
"payload": {
"personInfo": {
"faceId": "44443333-1234-1234-1234-123456789012",
"firstName": "Chuck",
"lastName": "Norris",
"middleName": "Ray",
"tags": [
{
"tagName": "VIP",
"expires": null
}
],
"fields": [
{
"fieldName": "PartnerName-TenantId",
"stringValue": "123456",
"dateValue": null,
"numberValue": null,
"boolValue": null
}
],
"notes": [
{
"noteTitle": "Test",
"noteBody": "Test Note"
}
]
},
"detectionInfo": {
"dateTimeUtc": "2026-08-10T17:04:22.918Z",
"timeZone": "America/Los_Angeles",
"confidence": 0.999,
"detectId": "120987654-1212-1212-1212-120987654321",
"detectorName": "Camera 1"
},
"detectionImage": {
"image": "NzU="
},
"defaultPhoto": {
"image": "NzU="
},
"detectionHistory": {
"visitHistory": [
{
"dateTimeUtc": "2026-08-10T17:04:22.918Z",
"detectorName": "Camera 1"
},
{
"dateTimeUtc": "2026-08-10T16:04:22.918Z",
"detectorName": "Camera 2"
}
],
"printHistory": [
{
"dateTimeUtc": "2026-08-10T17:04:22.918Z",
"printerName": "Printer 1"
}
]
},
"resentEvent": false,
"messageId": "9f1d6b5a-3c2e-4a71-9d88-0b4c5e6f7a81"
}
}

Every field is described on the Face WebHook page.

Raw Sample — LPR

Request

GET https://10.0.0.123:5022/api/v1/webhook-models/lpr

Response

  • 200 OK: The example payload was returned. This endpoint has no failure path of its own.
{
"publishType": "WebHookLprPayload",
"sourceName": "eConnect Lpr Location A",
"externalId": "01010101-2222-3333-4444-123456789103",
"fields": [
{
"fieldName": "TenantId",
"fieldValue": "123456"
}
],
"serverContext": null,
"payload": {
"lprPlateInfo": {
"plate": "ON3WEGO",
"similar1Plate": "ON3WEGO",
"vehicleMake": "Cadillac",
"vehicleModel": "CTS-V",
"vehicleColor": "Gray",
"vehicleState": "NV",
"tags": [
{
"tagName": "Vip",
"expires": "2027-08-10T17:04:22.918Z"
}
],
"fields": [
{
"fieldName": "PartnerName-TenantId",
"stringValue": "00000000-2222-3333-4444-123456789103",
"dateValue": null,
"numberValue": null,
"boolValue": null
}
]
},
"detectionInfo": {
"dateTimeUtc": "2026-08-10T17:04:22.918Z",
"timeZone": "America/Los_Angeles",
"detectorName": "Camera 1"
},
"detectionImages": [
{
"image": "NzU=",
"cropSizeName": "Close"
},
{
"image": "NzU=",
"cropSizeName": "Medium"
}
],
"detectionHistory": {
"visitHistory": [
{
"dateTimeUtc": "2026-08-10T17:04:22.918Z",
"detectorName": "Camera 1"
},
{
"dateTimeUtc": "2026-08-10T16:04:22.918Z",
"detectorName": "Camera 2"
}
]
},
"resentEvent": false,
"messageId": "2b7e4c19-8a63-4f05-b1de-6c3a9d240f57"
}
}

Every field is described on the LPR WebHook page.

similar1Plate is produced by the plate normalizer

Its value is derived from plate by internal normalization rules and may or may not differ from it for any given plate. Treat it as opaque: compare an incoming plate against it, rather than trying to reproduce the normalization yourself.

Differences From a Live Event

These samples are schema references, not realistic traffic. Three things differ from what your receiver will actually see:

  • serverContext is null. In production it carries the key/value context configured for the server that produced the detection. Handle both a populated dictionary and a missing one.
  • image values are two bytes of filler ("NzU="), not a real photo. A live image is a base64-encoded JPEG and is by far the largest part of the payload — size your request limits for hundreds of kilobytes, not bytes.
  • The timestamps are generated when you call, so dateTimeUtc is always "now" and the history entries are always one hour apart.

Additional Notes

  • To exercise your receiver end-to-end — real HTTP, real authentication headers, real TLS — use Send a Test Event instead. That posts a synthetic detection to your server, while these endpoints only hand the shape back to you.
  • For code generation across the whole API rather than just these two payloads, use the Swagger schema.