# Feeds

> Every feed, its sector, when it last answered and what it holds.

Source: https://firmtape.com/docs/developers/geo/sources

Every feed, its sector, when it last answered and what it holds.

`GET https://geo.firmtape.com/v1/sources`

Plan GEO · Key scope geo · Limit 20,000 calls a month on Geo API, 100,000 on Geo Team · Version 1.0.0 · Since 2026-09-17

**This endpoint serves:** [GEO: The API, webhooks and MCP](https://firmtape.com/docs/geo#geo-api). **Plan:** [GEO](https://firmtape.com/features/geo). Free to read, no account. Geo alerts, the API and Team are Geo's own plans: Geo plans.

## Response

One row per feed: feed, source, sector, last_ok_utc, minutes_since_ok, last_status, fail_streak, records, first_record_utc, last_record_utc

## Errors

| Status | Code | What to do |
| --- | --- | --- |
| 401 |  | Bad key Send a `geo` key. |

## Request

```sh
curl \
  -H "Authorization: Bearer $FIRMTAPE_GEO_KEY" \
  "https://geo.firmtape.com/v1/sources"
```

```python
import os, requests

H = {"Authorization": f"Bearer {os.environ['FIRMTAPE_GEO_KEY']}"}
r = requests.get("https://geo.firmtape.com/v1/sources", headers=H)
print(r.status_code, r.text[:500])
```

```js
const r = await fetch("https://geo.firmtape.com/v1/sources", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.FIRMTAPE_GEO_KEY}` },
});
console.log(r.status, await r.text());
```

## Changes

- 2026-09-17: Added.
