---
title: "What changed since the state hash you hold — poll free, buy only when it moves"
method: GET
path: "/api/board/diff"
tags: ["Change Detection"]
---

# What changed since the state hash you hold — poll free, buy only when it moves

`GET /api/board/diff`

## Request

- Base URL: `https://coil.trade`
- URL: `https://coil.trade/api/board/diff`
- Auth: one of:
  - API key in header `X-PAYMENT`
  - HTTP payment

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.

## Query parameters

- `since` string, required

## Headers

- `PAYMENT-SIGNATURE` string
- `X-PAYMENT` string
- `Authorization` string

## Response `200`

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.

- object

## Other responses

- `400`: 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.
- `402`: Payment Required — x402 v2 payment requirements in the JSON body and the PAYMENT-REQUIRED header

---

[API](https://skmtc.dev/coil/apis/coil-scanner-agent-api.md) · [All operations](https://skmtc.dev/coil/apis/coil-scanner-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/coil/apis/coil-scanner-agent-api/revisions/e087ee004cfb?raw)
