Public tier · apps.mutantdefi.com/dfy/developers

GM! Index — programmatic reference

Say GM! to the market — calibrated long–short conviction cells with omega math underneath. Multi-index on one gateway: primary 1h core6 (Hyperliquid underlyings) plus fine 5m crypto3 (Kraken Futures). Product blocks: allocation (=core6@1D, the harvest block) and intraday (=crypto3@90M, a ranking block). VIX-class activity lattice (primary 0→1 plus additive hurdle-net omega triad).

Machine discovery · copy into a client; these return JSON or text contracts, not web pages.

Service contracthttps://gm.mutantdefi.com/services.json
x402 manifesthttps://gm.mutantdefi.com/.well-known/x402
MCP registryhttps://gm.mutantdefi.com/mcp/tools
LLM indexhttps://gm.mutantdefi.com/llm.txt

What a GM! cell is

A calibrated directional-conviction reading for one instrument at one horizon. Compose a symbol as {BASE}{HORIZON}/DFY — e.g. BTC1D/DFY.

primary_channels

The calibrated core of every cell. value runs 0.0 (max short) → 1.0 (max long).

valuesigned_convictionconfidencedirection
fct_omega_triad

Additive hurdle-net omega fields — present alongside the primary channels when omega mass is on the wire.

omegaomega_massomega_valueomega_directionomega_opportunityomega_delta
theta_stamps

Hurdle (θ) configuration the cell was computed under. Production primary stays composite.

value_modeomega_hurdleomega_hurdle_mode
provenance

Feed lineage stamped on every cell so you can verify version and underlying venue.

feed_versionparams_hashunderlying_exchangeunderlying_exchange_labelunderlying_timeframe
production_primary

The primary channel mode in production.

composite

Quickstart

Every read is a plain GET returning JSON. Paid routes answer 402 until settled; the first conviction snapshot is free per caller.

bash
# 1. Free: discover live catalog, prices, and schemas
curl https://gm.mutantdefi.com/services.json | jq '.services[] | {id, path: .http.path, price: .price_usd}'

# 2. Free: your first conviction cell (one free per caller fingerprint)
curl "https://gm.mutantdefi.com/v1/gm/conviction?symbol=BTC1D/DFY"

# 3. Free: feed metadata + validation telemetry
curl https://gm.mutantdefi.com/v1/feed/metadata

Base URLs — GM! Index https://gm.mutantdefi.com, Desk (Tier A/B) https://desk.mutantdefi.com. Settlement is USDC on Base, fixed-fee only.

ACP job room — parse contract

Required reading before inspecting acp job history. Mis-reading message entries as empty event objects is a client bug, not a missing requirement.

EntryRead these fields
kind: systemevent.type, event.* (job.created, budget.set, job.funded, job.submitted, …)
kind: messagecontentType + content — requirements are contentType: requirement with a JSON string body. Do not use event on messages.

Lifecycle: create-job → requirement message → budget.set job.fundedjob.submitted (JSON deliverable with acp_offering_id) → completed. Accept only deliverables whose offering id matches the SKU you bought (e.g. lattice → composite/cells, not a lone BTC1D conviction cell). Full contract also on GET https://gm.mutantdefi.com/llm.txt and in-repo ops/acp/ACP_BUYER_JOB_ROOM.md.

python
# ACP job history — requirements are on MESSAGE entries, not event.
import json, datetime, subprocess

raw = subprocess.check_output(
    ["acp", "job", "history", "--job-id", "JOB_ID", "--chain-id", "8453", "--json"],
    text=True,
)
d = json.loads(raw)
print("status:", d.get("status"))
for e in d.get("entries") or []:
    ts = e.get("timestamp") or 0
    t = datetime.datetime.utcfromtimestamp(ts / 1000).strftime("%H:%M:%S") if ts else "?"
    if e.get("kind") == "system":
        ev = e.get("event") or {}
        print(f"{t} system   {ev.get('type')}")
    else:
        # NEVER use e.get("event") here — it is empty on messages.
        print(f"{t} message  {e.get('contentType')}: {e.get('content')}")

Payment — x402 (v1 and v2)

Call the route; an unsettled paid read returns 402. Both protocol versions are served on every paid route — v1 in the response body, v2 in the PAYMENT-REQUIRED header — so use whichever your client speaks. Settle via your facilitator, then retry with the proof header.

bash
# First call → 402 with payment requirements
curl -i "https://gm.mutantdefi.com/v1/gm/lattice?universe=core6&horizon=1D"

# 402 body (exact shape):
# { "x402Version": 1,
#   "error": "payment_required",
#   "accepts": [{
#     "scheme": "exact",
#     "network": "base",
#     "maxAmountRequired": "100000",   # atomic USDC (6dp) = $0.10
#     "resource": "/v1/gm/lattice",
#     "description": "dfy_gm_index_feed",
#     "mimeType": "application/json",
#     "payTo": "0x430c298f9a4a145e5299af997287bb4f928b8059",
#     "maxTimeoutSeconds": 60,
#     "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",  # USDC on Base
#     "extra": { "name": "USD Coin", "version": "2" }          # EIP-712 domain
#   }] }

# "asset" is the USDC contract address, not a ticker — sign the EIP-3009
# authorization against it using the "extra" domain. Never pay to the DFY
# ERC-20; payTo above is the settlement EOA.

# After settling, retry with the payment proof:
curl "https://gm.mutantdefi.com/v1/gm/lattice?universe=core6&horizon=1D" \
  -H "X-PAYMENT: <settlement-proof-from-facilitator>"

# ── v2 ───────────────────────────────────────────────────────────────────
# The same 402 also carries the v2 challenge in a header. Nothing to opt into.
#
#   PAYMENT-REQUIRED: <base64 PaymentRequired>
#
# decodes to the same terms in v2 spelling — "amount" rather than
# "maxAmountRequired", CAIP-2 "eip155:8453" rather than "base", and
# resource/description/mimeType lifted into a "resource" object:
#
# { "x402Version": 2,
#   "error": "PAYMENT-SIGNATURE header is required",
#   "resource": { "url": "/v1/gm/lattice", "mimeType": "application/json" },
#   "accepts": [{ "scheme": "exact", "network": "eip155:8453",
#                 "amount": "100000", "asset": "0x8335...2913",
#                 "payTo": "0x430c...8059", "maxTimeoutSeconds": 60,
#                 "extra": { "name": "USD Coin", "version": "2" } }] }

# Retry with the v2 proof header instead; the receipt comes back in
# PAYMENT-RESPONSE rather than X-PAYMENT-RESPONSE.
curl "https://gm.mutantdefi.com/v1/gm/lattice?universe=core6&horizon=1D" \
  -H "PAYMENT-SIGNATURE: <base64 PaymentPayload>"

# The signed EIP-3009 authorization is identical in both versions — only the
# envelope differs. GET /.well-known/x402 reports x402Versions and the exact
# header names under x402Transport.

High volume? A subscription key (X-Api-Key) bypasses x402 on entitled routes — see feed profiles and the SKU table below. Agents can buy through the Virtuals ACP storefront, which fronts the same handlers.

python
# Paid GM! cell (x402). Prefer the Virtuals agent checkout in production.
# Local gateways accept X402_SKIP_PAYMENT=true for integration tests.
import httpx

r = httpx.get(
    "https://gm.mutantdefi.com/v1/gm/conviction",
    params={"symbol": "BTC1D/DFY"},
    timeout=30,
)
if r.status_code == 402:
    # Settle via x402 / ACP, then retry with payment proof headers
    print(r.headers.get("PAYMENT-REQUIRED") or r.text[:200])
else:
    cell = r.json()
    print(cell["symbol"], cell["value"], cell.get("omega_mass"))

Discovery endpoints — free

No payment, no key. These describe the whole surface programmatically.

EndpointReturns
GET /Agent catalog — brand, paid routes, prices, discovery links.
GET /services.jsonMachine contract — every service with parameters + output fields (this page is generated from it).
GET /.well-known/x402x402 resource list — payment requirements per route.
GET /mcp/toolsJSON-Schema tool registry for agent frameworks.
GET /v1/feed/metadataFeed registry, params_hash, feed_version, validation telemetry.
GET /llm.txtHuman/LLM-readable overview, ACP job-room parse rules, pointers.
GET /v1/dfy/journalDesk journal index + teasers (bodies are paid).
GET /healthLiveness + feed freshness.

Service catalog — paid

17 programmatic reads. Each is an HTTP GET, an x402 resource, and (where noted) an mcp tool and Discord slash command — one handler behind all fronts.

Conviction

The atomic GM! cell — one instrument × horizon.

GET/v1/gm/conviction$0.10
discord /convictionmcp get_gm_conviction

GM! Conviction Snapshot

First snapshot free per buyer fingerprint. Additive FCT omega triad when mass on wire. BTC/ETH/HYPE cells use fine 5m/crypto3 (DFY-FEED-8.03-5M-CRYPTO3-P02 / krakenfutures); metals/energy stay on primary 1h/core6 (DFY-FEED-8.01-1H-CORE6-P01 / hyperliquid). Cells stamp feed_version + underlying_exchange. Optional ?rung=purist|balanced|active (FC-27).

GET
curl "https://gm.mutantdefi.com/v1/gm/conviction?symbol=BTC1D%2FDFY"
Parameters
ParamTypeReqNotes
symbolstringoptionalFull FCI symbol (one of instrument) values gm_symbol · {BASE}{HORIZON}/DFY e.g. BTC1D/DFY, BTC90M/DFY
basestringoptionalBase when symbol omitted (one of instrument) values gm_base
horizonstringoptionalWith base (one of instrument) values gm_horizon
rungstringoptionalFC-27 Harvest Ladder rung (annotates harvest{}; does not mutate feed) values gm_harvest_rung
Response fields
FieldTypeDescription
symbolstringe.g. BTC1D/DFY
horizonstring gm_horizon
valuenumberPrimary 0.0 max short → 1.0 max long
signed_convictionnumberSigned long–short score
confidencenumberConfidence ∈[0,1]
directionstringCoarse direction label long · short · neutral
omeganumber|nullΩ ratio at live hurdle θ
omega_massnumber|nullG+L mass (hurdle-net)
omega_valuenumber|nullG/(G+L) hurdle-net level ∈[0,1]
omega_directionnumber|nullD=(G−L)/(G+L) ∈[-1,1]
omega_opportunitynumber|nullM=tanh(log1p(G+L))
omega_deltanumber|nullΔΩ vs prior bar
value_modestringProduction primary remains composite composite · omega
omega_hurdlenumber|nullLive θ (hurdle)
omega_hurdle_modestring|nullHow θ is computed fixed · funding · vol
underlying_last_tsinteger|nullUnderlying bar ms
feed_last_tsinteger|nullFeed publish ms
staleness_msintegerWall-clock data age
timestampintegerResponse wall time ms
feed_versionstring
params_hashstring
profile_params_hashstring|null
underlying_exchangestring|nullCCXT id of the OHLCV venue backing this index cell (e.g. hyperliquid, krakenfutures)
underlying_exchange_labelstring|nullHuman label for underlying_exchange
underlying_timeframestring|null
feed_profilestringLSCI leg that served the cell: primary | fine | primary_fallback primary · fine · primary_fallback
degradedbooleanTrue when fine preferred but primary_fallback served
index_contextobject|nullQuiet-regime cell context: abs_signed, cross ranks, util_strength
compliancestringNon-advice / non-custodial notice

Lattice

Universe × horizon composites with omega marginals.

GET/v1/gm/lattice$0.10
discord /latticemcp get_gm_lattice

GM! Lattice Composite

Hurdle-net information lattice over a universe×horizon. universe=crypto3 → fine-tier BTC/ETH/HYPE (5m feed); universe=core6 → primary 1h lattice. Optional ?rung=purist|balanced|active (FC-27).

GET
curl "https://gm.mutantdefi.com/v1/gm/lattice?universe=core6"
Parameters
ParamTypeReqNotes
universestringoptional values gm_universe
horizonstringoptional values gm_horizon
granularitystringoptional values gm_granularity
rungstringoptionalFC-27 Harvest Ladder rung annotation values gm_harvest_rung
Response fields
FieldTypeDescription
universestring
horizonstring
granularitystring
compositeobject
cellsarrayPer-symbol conviction cells when granularity=symbol
omega_latticenumber|null
mass_sourcestring|null omega · proxy_signed_confidence
quiet_regimeobjectBook quiet/mixed/dispersed token + dispersion; additive when |signed|≈0
params_hashstring
compliancestring

Sizing & exits

Allocation weights and exit-hazard reads — the highest-evidence IP in the stack.

GET/v1/gm/weights$0.12
discord /weightsmcp get_gm_weights

GM! Allocation Weights (A15b)

Relative sizing multipliers — not dollar book weights (see gm_omega_book). Optional ?rung=purist|balanced|active (FC-27).

GET
curl "https://gm.mutantdefi.com/v1/gm/weights?universe=core6&horizon=1D"
Parameters
ParamTypeReqNotes
universestringoptional values gm_universe
horizonstringoptional values gm_horizon
weightingstringoptional values gm_weighting
rungstringoptionalFC-27 Harvest Ladder rung annotation values gm_harvest_rung
Response fields
FieldTypeDescription
cellsarray
self_financing_checkobject
stake_bandobject
mass_sourcestring
omega_latticenumber|null
compliancestring
GET/v1/gm/hazard$0.10
discord /hazardmcp get_gm_hazard

GM! Exit Hazard Check (A14b)

Optional ?rung=purist|balanced|active (FC-27).

GET
curl "https://gm.mutantdefi.com/v1/gm/hazard"
Parameters
ParamTypeReqNotes
symbolstringrequired (one of instrument) values gm_symbol · {BASE}{HORIZON}/DFY e.g. BTC1D/DFY, BTC90M/DFY
basestringoptional (one of instrument) values gm_base
horizonstringoptional (one of instrument) values gm_horizon
sidestringrequired values position_side
entry_tsnumberrequiredUnix seconds or ms
maenumberoptionalMax adverse excursion as fraction
current_profitnumberoptionalSigned profit fraction
rungstringoptionalFC-27 Harvest Ladder rung annotation values gm_harvest_rung
Response fields
FieldTypeDescription
productstring
symbolstring
sidestring position_side
entry_ts_msinteger
age_hoursnumber
signed_convictionnumber
confidencenumber
maenumber|null
current_profitnumber|null
thresholdsobject
gatesobject
adverse_channelobject
hazardboolean
reasonstring|null a14a_mae_cut · a14a_adverse_dfy ·
compliancestring
GET/v1/gm/harvest_rung$0.05
mcp get_gm_harvest_rung

GM! Harvest Rung (FC-27)

M-layer harvest rung — not a feed-quality statistic. Default: balanced. Priced when admits are flat; never mutates feed.

GET
curl "https://gm.mutantdefi.com/v1/gm/harvest_rung?universe=crypto3"
Parameters
ParamTypeReqNotes
universestringoptional values gm_universe
horizonstringoptional values gm_horizon
rungstringoptionalHarvest rung (default balanced) values gm_harvest_rung
Response fields
FieldTypeDescription
productstring
context_idstring
rungstring gm_harvest_rung
cardobject
coverage_actionablenumber
actionable_countinteger
cell_countinteger
rung_hintstring
cellsarray

Omega book

Mean–omega wallet/book construction.

GET/v1/gm/omega_book$0.15
discord /omega_bookmcp get_gm_omega_book

DFY Omega Book (wallet construction)

Mean–omega book optimization from lattice-Ω marginals (FCT Ch 5). Distinct from A15b.

GET
curl "https://gm.mutantdefi.com/v1/gm/omega_book?universe=core6&horizon=1D"
Parameters
ParamTypeReqNotes
universestringoptional values gm_universe
horizonstringoptional values gm_horizon
modestringoptional values omega_book_mode
notionalnumberoptionalUSD gross (long_short) or equity (long_only)
max_weightnumberoptionalPer-name |w| cap
weightingstringoptional values gm_weighting
Response fields
FieldTypeDescription
productstring
modestring omega_book_mode
bookobject
omega_latticenumber|null
mass_sourcestring
thetaobject
a15b_sizingobject
groundingstring
compliancestring

CCXT shims

Drop-in ticker / OHLCV shapes for trading bots.

GET/v1/gm/ticker/{symbol}$0.08
mcp get_gm_ticker

GM! CCXT Ticker

CCXT-shaped ticker; info includes underlying_exchange for dual-profile provenance (hyperliquid vs krakenfutures).

GET
curl "https://gm.mutantdefi.com/v1/gm/ticker/BTC1D%2FDFY"
Parameters
ParamTypeReqNotes
symbolstringrequired (one of instrument) values gm_symbol · {BASE}{HORIZON}/DFY e.g. BTC1D/DFY, BTC90M/DFY
basestringoptional (one of instrument) values gm_base
horizonstringoptional (one of instrument) values gm_horizon
Response fields
FieldTypeDescription
symbolstring
lastnumberPrimary value
timestampinteger
infoobjectsigned_conviction, confidence, direction, omega_* triad, θ stamps, underlying_exchange, feed_version
GET/v1/gm/ohlcv/{symbol}$0.08
mcp get_gm_ohlcv

GM! CCXT OHLCV

6-col primary series unchanged. timeframe may be 5m (fine crypto3), 1h (primary core6), or 1d. Full FCT triad history on Tier-C feed /value/{symbol}.

GET
curl "https://gm.mutantdefi.com/v1/gm/ohlcv/BTC1D%2FDFY"
Parameters
ParamTypeReqNotes
symbolstringrequired (one of instrument) values gm_symbol · {BASE}{HORIZON}/DFY e.g. BTC1D/DFY, BTC90M/DFY
basestringoptional (one of instrument) values gm_base
horizonstringoptional (one of instrument) values gm_horizon
timeframestringoptional values ohlcv_timeframe
limitintegeroptional
sinceintegeroptionalUnix ms
Response fields
FieldTypeDescription
ohlcvarrayBars: [ts, open, high, low, close=value, volume=confidence]

MCP execution

One agent tool call over any GM! read.

POST/mcp/execute$0.10
mcp

GM! MCP Execution

POST
curl "https://gm.mutantdefi.com/mcp/execute"
Parameters
ParamTypeReqNotes
namestringrequired values mcp_tool
argsobjectrequiredTool-specific args
Response fields
FieldTypeDescription
namestring
resultobjectSame shape as the named tool

Desk (Tier A/B)

Decision-ready posture, brief, and journal on desk.mutantdefi.com.

GET/v1/dfy/desk$0.12
discord /desk

Desk View

Posture-only — no FCI cell values (Principle 2.1).

GET
curl "https://desk.mutantdefi.com/v1/dfy/desk"
Parameters
ParamTypeReqNotes
symbolstringrequired values desk_symbol
Response fields
FieldTypeDescription
symbolstring
regimeobjectCoarse surf/vol regime slice
postureobjectTrio bias for symbol
outcomesobjectRecent realized outcomes
edgeobjectEdge summary
journal_hookobjectIds/titles only
GET/v1/dfy/brief$0.12
discord /brief

Morning Brief

GET
curl "https://desk.mutantdefi.com/v1/dfy/brief"
Response fields
FieldTypeDescription
regime_mapobject
trio_biasobject
overnight_exitsarray
timestampinteger
GET/v1/dfy/journal/{id}$0.08
discord /journal

Journal Essay

GET
curl "https://desk.mutantdefi.com/v1/dfy/journal/latest"
Parameters
ParamTypeReqNotes
idstringrequired values journal_id
Response fields
FieldTypeDescription
idstring
titlestring
published_atstring
body_mdstring
posture_snapshotobject|null

Desk primitives

Coarse regime / posture / attribution / guidance.

GET/v1/dfy/regime$0.05
discord /regime

Regime Read

GET
curl "https://desk.mutantdefi.com/v1/dfy/regime"
Parameters
ParamTypeReqNotes
symbolstringoptionalOmit = all pairs values desk_symbol
Response fields
FieldTypeDescription
pairsarrayRegime tokens per pair
GET/v1/dfy/posture$0.05
discord /posture

Trio Posture

GET
curl "https://desk.mutantdefi.com/v1/dfy/posture"
Response fields
FieldTypeDescription
botsarrayA/B/RL direction_bias + open_positions
pairsarray
GET/v1/dfy/attribution$0.05
discord /attribution

Exit Attribution Ledger

GET
curl "https://desk.mutantdefi.com/v1/dfy/attribution"
Response fields
FieldTypeDescription
reasonsarrayPer-exit-reason counts + realized edge
GET/v1/dfy/guidance/crypto$0.05
discord /guidance

Blue-Chip Guidance

GET
curl "https://desk.mutantdefi.com/v1/dfy/guidance/crypto"
Parameters
ParamTypeReqNotes
symbolstringrequired values desk_symbol
Response fields
FieldTypeDescription
symbolstring
regimestring
postureobject
recent_realizedobject

Enum reference

Canonical value sets referenced by the parameter tables above.

gm_base
BTCETHHYPEXYZ-GOLDXYZ-SILVERXYZ-CL

Core-6 underlyings (default feed bases).

gm_horizon
90M4H1D

Production horizons (live params_registry / default feed env). Serving a horizon is not a claim about it: 1D is the only harvest block, and 90M and 4H rank without a round-trip claim. 15M was withdrawn on 2026-08-11 for negative gross edge that no fee tier recovers, and is no longer offered. See product_blocks.horizon_claims on /v1/feed/metadata for the measured edge behind each. Extended 30M/3H require per-horizon profile_build + DFY_SYNTHETIC_HORIZONS enablement before promotion — not on the wire today.

gm_symbol{BASE}{HORIZON}/DFY

e.g. BTC1D/DFY, BTC90M/DFY, ETH90M/DFY, XYZ-GOLD4H/DFY

Compose from gm_base + gm_horizon. Same symbol path serves both index profiles: BTC/ETH/HYPE cells use the fine 5m/crypto3 profile (Kraken Futures underlyings); metals/energy stay on primary 1h/core6 (Hyperliquid). Cells stamp underlying_exchange + feed_version.

gm_basket_symbolDFY-{BLUE|CRYPTO|MACRO7}{HORIZON}

e.g. DFY-BLUE1D, DFY-CRYPTO90M, DFY-MACRO71D

Basket instruments (no /DFY suffix).

gm_universe
core6crypto3intradayallocationmetalsenergybluecryptomacro7

Also allowed: comma list of bases or full symbols. Product blocks: intraday → crypto3 @ 90M (fine 5m, ranking); allocation → core6 @ 1D (primary 1h, harvest). Response stamps product_block when an alias is used; technical membership unchanged. Legacy aliases day_trade / portfolio_trade still resolve. crypto3 → BTC/ETH/HYPE fine-tier cells (5m / DFY-FEED-8.03… / krakenfutures). core6 → primary 1h lattice (metals/energy Hyperliquid; crypto routed fine when live). macro7 → DFY-MACRO7{H} basket (CL/GOLD/SILVER/SP500; SP500 weight 0.40). Default remains core6.

gm_granularitydefault symbol
symbolcomposite
gm_weightingdefault confidence
confidenceequal
omega_book_modedefault long_short
long_shortlong_only

long_short = dollar-neutral gross=1; long_only = Σw=1.

position_side
longshort
desk_symbol
BTCETHHYPEXYZ-GOLDXYZ-SILVERXYZ-CL

Desk blue-chip filter — base tickers only, never BTC1D/DFY.

journal_id{YYYY-MM-DD}-{slug}
latest

Or any id from the free journal index.

mcp_tool
get_gm_convictionget_gm_latticeget_gm_weightsget_gm_omega_bookget_gm_hazardget_gm_harvest_rungget_gm_tickerget_gm_ohlcv

get_feed_metadata is free — not this offering.

ohlcv_timeframe
5m1h1d

Optional; feed default if omitted. Fine-tier crypto3 underlyings are 5m; primary core6 underlyings are 1h.

gm_feed_profile
primaryfine

Discovery only (see GET /v1/feed/metadata feed_profiles). primary = DFY-FEED-8.01-1H-CORE6-P01 (Hyperliquid). fine = DFY-FEED-8.03-5M-CRYPTO3-P02 (Kraken Futures). Routing is automatic and not a query param. It resolves per (base, horizon), not per base: fine serves BTC/ETH/HYPE only at the horizons it was fit for (90M, 4H, and 15M which is no longer offered) and primary serves every other cell, including those same bases at 1D. Read feed_version and profile_params_hash off each response rather than assuming a base maps to one profile. Live scope: GET /.well-known/x402 feed_profiles.fine.horizons.

gm_harvest_rungdefault balanced
puristbalancedactive

FC-27 Harvest Ladder (M-layer). Optional ?rung= on conviction/lattice/weights/hazard/harvest_rung. Annotates distance under a registered (band, conf) harvest rung — never mutates feed value/signed/confidence. Preferred default when a choice is required: balanced. See GET /v1/feed/metadata harvest_ladder and PR-2026-07-19-HARVEST-LADDER-01.

gm_underlying_exchange
hyperliquidkrakenfutures

CCXT id stamped on cells as underlying_exchange. Conviction remains synthetic DFY index data; this names the OHLCV venue.

omega_theta

e.g. 0.05, 0.10, 0.5

Declared hurdle for primary-channel omega promote (phase 2). Additive triad on conviction already stamps omega_hurdle / omega_hurdle_mode from the live feed profile.

Feed profiles & provenance

Routing is automatic and resolves per (base, horizon) — not a query param, and not by base alone. Every cell stamps its feed_version, profile_params_hash and underlying_exchange; read those rather than inferring the profile from the symbol.

primary
feed_version
DFY-FEED-8.01-1H-CORE6-P01
universe
core6
underlying_timeframe
1h
underlying_exchange
hyperliquid
serves
every cell not served by fine — all of core6, and the crypto3 bases at horizons outside the fine scope (e.g. 1D)
fine
feed_version
DFY-FEED-8.03-5M-CRYPTO3-P02
universe
crypto3
underlying_timeframe
5m
underlying_exchange
krakenfutures
sample_symbol
BTC90M/DFY
bases
BTC, ETH, HYPE
horizons
15M, 90M, 4H
serves
only the listed bases at the listed horizons — the profile is fit on a 90M forward horizon and does not answer 1D
Requested cellServing profilefeed_version
BTC, ETH, HYPE at 15M / 90M / 4HfineDFY-FEED-8.03-5M-CRYPTO3-P02
BTC, ETH, HYPE at 1DprimaryDFY-FEED-8.01-1H-CORE6-P01
XYZ-GOLD, XYZ-SILVER, XYZ-CL — all horizonsprimaryDFY-FEED-8.01-1H-CORE6-P01

The fine profile is fit on a 90-minute forward horizon and answers only the horizons it was validated for; longer horizons are served by the 1h primary book. A base therefore does not map to a single profile. If your integration caches or reconciles cells, key that cache on profile_params_hash rather than on the symbol. The authoritative live scope is feed_profiles.fine.horizons from /.well-known/x402. If the fine upstream is unhealthy, in-scope cells fall back to primary and stamp degraded: true with feed_profile: primary_fallback.

Subscription SKUPriceEntitles
gm_day_pass$4.99 / 24hconviction
full_suite$49.00 / moconviction, lattice, weights, omega_book, hazard, ticker, ohlcv, mcp
live_pro$179.00 / moconviction, lattice, weights, omega_book, hazard, ticker, ohlcv, mcp, live_stream

Integrations

Same handler, four fronts.

CCXT bots

/v1/gm/ticker/{symbol} and /v1/gm/ohlcv/{symbol} return CCXT-shaped payloads with additive omega_* on info.

MCP / agents

Schema registry at GET /mcp/tools; call POST /mcp/execute. Tool names mirror the mcp_tool enum.

Virtuals ACP

The DFY agent fronts these handlers with checkout, chat, and a wallet. Offering ids match service ids.

Discord

Every desk read and most GM! reads have a slash command (shown per endpoint).

typescript
const GM = "https://gm.mutantdefi.com";

// Free tool registry
const registry = await fetch(`${GM}/mcp/tools`).then((r) => r.json());

// Paid execute — same settlement as HTTP x402 routes
const paid = await fetch(`${GM}/mcp/execute`, {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    name: "get_gm_lattice",
    args: { universe: "core6", horizon: "1D" },
  }),
});
// 402 → settle → retry; 200 → { name, result }
console.log(await paid.json());

Tiered knowledge store

Content-sensitivity tiers, not separate products. assert_clean is the release gate — Tier-C construction never reaches the public A surface.

Tier A

desk x402 posture

Labels & outcomes only — assert_clean projection boundary

Tier B

journal

Free index/teasers · paid essay body

Tier C

feed + Hermes snapshot

Raw/construction — bearer only; never projected to public A

Tier GM!

gm.mutantdefi.com

Conviction, lattice, weights, omega book, hazard, MCP

Tier edge

discord · apps

Interaction fronts — no tiered research store of their own

  • https://gm.mutantdefi.comGM! Index — x402 + MCP + agent export (canonical)
  • https://desk.mutantdefi.comTier A/B desk — posture, brief, journal, Hermes ingest/snapshot
  • https://feed.mutantdefi.comTier-C bearer feed (construction; never on public A)
  • https://apps.mutantdefi.comPreview viewer + bearer BFF (this deploy)
  • https://discord.mutantdefi.comSlash-command interactions webhook
  • https://app.virtuals.io/virtuals/14925Wallet, DFY gate, chat, ACP checkout

Hermes connectors

Desk owns ingest + store. Hermes is an optional Tier-C oracle — bearer-gated, never on the public A path. RPC bridge is ingest-only.

  • POST https://desk.mutantdefi.com/v1/dfy/ingest — trader push · bearer HERMES_INGEST_TOKEN
  • GET https://desk.mutantdefi.com/v1/dfy/snapshot — oracle export · same bearer
python
# Hermes connector — desk owns the store; Hermes only pushes/pulls.
# Set HERMES_INGEST_TOKEN on dfy-desk; never expose on public A routes.
import httpx
import os

DESK = "https://desk.mutantdefi.com"
token = os.environ["HERMES_INGEST_TOKEN"]
headers = {"Authorization": f"Bearer {token}"}

# Trader → desk (outbound push)
httpx.post(
    f"{DESK}/v1/dfy/ingest",
    headers=headers,
    json={"kind": "runner", "data": {"symbol": "BTC", "event": "heartbeat"}},
    timeout=30,
).raise_for_status()

# Optional Tier-C oracle snapshot (operator / hermes-agent)
snap = httpx.get(f"{DESK}/v1/dfy/snapshot", headers=headers, timeout=60).json()
print(snap.keys())

More samples

Start with free discovery; paid routes return 402 until settled.

python
import httpx

GM = "https://gm.mutantdefi.com"

# Free discovery — machine catalog is source of truth
catalog = httpx.get(f"{GM}/services.json", timeout=30).json()
tools = httpx.get(f"{GM}/mcp/tools", timeout=30).json()
print(catalog["product_name"], len(catalog.get("acp_offering_ids", [])))
print("mcp tools:", len(tools.get("tools", tools) if isinstance(tools, dict) else tools))
typescript
// Desk uses base tickers (BTC), never BTC1D/DFY
const desk = await fetch(
  "https://desk.mutantdefi.com/v1/dfy/desk?symbol=BTC",
).then(async (r) => {
  if (r.status === 402) throw new Error("settle x402 then retry");
  return r.json();
});
console.log(desk.symbol, desk.regime);
typescript
// apps.mutantdefi.com BFF — Virtuals front only (fails closed without bearer)
const apps = "https://apps.mutantdefi.com";
const symbol = encodeURIComponent("BTC1D/DFY");
const r = await fetch(`${apps}/api/dfy/ccxt/ticker?symbol=${symbol}`, {
  headers: { Authorization: `Bearer ${process.env.DFY_TICKER_ACCESS_TOKEN}` },
});
console.log(r.status, await r.json());