API reference
By using the API you agree to the Terms of Service.
Try it live
Fire a real request against https://api.shingou.io/v1. Your key is kept in memory for this tab only, sent directly to the API and never to our servers.
Authenticate with Authorization: Bearer <key> or the x-api-key header. Timestamps are ISO 8601 (UTC). Mint a key from your dashboard.
One or more symbols, comma-separated. Uppercased server-side.
GET https://api.shingou.io/v1/sentiment?symbols=BTC-USD%2CETH-USDGET/v1/sentiment
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbols | string (comma-separated, ≤ 50) | yes | — | One or more symbols, comma-separated. Uppercased server-side. |
Request
curl "https://api.shingou.io/v1/sentiment?symbols=BTC-USD%2CETH-USD" \
-H "Authorization: Bearer sk_live_..."Response
{
"data": [
{
"symbol": "BTC-USD",
"timestamp": "2026-07-04T04:00:00+00:00",
"direction": "bullish",
"score": 0.65,
"confidence": 0.64,
"news_volume": 18,
"novelty_score": 0.74,
"dominant_events": ["listing", "macro"],
"summary": "Bullish sentiment driven by renewed ETF buying...",
"top_sources": [
{
"title": "Bitcoin, Ether extend relief rallies as ETF buying returns",
"source": "cointelegraph.com",
"url": "https://cointelegraph.com/markets/...",
"published_at": "2026-07-04T03:54:18.000Z",
"relevance": 0.95,
"sentiment": 0.65
}
]
}
]
}| Field | Type | Meaning |
|---|---|---|
| symbol | string | The requested asset, e.g. BTC-USD. |
| timestamp | ISO 8601 | As-of time of the signal. |
| direction | enum | bullish / bearish / neutral (±0.07 threshold on score). |
| score | number [-1,1] | Normalized market-impact. Plot it like any indicator. |
| confidence | number [0,1] | Blends news volume, cross-source agreement and relevance. |
| news_volume | integer | Distinct stories behind the signal. |
| novelty_score | number [0,1] | How fresh the underlying coverage is (dedup-aware). |
| dominant_events | enum[] | Up to 3 event types driving the signal. |
| summary | string | Plain-language reason for the score. |
| top_sources | object[] | Teaser + link references (see below). |
| top_sources[].title | string | Headline of the source article (teaser only). |
| top_sources[].source | string | Publisher / domain. |
| top_sources[].url | string | Link to the original article. Never full text. |
| top_sources[].published_at | ISO 8601 | When the source was published. |
| top_sources[].relevance | number [0,1] | How relevant the source is to this symbol. |
| top_sources[].sentiment | number [-1,1] | Per-source sentiment contribution. |
GET/v1/history/sentiment
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | yes | — | A single symbol. Uppercased server-side. |
| from | string (ISO 8601) | yes | — | Start of the range. Clamped to your plan's history window and to your plan's per-request span (90 days on Free and Starter, a year on Quant, two on Pro); the applied value is echoed back. |
| to | string (ISO 8601) | yes | — | End of the range. On delayed plans, capped at the freshness delay for non-live symbols. |
| interval | enum | no | 1h | Bucket size. |
Request
curl "https://api.shingou.io/v1/history/sentiment?symbol=BTC-USD&from=2026-06-27T00%3A00%3A00Z&to=2026-07-04T00%3A00%3A00Z&interval=1h" \
-H "Authorization: Bearer sk_live_..."Response
{
"symbol": "BTC-USD",
"interval": "1h",
"from": "2026-06-27T00:00:00.000Z",
"to": "2026-07-04T00:00:00.000Z",
"points": [
{
"bucket": "2026-07-04T09:00:00.000Z",
"score": 0.41,
"confidence": 0.6,
"direction": "bullish",
"news_volume": 3,
"novelty_score": 0.5,
"reconstructed": false
}
]
}| Field | Type | Meaning |
|---|---|---|
| symbol | string | The requested asset. |
| interval | enum | Applied bucket size. |
| from / to | ISO 8601 | The actual range served after clamping. |
| points[].bucket | ISO 8601 | Bucket start = as-of time. No lookahead. |
| points[].score | number [-1,1] | Signal for the bucket. |
| points[].confidence | number [0,1] | Confidence for the bucket. |
| points[].direction | enum | bullish / bearish / neutral. |
| points[].news_volume | integer | Stories in the bucket. |
| points[].novelty_score | number [0,1] | Freshness of coverage in the bucket. |
| points[].reconstructed | boolean | true = rebuilt by the archival backfill; false = live-collected. |
GET/v1/events
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | yes | — | A single symbol. Uppercased server-side. |
| limit | integer (1–100) | no | 20 | Maximum number of events to return. |
Request
curl "https://api.shingou.io/v1/events?symbol=BTC-USD&limit=20" \
-H "Authorization: Bearer sk_live_..."Response
{
"symbol": "BTC-USD",
"events": [
{
"id": "evt_01H...",
"symbol": "BTC-USD",
"event_type": "macro",
"headline": "Spot BTC ETFs post record daily inflow",
"summary": "Renewed institutional demand as ETF net inflows hit a new high.",
"impact": "bullish",
"confidence": 0.78,
"occurred_at": "2026-07-04T03:54:18.000Z",
"sources": [
{
"title": "Bitcoin ETFs see record inflows",
"source": "cointelegraph.com",
"url": "https://cointelegraph.com/markets/...",
"published_at": "2026-07-04T03:40:00.000Z",
"relevance": 0.93,
"sentiment": 0.71
}
]
}
]
}| Field | Type | Meaning |
|---|---|---|
| events[].id | string | Stable event identifier. |
| events[].symbol | string | The asset the event concerns. |
| events[].event_type | enum | Classified event type (see Event types). |
| events[].headline | string | Short event headline. |
| events[].summary | string | One-line description of the event. |
| events[].impact | enum | bullish / bearish / neutral impact for the asset. |
| events[].confidence | number [0,1] | Confidence in the classification. |
| events[].occurred_at | ISO 8601 | When the event occurred. |
| events[].sources | object[] | Teaser + link references (title, source, url, …). |
GET/healthno auth
Request
curl "https://api.shingou.io/health"Response
{ "status": "ok" }| Field | Type | Meaning |
|---|---|---|
| status | string | Always "ok" when the API is up. |
Errors
Every error shares one envelope: { "error": { "code": "...", "message": "..." } }.
| HTTP | code | When |
|---|---|---|
| 400 | invalid_request | Missing or invalid query parameters. |
| 401 | unauthorized | Missing, unknown, or revoked API key. |
| 404 | not_found | Unknown route. |
| 429 | rate_limited | Per-minute burst limit exceeded. Slow down. |
| 429 | plan_limit | Daily request cap for your plan reached. |
| 500 | internal | Unexpected server error (no internals leaked). |
Reference
Intervals
Directions
Event types (14)
Plans
Two paid axes, priced apart. Freshness: the free tier is live for the majors and delayed 24h for the rest, every paid tier is live for all symbols. Depth: how far back you may reach, and how much of it one request may span. Burst is a short-window guard on top of the daily quota, and the key cap is per account, so extra keys add no capacity. The free tier needs no card and does not expire. Commercial use requires a paid plan; the free tier is for personal, evaluation and non-commercial use.
| Plan | Price | Freshness | Requests / day | Burst / min | History | Per request | API keys |
|---|---|---|---|---|---|---|---|
| Free | $0 | Live BTC, ETH and SOL. Everything else 24h behind. | 1,000 | 30 | 1 day | 90 days | 3 |
| Starter | $24 / mo | Everything live. | 50,000 | 120 | 90 days | 90 days | 10 |
| Quant | $79 / mo | Everything live. | 50,000 | 120 | 365 days | 365 days | 15 |
| Pro | $249 / mo | Everything live. | 500,000 | 600 | 730 days | 730 days | 25 |
Prices exclude VAT. The rate for your country is shown before you pay. EU businesses that give a VAT number are billed under the reverse charge.
Coverage today: 134 days of history exist so far, 45 of them live-collected. The rest is flagged reconstructed. Both grow every day. A plan's History column is the furthest back it may reach, not a guarantee that a bucket exists there. Reaching past the corpus returns an empty range, never an error.
Current coverage (30 crypto assets)
Shingou is asset-class-agnostic by design. Crypto is live today; equities and other asset classes are on the roadmap.
Integrations
Free, open-source (MIT) clients that use the signal the honest way: as an entry filter, confidence-scaled sizing and an event kill-switch, never an entry generator. Each works with a free key in about 5 minutes. Set up Freqtrade or Jesse, or go straight to the strategies. Chart platform indicators (NinjaTrader, MetaTrader 5) are on the roadmap.
Before wiring anything to money, read what the signal is measured to be worth. The research page publishes the fee-inclusive backtest, the intervals that sit below 50%, and the levers that were killed by their own pre-committed gates.
Using Claude or another AI agent? The API is served as MCP tools at https://api.shingou.io/mcp, and there is a skill that teaches an agent to use them well. Set it up in one line.
Prefer alerts pushed to you? A free public feed posts direction flips and high-severity events (hacks, regulation, delistings, legal) about an hour after they surface: a couple of dozen quiet, high-conviction alerts a day, each with its source links. Follow on Bluesky or Telegram. The feed exists so you can watch the indicator work before wiring the API into your own strategy.
By using the API you agree to the Terms of Service.