Download one user's raw ring records
curl --request GET \
--url https://web-api.dev.soxai.site/api/RawData/{query_uid} \
--header 'Authorization: Bearer <token>'import requests
url = "https://web-api.dev.soxai.site/api/RawData/{query_uid}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://web-api.dev.soxai.site/api/RawData/{query_uid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));[
{
"_time": "2026-01-01T00:00:00+00:00",
"uid": "user123",
"hr": 60,
"acti": 12,
"zc": 3
}
]{
"error": "bad-request",
"error_msg": "Invalid start_time. Use a duration such as '-30d', an RFC3339 timestamp such as '2026-01-01T00:00:00Z', a date such as '2026-01-01', unix seconds, or 'now()'."
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"error": "not-found",
"error_msg": "User '<uid>' not found"
}{
"error": "unprocessable-entity",
"error_msg": "body.<field>: <validation message>"
}{
"error": "rate-limited",
"error_msg": "Rate limit exceeded. Retry after <n> seconds."
}{
"error": "internal-server-error",
"error_msg": "Failed to fetch data: <error_message>"
}Data (v1)
Download one user's raw ring records
Download the raw records the ring uploaded for one user, as CSV or JSON.
This is the unprocessed measurement stream. For day-level scores use
/api/DailyInfoData/{query_uid}, and prefer the /api/v2/ endpoints for new integrations:
they return standardized field names.
Parameters
query_uid(path, required) - the user whose records are read.start_time/stop_time(query, optional) - range bounds. Each accepts a Flux duration (-30d), an RFC3339 timestamp, a date (2026-01-01), unix seconds, ornow(). When omitted they followpage.page(query, optional, default0) - selects a 30-day window counted back from now: page 0 is the last 30 days, page 1 the 30 days before that. Ignored for a bound the request supplied.format(query, optional) -csv(default) returns a file download;jsonreturns the records inline.
Response
200with the records, or{"msg": "No data found"}when the range holds none. Acsvrequest with no data has no file to download and receives that message instead.
Errors
| Status | Condition |
|---|---|
| 400 | start_time or stop_time is not a form Flux reads as a range |
| 403 | The caller is asking for somebody else’s data without a role that allows it, or is a PartnerAdmin and query_uid is not registered under its company |
| 404 | query_uid belongs to no SOXAI account. Checked after authorization, and never reached by a caller reading its own data |
Authorization
- Scheme:
Authorization: Bearer <idToken>orsoxai-api-key: <api key>. - Reading one’s own
query_uidneeds no role. - Otherwise
AdminorPartnerAdmin, and aPartnerAdminreaches only the users registered under its own company.OrgAdminis not accepted here; the/api/v2/equivalents do accept it.
GET
/
api
/
RawData
/
{query_uid}
Download one user's raw ring records
curl --request GET \
--url https://web-api.dev.soxai.site/api/RawData/{query_uid} \
--header 'Authorization: Bearer <token>'import requests
url = "https://web-api.dev.soxai.site/api/RawData/{query_uid}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://web-api.dev.soxai.site/api/RawData/{query_uid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));[
{
"_time": "2026-01-01T00:00:00+00:00",
"uid": "user123",
"hr": 60,
"acti": 12,
"zc": 3
}
]{
"error": "bad-request",
"error_msg": "Invalid start_time. Use a duration such as '-30d', an RFC3339 timestamp such as '2026-01-01T00:00:00Z', a date such as '2026-01-01', unix seconds, or 'now()'."
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"error": "not-found",
"error_msg": "User '<uid>' not found"
}{
"error": "unprocessable-entity",
"error_msg": "body.<field>: <validation message>"
}{
"error": "rate-limited",
"error_msg": "Rate limit exceeded. Retry after <n> seconds."
}{
"error": "internal-server-error",
"error_msg": "Failed to fetch data: <error_message>"
}Authorizations
HTTPBearerSoxaiApiKey
Query Parameters
Response
The raw sensor records, sorted by _time ascending. A range holding no rows answers with the No data found message rather than an empty array, and a csv request with no data receives that message too because there is no file to download.