curl --request GET \
--url https://api.quantoraresearch.com/observations/latest \
--header 'x-api-key: <api-key>'import requests
url = "https://api.quantoraresearch.com/observations/latest"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.quantoraresearch.com/observations/latest', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"observationId": "<string>",
"indicatorId": "<string>",
"indicatorName": "<string>",
"category": "<string>",
"subCategory": "<string>",
"factorHint": "<string>",
"country": "<string>",
"instrumentId": "<string>",
"currency": "<string>",
"sourceId": "<string>",
"provider": "<string>",
"releaseDate": "<string>",
"period": "<string>",
"periodEnd": "<string>",
"actual": 123,
"forecast": 123,
"consensus": 123,
"surprise": 123,
"surprisePercent": 123,
"unit": "<string>",
"frequency": "<string>",
"importance": "<string>",
"observedAt": "<string>",
"retrievedAt": "<string>",
"revised": true,
"vintage": "<string>",
"sourceUrl": "<string>",
"attribution": "<string>",
"rawAvailable": true,
"releaseEventId": "<string>",
"sourceTier": "central_bank",
"fallbackOnly": true,
"scoringEligible": true,
"freshnessStatus": "fresh",
"collectionStatus": "ceased",
"ceasedFinalPeriod": "<string>",
"successorIndicatorId": "<string>",
"cadenceComparable": true,
"preferredForFactor": true,
"factorKey": "<string>",
"comparisonBasis": "<string>",
"derivedFrom": [
"<unknown>"
],
"previous": 123,
"revisedPrevious": 123,
"previousType": "<string>"
}
],
"meta": {
"request_id": "<string>",
"requestId": "<string>",
"api_version": "v1",
"pagination": {
"limit": 123,
"cursor": "<string>",
"next_cursor": "<string>",
"has_more": true
}
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"requestId": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"requestId": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"requestId": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}List latest public observations
curl --request GET \
--url https://api.quantoraresearch.com/observations/latest \
--header 'x-api-key: <api-key>'import requests
url = "https://api.quantoraresearch.com/observations/latest"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.quantoraresearch.com/observations/latest', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"observationId": "<string>",
"indicatorId": "<string>",
"indicatorName": "<string>",
"category": "<string>",
"subCategory": "<string>",
"factorHint": "<string>",
"country": "<string>",
"instrumentId": "<string>",
"currency": "<string>",
"sourceId": "<string>",
"provider": "<string>",
"releaseDate": "<string>",
"period": "<string>",
"periodEnd": "<string>",
"actual": 123,
"forecast": 123,
"consensus": 123,
"surprise": 123,
"surprisePercent": 123,
"unit": "<string>",
"frequency": "<string>",
"importance": "<string>",
"observedAt": "<string>",
"retrievedAt": "<string>",
"revised": true,
"vintage": "<string>",
"sourceUrl": "<string>",
"attribution": "<string>",
"rawAvailable": true,
"releaseEventId": "<string>",
"sourceTier": "central_bank",
"fallbackOnly": true,
"scoringEligible": true,
"freshnessStatus": "fresh",
"collectionStatus": "ceased",
"ceasedFinalPeriod": "<string>",
"successorIndicatorId": "<string>",
"cadenceComparable": true,
"preferredForFactor": true,
"factorKey": "<string>",
"comparisonBasis": "<string>",
"derivedFrom": [
"<unknown>"
],
"previous": 123,
"revisedPrevious": 123,
"previousType": "<string>"
}
],
"meta": {
"request_id": "<string>",
"requestId": "<string>",
"api_version": "v1",
"pagination": {
"limit": 123,
"cursor": "<string>",
"next_cursor": "<string>",
"has_more": true
}
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"requestId": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"requestId": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"requestId": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}Authorizations
Query Parameters
1 <= x <= 500asc, desc Alias of indicator_id, accepting a canonical field name, a storage indicator id, or an indicator slug. A value matching none of those returns an empty result — it is never ignored — and an empty value is rejected with 400.
daily, weekly, monthly, quarterly, annual, event, static macro low, medium, high Filters by the SERIES' current freshness verdict: fresh returns rows of series whose latest print is within its cadence budget now, stale of series whose latest print has aged past it, unknown of series that cannot be assessed. Note the deliberate asymmetry with the per-row freshnessStatus field, which describes each row (a 1950 print of a healthy series computes stale as a row while its series — and therefore this filter — is fresh). Cannot be combined with as_of/since/date filters on latest routes: freshness is evaluated against now, a temporal filter against a past instant.
fresh, stale, unknown Knowledge-time lower bound on observed_at.
Knowledge-time upper bound on observed_at.
Period-time convenience filter: YYYY, YYYY-MM, or YYYY-Qn.
^\d{4}(-(0[1-9]|1[0-2]|[Qq][1-4]))?$Period-time lower bound on period_end.
Period-time upper bound on period_end.
Knowledge-time vintage cutoff; returns latest vintage known on or before this timestamp.
How to handle a period carried by more than one data provider. 'preferred' (the default) returns one provider per (entity, indicator, frequency, period) — the publisher closest to the measurement — so a series carried by two publishers is not returned twice. 'all' returns every provider's row. A period carried by only one provider is unaffected either way, and this filter is ignored when source_id or provider_id is set.
preferred, all