> ## Documentation index
> Fetch the complete documentation index at: https://docs.odysseysignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List signals

> List the Signals this credential may read

API versions: v1 (current) https://docs.odysseysignal.com/api/reference/list-signals.md

`GET /v1/signals`

A Signal is a customer setup: an organization, a name, and the DataSources it may read. An Odyssey person signing in reads the whole estate; an API key reads what it was granted. `organization` narrows the answer and can never widen it.

Authentication: an API key in `X-Api-Key`, or `Authorization: Bearer <token>`.

## Parameters

### Query parameters

- `organization` (string, nullable): Only this organization's Signals: an id from `/v1/organizations`. Applied to what the credential already reaches, so naming another organization is refused (404) rather than answered with theirs.

## Example request

```bash
curl "https://api.odysseysignal.app/v1/signals" \
  -H "X-Api-Key: $ODYSSEY_API_KEY"
```

## Response 200

Content: `application/json`.

- `id` (string, required): Address of the Signal in the URL path.
- `label` (string, required): What to show. Falls back to the Signal's administrative name when none was authored, so there is always something to display.
- `organization` (object, required): Who the Signal belongs to.
  - `id` (string, required): The same id `/v1/organizations` lists and `?organization=` filters on.
  - `name` (string, required): Readable name, the same as `/v1/organizations` gives. The id only when the registry has no name for it.
- `datasource_count` (integer, required): How many DataSources this Signal may read.
- `url` (string, required): Where to describe this Signal.
- `datasources_url` (string, 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.

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