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.

PropertyValue
Typeuser.created
Data version1
Entityentity.type = "user", entity.id = data.userId
Fan-outOne 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

FieldTypeDescription
userIdstringPublic user ID. Same value as entity.id.
clientIdstringPublic client ID this user belongs to (lglsocli_…).
emailstringEmail address from the user's credential. Lower-cased by Listo.
firstNamestring | nullFirst name as captured at user creation.
lastNamestring | nullLast name.
fullNamestring | nullFull name (Listo's combined string — typically "firstName lastName").
createdAtISO-8601 UTCWhen the user record was created in Listo.
links.selfstringPath 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.created events for the same client may arrive out of occurredAt order.
  • A user.created for a brand-new client may arrive before the corresponding client.created event reaches you. Don't assume the parent client already exists in your store; either upsert speculatively, or refetch the client from clients/{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.