Get signal
Describe one Signal, with its DataSources
GET/v1
Authenticate with an API key in X-Api-Key, or a bearer token in Authorization: Bearer <token>.
Parameters#
Path parameters#
signal_idstring · required
Example request#
curl "https://api.odysseysignal.app/v1/signals/{signal_id}" \
-H "X-Api-Key: $ODYSSEY_API_KEY"Response 200#
application/json.
A Signal with its DataSources inline.
Mirrors how a DataSource returns its DataSets: one read answers "what can I ask this Signal", which is what a client needs before it can do anything.
idstring · requiredAddress of the Signal in the URL path.
labelstring · requiredWhat to show. Falls back to the Signal's administrative name when none was authored, so there is always something to display.
organizationobject · requiredWho the Signal belongs to.
Show 2 fieldsHide fields
idstring · requiredThe same id
/v1/organizationslists and?organization=filters on.namestring · requiredReadable name, the same as
/v1/organizationsgives. The id only when the registry has no name for it.
datasource_countinteger · requiredHow many DataSources this Signal may read.
urlstring · requiredWhere to describe this Signal.
datasources_urlstring · requiredWhere to list its DataSources. Published so a client follows links from /v1/signals rather than assembling paths, which is what lets the surface move without breaking clients silently.
datasourcesarray of objectsShow 10 fieldsHide fields
idstring · requiredtypestring · requireddata_project today. The discriminator that keeps this contract open to other kinds of source.
labelstring · requiredWhat to show. The Signal's own label, falling back to the DataSource's name, so there is always something to display.
datasetsarray of objects · requiredDataSets readable on this DataSource, each with where to describe it.
Show 4 fieldsHide fields
keystring · requiredAddress of the DataSet in the URL path.
namestring · requiredWhat to call it. For Perception this is authored per brand list — Organisations, Products — which is the only thing that tells two perception datasets apart; the built-in datasets carry their own.
descriptionstring · nullableWhat it holds, where somebody wrote it down.
urlstring · requiredWhere to describe it: its metrics, dimensions and period.
marketsarray of objects · requiredMarkets readable on this DataSource.
Show 2 fieldsHide fields
idinteger · requiredThe market id on this DataSource, not a global scheme: Sweden can be 2 here and 752 on another DataSource.
labelstring · requiredFalls back to the id where the DataSource's registry does not name it, so a market never disappears from the list over a labelling gap.
languagestring · nullableThe language labels and verbatims come back in.
urlstring · nullableWhere to describe this DataSource, including the address of each of its DataSets.
entities_urlstring · nullableWhere the brands this DataSource carries are listed, by brand list. A roster belongs to a brand list rather than to a DataSet, so it is published once here.
drivers_urlstring · nullableWhere the drivers configured for this DataSource are listed, by brand list. Like the brand roster, a driver list belongs to a brand list rather than to a DataSet.
periods_urlstring · nullableWhere this DataSource's periods are listed — in total and per DataSet.
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. |