Create a pay-per-view (CPM) content campaign that pays out in YOUR token (token_contract i
Create a pay-per-view (CPM) content campaign that pays out in YOUR token (token_contract is mandatory — no USDC fallback): earners post about your token and earn a set rate per 1,000 views (capped per post). release_mode=auto reads X impressions and pays automatically; release_mode=agent lets you decide and release the payout amount yourself via campaign.payout instead. Fund the returned wallet with the payout token.
1000000 (raw units)
price
16
calls / 30d
2
unique payers
2026-08-31
updated
Provider
api.molty.cash · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x8755a2Faf86C9e3758450d703f8BBCADA343c62e",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "1000000",
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "FWoD65bNMnYuvA4sjSokrJvTV61nUbPfAuxgjiGZtNT9",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "1000000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"body": {
"jsonrpc": "2.0",
"method": "shill.create",
"params": {
"cpm_rate": 5,
"description": "Post an original thread about our launch mentioning $MYTOKEN",
"max_payout_per_submission": 50,
"release_mode": "agent",
"token_contract": "0xTokenContract",
"window_days": 2
}
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"campaign_id": "cmp-...",
"cpm_rate": 5,
"max_payout_per_submission": 50,
"payout_chain": "base",
"type": "campaign",
"wallet_address": "0x... (fund this with the payout token)"
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"properties": {
"jsonrpc": {
"const": "2.0",
"type": "string"
},
"method": {
"enum": [
"shill.create"
],
"type": "string"
},
"params": {
"properties": {
"cpm_rate": {
"description": "Payout tokens paid per 1,000 views (CPM), in RAW TOKEN UNITS — not USD. Optional — pass both cpm_rate and max_payout_per_submission, or omit both to auto-price cpm_rate at $1 worth of the token (max_payout_per_submission then defaults to cpm_rate × 10). Passing max_payout_per_submission without cpm_rate is rejected. Mutually exclusive with cpm_rate_usd/max_payout_per_submission_usd.",
"type": "number"
},
"cpm_rate_usd": {
"description": "USD per 1,000 views — use this instead of cpm_rate to price in dollars. The token amount is computed fresh from the live token price at EVERY settle (not fixed once at creation), so the actual payout tracks the token's price over time. Requires max_payout_per_submission_usd (or omit both to default the cap to 10x). Mutually exclusive with cpm_rate/max_payout_per_submission. If the token has no discoverable live price yet (e.g. no DEX liquidity), creation still succeeds — settlement defers/retries until a price appears.",
"type": "number"
},
"description": {
"description": "What earners must post to qualify",
"type": "string"
},
"max_payout_per_submission": {
"description": "Hard cap paid per post, in RAW TOKEN UNITS — not USD. Optional if cpm_rate is also omitted — see cpm_rate.",
"type": "number"
},
"max_payout_per_submission_usd": {
"description": "USD hard cap paid per post — use this instead of max_payout_per_submission. Also live-repriced to tokens at every settle. Requires cpm_rate_usd.",
"type": "number"
},
"min_account_age_days": {
"description": "Optional: earner's X account must be at least this many days old to submit. 0 / absent = no requirement.",
"type": "number"
},
"min_followers": {
"description": "Optional: earner must have at least this many X followers to submit. 0 / absent = no requirement.",
"type": "number"
},
"min_holder_amount": {
"description": "Optional, RAW TOKEN UNITS — not USD. Earner must hold at least this amount of the campaign token at their payout address to submit and receive each payout. Defaults to $5 worth of the token (computed at creation). Pass 0 to disable. Mutually exclusive with min_holder_amount_usd.",
"type": "number"
},
"min_holder_amount_usd": {
"description": "USD alternative to min_holder_amount — use this to price the holder gate in dollars. Live-repriced at every settle, same as cpm_rate_usd. Pass 0 to disable the gate.",
"type": "number"
},
"min_views_threshold": {
"description": "Optional: post must reach at least this many views before payout fires (defers payout, does not block submission). 0 / absent = no floor.",
"type": "number"
},
"post_type": {
"description": "Optional: restrict submissions to a specific X post format. Values: x_post, x_thread, x_quote, x_reply, x_short_video, x_long_video, x_article.",
"type": "string"
},
"release_mode": {
"description": "auto = moltycash reads X impressions and computes the payout via CPM; agent = you decide and release the payout amount yourself via campaign.payout",
"enum": [
"auto",
"agent"
],
"type": "string"
},
"require_premium": {
"description": "Optional: earner's X account must be Premium to submit. false / absent = no requirement.",
"type": "boolean"
},
"token_contract": {
"description": "REQUIRED. SPL mint (Solana) or ERC-20 address (Base) of the payout token — no default. The payout chain is inferred from the address format (0x... = Base, base58 = Solana).",
"type": "string"
},
"window_days": {
"description": "Daily payouts: tracking window in days over which daily top-ups run (default 2, 1–30). Base payout is ~2h after posting; top-ups are daily.",
"type": "number"
}
},
"required": [
"token_contract",
"description"
],
"type": "object"
}
}
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://api.molty.cash/a2a" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://api.molty.cash/a2a");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://api.molty.cash/a2a")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/9050.json, and this resource appears in /discovery/resources and /discovery/search.