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

GET/v1/sentiment

Latest market-impact signal for one or more symbols.

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.15 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

Point-in-time series for backtesting. As-of timestamps, no lookahead.

Parameters

NameTypeRequiredDefaultDescription
symbolstringyesA single symbol. Uppercased server-side.
fromstring (ISO 8601)yesStart of the range. Clamped to your plan's history window and to at most 90 days before "to"; 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

Recent classified market events for a symbol.

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

Liveness check. No authentication required.

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

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.

PlanPriceFreshnessRequests / dayHistory
free$0Live majors (BTC/ETH/SOL), rest delayed 24h1,0007 days
starter$24 / moLive, all symbols50,00090 days
proTBDLive, all symbols500,000730 days

Coverage (30 assets)

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

This is a signal layer to improve a strategy you already run, not trade recommendations or any guarantee of returns.