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-USD

GET/v1/sentiment

Parameters

NameTypeRequiredDefaultDescription
symbolsstring (comma-separated, ≤ 50)yesOne 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
        }
      ]
    }
  ]
}
FieldTypeMeaning
symbolstringThe requested asset, e.g. BTC-USD.
timestampISO 8601As-of time of the signal.
directionenumbullish / bearish / neutral (±0.07 threshold on score).
scorenumber [-1,1]Normalized market-impact. Plot it like any indicator.
confidencenumber [0,1]Blends news volume, cross-source agreement and relevance.
news_volumeintegerDistinct stories behind the signal.
novelty_scorenumber [0,1]How fresh the underlying coverage is (dedup-aware).
dominant_eventsenum[]Up to 3 event types driving the signal.
summarystringPlain-language reason for the score.
top_sourcesobject[]Teaser + link references (see below).
top_sources[].titlestringHeadline of the source article (teaser only).
top_sources[].sourcestringPublisher / domain.
top_sources[].urlstringLink to the original article. Never full text.
top_sources[].published_atISO 8601When the source was published.
top_sources[].relevancenumber [0,1]How relevant the source is to this symbol.
top_sources[].sentimentnumber [-1,1]Per-source sentiment contribution.

GET/v1/history/sentiment

Parameters

NameTypeRequiredDefaultDescription
symbolstringyesA single symbol. Uppercased server-side.
fromstring (ISO 8601)yesStart 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.
tostring (ISO 8601)yesEnd of the range. On delayed plans, capped at the freshness delay for non-live symbols.
intervalenumno1hBucket 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
    }
  ]
}
FieldTypeMeaning
symbolstringThe requested asset.
intervalenumApplied bucket size.
from / toISO 8601The actual range served after clamping.
points[].bucketISO 8601Bucket start = as-of time. No lookahead.
points[].scorenumber [-1,1]Signal for the bucket.
points[].confidencenumber [0,1]Confidence for the bucket.
points[].directionenumbullish / bearish / neutral.
points[].news_volumeintegerStories in the bucket.
points[].novelty_scorenumber [0,1]Freshness of coverage in the bucket.
points[].reconstructedbooleantrue = rebuilt by the archival backfill; false = live-collected.

GET/v1/events

Parameters

NameTypeRequiredDefaultDescription
symbolstringyesA single symbol. Uppercased server-side.
limitinteger (1–100)no20Maximum 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
        }
      ]
    }
  ]
}
FieldTypeMeaning
events[].idstringStable event identifier.
events[].symbolstringThe asset the event concerns.
events[].event_typeenumClassified event type (see Event types).
events[].headlinestringShort event headline.
events[].summarystringOne-line description of the event.
events[].impactenumbullish / bearish / neutral impact for the asset.
events[].confidencenumber [0,1]Confidence in the classification.
events[].occurred_atISO 8601When the event occurred.
events[].sourcesobject[]Teaser + link references (title, source, url, …).

GET/healthno auth

Request

curl "https://api.shingou.io/health"

Response

{ "status": "ok" }
FieldTypeMeaning
statusstringAlways "ok" when the API is up.

Errors

Every error shares one envelope: { "error": { "code": "...", "message": "..." } }.

HTTPcodeWhen
400invalid_requestMissing or invalid query parameters.
401unauthorizedMissing, unknown, or revoked API key.
404not_foundUnknown route.
429rate_limitedPer-minute burst limit exceeded. Slow down.
429plan_limitDaily request cap for your plan reached.
500internalUnexpected server error (no internals leaked).

Reference

Intervals

1m5m15m1h4h1d

Directions

bullishbearishneutral

Event types (14)

listingdelistinghack_exploitregulationpartnershipfundingnetwork_upgradetokenomicswhale_movementproduct_launchlegalmacromarket_structureother

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.

PlanPriceFreshnessRequests / dayBurst / minHistoryPer requestAPI keys
Free$0Live BTC, ETH and SOL. Everything else 24h behind.1,000301 day90 days3
Starter$24 / moEverything live.50,00012090 days90 days10
Quant$79 / moEverything live.50,000120365 days365 days15
Pro$249 / moEverything live.500,000600730 days730 days25

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.

BTC-USDETH-USDSOL-USDXRP-USDBNB-USDADA-USDDOGE-USDAVAX-USDLINK-USDDOT-USDMATIC-USDLTC-USDTRX-USDTON-USDSHIB-USDUNI-USDATOM-USDXLM-USDNEAR-USDAPT-USDARB-USDOP-USDFIL-USDINJ-USDSUI-USDSEI-USDAAVE-USDRNDR-USDIMX-USDHBAR-USD

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.