Get dataset
Describe one DataSet: its dimensions, period and where its metrics are
GET/v1
Authenticate with an API key in X-Api-Key, or a bearer token in Authorization: Bearer <token>.
Parameters#
Path parameters#
signal_idstring · requireddatasource_idstring · requireddataset_idstring · required
Example request#
curl "https://api.odysseysignal.app/v1/signals/{signal_id}/datasources/{datasource_id}/datasets/{dataset_id}" \
-H "X-Api-Key: $ODYSSEY_API_KEY"Response 200#
application/json.
A DataSet's full self-description: what it holds and how it may be cut.
environmentstring · nullableThe data environment the answer was read in,
prodortest: the one Odyssey set on the Signal, or the one an Odyssey person picked for this call.idstring · requiredtypestring · requirednamestring · requireddescriptionstring · nullabledatasource_idstring · requiredcontract_versionstring · requiredperiodobject · requiredHow this DataSet may be asked about time. The period is a dimension with first-class syntax, so it is described here rather than sitting only in the request schema.
Show 13 fieldsHide fields
standardobject · requiredThe standard period: what a question that names no period is answered at, as the portal opens. Use it unless the user asks for another period.
Show 4 fieldsHide fields
granularitystring · requiredrollinginteger · requiredMoving-average window; 1 means none.
complete_onlyboolean · requiredlabelstring · requiredThe portal's name for it, e.g. "Quarter, smoothed (4)".
optionsarray of objects · requiredEvery period this DataSet can be asked about, as the portal's period selector offers them: the standard first, then the other windows at its unit, then the coarser units, then the finer ones. Send one as
period(withlastandendingas needed); nothing outside this list is answered.Show 4 fieldsHide fields
granularitystring · requiredrollinginteger · requiredMoving-average window; 1 means none.
complete_onlyboolean · requiredlabelstring · requiredThe portal's name for it, e.g. "Quarter, smoothed (4)".
granularitiesarray of string · requiredGranularities this DataSet may be asked for, finest first.
default_granularitystring · requiredWhat a question that names no granularity is answered at: the Signal's standard unit, else the data project's.
smallest_bucketstring · requiredThe bucket the data is stored at. Nothing finer can be asked for; anything coarser is rolled up.
max_periodsinteger · requiredUpper bound on
period.last.default_periodsinteger · requiredmax_rollinginteger · requiredUpper bound on
period.rolling, the moving-average window in periods. 1 means no smoothing.default_rollinginteger · requiredperiod.rollingwhen the question leaves it out, atdefault_granularity. Other units:defaults_by_granularity.rolling_optionsmap of array of integer · requiredThe
period.rollingvalues allowed at each granularity of this DataSet, as in the portal. 1 means no smoothing; any other value is refused.default_complete_onlyboolean · requiredperiod.complete_onlywhen the question leaves it out, atdefault_granularity.defaults_by_granularitymap of object · requiredThe portal's preset per unit: what
rollingandcomplete_onlyare when a question names that unit and leaves them out. The answer echoes what was run inmeta.period.Show 2 fieldsHide fields
rollinginteger · requiredcomplete_onlyboolean · required
ending_formatstring · requiredFormat of
period.ending. Omitendingfor the latest available period.
languagesarray of stringLanguages this DataSet can be read in. Perception only — a survey is translated and the other datasets carry one vocabulary everywhere, so an empty list means the question does not arise rather than that none is available. The DataSource's
languageis which of these answers come back in.metric_countinteger · requiredHow many metrics this DataSet publishes to this caller. Enough to decide whether to fetch them, which is why the list itself is a separate request.
metrics_urlstring · requiredWhere this DataSet's metrics and their groups are described. Its own endpoint because the list is long — a perception dataset publishes a metric per configured question and each carries the parameters a query needs — and because a caller browsing DataSets is not yet reading metrics.
dimensionsarray of objects · requiredShow 9 fieldsHide fields
idstring · requirednamestring · requireddescriptionstring · nullablekindstring · requiredcategorical | temporal | entity | derived
filterableboolean · requiredgroupableboolean · requiredmulti_selectboolean · requiredWhether a filter on this dimension accepts several values.
valuesarray of string · nullableMembers, inline, when they are a closed list the API defines. Otherwise null — fetch
values_url.values_urlstring · nullableWhere to enumerate this dimension's members. Present when they come from the data rather than from a fixed list, because which values exist differs per DataSource.
query_urlstring · requiredWhere to POST a query against this DataSet. Published so a client never assembles an action path itself — the one path it cannot get wrong silently.
defaultsobject · nullableWhat an open question is answered with on this Signal: unit, market, brands, and where each comes from. Only on the Signal-rooted path.
Show 7 fieldsHide fields
granularitystring · requiredThe unit of a question that names none (also
period.default_granularity).granularity_sourcestring · requiredsignalwhen the Signal's standard unit,data_projectwhen the project's,apiotherwise.One of
signal,data_project,api.marketobject · required · nullableThe market a question that names none, and does not break down by market, is answered for. Null: the figures pool every market in
pooled_markets, and the answer warns.Show 3 fieldsHide fields
idinteger · requiredlabelstring · requiredsourcestring · default "signal" · always "signal"Who set it: Odyssey, on the Signal.
pooled_marketsinteger · requiredHow many markets an open question pools when there is no standard market.
competitorsobject · required · nullableThe brands a question that names none covers. Null: every brand this Signal may read.
Show 5 fieldsHide fields
methodstring · requiredlist: the brands inbrands.top: thecountbrands ranked highest byrank_metricover the latest twelve months of data, whatever period the question asks, for the markets it runs with, as the portal's top-N; ranked when a question needs them.One of
list,top.brandsarray of integer · nullableBrand ids of a
listset (labels: list_brands or the dimension values).countinteger · nullablerank_metricstring · nullableThe metric key a
topset is ranked by.sourcestring · default "signal" · always "signal"
own_brandsobject · nullableThe customer's own brands. Null: the Signal names none. With several, ask which one a question is about.
Show 3 fieldsHide fields
brandsarray of integer · requiredThe customer's own brands this Signal may read. A question about one of them names it in
focus.standardinteger · nullableThe own brand added to the default competitors of a question without
focus, as the portal adds its active brand. Null: none is added.sourcestring · default "signal" · always "signal"
notesarray of stringEach Signal setting that is not applied here, and why.
Errors#
Errors are application/problem+json (RFC 9457): type, title, status, detail and, for some, more fields that say how to fix the call. The type is https://api.odysseysignal.app/problems/<code>.
| Status | Code | When |
|---|---|---|
| 400 | invalid-request | The request is not valid for this DataSet; detail says why. |
| 401 | unauthorized | No credential, or one that is not accepted. |
| 403 | forbidden | The credential is valid but does not cover what was asked. |
| 404 | not-found | Nothing there, or nothing this credential may read. |
| 422 | validation-failed | The request does not match the contract; errors lists each field. |
| 429 | rate_limited | Too many requests, or the monthly quota is used up. |
| 503 | unavailable | A service behind the API did not answer; try again. |