# Watch feed

Read one Watch's signals as JSON or CSV from a revocable token URL.

A Watch feed returns the signals from the companies currently in one active Watch. Open Connect from the Watch workspace to get both URLs:

```plaintext
https://prospex.ch/app/watch/feed/<token>.json
https://prospex.ch/app/watch/feed/<token>.csv
```

The URL is the credential. Reads need no browser session or authorization header. Pausing the Watch stops its notifications while the feed continues to answer.

## JSON

```json
{
  "version": 1,
  "watch": {
    "id": 7,
    "name": "Renewal accounts",
    "company_count": 42,
    "topics": ["leadership", "growth_finance"],
    "paused": false
  },
  "generated_at": "2026-08-21T08:15:00+00:00",
  "count": 2,
  "has_more": true,
  "next_url": "https://prospex.ch/app/watch/feed/…json?limit=2&cursor=…",
  "usage": {"rows_today": 214, "daily_limit": 5000},
  "data": []
}
```

Rows are newest first. `next_url` is absolute and preserves the parameters from the first request. A keyset cursor prevents newer signals from shifting an older row past the next page.

## JSON parameters

| Parameter | Meaning |
| --- | --- |
| cursor | JSON only. Opaque; follow `next_url` instead of building one. |
| limit | JSON rows per page, up to 500. |
| since | ISO date or datetime. Only signals recorded after it. |
| type | Topic keys, repeated or comma-separated. Narrows within the Watch's topics. |

## CSV parameters

| Parameter | Meaning |
| --- | --- |
| since | ISO date or datetime. Only signals recorded after it. |
| type | Topic keys, repeated or comma-separated. Narrows within the Watch's topics. |

CSV streams up to 10000 rows or the account's remaining daily allowance, whichever is lower. Its rows are the same signal objects returned by JSON.

## Topics

Omit `type` to read every topic configured on the Watch. Passing one or more of these keys narrows within that configuration:

- `company_structure`: Company structure
- `leadership`: Leadership and teams
- `products_positioning`: Products and positioning
- `growth_finance`: Growth and finance
- `company_news`: Company news

## CSV columns

| Column | JSON key |
| --- | --- |
| Signal ID | signal_id |
| Company | company_name |
| Company UID | company_uid |
| Website | company_website |
| Domain | company_domain |
| City | company_city |
| Canton | company_canton |
| Audience | company_audience |
| Employee Size | company_employee_size |
| NOGA Division | company_sector_code |
| Sector | company_sector |
| Signal Type | signal_type |
| Signal Type Label | signal_type_label |
| Title | title |
| Summary | summary |
| Why It Matters | why_it_matters |
| Event Date | event_date |
| Detected | detected_at |
| Confidence | confidence |
| Opportunity | opportunity |
| Opportunity Band | opportunity_band |
| Source | source_name |
| Source URL | source_url |
| Signal URL | signal_url |
| Status | review_status |

## Refusals

| Status | Error | When |
| --- | --- | --- |
| 400 | invalid_parameter | A parameter, date, topic or cursor could not be read. |
| 402 | subscription_required | The account behind the feed has lost access. |
| 404 | unknown_token | No active Watch feed answers this token. |
| 429 | daily_row_limit | The account's daily rows are spent. Read `Retry-After`. |
| 503 | feed_disabled | Token feeds are temporarily unavailable. |

Every response carries `Cache-Control: no-store` and `X-Robots-Tag: noindex, nofollow`. A rotated token, switched-off feed, deleted Watch or inactive Watch answers 404.
