Skip to main content
Fluid adds a public_id query parameter before it opens either of these widgets:
  • A custom widget in the Fluid mobile app
  • A Droplet iframe widget in Portal
For example, Fluid can open your widget at this URL:
Use public_id to resolve the current user’s information from your server. Do not use it to authenticate the user or the API request.
Treat public_id as an opaque identifier. It is not a username, slug, user UUID, customer UUID, legacy numeric membership ID, or Bearer token.

What public_id identifies

public_id is a stable, company-scoped identity identifier. For an ordinary member-backed account, it is the member’s stable UUID. An admin-only account can receive an admin identity UUID instead. Do not parse the value or infer a record type from it. Send it to the resolver and use the returned user data.

Resolve the user from your server

Keep your Droplet installation token on your server. Never expose it in iframe JavaScript, mobile widget content, a query parameter, or a response to the browser.
1

Read public_id from the widget URL

Read the value as an opaque string. Handle a missing value before you request user information.
2

Send public_id to your server

Send the value to an authenticated route in your widget application. Your server must select the Droplet installation for the current company. Do not accept a company identifier from the browser as proof of that selection.
3

Call the Fluid resolver

From your server, call GET /api/v2025-06/users/by-public-id/{public_id}. Authenticate with the installation token for the company that owns the widget.
The resolver searches only the company associated with the Bearer token. It does not create a Fluid session or turn public_id into a login credential.

Request the required scope

Request the users scope for your Droplet before a company installs it. The resolver returns 403 when the installation does not have this scope. Use the installation’s authentication_token as the Bearer token. See Build and publish a Fluid Droplet for the installation credential flow.

Handle resolver errors

Handle each response separately: