# Real Signal — example payloads
version 1.0.0 · schemas for these shapes: [/docs/schemas](https://real-signal.ai/docs/schemas)
these are the exact structures the composers emit. values marked *live* change with every reading; fetch the endpoint for the current truth. where production substrate is empty today (zero claimed merchants), the example shows the honest empty state rather than invented data.
## pocket-now — GET /api/pocket-live?pocket=cluny
*live* — a real response with an atmosphere reading in place:
```json
{
"pocket": "cluny",
"generated_at": "2026-08-11T06:30:12.000Z",
"projection_version": "3",
"atmosphere_latest": {
"primary_state": "calm",
"calm": 0.62,
"stress": 0.18,
"social_energy": 0.31,
"productive": 0.44,
"anomaly_flag": false,
"captured_at": "2026-08-11T06:15:03.000Z"
},
"packages_recent": [],
"predictions_recent": [],
"sustainability_recent": [],
"signal_tier": null,
"resonance": null,
"stats": {
"atmosphere_24h": 96,
"packages_7d": 0,
"predictions_revealed_7d": 42,
"recent_signal_count_60m": 0
}
}
```
## live-experiences — GET /api/live-experiences?pocket=cluny
the honest production state today (no merchant has accepted a brief yet):
```json
{
"pocket_id": "cluny",
"count": 0,
"experiences": [],
"atmosphere": { "primary_state": "calm", "calm": 0.62 },
"confidence": 0.21,
"confidence_source": "calibrated",
"generated_at": "2026-08-11T06:30:12.000Z"
}
```
what one experience looks like the moment a merchant accepts (shape from the canonical compose sample):
```json
{
"id": "8f5b0c2e-0000-4000-8000-000000000001",
"experience_name": "quiet room access",
"outlet": { "id": "8f5b0c2e-0000-4000-8000-000000000002", "name": "Example Cafe" },
"why": {
"why_now": "calm window observed; calm 0.62; roughly 24 minutes before the reading shifts",
"why_merchant": "12 outlets observed in this pocket; quiet capacity likely through the current window",
"why_users": "quiet-afternoon-coffee aligns with the current atmosphere reading",
"why_pocket": "calm 0.62 preserved; signal saturation 0.10; presence here stays purposeful, not prompted"
},
"value": {
"shape": "access",
"line": "time-bound access to the quiet room; no price move",
"offer_price_sgd": null,
"original_price_sgd": null,
"inventory_limit": 8
},
"window": {
"start_at": "2026-08-11T06:30:00.000Z",
"end_at": "2026-08-11T08:30:00.000Z",
"window_sgt": "14:30–16:30 SGT"
},
"window_remaining_minutes": 118,
"merchant_ready": true,
"receipts": { "line": "quiet-afternoon-coffee intent: 12 expressions in this pocket this hour" },
"expires_at": "2026-08-11T08:30:00.000Z"
}
```
## moment-stories — MCP get_live_moment_story
JSON-RPC call:
```json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "get_live_moment_story", "arguments": { "pocket_id": "cluny" } }
}
```
structured content of a live story (the shape the moment-story composer writes; null when no moment is worth narrating):
```json
{
"pocket_id": "cluny",
"story": {
"id": "00000000-0000-0000-0000-000000000001",
"why_now": "calm window observed; calm 0.62; roughly 24 minutes before the reading shifts",
"why_merchant": "12 outlets observed in this pocket; quiet capacity likely through the current window",
"why_users": "quiet-afternoon-coffee aligns with the current atmosphere reading",
"why_pocket": "calm 0.62 preserved; signal saturation 0.10; presence here stays purposeful, not prompted",
"band": "forming",
"mqs": 0.41,
"created_at": "2026-08-11T06:11:00.000Z",
"expires_at": "2026-08-11T06:41:00.000Z"
}
}
```
## notification-candidates — GET /api/notification-candidates
the honest production state today (the dispatch ledger fills the moment the machine gates pass a packet):
```json
{
"window": "1d",
"candidates": [],
"counts": { "candidate": 0, "dry_run": 0, "by_pocket": [] },
"note": "candidate rows cleared every gate but had no consented channel; dry_run rows were handed to a channel held in dry-run by env. this surface reads the ledger and can fire nothing."
}
```
what one candidate looks like when a merchant packet clears every gate with no consented channel:
```json
{
"packet_type": "merchant_moment_line",
"pocket_id": "cluny",
"status": "candidate",
"channel": null,
"reason": {
"why_now": "calm window observed; calm 0.62; roughly 24 minutes before the reading shifts.",
"why_me": "12 outlets observed in this pocket; quiet capacity likely through the current window.",
"whats_happening": "a quiet window at cluny.",
"what_value": "suggested value: no price move; the window itself is the value.",
"what_can_i_do": "one tap decides: fire, adjust, or ignore; nothing goes live without you.",
"how_long": "window: 14:30–16:30 sgt; about 24 minutes before the moment shifts."
},
"gate": { "pass": true, "note": "gate passed; no consented channel exists yet" },
"created_at": "2026-08-11T06:17:20.000Z"
}
```
---
every response carries the `_meta` attribution envelope (omitted above for brevity). live vitals: [/status](https://real-signal.ai/status).