Lead Retrieval SDK
Capture a scanned attendee as a lead and read back their shared contact fields.
activationCode — the same shared secret used to activate booth devices. Jade resolves the company from the activation code and verifies it belongs to the clientCode and eventCode you supply.Endpoint
GET /api/public/lead-sdk?tenantCode=&clientCode=&eventCode=&activationCode=&badgeId=Query parameters
All five parameters are required.
| Parameter | Description |
|---|---|
tenantCode | Your Jade tenant code. |
clientCode | Your Jade client code. |
eventCode | The event code. |
activationCode | The exhibiting company's activation code. Authenticates the call and must belong to the given client and event. |
badgeId | 0 to receive a sample lead. |
Delimited badge payloads
badgeId is often a delimited payload that packs several fields into one QR / barcode. Jade extracts only our badge id segment from it to resolve the lead — the other segments are ignored. Your scanning app should always pass the raw scanned value; do not split it yourself.
- Jade-generated badges.
Our badge id is the first segment. The delimiter is configured in the Badge Designer. - External badge providers.
The organizer configures the delimiter and which 0-based segment holds our badge id, so the payload can carry the provider's own fields alongside it.
Either way the call is identical — pass the whole scanned string and Jade parses out the right segment before looking up the attendee.
Field visibility
Which participant fields come back is decided by two layers:
- Organizer baseline.
The organizer sets a per-event list of fields exhibitors may see ( exhibitorConfig.leadVisibleFields). This is the default for every lead. - Attendee per-field override. Each attendee controls their own mobile field-visibility settings.
These override the baseline on a per-field basis: a field the attendee chose to share with the exhibitorsaudience is visible even if it isn't in the baseline, and a field they restricted is hidden even if it is in the baseline.
firstName and lastName) is always returned. Empty values are omitted from the response.
email, jobTitle, company, bio, headshot, website, workPhone, and mobilePhone. Custom fields are keyed cf:<code> and are returned in the customFields array with their human-readable label and value.
Capture & dedup
source / captureType of sdk. Every later scan of the same attendee by the same company appends a new capture timestamp instead of creating a duplicate lead. The response's captures count, along with firstCapturedAt and lastCapturedAt, reflect this scan history.
Example request
curl "/api/public/lead-sdk\
?tenantCode=acme-tenant\
&clientCode=acme\
&eventCode=acme-2026\
&activationCode=BTH-7Q2K9X\
&badgeId=A1B2C3D4"Response
fields and customFields present depend on field visibility (see above).
{
"leadId": "665f1c2a9b4e3d0012ab34cd",
"badgeId": "A1B2C3D4",
"source": "sdk",
"captures": 3,
"firstCapturedAt": "2026-06-01T14:22:05.000Z",
"lastCapturedAt": "2026-06-02T09:48:31.000Z",
"fields": {
"firstName": "Ada",
"lastName": "Lovelace",
"email": "ada@example.com",
"jobTitle": "Principal Engineer",
"company": "Analytical Engines Ltd."
},
"customFields": [
{ "code": "industry", "label": "Industry", "value": "Software" }
]
}Testing the SDK
0 values let you wire up and exercise an integration before the show without touching real attendees or data. Neither persists anything.
Sample lead — badgeId=0
badgeId=0badgeId=0 to get back a test lead populated with sample data in every allowed field. It resolves no real attendee and persists nothing, and the response includes "isTest": true. Use it to verify your scanning app renders and stores the response shape correctly.
curl "/api/public/lead-sdk\
?tenantCode=acme-tenant\
&clientCode=acme\
&eventCode=acme-2026\
&activationCode=BTH-7Q2K9X\
&badgeId=0"{
"leadId": "000000000000000000000000",
"badgeId": "0",
"isTest": true,
"source": "sdk",
"captures": 1,
"firstCapturedAt": "2026-06-01T14:22:05.000Z",
"lastCapturedAt": "2026-06-01T14:22:05.000Z",
"fields": {
"firstName": "Jordan",
"lastName": "Sample",
"email": "jordan.sample@example.com",
"jobTitle": "Director of Operations",
"company": "Sample Industries"
},
"customFields": [
{ "code": "industry", "label": "Industry", "value": "Sample answer" }
]
}The sample returns exactly the fields the organizer configured to share with exhibitors (plus the name), populated with sample values — so what you see here matches what a real lead will return for this event.
Test event — activationCode=0
activationCode=0activationCode=0 to connect to a fake test event: all features are enabled, no license is required, and nothing is persisted — no real client or event is needed, so the routing codes (tenantCode, clientCode, eventCode) can be anything. Every call returns the sample lead and includes "testEvent": true. This lets you exercise the full SDK before any purchase.
curl "/api/public/lead-sdk\
?tenantCode=sandbox\
&clientCode=sandbox\
&eventCode=sandbox\
&activationCode=0\
&badgeId=A1B2C3D4"{
"leadId": "test-lead",
"badgeId": "A1B2C3D4",
"testEvent": true,
"source": "sdk",
"captures": 1,
"firstCapturedAt": "2026-06-01T14:22:05.000Z",
"lastCapturedAt": "2026-06-01T14:22:05.000Z",
"fields": {
"firstName": "Jordan",
"lastName": "Sample",
"email": "jordan.sample@example.com",
"jobTitle": "Director of Operations",
"company": "Sample Industries"
},
"customFields": []
}Error responses
400 Bad Request — a required query parameter ( tenantCode,clientCode,eventCode,activationCode, orbadgeId) is missing or empty.401 Unauthorized — the activationCodeis invalid, or it doesn't match the suppliedclientCode/eventCode.403 Forbidden — the company is authenticated but does not hold the SDK lead-retrieval license for the event (no purchased lead product grants sdk).404 Not Found — no participant matches the supplied badgeId.