{"openapi":"3.1.0","info":{"title":"Trench Lessons API","version":"1.0.0","description":"Solana meme coin research feed and pre-trade risk flags for trading bots, pay-per-request via x402 (USDC on Solana mainnet or Base). Educational research only, not financial advice.","x-guidance":"Three paid GET endpoints, no account needed; pay per call with x402 (USDC on Solana mainnet or Base mainnet eip155:8453, both via PayAI). 1) GET /api/signals/risk?mint=<mint> ($0.01), e.g. /api/signals/risk?mint=DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump (equivalent path form: /api/signals/risk/<mint>); pass a real Solana SPL token mint address, never the literal placeholder (a missing/invalid/template mint returns 400 before any payment challenge or charge); free real sample: GET /api/signals/risk/sample; returns flags curveSkipPool, unlockedLp, mayhemMode, bundleHandoff, each with value (true/false/null), status (ok/unknown/n/a) and confidence, plus riskScore 0-100. Treat 'unknown' as no data, not as safe. 1b) GET /api/signals/verdict?mint=<mint> ($0.005; path form /api/signals/verdict/<mint>): cheap one-word verdict go/caution/avoid plus short reasons, derived from the same checks; same mint validation. 2) GET /api/lessons/feed?days=N ($0.005, N 1-30, default 7): structured JSON of the most recent daily research findings (topic, evidence grade, points, sources). Free (not listed here): GET /api/lessons/latest and GET /api/pricing. Payments are final; see /terms.","termsOfService":"https://trench-lessons.vercel.app/terms","contact":{"name":"Trench Lessons","email":"jeragon775@gmail.com"}},"servers":[{"url":"https://trench-lessons.vercel.app"}],"paths":{"/api/signals/risk":{"get":{"operationId":"getRiskFlagsByQuery","summary":"Risk flags for a Solana meme coin mint","description":"Read-only on-chain checks: curve-skip PumpSwap pool, unlocked LP, pump.fun Mayhem mode, bundle handoff. Example: /api/signals/risk?mint=DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump (path form /api/signals/risk/{mint} is equivalent). Free real sample (no payment): /api/signals/risk/sample.","externalDocs":{"description":"Free sample response","url":"https://trench-lessons.vercel.app/api/signals/risk/sample"},"tags":["Signals"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"parameters":[{"name":"mint","in":"query","required":true,"description":"Solana SPL token mint address","schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"example":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump"}],"responses":{"200":{"description":"Risk report","content":{"application/json":{"schema":{"type":"object","properties":{"mint":{"type":"string"},"mocked":{"type":"boolean"},"riskScore":{"type":"integer","minimum":0,"maximum":100},"scoredFlags":{"type":"integer"},"flags":{"type":"object","properties":{"curveSkipPool":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]},"unlockedLp":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]},"mayhemMode":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]},"bundleHandoff":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]}}},"asOf":{"type":"string","format":"date-time"},"disclaimer":{"type":"string"}},"required":["mint","flags","riskScore"]},"example":{"mint":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump","mocked":false,"network":"solana-mainnet (read-only RPC)","flags":{"curveSkipPool":{"value":false,"status":"ok","confidence":"high","detail":{"pool":"Fk5MuGv2H3Qpt6AxdhS2KHgDL2os424BvfEoqFNTdv9Y","lookup":"canonical-pda"}},"unlockedLp":{"value":false,"status":"ok","confidence":"high","detail":{"note":"remaining LP is dust (effectively all burned)"}},"mayhemMode":{"value":false,"status":"ok","confidence":"high","detail":{"source":"bonding curve","curveComplete":true}},"bundleHandoff":{"value":false,"status":"ok","confidence":"low","detail":{"earlyNonDevBuyers":4,"walletsThatHandedOff":0}}},"riskScore":0,"scoredFlags":4,"elapsedMs":534,"asOf":"2026-10-15T23:30:00.000Z","disclaimer":"Heuristic, read-only on-chain checks. Can be wrong. Not financial advice. Data as-is, no warranty. Terms: /terms"}}}},"400":{"description":"Missing, invalid or template-placeholder mint (rejected before payment; not charged)"},"402":{"description":"Payment Required"}}}},"/api/signals/risk/{mint}":{"get":{"operationId":"getRiskFlags","summary":"Risk flags for a Solana meme coin mint","description":"Read-only on-chain checks: curve-skip PumpSwap pool, unlocked LP, pump.fun Mayhem mode, bundle handoff. Path form. Example: /api/signals/risk/DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump (query form /api/signals/risk?mint=... is equivalent). Free real sample (no payment): /api/signals/risk/sample.","externalDocs":{"description":"Free sample response","url":"https://trench-lessons.vercel.app/api/signals/risk/sample"},"tags":["Signals"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"parameters":[{"name":"mint","in":"path","required":true,"description":"Solana SPL token mint address","schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"example":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump"}],"responses":{"200":{"description":"Risk report","content":{"application/json":{"schema":{"type":"object","properties":{"mint":{"type":"string"},"mocked":{"type":"boolean"},"riskScore":{"type":"integer","minimum":0,"maximum":100},"scoredFlags":{"type":"integer"},"flags":{"type":"object","properties":{"curveSkipPool":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]},"unlockedLp":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]},"mayhemMode":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]},"bundleHandoff":{"type":"object","properties":{"value":{"type":["boolean","null"]},"status":{"type":"string","enum":["ok","unknown","n/a"]},"confidence":{"type":"string","enum":["high","medium","low"]},"detail":{"type":"object"}},"required":["value","status"]}}},"asOf":{"type":"string","format":"date-time"},"disclaimer":{"type":"string"}},"required":["mint","flags","riskScore"]},"example":{"mint":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump","mocked":false,"network":"solana-mainnet (read-only RPC)","flags":{"curveSkipPool":{"value":false,"status":"ok","confidence":"high","detail":{"pool":"Fk5MuGv2H3Qpt6AxdhS2KHgDL2os424BvfEoqFNTdv9Y","lookup":"canonical-pda"}},"unlockedLp":{"value":false,"status":"ok","confidence":"high","detail":{"note":"remaining LP is dust (effectively all burned)"}},"mayhemMode":{"value":false,"status":"ok","confidence":"high","detail":{"source":"bonding curve","curveComplete":true}},"bundleHandoff":{"value":false,"status":"ok","confidence":"low","detail":{"earlyNonDevBuyers":4,"walletsThatHandedOff":0}}},"riskScore":0,"scoredFlags":4,"elapsedMs":534,"asOf":"2026-10-15T23:30:00.000Z","disclaimer":"Heuristic, read-only on-chain checks. Can be wrong. Not financial advice. Data as-is, no warranty. Terms: /terms"}}}},"400":{"description":"Invalid mint (rejected before payment; not charged)"},"402":{"description":"Payment Required"}}}},"/api/signals/verdict":{"get":{"operationId":"getVerdictByQuery","summary":"Go/caution/avoid verdict for a Solana meme coin mint","description":"Cheap one-word verdict (go/caution/avoid) plus short reasons, from the same read-only checks as /api/signals/risk. Example: /api/signals/verdict?mint=DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump (path form /api/signals/verdict/{mint} is equivalent).","tags":["Signals"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{}}]},"parameters":[{"name":"mint","in":"query","required":true,"description":"Solana SPL token mint address","schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"example":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump"}],"responses":{"200":{"description":"Verdict","content":{"application/json":{"schema":{"type":"object","properties":{"mint":{"type":"string"},"verdict":{"enum":["go","caution","avoid"]},"riskScore":{"type":"integer"},"reasons":{"type":"array","items":{"type":"string"}},"fullReport":{"type":"string"}},"required":["mint","verdict","reasons"]},"example":{"mint":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump","verdict":"go","riskScore":0,"scoredFlags":4,"reasons":["no risk flags tripped across 4 checks"],"fullReport":"https://trench-lessons.vercel.app/api/signals/risk?mint=DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump","walletHint":"Pay with any funded Solana wallet holding a little USDC (x402 'exact' scheme).","asOf":"2026-10-30T23:30:00.000Z","disclaimer":"Heuristic verdict from read-only on-chain checks. Can be wrong. Not financial advice. Terms: /terms"}}}},"400":{"description":"Invalid or template-placeholder mint with payment attached (rejected before settlement; not charged)"},"402":{"description":"Payment Required"}}}},"/api/signals/verdict/{mint}":{"get":{"operationId":"getVerdict","summary":"Go/caution/avoid verdict for a Solana meme coin mint (path form)","tags":["Signals"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{}}]},"parameters":[{"name":"mint","in":"path","required":true,"description":"Solana SPL token mint address","schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"example":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump"}],"responses":{"200":{"description":"Verdict","content":{"application/json":{"schema":{"type":"object","properties":{"mint":{"type":"string"},"verdict":{"enum":["go","caution","avoid"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["mint","verdict","reasons"]},"example":{"mint":"DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump","verdict":"go","riskScore":0,"scoredFlags":4,"reasons":["no risk flags tripped across 4 checks"],"fullReport":"https://trench-lessons.vercel.app/api/signals/risk?mint=DFMt2FyLpB6ekPNAzVErLXgpSnJ9CRf1VnxBAkTLpump","walletHint":"Pay with any funded Solana wallet holding a little USDC (x402 'exact' scheme).","asOf":"2026-10-30T23:30:00.000Z","disclaimer":"Heuristic verdict from read-only on-chain checks. Can be wrong. Not financial advice. Terms: /terms"}}}},"400":{"description":"Invalid mint (rejected before payment; not charged)"},"402":{"description":"Payment Required"}}}},"/api/lessons/feed":{"get":{"operationId":"getLessonsFeed","summary":"Structured feed of daily Solana meme coin research findings","tags":["Lessons"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{}}]},"parameters":[{"name":"days","in":"query","required":false,"description":"Number of most recent daily lessons (1-30)","schema":{"type":"integer","minimum":1,"maximum":30,"default":7}}],"responses":{"200":{"description":"Feed","content":{"application/json":{"schema":{"type":"object","properties":{"generatedAt":{"type":"string","format":"date-time"},"count":{"type":"integer"},"disclaimer":{"type":"string"},"feed":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"sources":{"type":"array","items":{"type":"string"}},"findings":{"type":"array","items":{"type":"object","properties":{"topic":{"type":"string"},"evidence":{"type":"string"},"points":{"type":"array","items":{"type":"string"}}}}}}}}},"required":["feed"]},"example":{"generatedAt":"2026-10-15T23:00:00.000Z","count":1,"feed":[{"date":"2026-10-15","findings":[{"topic":"LaunchTape: 2,193 pump.fun graduations, first 10 minutes","evidence":"A","points":["Dump clock: among 894 coins with a big-holder dump, median was 2.2 min after graduation; ~48% inside the first 2 min."]}],"sources":["https://dev.to/launchtape/what-2193-pumpfun-graduations-did-in-their-first-10-minutes-and-what-it-means-for-your-bot-4f70"]}],"disclaimer":"Educational research only. Not financial advice. Data as-is, no warranty. Terms: /terms"}}}},"402":{"description":"Payment Required"}}}}}}