The Income Screen — weekly income data, in your inbox. Subscribe
ExchangeRebel

Listing schema v0.1

The schema is the product. Whoever defines the listing schema owns the directory — so it's open, versioned, and documented here in full. Every field is something a buyer agent needs to decide and call; there are no human-only fields.

Design rules: verification_status is set by ExchangeRebel (see verification); everything else is operator-declared and spot-checked. Schemas are versioned with semver; v0.x may add optional fields, never rename or remove.

Fields

FieldTypeMeaning
schema_versionstringSchema version of this listing (currently "0.1").
namestringService name.
operatorstringWho runs it — org or pseudonym.
descriptionstringWhat it does, one paragraph, machine-readable.
service_urlstringCanonical URL of the service.
capability_tagsstring[]What buyers search by, e.g. staking, solana, defi.
endpointsobject[]Each: path, method, input_schema, output_schema, example_request, example_response.
auth_methodenum"none" | "api-key" | "x402" | "signature".
pricing_modelenum"free" | "per-call" | "subscription" | "custom".
pricing_detailstringe.g. $0.05/call, first 1,000/day free.
slastringe.g. 99.5% monthly, <500ms p95 — or best-effort.
versionstringSemver of the service.
verification_statusenum"unverified" | "verified" | "verified-gold" — set by ExchangeRebel, not the operator.
verification_datestringISO date of last verification.
contactstringOperator contact for disputes/updates.
registered_atstringISO date the listing entered the registry.

Example — a real listing from the registry

{
  "schema_version": "0.1",
  "name": "YieldRebel",
  "operator": "Rebel Data",
  "description": "Verified ETF distribution payouts \u2014 weekly, semi-monthly, and monthly payers with ex-date, record date, pay date, and per-share amounts, captured from issuers' official sources only.",
  "service_url": "https://yieldrebel.com",
  "capability_tags": [
    "etf",
    "distributions",
    "income-data"
  ],
  "endpoints": [
    {
      "path": "/data/latest.json",
      "method": "GET",
      "input_schema": "none",
      "output_schema": "{\"as_of\": \"ISO date\", \"count\": \"int\", \"data\": [{\"ticker\", \"ex_date\", \"record_date\", \"pay_date\", \"dist_per_share_usd\", ...}]}",
      "example_request": "GET https://yieldrebel.com/data/latest.json",
      "example_response": "{\"as_of\": \"2026-10-08\", \"count\": 3384, ...}"
    },
    {
      "path": "/data/distributions-{date}.csv",
      "method": "GET",
      "input_schema": "none",
      "output_schema": "CSV: ticker, ex_date, record_date, pay_date, dist_per_share_usd, source",
      "example_request": "GET https://yieldrebel.com/data/distributions-2026-10-08.csv",
      "example_response": "CSV rows, one per distribution record"
    },
    {
      "path": "/agents.json",
      "method": "GET",
      "input_schema": "none",
      "output_schema": "machine-readable service description",
      "example_request": "GET https://yieldrebel.com/agents.json",
      "example_response": "{\"name\": \"YieldRebel\", \"endpoints\": [...]}"
    }
  ],
  "auth_method": "none",
  "pricing_model": "free",
  "pricing_detail": "Free \u2014 public data, no auth, no keys, no rate limits.",
  "sla": "Best-effort; static snapshots, no uptime SLA.",
  "version": "0.1",
  "verification_status": "verified",
  "verification_date": "2026-10-08",
  "contact": "https://yieldrebel.com/methodology.html",
  "registered_at": "2026-10-08"
}

Machine access

The live registry: /registry.json — every listing above, validated against this schema on every site build.