slop
✦ slop studio api

Content-as-a-service, on receipts

The engine behind our feed, as an API: text packs, stat cards, and hype clips for any RHC memecoin, built from live chain data — price, holders, volume, chart — that can't be faked. Every render is paid: pay as you go with card checkout (from $0.50; the $3 spotlight clip is the hero), or prepaid API credits for volume. Humans get the same thing at /studio.

Quickstart — $3 clip via card checkout

no account · Stripe

One checkout, zero setup: bind a render to an order, send the buyer to Stripe, and the paid render starts itself server-side (webhook-enqueue). Prices come from the catalog — text-pack $0.50 · cards $1 · spotlight-clip $3 · board-clip $5.

# 1) pick a template (ids, prices, options — never hardcode)
curl https://studio-api.tokenslop.fun/v1/templates
# → templates[] with priceUsd/priceCredits + payments: {card: true, chainPay: false}

# 2) open a card checkout for a single render — no account, no key
curl -X POST https://studio-api.tokenslop.fun/v1/checkout \
  -H 'content-type: application/json' \
  -d '{"kind":"render","template":"spotlight-clip","chain":"rhc",
       "tokenAddress":"0xYOUR_TOKEN",
       "links":{"website":"https://yourtoken.xyz","x":"@yourtoken"}}'
# → 201 { "orderId":"ord_…", "checkoutUrl":"https://checkout.stripe.com/…",
#         "priceUsd": 3.00, "expiresAt": … }   statement shows SLOPSTUDIO

# 3) buyer pays at checkoutUrl → webhook enqueues the render AUTOMATICALLY
#    (nobody calls /render on this path — close the tab, still get media)
curl https://studio-api.tokenslop.fun/v1/checkout/ord_…
# → status created → paid → consumed + "jobId":"job_…"

# 4) poll the job every 2–5s until done | failed
curl https://studio-api.tokenslop.fun/v1/jobs/job_…
# → result.mediaUrl (presigned — expires, download promptly)
#   + result.caption (ready-to-post) + result.snapshot (the data used)

A failed paid render resets its order to paid — one free retry via POST /render {payment:{orderId}}. Errors are stable machine codes (payment_required, order_unpaid, order_consumed, token_not_eligible…) — switch on error.code, show error.message to humans.

API keys — prepaid credits

Bearer sk_live_…

For agents and volume: a key is just a funding bucket (1 credit = $0.01). Renders debit atomically and failed jobs auto-refund. Top up with credit packs through the same card checkout — the volume bonus is baked into the pack sizes.

# self-serve key — no KYC, no account; secret is shown ONCE
curl -X POST https://studio-api.tokenslop.fun/v1/keys -H 'content-type: application/json' \
  -d '{"label":"my-integration"}'
# → { "keyId": "key_…", "secret": "sk_live_…", "credits": 0 }

# fund it with a credit pack — card checkout, credits land on webhook
# packs: $15 → 1,650cr · $40 → 4,600cr · $100 → 12,500cr (1 credit = $0.01)
curl -X POST https://studio-api.tokenslop.fun/v1/checkout \
  -H 'authorization: Bearer sk_live_…' -H 'content-type: application/json' \
  -d '{"kind":"credits","packId":"pack-15"}'
# → pay checkoutUrl once → credits appear on the key

# then every render is ONE call — credits debited, auto-refunded if it fails
curl -X POST https://studio-api.tokenslop.fun/v1/render \
  -H 'authorization: Bearer sk_live_…' -H 'content-type: application/json' \
  -d '{"template":"text-pack","chain":"rhc","tokenAddress":"0xYOUR_TOKEN"}'
# (bare /render with no key and no paid order → 402 payment_required)

curl https://studio-api.tokenslop.fun/v1/keys/me -H 'authorization: Bearer sk_live_…'   # balance

Who can be promoted

screening

Chain-native meme/community tokens only. Equity-category (tokenized stocks), security-like, risk-flagged, and unbucketable tokens are refused at checkout AND at render intake with 403 token_not_eligible— deny-by-default, no override. Every retail render also carries a small non-removable disclosure line ("paid promotional content · made with Slop Studio", or "sponsored by the $SYM team" when the buyer self-identifies via sponsored: true) plus the "Live $SYM stats on tokenslop.fun" outro. Enterprise-tier keys drop the Slop brand marks; the disclosure line stays. Honest labels are the product.

MCP — agents render natively

slop-mcp

Drop the studio into any MCP client. Tools: list_content_templates, create_content, get_content_job, get_content_checkout— descriptions teach the whole flow, so agents need zero docs. The toolset is capability-shaped: payment rails come from the catalog's paymentsobject, so tools for rails this deployment doesn't run simply don't exist.

{
  "mcpServers": {
    "slop": {
      "command": "npx",
      "args": ["-y", "slop-mcp"],
      "env": {
        "STUDIO_API_URL": "https://studio-api.tokenslop.fun/v1",
        "STUDIO_API_KEY": "sk_live_…   // optional: prepaid credits (agents render solo)"
      }
    }
  }
}

Two ways an agent gets media

Credits make the agent fully autonomous; without them it hands its human a Stripe link and picks up the job when the payment lands:

// with credits (STUDIO_API_KEY): the agent renders end to end on its own
list_content_templates()                       // live catalog + prices + rails
create_content({ template: "text-pack", chain: "rhc", token_address: "0x…",
                 links: { x: "@yourtoken" } })
// → renders, polls the job, returns mediaUrl + a ready-to-post caption

// without credits: the agent gets a card link for its HUMAN to pay
get_content_checkout({ template: "spotlight-clip", chain: "rhc",
                       token_address: "0x…" })
// → { orderId, checkoutUrl }  — hand checkoutUrl to the human
get_content_checkout({ order_id: "ord_…" })    // poll: paid → consumed + jobId
get_content_job({ job_id: "job_…" })           // → mediaUrl + caption
// payment settles server-side via Stripe webhook — the agent never touches money

For launchpads — put Promote in your UI

B2B

The Promote button on our token pages is this same public API — there are no private endpoints. Integrate it in yours:

  • Metered credits: one API key, per-render debits, volume packs — your users click, you get a clip with your token's live stats in seconds.
  • Honest data as a feature: renders show real price/holders/volume from chain — content your community can verify, not promises.
  • White-label later: branding is already a props layer server-side — partner wordmark and colors are a config change on the roadmap, not a rebuild (the disclosure line survives white-labeling by design).
  • Start now, self-serve: POST /keys (add a contact for outage notices), fund with a pack, ship. Volume deals: DM @tokenslopfun.
  • Track your usage: paste your sk_live_… key into the partner dashboard → for a read-only view of your credit balance, burn, renders, and terms (tier, wholesale rate, fees). Key stays in your browser.

Embeddable widget — one script tag, no code

B2B · live in an afternoon

Don't want to call the API yourself? Drop slop-widget.js on any token page and get a branded 🎬 Promote button that opens the full Studio flow in a modal, pre-filled with your token — checkout and download happen inside the frame. Nothing to build or host.

<!-- one tag on your token page → a "🎬 Promote" button + Studio modal -->
<script src="https://studio-test.tokenslop.fun/slop-widget.js"
        data-token="0xYOUR_TOKEN_ADDRESS"
        data-chain="rhc"></script>

It also exposes SlopStudio.mount({ el, token, chain, partner }) for SPAs, and posts back over postMessage to size the modal. See it live, grab the snippet, and read the 3-line integration on the widget demo →

The moat is the receipts:every render is built from live chain data at render time and says so. Media URLs are presigned and expire — download, don't hotlink. Not financial advice. It's slop.