user.created Event
Emitted when a new dashboard User is created for a client on a Listo
instance. A "user" here is a person who can sign in to the Listo dashboard
on behalf of the client — distinct from a worker (an employee or
contractor receiving payroll). For workers see
worker.onboarded.
| Property | Value |
|---|---|
| Type | user.created |
| Data version | 1 |
| Entity | entity.type = "user", entity.id = data.userId |
| Fan-out | One delivery per matching subscription on the user's parent client |
Sample delivery
POST /your/webhook/path HTTP/1.1
Host: hooks.your-domain.com
Content-Type: application/json
User-Agent: ListoGlobal-Gateway/1.0
webhook-id: lglsoevt_uZK1mPLqRH4NbVcD8
webhook-timestamp: 1746180123
webhook-signature: v1,sQzr2nLY8uBp9q+kTaZf3oXyJVm6rE0wHxaP7wcKv4U=
{
"id": "lglsoevt_uZK1mPLqRH4NbVcD8",
"type": "user.created",
"specVersion": 1,
"dataVersion": 1,
"occurredAt": "2026-05-02T10:42:03.512Z",
"entity": { "type": "user", "id": "lglsousr_uXYZxLtq9ABvCdEf2" },
"data": {
"userId": "lglsousr_uXYZxLtq9ABvCdEf2",
"clientId": "lglsocli_uZIIHfKqYBwyaRGGs",
"email": "[email protected]",
"firstName": "Kalin",
"lastName": "Sasaki",
"fullName": "Kalin Sasaki",
"createdAt": "2026-05-02T10:42:00.000Z",
"links": {
"self": "/v1/instance-integrations/inst_abc123xyz/clients/lglsocli_uZIIHfKqYBwyaRGGs/users/lglsousr_uXYZxLtq9ABvCdEf2"
}
}
}data schema
data schema| Field | Type | Description |
|---|---|---|
userId | string | Public user ID. Same value as entity.id. |
clientId | string | Public client ID this user belongs to (lglsocli_…). |
email | string | Email address from the user's credential. Lower-cased by Listo. |
firstName | string | null | First name as captured at user creation. |
lastName | string | null | Last name. |
fullName | string | null | Full name (Listo's combined string — typically "firstName lastName"). |
createdAt | ISO-8601 UTC | When the user record was created in Listo. |
links.self | string | Path to fetch the current state of this user. Already substituted with your instanceIntegrationId before signing. |
Snapshot semantics
email, firstName, lastName, fullName are a snapshot at emit
time. Edits between emit and handler-run are not reflected. Refetch via
links.self if you need current state:
GET https://gateway.listoglobal.com{links.self}
x-api-key: <your-key>
createdAt is the immutable creation timestamp — it does not drift on
re-fetch.
There is no user.updated event today. If you need to track later edits
to a user's profile, poll the users endpoint on a cadence appropriate
for your use case.
Ordering and duplication
- Duplicates are normal. Dedupe on
webhook-id. - Order is not guaranteed. Two
user.createdevents for the same client may arrive out ofoccurredAtorder. - A
user.createdfor a brand-new client may arrive before the correspondingclient.createdevent reaches you. Don't assume the parent client already exists in your store; either upsert speculatively, or refetch the client fromclients/{clientId}when handling user events.
Common patterns
"Provision SSO / RBAC on user creation"
user.created is the right hook to sync a new dashboard user into your
own identity provider, grant role-based access, or send a welcome email
sequence.
"Track headcount by client"
Persist (clientId, userId, createdAt) triples keyed by webhook-id.
Aggregate as needed — you'll have an at-least-once stream that, after
deduplication, is a complete log of user creations within the
subscription's lifetime.
Updated 1 day ago
