Skip to content

Get signal

Describe one Signal, with its DataSources

GET/v1/signals/{signal_id}

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#

Shell
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 · required

    Address of the Signal in the URL path.

  • labelstring · required

    What to show. Falls back to the Signal's administrative name when none was authored, so there is always something to display.

  • organizationobject · required

    Who the Signal belongs to.

    Show 2 fields
    • idstring · required

      The same id /v1/organizations lists and ?organization= filters on.

    • namestring · required

      Readable name, the same as /v1/organizations gives. The id only when the registry has no name for it.

  • datasource_countinteger · required

    How many DataSources this Signal may read.

  • urlstring · required

    Where to describe this Signal.

  • datasources_urlstring · required

    Where 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 objects

    Show 10 fields
    • idstring · required

    • typestring · required

      data_project today. The discriminator that keeps this contract open to other kinds of source.

    • labelstring · required

      What to show. The Signal's own label, falling back to the DataSource's name, so there is always something to display.

    • datasetsarray of objects · required

      DataSets readable on this DataSource, each with where to describe it.

      Show 4 fields
      • keystring · required

        Address of the DataSet in the URL path.

      • namestring · required

        What 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 · nullable

        What it holds, where somebody wrote it down.

      • urlstring · required

        Where to describe it: its metrics, dimensions and period.

    • marketsarray of objects · required

      Markets readable on this DataSource.

      Show 2 fields
      • idinteger · required

        The market id on this DataSource, not a global scheme: Sweden can be 2 here and 752 on another DataSource.

      • labelstring · required

        Falls 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 · nullable

      The language labels and verbatims come back in.

    • urlstring · nullable

      Where to describe this DataSource, including the address of each of its DataSets.

    • entities_urlstring · nullable

      Where 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 · nullable

      Where 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 · nullable

      Where 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>.

StatusCodeWhen
400invalid-requestThe request is not valid for this DataSet; detail says why.
401unauthorizedNo credential, or one that is not accepted.
403forbiddenThe credential is valid but does not cover what was asked.
404not-foundNothing there, or nothing this credential may read.
422validation-failedThe request does not match the contract; errors lists each field.
429rate_limitedToo many requests, or the monthly quota is used up.
503unavailableA service behind the API did not answer; try again.