API reference
A small, read-only REST API. One call returns a bot-ready signal as clean JSON. Base URL https://api.shingou.io/v1. Authenticate with Authorization: Bearer <key> or the x-api-key header. All timestamps are ISO 8601 (UTC). Mint a key from your dashboard.
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.
One or more symbols, comma-separated. Uppercased server-side.
GET https://api.shingou.io/v1/sentiment?symbols=BTC-USD%2CETH-USDGET/v1/sentiment
Latest market-impact signal for one or more symbols.
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.15 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
Point-in-time series for backtesting. As-of timestamps, no lookahead.
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 at most 90 days before "to"; 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
Recent classified market events for a symbol.
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
Liveness check. No authentication required.
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
Freshness is the paid axis. The free tier is live for the majors and delayed 24h for the rest; paid tiers are live for all symbols. Commercial use is included at every tier.
| Plan | Price | Freshness | Requests / day | History |
|---|---|---|---|---|
| free | $0 | Live majors (BTC/ETH/SOL), rest delayed 24h | 1,000 | 7 days |
| starter | $24 / mo | Live, all symbols | 50,000 | 90 days |
| pro | TBD | Live, all symbols | 500,000 | 730 days |
Coverage (30 assets)
This is a signal layer to improve a strategy you already run, not trade recommendations or any guarantee of returns.