# SYGNL/47 feed skill

Drop this file into a Claude or GPT agent as a skill, a system prompt, or
project instructions. It teaches the agent what the SYGNL/47 feed is, what each
field means, how to pay for it, and what it must never conclude from it.

Service: https://47.sygnliq.com
Free manifest: `GET https://47.sygnliq.com/v1/potus`
MCP endpoint: `https://47.sygnliq.com/mcp/`
Starter agent: https://47.sygnliq.com/agent.py

---

## 1. What the feed is

SYGNL/47 listens to live broadcast radio, television audio and broadcaster
caption tracks. When a US president names a publicly traded company, it records
the moment. For each event it publishes the UTC timestamp of the utterance, the
company, the instrument, a short quote for context, whether the audio was live
or a rerun, how many independent feeds heard the same thing, and how the
instrument moved against its benchmark afterwards.

Every field is a checkable fact about something that already happened.

## 2. What the feed is not

It is an observation feed. It is not a prediction, a recommendation, a strategy,
or a signal with a track record.

State these plainly whenever you report on this data:

- There are zero confirmed live outcomes. Nothing in the feed has been observed
  live and then traded.
- Two events are on file. Both are reconstructed from archived broadcast audio
  and carry `source: replay`. Both come from the same speech, the same stock and
  the same day, so they are not two independent observations.
- The publisher's own event study returns INSUFFICIENT below twenty independent
  events, however strong the numbers look.
- Price moves are measured on bar closes. They are marks, not fills.
- Per-feed standing latency is not measured. Published buffer depths are
  connect-burst measurements, which are a prior for lag and not lag itself.

Check the current inventory yourself before valuing the feed. The free manifest
reports it honestly at `inventory`, counted at the archive cutoff.

## 3. The price ladder

Recency is the only price axis. Every tier returns the identical schema, the
identical fields and the identical verification block. A cheaper tier is not a
thinner tier. It simply cannot see events newer than its cutoff.

| Tier | Route | Sees events older than | Price per call |
|---|---|---|---|
| live | `GET /v1/potus/live` | no cutoff | $2.00 |
| 1m | `GET /v1/potus/events/1m` | 60 seconds | $0.75 |
| 15m | `GET /v1/potus/events/15m` | 15 minutes | $0.25 |
| archive | `GET /v1/potus/archive` | 24 hours | $0.10 |

Time-boxed passes, bought once and then used unmetered on their own tier:

| Plan | Route | Price |
|---|---|---|
| live, 24 hours | `POST /v1/potus/subscribe/live/24h` | $50 |
| live, 30 days | `POST /v1/potus/subscribe/live/30d` | $750 |
| archive, 30 days | `POST /v1/potus/subscribe/archive/30d` | $100 |

A pass buys unmetered access to its tier. It never buys fresher data. The
server-side cutoff applies to pass holders exactly as it does to per-call
buyers.

## 4. How to pay

Payment is x402. USDC on Base mainnet. No account and no API key.

1. Call a priced route with no payment header.
2. The server answers HTTP 402 with an `accepts` block: amount in base units,
   asset address, recipient, network.
3. Sign the EIP-3009 authorization with your wallet tooling.
4. Retry the same request with the base64 PaymentPayload in the
   `PAYMENT-SIGNATURE` header. Legacy x402 v1 clients sending `X-PAYMENT` are
   also accepted.

If you hold a subscription pass, send it as `X-SYGNL47-TOKEN` instead and skip
the payment step until it expires. An expired pass falls back to a normal 402.
It never falls back to a free serve.

You are not charged for nothing. A tier with no events inside its window returns
404 and is not settled. A missing publisher sync returns 503 and is not settled.
Every successful response carries `sync.feed_age_seconds`, the measured
staleness of the artifact it came from.

## 5. Field reference

Response envelope:

- `tier` which rung answered.
- `guaranteed_max_freshness_seconds` this tier's cutoff.
- `count` events in this response.
- `withheld_newer_than_tier` how many events exist that this tier may not see.
  A count, never a timestamp.
- `sync.feed_age_seconds` age of the publisher artifact, in seconds.
- `sync.stale` true when that age exceeds the publisher's own bound.

Each event:

- `event_id` stable identifier, for example `sygnl47-20260727-192342-GM`.
- `ts_utc` UTC second of the utterance, not of delivery.
- `speaker` who said it.
- `entity` the name as tracked. `ticker` the mapped instrument.
- `direction` classified direction of the statement, `long` or `short`. This is
  a reading of the language, not a forecast.
- `quote` short context snippet, hard capped at 180 characters because the
  underlying broadcasts are copyrighted.
- `source` `live` for a live capture, `replay` for a reconstruction from
  archived audio. Treat these as different kinds of evidence.
- `verification.live` true when the audio was proven live, false when it was a
  rerun, null when the check was inconclusive. The default verdict is replay,
  so live has to be earned.
- `verification.liveness_reason` why that verdict was reached.
- `verification.sources` how many independent feeds corroborated the utterance
  inside a lag-corrected window. CONFIRMED needs two or more. One feed is not
  corroboration.
- `verification.consensus_confidence` agreement score across those feeds.
- `verification.note` present on reconstructions, saying so plainly.
- `market.mark` instrument price at the utterance.
- `market.benchmark` what it was measured against, normally SPY.
- `market.signed_return_1m_pct`, `_5m_`, `_15m_`, `_30m_` the instrument move
  minus the benchmark move, signed by the classified direction, on bar closes.

## 6. MCP tools

Free, call this first: `sygnl47_manifest`.

Priced: `sygnl47_latest_event`, `sygnl47_events_live`, `sygnl47_events_1m`,
`sygnl47_events_15m`, `sygnl47_events_archive`, `sygnl47_event_detail`,
`sygnl47_entities`, `sygnl47_feeds`.

Passes: `sygnl47_subscription_plans`, `sygnl47_subscribe_live_24h`,
`sygnl47_subscribe_live_30d`, `sygnl47_subscribe_archive_30d`.

Paid tools take a `payment_signature` argument. Call one without it to receive
the payment requirements first.

## 7. Rules for the agent

Do:

- Report events as observations, with the timestamp, the liveness verdict and
  the source corroboration attached. Those three are the product.
- Say when an event is a reconstruction. Never present one as a live capture.
- Quote `sync.feed_age_seconds` when freshness matters to the answer.
- Read `withheld_newer_than_tier` before concluding nothing has happened. A
  cheap tier not seeing an event is not the same as no event.
- Check `sygnl47_entities` before assuming a name is actionable. Names are
  blocked when they have an earnings print inside the holding window or fail the
  liquidity floor.

Do not:

- Do not state or imply a win rate, a hit rate, a backtest result, an edge, or
  an expected profit. None exist.
- Do not treat `direction` as a forecast. It describes what was said.
- Do not treat a measured 30 minute move as a repeatable outcome. n is two, both
  reconstructed, from one speech.
- Do not treat buffer depth as latency.
- Do not place a trade on this data without being told to, and never without
  saying first that nothing about the signal is evidenced.
- Do not describe the feed as a trading signal, an alpha source, or a strategy.

If a user asks whether this makes money, the honest answer is that nobody knows,
because it has never been observed live and traded, and the sample on file is
too small to support any claim in either direction.
