Visitors

Identify and manage visitors. Accepts system fields like $email, $phone and arbitrary key/value attributes.

#The Visitor object

Captures the cross-link profile Linkbreakers builds for someone who scans or clicks, combining reserved identity fields, attributed devices, events, and custom traits gathered from forms.

attributes

array<object>

Arbitrary attributes provided without "$" prefix, with the type each value was captured as.

createdAt

string (date-time)

Timestamps

deviceCount

string (int64)

Number of devices attributed to this visitor

devices

array<object>

Device information collected during visitor interactions

email

string

from "$email"

events

array<object>

Events associated with this visitor

firstName

string

from "$firstName" (optional)

id

string

Unique ID (UUID)

lastName

string

from "$lastName" (optional)

links

array<object>

Links associated with this visitor via events (included only on demand)

phone

string

from "$phone"

qrcodeCount

string (int64)

Number of distinct QR codes / links this visitor has interacted with

updatedAt

string (date-time)

visitCount

string (int64)

Total number of events (visits) recorded for this visitor

workspaceId

string

Workspace that owns this visitor (UUID)

GET
/v1/visitors
Requires auth

#List visitors

Returns a paginated collection of visitors with optional filters, includes, and CSV export. To filter on visitor attributes, use POST /v1/visitors/search, which takes the same parameters as a JSON body.

#Parameters

query parameters

pageSize

integer (int64)
query

Maximum number of visitors to return (default 50, max 200)

pageToken

string
query

Cursor token to retrieve the next page of results

email

string
query

optional exact match filter

search

string
query

optional fuzzy search across known fields

include

array<string>
query

linkId

string
query

optional filter by link ID (UUID; visitors who have interacted with this link)

responseFormat

string
query

- RESPONSE_FORMAT_UNSPECIFIED: Response format not specified - RESPONSE_FORMAT_JSON: Response format JSON - RESPONSE_FORMAT_CSV: Response format CSV

Allowed values
RESPONSE_FORMAT_UNSPECIFIED

Response format not specified

RESPONSE_FORMAT_JSON

Response format JSON

RESPONSE_FORMAT_CSV

Response format CSV

sortField

string
query

Field to sort by. Defaults to created_at (newest first).

Allowed values
VISITOR_SORT_FIELD_UNSPECIFIED

Sort field not specified (defaults to created_at)

VISITOR_SORT_FIELD_CREATED_AT

Sort by the date the visitor was first seen

VISITOR_SORT_FIELD_VISIT_COUNT

Sort by total number of visits (events)

VISITOR_SORT_FIELD_DEVICE_COUNT

Sort by number of attributed devices

VISITOR_SORT_FIELD_QRCODE_COUNT

Sort by number of distinct QR codes interacted with

sortDirection

string
query

Sort direction. Defaults to descending.

Allowed values
SORT_DIRECTION_UNSPECIFIED

Sort direction not specified (defaults to descending)

SORT_DIRECTION_ASC

Sort in ascending order

SORT_DIRECTION_DESC

Sort in descending order

#Response

200

Everything worked as expected.

csv

object

ListVisitorsCsvResponse carries the raw CSV when ResponseFormat is set to RESPONSE_FORMAT_CSV.

json

object

ListVisitorsJsonResponse is the default structured payload used by dashboards.

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.

GET
/v1/visitors/{id}
Requires auth

#Get a visitor

Retrieves a visitor profile by ID with optional devices, events, or links included.

#Parameters

path parameters

id

string
Required
path

Visitor identifier (UUID)

query parameters

include

array<string>
query

Optional relationships to hydrate ("devices", "events", "links")

#Response

200

Everything worked as expected.

attributes

array<object>

Arbitrary attributes provided without "$" prefix, with the type each value was captured as.

createdAt

string (date-time)

Timestamps

deviceCount

string (int64)

Number of devices attributed to this visitor

devices

array<object>

Device information collected during visitor interactions

email

string

from "$email"

events

array<object>

Events associated with this visitor

firstName

string

from "$firstName" (optional)

id

string

Unique ID (UUID)

lastName

string

from "$lastName" (optional)

links

array<object>

Links associated with this visitor via events (included only on demand)

phone

string

from "$phone"

qrcodeCount

string (int64)

Number of distinct QR codes / links this visitor has interacted with

updatedAt

string (date-time)

visitCount

string (int64)

Total number of events (visits) recorded for this visitor

workspaceId

string

Workspace that owns this visitor (UUID)

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.

GET
/v1/visitors/attributes
Requires auth

#List visitor attribute keys

Returns the distinct visitor attribute keys available in the workspace or scoped to a single link.

#Parameters

query parameters

linkId

string
query

Optional link identifier (UUID). When set, returns keys observed on visitors who interacted with this link.

#Response

200

Everything worked as expected.

attributeKeys

array<string>

Distinct selectable visitor attribute keys, including reserved system fields such as $email and $phone.

attributes

array<object>

The same keys with the type their values were captured as, so a client can offer the filter operators that fit each one.

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.

POST
/v1/visitor/identify
Requires auth

#Identify visitor

Identifies a visitor from an LBID. Anonymous visitors (created at scan time) are promoted or merged into existing identified visitors. If the identity matches an existing visitor, devices and events converge into that source-of-truth record.

#Parameters

This endpoint does not accept any parameters.

#Request body

lbid

string

LBID (base64 encoded event ID) that initiated the visit (click/scan)

setOnce

boolean

If true, only set fields that are empty (set-once semantics); defaults to false (merge/overwrite)

visitor

object

Input payload for identifying/updating a visitor - Reserved keys (system fields) have a "$" prefix, e.g. "$email", "$phone", "$firstName", "$lastName". - All other keys are treated as custom attributes and stored in `attributes`.

#Response

200

Everything worked as expected.

created

boolean

Indicates whether a new visitor profile was created as part of the identification

visitor

object

Captures the cross-link profile Linkbreakers builds for someone who scans or clicks, combining reserved identity fields, attributed devices, events, and custom traits gathered from forms.

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.

POST
/v1/visitors/search
Requires auth

#Search visitors

Same as List visitors, with the parameters sent as a JSON body so they can include attributeFilters. Every filter must match, for example budget at least 800000 and timeline equal to under_6_months.

#Parameters

This endpoint does not accept any parameters.

#Request body

attributeFilters

array<object>

Only return visitors matching every filter, for example budget >= 800000 and timeline = "under_6_months". At most 20. Over REST, use POST /v1/visitors/search: a query string cannot carry them.

email

string

optional exact match filter

include

array<string>

linkId

string

optional filter by link ID (UUID; visitors who have interacted with this link)

pageSize

integer (int64)

Maximum number of visitors to return (default 50, max 200)

pageToken

string

Cursor token to retrieve the next page of results

responseFormat

string (enum)

ResponseFormat defines the transport format the API should return for list-style endpoints.

Allowed values
RESPONSE_FORMAT_UNSPECIFIED

Response format not specified

RESPONSE_FORMAT_JSON

Response format JSON

RESPONSE_FORMAT_CSV

Response format CSV

search

string

optional fuzzy search across known fields

sortDirection

string (enum)

SortDirection is the ordering applied to any sortable list endpoint. Shared across resources so a caller learns it once.

Allowed values
SORT_DIRECTION_UNSPECIFIED

Sort direction not specified (defaults to descending)

SORT_DIRECTION_ASC

Sort in ascending order

SORT_DIRECTION_DESC

Sort in descending order

sortField

string (enum)

Fields that can be used to sort visitors

Allowed values
VISITOR_SORT_FIELD_UNSPECIFIED

Sort field not specified (defaults to created_at)

VISITOR_SORT_FIELD_CREATED_AT

Sort by the date the visitor was first seen

VISITOR_SORT_FIELD_VISIT_COUNT

Sort by total number of visits (events)

VISITOR_SORT_FIELD_DEVICE_COUNT

Sort by number of attributed devices

VISITOR_SORT_FIELD_QRCODE_COUNT

Sort by number of distinct QR codes interacted with

#Response

200

Everything worked as expected.

csv

object

ListVisitorsCsvResponse carries the raw CSV when ResponseFormat is set to RESPONSE_FORMAT_CSV.

json

object

ListVisitorsJsonResponse is the default structured payload used by dashboards.

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.

PATCH
/v1/visitors/{id}
Requires auth

#Update a visitor

Applies partial attribute updates to an existing visitor profile.

#Parameters

path parameters

id

string
Required
path

Visitor identifier (UUID)

#Request body

visitor

object

Input payload for identifying/updating a visitor - Reserved keys (system fields) have a "$" prefix, e.g. "$email", "$phone", "$firstName", "$lastName". - All other keys are treated as custom attributes and stored in `attributes`.

#Response

200

Everything worked as expected.

attributes

array<object>

Arbitrary attributes provided without "$" prefix, with the type each value was captured as.

createdAt

string (date-time)

Timestamps

deviceCount

string (int64)

Number of devices attributed to this visitor

devices

array<object>

Device information collected during visitor interactions

email

string

from "$email"

events

array<object>

Events associated with this visitor

firstName

string

from "$firstName" (optional)

id

string

Unique ID (UUID)

lastName

string

from "$lastName" (optional)

links

array<object>

Links associated with this visitor via events (included only on demand)

phone

string

from "$phone"

qrcodeCount

string (int64)

Number of distinct QR codes / links this visitor has interacted with

updatedAt

string (date-time)

visitCount

string (int64)

Total number of events (visits) recorded for this visitor

workspaceId

string

Workspace that owns this visitor (UUID)

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.

DELETE
/v1/visitors/{id}
Requires auth

#Delete a visitor

Removes a visitor profile and its stored attributes from the workspace.

#Parameters

path parameters

id

string
Required
path

Visitor identifier to remove (UUID)

#Response

200

Everything worked as expected.

success

boolean

Indicates whether the visitor record was deleted

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.

DELETE
/v1/visitors/{id}/attributes/{attributeKey}
Requires auth

#Delete a visitor attribute

Deletes a single attribute from the visitor profile without affecting other data.

#Parameters

path parameters

id

string
Required
path

Visitor identifier whose attribute should be removed (UUID)

attributeKey

string
Required
path

Attribute key to delete (without "$" prefix)

#Response

200

Everything worked as expected.

success

boolean

Indicates whether the attribute was removed

#Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object
Required

Wrapped error response.