Music oracle · v1 · powered by Suede · Agent Cash partner

The music oracle for agents.

When an AI agent needs verified musical truth — a chord, a key, a song's structure, a practice plan tuned to a player — it queries Strumly and pays per call in USDC on Base via x402, or in USD via Stripe. One HTTP request. No accounts, no API keys, no rate-limit tiers. Powered by Suede Labs AI.

Strumly is canonical and cited. Every answer is sourced from verified theory or attested song data — chord notes, diatonic relationships, transpositions, song progressions. Every paid query is audited and travels the agentic-commerce rail — built so musicians earn when AI uses music data, and so likeness and authorship stay with the artist.

USDC receiver (Base)
0xb5a05466712fd5bcdf2883f43cC6B1799428032d
Same wallet as app.suedeai.ai's x402 endpoints. See the suede-x402-acp reference for the family.

x402 direct

$0.99–$4.99 per call · USDC on Base · one-shot · settled via PayAI facilitator · no credits.

Stripe Machine x402

$0.99–$4.99 per call · USDC sent to Stripe-issued Base deposit address · one-shot · Stripe settles us in fiat.

Stripe per-call card

$0.99–$4.99 per call · Stripe Checkout · card · one-shot · session valid 1h, locked to the product.

Stripe day pass

$9.99 · pre-purchased credit · 24h unlimited across every paid endpoint.

Free tier

5 calls / day / IP · no payment proof · resets at UTC midnight.

Try it cold

Five free queries a day from any IP, no signup. Drop this into a terminal:

bash
curl -X POST https://strumly.suedeai.ai/api/v1/ask \
  -H 'Content-Type: application/json' \
  -d '{"question":"What is a chromatic warmup I can do in 60 seconds?"}'

Onboard via Agent Cash

partner page →

One CLI call provisions an Agent Cash wallet, routes a credit into your agent, and saves Suede to its persistent context. Three commands, three minutes.

Suede

AI-powered music and video generation, payable with USDC on Base via the x402 protocol.

Run in your terminal

Onboard into AgentCash, make one live call against this API, then save it into your agent's persistent context.

Step 1

Onboard AgentCash

Sets up AgentCash and routes you through credits if needed.

$npx agentcash onboard
Step 2

Try the API

Discovers the origin and walks the first live call path.

$npx agentcash try https://app.suedeai.ai
Step 3

Add for reuse

Keeps Suede available in your agent's persistent context.

$npx agentcash add https://app.suedeai.ai
Powered byAgentCash
Docs

Listed on: Virtuals ACP (Johnny Suede #749), Stripe Agentic Commerce. Every paid endpoint here carries an x-payment-info block in /openapi.json, so Agent Cash and other agent runtimes can parse + route through us. Validate any endpoint with npx -y @agentcash/discovery@latest discover <url>.

x402 — agent path

AI agents call the endpoint, receive an HTTP 402 with USDC payment metadata, settle on-chain, and retry with proof. The whole loop usually fits inside one agent step.

x402 v1 live

Spec-compliant per x402-specification-v1: the 402 body emits x402Version: 1 and an accepts array with scheme: "exact", network: "base", USDC asset, and atomic maxAmountRequired. Settlement runs against PayAI's facilitator by default; override via X402_FACILITATOR_URL if you self-host.

bash
# AI agent path — one-shot per-call via x402 (USDC on Base)
# 1) Hit the endpoint cold
curl -X POST https://strumly.suedeai.ai/api/v1/ask \
  -H 'Content-Type: application/json' \
  -d '{"question":"What is a clean way to mute the low E with my thumb?"}'

# Response: HTTP 402 with spec-compliant accepts[] (x402 v1)
# {
#   "x402Version": 1,
#   "error": "...",
#   "accepts": [{
#     "scheme": "exact",
#     "network": "base",
#     "maxAmountRequired": "990000",  // atomic USDC ($0.99)
#     "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
#     "payTo": "0xb5a05466712fd5bcdf2883f43cC6B1799428032d",
#     ...
#   }],
#   "rails": { x402_direct: {...}, stripe_per_call: {...}, stripe_day_pass: {...}, free_tier: {...} }
# }

# 2) Pay 0.99 USDC on Base to payTo via your x402 client.
#    Most agent runtimes have an x402 middleware that does this automatically.
#    See: https://x402.org/clients

# 3) Retry with proof in X-Payment header (base64 PaymentPayload)
curl -X POST https://strumly.suedeai.ai/api/v1/ask \
  -H 'Content-Type: application/json' \
  -H 'X-Payment: <base64 of x402 v1 PaymentPayload>' \
  -d '{"question":"What is a clean way to mute the low E with my thumb?"}'

# Response: 200 streaming text — the coach's answer.
# Settled tx + payer surfaced in X-Strumly-X402-Tx and X-Strumly-X402-Payer headers.
javascript
// JS / Vercel AI SDK client
import { generateText } from 'ai';

const res = await fetch('https://strumly.suedeai.ai/api/v1/ask', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    // From your x402 wallet / agent runtime:
    'X-Payment': await wallet.pay({ amount: '0.99', asset: 'USDC', network: 'base' }),
  },
  body: JSON.stringify({
    question: "Walk me through the b5 in an E blues scale.",
    model: 'anthropic/claude-haiku-4.5',  // optional, defaults to Haiku
  }),
});

// Streamed plain text (text/event-stream-compatible)
const reader = res.body!.getReader();
const decoder = new TextDecoder();
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  process.stdout.write(decoder.decode(value));
}
python
# Python — works the same. Use any x402 client to handle the 402 → pay → retry loop.
import requests

# With your x402 client of choice (pays 0.99 USDC on base per call):
from x402_client import X402Session   # pip install x402-client (illustrative)

s = X402Session(wallet="0xYour...")
r = s.post(
    "https://strumly.suedeai.ai/api/v1/ask",
    json={"question": "Explain why Wonderwall uses Em7 instead of Em."},
    stream=True,
)
for chunk in r.iter_content(chunk_size=None, decode_unicode=True):
    print(chunk, end="", flush=True)

Stripe — two modes

Prefer a card? The Stripe rail has two Checkout flavors: per-call (one-shot, $0.99–$4.99 depending on product, 1h valid) or 24h day pass ($9.99, unlimited calls across every paid endpoint). Pay once, then pass ?stripe_session=cs_live_* on the call.

bash
# Stripe rail — two modes.

# == Mode A: per-call (one-shot, $X.XX) ==
# 1) GET a per-call Checkout Session for the specific product
open 'https://strumly.suedeai.ai/api/v1/payment/stripe-session?mode=per_call&product=coach-query'
# Pay $0.99 with card — Stripe redirects back with ?stripe_session=cs_live_*
# 2) Use that session for exactly ONE call to /api/v1/ask within 1h
curl -X POST 'https://strumly.suedeai.ai/api/v1/ask?stripe_session=cs_live_PERCALL' \
  -H 'Content-Type: application/json' \
  -d '{"question":"How do I get a clean Em chord?"}'

# == Mode B: 24h day pass (pre-purchased credit, $9.99) ==
# 1) GET the day-pass Checkout Session
open 'https://strumly.suedeai.ai/api/v1/payment/stripe-session?mode=day_pass'
# Pay $9.99 with card — Stripe redirects back with ?stripe_session=cs_live_*
# 2) Use that session for UNLIMITED calls on ANY paid endpoint for 24h
curl -X POST 'https://strumly.suedeai.ai/api/v1/ask?stripe_session=cs_live_DAYPASS' ...
curl -X POST 'https://strumly.suedeai.ai/api/v1/practice-plan?stripe_session=cs_live_DAYPASS' ...
curl -X POST 'https://strumly.suedeai.ai/api/v1/analyze-song?stripe_session=cs_live_DAYPASS' ...

Response shape

json
// HTTP 402 — payment required
//
// Headers:
//   PAYMENT-REQUIRED: <base64 of body.payment>   (Suede x402-acp family compat)
//   X-Payment-Required: usdc:0.99 on eip155:8453 to 0xb5a0...
//
// Body (example: /api/v1/ask, the $0.99 coach query):
{
  // ---- x402 v1 spec-compliant fields (clients should prefer these) ----
  "x402Version": 1,
  "error": "Payment required for Strumly coach query. Three rails — x402, Stripe per-call, Stripe day pass.",
  "accepts": [
    {
      "scheme": "exact",
      "network": "base",                                   // x402-v1 network identifier
      "maxAmountRequired": "990000",                       // atomic USDC ($0.99 = 990_000)
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",  // USDC on Base
      "payTo": "0xb5a05466712fd5bcdf2883f43cC6B1799428032d",
      "resource": "https://strumly.suedeai.ai/api/v1/ask",
      "description": "Strumly coach query (Strumly)",
      "mimeType": "application/json",
      "maxTimeoutSeconds": 60,
      "extra": { "name": "USDC", "version": "2" }
    }
  ],

  // ---- behavior catalog: every rail explicitly labeled ----
  "rails": {
    "x402_direct":     { "kind": "one_shot_per_call",     "amount_usd": "$0.99", "amount_usdc": "0.99" },
    "stripe_per_call": { "kind": "one_shot_per_call",     "amount_usd": "$0.99", "checkout_url": "...?mode=per_call&product=coach-query" },
    "stripe_day_pass": { "kind": "pre_purchased_credit",  "amount_usd": "$9.99", "ttl_hours": 24, "checkout_url": "...?mode=day_pass" },
    "free_tier":       { "kind": "free",                   "limit_per_day_per_ip": 5 }
  },

  // ---- legacy fields, kept for Suede x402-acp compat ----
  "version": "1",
  "product_id": "coach-query",
  "payment": { "asset": "USDC", "network": "eip155:8453", "amount": "0.99", ... },
  "stripe":  { "checkout_url": "...?mode=day_pass", "amount_usd": "$9.99", "per_call_usd": "$0.99", ... },
  "resource": "https://strumly.suedeai.ai/api/v1/ask"
}

// HTTP 200 — paid, streaming response (text/event-stream-compatible plain text)
// Headers include:
//   X-Strumly-Payment-Method: x402 | stripe | free-tier
//   X-Strumly-Model: anthropic/claude-haiku-4.5
//   X-Strumly-X402-Tx: 0x...               (settled tx hash, x402 only)
//   X-Strumly-X402-Payer: 0x...            (payer address, x402 only)

What's exposed

  • Coach text — guitar Q&A, technique advice, drill design, scale and chord theory. Plain prose response.
  • Model choice — defaults to Claude Haiku 4.5 via OpenRouter; pass any OpenRouter model id in the body to override.
  • No state — each query is independent. No session memory across calls. Use the consumer coach for persistent sessions.
  • No PII collected — questions aren't logged with any identity. Aggregate counters only, for billing.