Coil Change Detection API

The polling loop: hash the board for free, buy the delta only when it moves. An unchanged hash is never billed.

Operations 2

GET /api/board/state FREE — has the board materially changed? #
GET /api/board/diff What changed since the state hash you hold — poll free, buy only when it moves #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/coil-trade:coil-trade-change-detection-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

coil-trade-change-detection-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Coil Agent Change Detection API
  version: 1.2.0
  description: 'A trading desk''s discipline for your AI agent: when to trade, when to wait and when to sit in cash, plus the scores to act on. Market data and trading signals for AI agents, paid per call in USDC — no account, no API key, no signup. New here? Start with GET /api/crypto/gate — $0.001, the cheapest answer we sell and the most common first call: is crypto risk-on right now. Paid endpoints run from $0.001 to $0.25 per read, plus the published research studies (free index: GET /api/research), plus a $0.25 one-hour Coil Live session: market regime verdicts, 0-100 opportunity / entry-timing / hold-strength scores per name, ranked buy lists, sector and macro rotation, day-trade state maps, per-symbol hold state, a point-in-time archive, and a 24/7 crypto board — across 650+ names (S&P 500, Nasdaq-100, macro ETFs) and 81 Robinhood-tradable crypto pairs. Equities re-score about every 5 minutes through the US market day; crypto runs around the clock. Every response is timestamped (computed_at) and carries an on-chain settlement receipt.


    FREE FIRST, no payment and no key: a live top-3 preview per book (/api/board/agent?preview=1, identical schema), a sample of the board (top 3 per book, headline fields) one market day delayed over MCP (claude mcp add --transport http coil https://mcp.coil.trade/mcp), one complete committed day from the append-only log, our own forward-return audit (/api/board/signal-audit) and a sha256 commitment log (/api/board/proof). A free key or a wallet sign-in (SIWX) unlocks ~25 live calls/day on the cheap reads.


    Impersonal research publication — identical for every buyer, not individualized investment advice; scores describe historical and technical structure, not future returns. Markets can lose money; crypto is highly volatile and can lose value rapidly, including total loss.'
  x-guidance: 'The reads follow a trading desk''s routine, top-down: the gate first (is the market worth trading today; on a cash reading nothing new opens), then where money is moving, then the set-ups with their entry windows, then one name before any buy, and the hold state of what you own (a broken trend ends the thesis; exits come before entries). Start here: /api/crypto/gate ($0.001) is the cheapest answer we sell and the most common first call — is crypto risk-on right now, straight from the BTC 200-day master gate. /api/board/regime ($0.005) asks the same question of the equity tape and /api/board/indices ($0.005) gives the index ladder; those two are the usual next calls. Then drill in. If the regime is favorable, /api/board/buylist ($0.05) returns today''s ranked candidates, or /api/board/name?sym=NVDA ($0.005, up to 10 symbols) scores tickers you hold. /api/board/hold?sym= ($0.005) says whether a position''s trend state is intact. /api/crypto/day ($0.005) is the 24/7 board for 81 Robinhood-tradable coins. Call any paid path with no payment header to get HTTP 402 carrying BOTH x402 v2 requirements (also base64 in PAYMENT-REQUIRED) and an MPP ''WWW-Authenticate: Payment'' challenge; pay on Base, Solana or Algorand and the same request returns JSON plus an on-chain receipt. 402 amounts are atomic units (USDC 6dp: $0.005 = "5000"); OpenAPI price.amount is decimal USD. Free first: ?preview=1, the delayed MCP server, /api/board/signal-audit, /api/board/proof; poll /api/board/state (free) and buy only when its hash moves. Rank by opp_pct; read the book regime before acting on any name score. BEHAVIOUR LAYER: when to call, when to come back and when to STOP is the skill at https://coil.trade/skills/coil-board/SKILL.md (an agent reading only this spec never saw it before). ALGORAND FEES ARE SPONSORED: both Algorand rails carry a feePayer, so you need zero ALGO to pay — Base and Solana require gas tokens. That rail is easiest for a wallet holding only USDC.'
  contact:
    email: support@coil.trade
    url: https://coil.trade/agents
  x-polling-contract: Every response (paid AND the free preview) carries a freshness block — market_open, data_age_seconds, next_refresh_at, and a plain-language poll_hint — plus the same values in the X-Coil-Market-Open / X-Coil-Next-Refresh / X-Coil-Data-Age response headers. It tells you when the board will actually change, so you poll only when there is new data instead of re-buying an identical payload. When the US market is shut it says so and gives the next session time. Market holidays are not modelled (a holiday reads as open while the board simply will not advance — data_age_seconds still reveals it).
servers:
- url: https://coil.trade
tags:
- name: Change Detection
  description: 'The polling loop: hash the board for free, buy the delta only when it moves. An unchanged hash is never billed.'
paths:
  /api/board/state:
    get:
      operationId: getBoardState
      summary: FREE — has the board materially changed?
      description: Returns a hash of the material state (each book's regime mode and ladder rung, plus the firing/ready candidate set) and nothing else. Poll it free and unlimited; buy a paid read only when the hash changes. Supports If-None-Match for a 304. Deliberately excludes the publish timestamp, which moves ~every 5 minutes without the state meaningfully changing. Also returns PER-BOOK hashes (books.spx, books.qqq, …) so an equities agent is not woken by a crypto change.
      parameters:
      - name: If-None-Match
        in: header
        required: false
        schema:
          type: string
        description: Your last state_hash, quoted. Returns 304 when unchanged.
      - name: syms
        in: query
        required: false
        schema:
          type: string
        example: NVDA,AMD
        description: Up to 25 tickers — returns a per-symbol hash so a watchlist agent polls only its own names.
      responses:
        '200':
          description: state_hash + freshness + where to buy when it moves
        '304':
          description: Unchanged since your last read
      security: []
      tags:
      - Change Detection
  /api/board/diff:
    get:
      operationId: getBoardDiff
      summary: What changed since the state hash you hold — poll free, buy only when it moves
      tags:
      - Change Detection
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.010000'
        protocols:
        - x402: {}
        - mpp:
            method: usdc
            intent: charge
            currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
        description: Buy the board diff — what changed since your last check (x402) — x402 'exact' charge, USDC on Base (eip155:8453). Amount in 6-decimal base units. Live offer in the endpoint's own 402 response.
        offers:
        - intent: charge
          method: x402
          amount: '10000'
          currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
          description: Buy the board diff — what changed since your last check (x402) — x402 'exact' charge, USDC on Base (eip155:8453). Amount in 6-decimal base units. Live offer in the endpoint's own 402 response.
        - intent: charge
          method: x402
          amount: '10000'
          currency: '31566704'
          description: Buy the board diff — what changed since your last check (x402) — x402 'exact' charge, USDCa on Algorand mainnet. Amount in 6-decimal base units. Live offer in the endpoint's own 402 response.
        - intent: charge
          method: x402
          amount: '10000'
          currency: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
          description: Buy the board diff — what changed since your last check (x402) — x402 'exact' charge, USDC on Solana mainnet. Amount in 6-decimal base units. Live offer in the endpoint's own 402 response.
        mpp:
          method: usdc
          intent: charge
          challenge: 'WWW-Authenticate: Payment'
          credential: 'Authorization: Payment'
          network: eip155:8453
        nanopayments:
          rail: circle-gateway
          scheme: exact
          network: eip155:8453
          select: the accepts entry with extra.name=GatewayWalletBatched
          note: Gasless batched USDC from a unified Circle Gateway balance — sign with @circle-fin/x402-batching (registerBatchScheme); settles offchain to the seller's Gateway balance.
      responses:
        '402':
          description: Payment Required — x402 v2 payment requirements in the JSON body and the PAYMENT-REQUIRED header
        '200':
          description: 'The deltas between the hash you passed and the board right now: regime and permission-ladder moves per book, candidates entered/left the READY pool, and per-name trend, light, leadership and hold-band flips, with a deterministic one-line summary. Settlement receipt in the PAYMENT-RESPONSE header.'
          content:
            application/json:
              schema:
                type: object
          headers:
            X-Coil-Market-Open:
              schema:
                type: string
                enum:
                - 'true'
                - 'false'
              description: Whether the US equity market is open right now. When false the board will not change until the next session.
            X-Coil-Next-Refresh:
              schema:
                type: string
                format: date-time
              description: When the next board is expected. Do not re-buy before this time — you would receive an identical payload.
            X-Coil-Data-Age:
              schema:
                type: string
              description: Age of the served board in seconds.
        '400':
          description: 'Free, unbilled: ?since= missing, unknown or expired (no stored baseline to diff from). The body carries the current hash and the free /api/board/state endpoint to re-poll.'
      description: 'Change detection for polling agents. Pass ?since= the state_hash from a previous FREE /api/board/state poll and receive only the deltas: names that entered or left the READY candidate pool, per-name trend / light / leadership / hold-band flips, and any regime or permission-ladder move per book. The free hash tells you THAT the board moved; this tells you WHAT moved. Calling it with a hash equal to the current one is answered FREE with changed:false and is never billed; an unknown or expired hash also fails free with a 400. Baselines are stored for 7 days, written the first time a hash is observed.'
      parameters:
      - name: since
        in: query
        required: true
        schema:
          type: string
        description: The state_hash you stored from a previous GET /api/board/state (16 hex chars). Baselines are kept 7 days.
      - name: PAYMENT-SIGNATURE
        in: header
        required: false
        schema:
          type: string
        description: 'x402 v2 payment: base64 of the signed payment payload. Send this OR X-PAYMENT (v1 name) — omit both to receive the 402 challenge.'
      - name: X-PAYMENT
        in: header
        required: false
        schema:
          type: string
        description: x402 v1 payment header — the v1 dialect's name for PAYMENT-SIGNATURE. Accepted for backwards compatibility with v1 clients.
      - name: Authorization
        in: header
        required: false
        schema:
          type: string
        description: 'MPP credential: `Payment <base64 credential>` answering the WWW-Authenticate: Payment challenge on the 402 (method usdc, intent charge).'
      security:
      - x402: []
      - mpp: []
components:
  securitySchemes:
    licenseKey:
      type: apiKey
      in: header
      name: X-License-Key
      description: Gumroad license key for a Coil subscription. Coil Live ($49/mo or $419/yr) unlocks /api/live/*; the Coil Scanner key ($19/mo) unlocks the live board endpoints. Sent as a raw header value, no scheme prefix.
    siwx:
      type: apiKey
      in: header
      name: X-Coil-Key
      description: 'Wallet auth, two interoperable lanes. (1) STANDARD x402 SIWX extension (docs.x402.org/extensions/sign-in-with-x): every 402 declares extensions[''sign-in-with-x''] with nonce/domain/uri and supportedChains (eip191 + ed25519); construct the CAIP-122/SIWE message, sign with the wallet, send base64 {message, signature, chainId, type} as the SIGN-IN-WITH-X header — the free-tier products serve directly, no mint step. (2) KEY-MINT convenience: GET /api/auth/nonce?address=&chain=base|solana|algorand, sign, POST /api/auth/verify to mint a durable coilwallet_ key sent as X-Coil-Key. Both grant the same free tier (25 calls/day on regime, indices, movers, crypto gate, crypto night, tradfi-risk, hold state). Signatures are messages, not transactions — no funds move.'
    x402:
      type: apiKey
      in: header
      name: X-PAYMENT
      description: x402 pay-per-call. Call with no payment header to receive HTTP 402 carrying payment requirements (also base64 in PAYMENT-REQUIRED), pay on Base, Solana or Algorand in USDC, then repeat the request with the signed payload base64 in X-PAYMENT. No account, no API key, no signup. See https://coil.trade/agents
    mpp:
      type: http
      scheme: Payment
      description: 'Machine Payment Protocol. The 402 carries a `WWW-Authenticate: Payment` challenge (method=usdc); answer it on the standard Authorization header as `Authorization: Payment <base64url(JSON{challenge, payload})>` — NOT on a custom header. x402 is the alternative rail and uses X-PAYMENT instead.'
    coilKey:
      type: apiKey
      in: header
      name: X-Coil-Key
      description: Free key (POST /api/key, instant, no card) or a SIWX wallet sign-in. Opens the cheap slices — regime, indices, movers, crypto gate, the overnight crypto read, tradfi-risk and hold state — for 25 calls/day per key without any payment. Endpoints listing coilKey alongside x402 are reachable EITHER way.