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: intraday (=crypto3@90M) and allocation (=core6@1D). 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

Call the route; an unsettled paid read returns 402 with an accepts array. Settle via your facilitator, then retry with the payment header.

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

# 402 body (shape):
# { "x402Version": 1,
#   "accepts": [{ "scheme": "exact", "network": "base",
#     "maxAmountRequired": "100000",   # atomic USDC (6dp) = $0.10
#     "asset": "USDC", "payTo": "0x430c…8059",
#     "resource": "/v1/gm/lattice" }] }

# 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>"

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

16 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
15M90M4H1D

Production horizons (live params_registry / default feed env). 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); allocation → core6 @ 1D (primary 1h). 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 by instrument base on this gateway — not a query param.

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 by instrument base — not a query param. Every cell stamps its feed_version and underlying_exchange.

primary
feed_version
DFY-FEED-8.01-1H-CORE6-P01
universe
core6
underlying_timeframe
1h
underlying_exchange
hyperliquid
fine
feed_version
DFY-FEED-8.03-5M-CRYPTO3-P02
universe
crypto3
underlying_timeframe
5m
underlying_exchange
krakenfutures
sample_symbol
BTC90M/DFY
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());