Skip to main content
Core User entity management happens through public endpoints under /v3/users/. Profile attachments, such as imported face upload, use the organization/application path with didit_internal_id. This page gives you the conceptual walkthrough — see the API reference for full request / response schemas.

List users

GET /v3/users/ Returns a paginated list of users for your application. Supports filters on status, search, date range, and more.
Use-cases:
  • Sync a subset of users to your data warehouse each day.
  • Find flagged users for an analyst queue.
  • Search users by display name.

Get a user

GET /v3/users/{vendor_data}/ Retrieve a single user by vendor_data. Returns the full data model including aggregated counters.
vendor_data in the URL is case-sensitive. Always pass the exact value you used on session creation.

Create a user

POST /v3/users/create/ Create a User entity before any session runs. Useful for:
  • Seeding metadata or custom fields before the customer verifies.
  • Setting an initial status (e.g. FLAGGED while your onboarding team reviews manual documents).
  • Pre-loading users from an existing database so you have a complete roster from day one.
If a user with that vendor_data already exists, the call returns a conflict error — use PATCH to update instead.

Upload an imported face

POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/ Attach a trusted face image to an existing User profile. This is the right follow-up when you import users from another provider and want Didit to carry their face evidence before the first Didit session.
See Upload User Face for request fields, limits, list/delete endpoints, and the blocklist distinction.

Update a user

PATCH /v3/users/{vendor_data}/ Update mutable profile fields. Most fields derived from verified sessions are read-only — attempting to change them via PATCH will either be ignored or flagged in the audit log. Mutable fields: display_name, metadata, tags. Read-only after verification: full_name, date_of_birth, portrait_image, all aggregate counters, features map.
Emits a user.data.updated webhook with the changed_fields array.

Change status

PATCH /v3/users/{vendor_data}/update-status/ Move a user between ACTIVE, FLAGGED, and BLOCKED. Status changes propagate to future sessions and transactions.
Emits a user.status.updated webhook.

Delete users (batch)

POST /v3/users/delete/ Delete one or more users. The user records are removed permanently, together with every biometric template retained for them after session deletion. Their verification sessions are not covered by this endpoint and survive with their link to the user cleared; delete them with Delete Session or Batch Delete Sessions. Transactions are not covered either; delete those from the Console.
Returns a count, {"deleted": <int>}, not a per-item result. Identifiers that matched nothing are skipped silently, so send a de-duplicated list if you want to compare deleted against the number of identifiers you sent.

Permission model

All /v3/users/* endpoints are scoped by the users permission resource. Your API key’s role determines which operations are allowed: See Roles & permissions for the full matrix.

Rate limits and idempotency

  • All /v3/users/* endpoints are subject to the standard rate limits.
  • create is not idempotent — retrying with the same vendor_data returns a conflict. De-dupe on your side, or always GET first.
  • delete is idempotent — deleting an already-deleted user is a no-op.

Webhooks fired by these operations

Next steps

Data model

Full field reference.

List API

GET /v3/users/ schema.

Create API

POST /v3/users/create/ schema.

Upload face

Attach imported face images to User profiles.