Account

Your tier, your API usage, and your download allowance.

HTTP endpoints on this page

  • GET/profile
  • GET/profile/usage
  • GET/profile/downloads

Parameters and response shapes for each are in the API reference.

Three read-only calls on client.profile tell you who you are to the API, what you have spent, and what you have left. All three work on any active key and take no arguments.

Who am I?

profile.get()Return your account record — who the key belongs to and which tier it is on.Any tier

The cheapest way to confirm a key works and to find out which tier it is on — worth calling first when a 403 surprises you.

Returns

dict

user_id : str
Your account id. Also your FIX CompID, where FIX is enabled.
email : str
The address the account was created with.
name : str
Display name.
organization : str
Organisation, empty string if never set.
is_admin : bool
Administrative flag governing user administration, not simulator access. It is not a tier bypass: an admin flag on a free-tier key still cannot run a simulation. When a call returns 403, read tier, not this.
tier : {"free", "pro", "demo"}
What gates every endpoint.
download_limit : int
New simulation groups per rolling 24 hours. Only enforced on the free tier.

Examples

python
me = client.profile.get()

print(f"{me['email']} — tier {me['tier']}")
print(f"download limit: {me['download_limit']}")
Output
you@example.com — tier pro
download limit: 3

What have I used?

profile.usage()Return your request count for the current calendar month, grouped by endpoint.Any tier

Resets on the 1st, and counts requests rather than simulations — one run() of 100 Monte Carlo runs is a single request here.

Returns

dict

user_id : str
Your account id.
month : str
The calendar month being reported, YYYY-MM.
total_requests : int
Requests so far this month.
by_endpoint : dict
Request count keyed by endpoint path. The keys are the concrete paths that were called, so a job-scoped endpoint appears once per job id rather than as a template — aggregate by prefix if you want per-endpoint totals.

Examples

python
usage = client.profile.usage()

print(f"{usage['month']}: {usage['total_requests']} requests")
for endpoint, count in sorted(
    usage["by_endpoint"].items(), key=lambda kv: -kv[1]
)[:5]:
    print(f"  {count:5d}  {endpoint}")
Output
2026-09: 412 requests
     90  /simulation/cached
     64  /data/calibrated-data
     12  /simulation/run

What can I still download?

profile.downloads()Return the free-tier download allowance for the current rolling 24-hour window.Any tier

The unit is a simulation group — every Monte Carlo run of one symbol/date/scenario — not a call, a run, or a file.

Returns

dict

limit : int or None
Groups per window. None on pro and demo, meaning unlimited.
used : int
New groups added in the current window.
remaining : int or None
limit − used, floored at 0. None when unlimited.
window_hours : int
Length of the rolling window, 24.
downloaded_groups : list of str or None
Every group you have ever downloaded, all free to re-fetch. None when unlimited.
downloaded_group_details : list of dict or None
The same groups, each with a downloaded_at timestamp.

Notes

A request that would exceed the allowance returns 429 without charging anything, so a partial download never silently eats your quota. See Errors for handling it.

Examples

python
quota = client.profile.downloads()

if quota["limit"] is None:
    print("unlimited (pro or demo tier)")
else:
    print(f"{quota['used']}/{quota['limit']} used, {quota['remaining']} left")

print(f"{len(quota['downloaded_groups'] or [])} groups owned outright")

Why a group, and why it stays yours

Membership is permanent. Once you have downloaded a group, re-fetching it is free forever — more runs, a different file format, a different endpoint, or the web explorer. Only a new group consumes allowance, and your own job runs are never charged at all.

A request that would exceed the allowance returns 429 without charging anything, so a partial download never silently eats your quota. Every download path counts the same way: get_sim_data(), get_bulk_data() and the explorer. See Errors for handling the 429.

One exemption: the first run's mid-price series on a shared cached group is free, so the explorer can draw a thumbnail of a scenario before you commit any allowance to it.

If you need more than the default, email support@simudyne.com — we can raise your limit without a Pro upgrade.