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.
Methods on this page
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, readtier, 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
me = client.profile.get()
print(f"{me['email']} — tier {me['tier']}")
print(f"download limit: {me['download_limit']}")you@example.com — tier pro
download limit: 3What 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
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}")2026-09: 412 requests
90 /simulation/cached
64 /data/calibrated-data
12 /simulation/runWhat 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_attimestamp.
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
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.