client.users
Read the authenticated user's profile.
Methods
| Method | Endpoint | Returns |
|---|---|---|
client.users.me() | GET /v1/users/me | The user resource for the API key's owner |
Identify the calling user
Useful for tools that share an API key across environments, or for surfacing "acting as" identity in your own UI.
from thrustlab import Client
client = Client()
me = client.users.me()
print(me["id"]) # user_2c5tQ...
print(me["email"]) # [email protected]
print(me["tier"]) # "free" | "hobbyist" | "pro" | "founding" | "beta_tester" | "enterprise"
The full me() response
{
"object": "user",
"id": "user_2c5tQ...",
"email": "[email protected]",
"email_verified": true,
"tier": "pro",
"unit_system": "metric",
"trial_start": "2026-04-01T00:00:00Z",
"trial_end": "2026-04-15T00:00:00Z",
"trial_days_remaining": 0,
"created_at": "2026-03-20T18:04:11Z",
"entitlements": {
"sim_types": ["batch", "dynamic", "steady_single", "sweep_1d", "sweep_nd"],
"db_access": "full",
"cad_export": true,
"creator_edit": true,
"api_access": true,
"daily_cap": null,
"weekly_cap": 400
},
"gate_required_tiers": {
"steady_single": "free",
"sweep_1d": "hobbyist",
"sweep_nd": "pro",
"dynamic": "pro",
"batch": "pro",
"cad_export": "pro",
"creator_edit": "hobbyist",
"api_access": "hobbyist"
}
}
| Field | Meaning |
|---|---|
object | Always "user" |
id | Public user id (user_...) |
email | Account email |
email_verified | Whether the email has been confirmed |
tier | One of free, hobbyist, pro, founding, beta_tester, enterprise |
unit_system | Display-unit preference — metric or imperial (canonical storage is always metric) |
trial_start / trial_end | Trial window, or null if the account never had one |
trial_days_remaining | Computed days left in the trial (null with no trial_end, 0 once expired) |
created_at | Account creation timestamp |
entitlements.sim_types | Sim types this tier can run — subset of steady_single, sweep_1d, sweep_nd, dynamic, batch |
entitlements.db_access | subset or full — component-database access |
entitlements.cad_export | Whether CAD export is unlocked |
entitlements.creator_edit | Whether the component/propeller creator's edit mode is unlocked |
entitlements.api_access | Whether this tier may use REST API keys at all |
entitlements.daily_cap | Rolling 24h compute-unit cap, or null if this tier has no daily cap |
entitlements.weekly_cap | Rolling 7-day compute-unit cap, or null if this tier has no weekly cap |
gate_required_tiers | Global map of every gated capability and sim-type → the cheapest tier that unlocks it (e.g. api_access → hobbyist). Lets you render "Requires X or higher" prompts without hardcoding tier logic. |
A tier only ever has a daily_cap or a weekly_cap populated, never
both — free tiers are metered daily, paid tiers weekly.
Confirm an API key works
The cheapest live-credential check — users.me is a single GET with no
side effects. Use this in CI before kicking off real work.
from thrustlab import Client
from thrustlab.exceptions import AuthenticationError
try:
client = Client()
client.users.me()
print("auth ok")
except AuthenticationError:
raise SystemExit("THRUSTLAB_API_KEY is invalid or revoked")
See also
- Authentication guide — API key creation, rotation, and bearer auth