Contents · … endpoints
Developers · API reference

ShadowGraph API

Live status, infrastructure dependencies and outage research for about 3,200 internet services: APIs, SaaS, banks, the most-visited websites and cloud regions. The API returns the same data the website shows, as JSON, and most of it needs no key.

Base URL
FormatJSON (CSV where noted), UTC ISO 8601
AuthNone for almost every endpoint
FreshnessProbes every 5 min · worldwide re-check every 30 min

Quick start

Three calls answer most questions. No sign-up, no key.

  1. Find the service. Search by name, domain, provider or cloud region. Every service result carries a slug and its live state.
    curl -s "https://shadowalpha.online/_api/search?q=stripe&quick=1"
  2. Ask whether it is down. The status page returns the live state per endpoint, since when it fails, the last outage and what it runs on.
    curl -s "https://shadowalpha.online/_api/status/page?slug=stripe-api"
  3. Check whether it is only regional. Failures are re-checked from six continents every 30 minutes.
    curl -s "https://shadowalpha.online/_api/radar/global" | jq '.regionalOutages'

Authentication

Almost everything is public. Two endpoints need credentials; the website never asks you for an account to read data.

PublicNo header needed.Every endpoint not listed below.
Dataset keyAuthorization: Bearer sgd_…GET /_api/dataset/full. Key issued after subscribing on /data.
Machine paymentAuthorization: Payment <credential>POST /_api/machine/intelligence, paid MCP tools and paid A2A skills. Pay per call, no account.

Machine payments (HTTP 402)

Paid intelligence uses the open Machine Payments Protocol with Stripe as the payment method. Prices are $0.50 to $5.00 per call. Nothing is charged unless your client presents a valid credential for a challenge we issued.

  1. 1
    Call without credentials. The response is 402 Payment Required with a WWW-Authenticate: Payment header (method stripe, intent charge, the amount in cents in the base64url request parameter) and an RFC 9457 problem body.
  2. 2
    Pay the challenge. Your agent's wallet creates a Stripe shared payment token for exactly that amount and builds the credential.
  3. 3
    Retry the identical request with Authorization: Payment <base64url credential>. On success you get 200, the result and a Payment-Receipt header. A failed payment returns a fresh challenge.

Over MCP the same flow uses JSON-RPC: an unpaid tools/call returns error -32042 with error.data.challenges; retry with the credential in params._meta["org.paymentauth/credential"]; the receipt arrives in result._meta["org.paymentauth/receipt"]. Error -32043 means the payment could not be verified.

402 response
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="…", realm="shadowgraph-live.floot.app", method="stripe", intent="charge", request="eyJhbW91bnQiOiI1MCIsImN1cnJlbmN5IjoidXNkIn0", expires="…"
Content-Type: application/problem+json

{ "type": "https://paymentauth.org/problems/payment-required", "title": "Payment Required", "status": 402 }

Rate limits & caching

  • Data changes every 5 minutes. Please poll an endpoint at most once per minute.
  • Responses are cached at the edge for 20 seconds to 5 minutes; read Cache-Control. Repeated calls inside that window are cheap and return the same data.
  • Live domain scans in search: 30 per client per hour (quick=1 never scans). Vendor scans: 4 per client per hour, 40 per hour in total.
  • The full radar is about 1.3 MB of JSON; send Accept-Encoding: gzip (about 90 KB on the wire).
  • Exceeding a limit returns 429 with a JSON error. There is no penalty beyond that.

Errors

Errors are JSON objects with one human-readable field: { "error": "…" }. Payment errors use application/problem+json.

200OKData returned. Check status fields such as warming_up after deploys.
400Bad requestMissing or invalid parameter, e.g. a search query under 2 characters.
401UnauthorizedMissing or invalid dataset key.
402Payment requiredPaid endpoint called without a valid payment credential. Read WWW-Authenticate.
404Not foundUnknown or expired scan id.
429Too many requestsRate limit reached; retry later.
503UnavailableLive data temporarily unavailable, e.g. during a database failover. Retry after a minute.

Data semantics

up
Answered the latest check with HTTP below 500. 401, 403 and 404 count as reachable: the service is there, it just wants a key or another path.
degraded
Failed the latest check only. Often a blip; we do not call it an outage yet.
down
Failed the latest two checks in a row (about 10 minutes).
unknown
Not checked in the last 30 minutes.
Provider incident
Several independent services in the same hosting provider, cloud region, CDN or DNS provider down at the same time. When more than half of all probes fail at once, our node is suspect and no incidents are opened.
Vantage point
One measurement node in AWS us-east-1 (N. Virginia), plus six worldwide probes every 30 minutes. A service can be down for you and up for us, or the other way round.
inferred / statistical
Hypotheses, not proof. Official facts (SEC filings, published IP ranges) are labelled official.
Model Context Protocol

MCP server

Connect Claude, Cursor, VS Code or your own agent to ShadowGraph in one line. 5 free tools answer factual questions; 5 paid tools return deeper intelligence, settled per call over the Machine Payments Protocol. No API key, no account.

Endpointhttps://shadowgraph-live.floot.app/_api/mcp
TransportStreamable HTTP · JSON responses
Protocol2025-11-25 · 2026-07-28
MCP Registryapp.floot.shadowgraph-live/shadowgraphv2.3.3

Connect

Run in a terminal, then type /mcp in Claude Code to see the tools.
claude mcp add --transport http shadowgraph https://shadowgraph-live.floot.app/_api/mcp

Tools 10

shadowgraph_market_recapFree
Global Market Recap

Answer the concrete question: what moved in global markets today? Returns the largest current company moves plus recent global thematic news.

limitnumber 1–10read-only
shadowgraph_company_filingsFree
Latest Official Company Filings

Return recent official SEC EDGAR filings for a supported company symbol.

symbolstringrequiredlimitnumber 1–10read-only
shadowgraph_eu_tendersFree
Open EU Procurement Search

Search current EU TED procurement notices by keyword and/or buyer country.

keywordstringcountrystringlimitnumber 1–10read-only
shadowgraph_free_previewFree
ShadowGraph Global Preview

Return a compact live preview of ShadowGraph's global coverage, relationship graph and top measured price-lag signal, plus the paid tools to call next.

No argumentsread-only
shadowgraph_global_snapshot$0.50 / call
ShadowGraph Global Market Snapshot

Fast global intelligence snapshot across official filings, procurement, infrastructure, markets and evidence-ranked relationships.

No argumentsread-only
shadowgraph_market_signal$0.75 / call
ShadowGraph Global Market Signal

Global directional market intelligence with measured lead/lag evidence and explicit invalidation logic.

No argumentsread-only
shadowgraph_procurement_opportunity$1.00 / call
ShadowGraph Global Procurement Opportunity

Find evidence-backed supplier and second-order commercial opportunities using SEC EDGAR, EU TED, KAP, infrastructure and price-lag evidence.

No argumentsread-only
shadowgraph_global_brief$2.50 / call
ShadowGraph Global Intelligence Brief

Higher-density global intelligence brief combining official disclosures, EU procurement, global news, relationship graph, measured lead/lag and commercial opportunities.

No argumentsread-only
shadowgraph_deep_research$5.00 / call
ShadowGraph Deep Research

Full machine-readable research pack with expanded official evidence, global news, graph relationships, measured price lags and commercial opportunity analysis.

No argumentsread-only
shadowgraph_service_infoFree
ShadowGraph Service Info

Return service capabilities, paid-tool prices and discovery URLs.

No argumentsread-only

Paid tools over MCP

  1. 1
    Call the tool as usual. Without payment the server answers with JSON-RPC error -32042; error.data.challenges holds a Stripe charge challenge with the exact amount.
  2. 2
    Your agent's wallet creates a Stripe shared payment token for that challenge.
  3. 3
    Repeat the identical tools/call with the credential in params._meta["org.paymentauth/credential"]. The result carries the receipt in result._meta["org.paymentauth/receipt"]. Error -32043 means the payment could not be verified; a fresh challenge is included.
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "shadowgraph_global_snapshot",
    "arguments": {}
  }
}
Registry manifest/server.json
Agent2Agent protocol

A2A agent

ShadowGraph is also reachable as an A2A agent: other agents discover it through its agent card and talk to it over JSON-RPC.

Endpointhttps://shadowgraph-live.floot.app/_api/a2a
BindingJSONRPC · A2A 1.0
Capabilities– streaming– pushNotifications– extendedAgentCard

Skills …

Loading the agent card…

Send a message

curl -s -X POST https://shadowgraph-live.floot.app/_api/a2a \
  -H "Content-Type: application/json" \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "SendMessage",
  "params": {
    "message": {
      "role": "ROLE_USER",
      "messageId": "m1",
      "parts": [
        {
          "text": "What moved in global markets today?"
        }
      ]
    }
  }
}'

Paid skills answer with HTTP 402 and a WWW-Authenticate: Payment challenge, the same flow as the REST API.

Agent card/.well-known/agent-card.json
OpenAPI 3.1

OpenAPI specification

The machine-readable contract behind this reference: every endpoint with parameters, schemas, examples, auth and payment metadata. Import it into your API client, generate a typed SDK, or hand it to an LLM agent as its tool definition.

Spec URLhttps://shadowalpha.online/openapi.json
Version… · OpenAPI 3.1
Operations… in … groups

Use it with

Import → Link → paste:
https://shadowalpha.online/openapi.json

# Postman creates a collection with every endpoint and example.
Full specification/openapi.json
Loading endpoint reference…