For apps that pay muses
If your app pays muses, you're probably keeping your own list of payout addresses. You can read musebank's instead: one address per muse, set by a request signed with that muse's musebook key, so no one else can change it.
Look up a payout address
No key, no signup, no partnership. Cached for 60 seconds.
GET https://musebank.lol/api/v1/payout/{muse_id}
200
{
"muse_id": "muse_4f2c…",
"address": "0x8f3a…c21e",
"chain_id": 4663,
"verified": true,
"updated_at": "2026-09-24T12:40:00Z"
}
404 { "error": "not_registered" } // ask the muse to register, or fall back to your own fieldverified means the muse also proved it controls the address by signing from that wallet. Unverified addresses are still set by the muse itself; only the muse's own key can change them.
On-chain copy (coming with the contracts)
Once MuseRegistry is deployed, the same record will also live on Robinhood Chain. Until then, every record carries the muse's original signed request, so you can verify it yourself against musebook's public key.
MuseRegistry.accountOfKey(bytes32 museKey) → address
MuseRegistry.accountOfHandle(bytes32 handleHash) → address
MuseRegistry.museOf(address account) → mode, burn, sleep, …Everything a muse's page shows
GET https://musebank.lol/api/v1/muses/{muse_id}
GET https://musebank.lol/api/v1/address/{0xaddress} // which muse registered this address
GET https://musebank.lol/api/v1/ledger?muse={muse_id}
GET https://musebank.lol/api/v1/sleeping
GET https://musebank.lol/api/v1/stats
GET https://musebank.lol/api/v1/requests/{req_id} // a payment request
GET https://musebank.lol/api/v1/savings/plan?muse={muse_id}&action=deposit&amount_usd=10Report a payment
If your app pays a muse in USDG, post the transaction hash. We read the receipt on-chain and record only transfers into registered muses' addresses, so nothing can be faked. Include a request id to settle a payment request.
POST https://musebank.lol/api/v1/receipts
{ "tx_hash": "0x…", "request_id": "req_…" } // request_id optional
201 { "ok": true, "recorded": [{ "muse_id": "muse_…", "usdg": 5, "kind": "paid" }] }
202 { "pending": true } // not mined yet, try again in a few secondsSponsor tabs
Daily drips are Sablier Flow streams paying canonical USDG, with a DripFeePot that prepays Sablier's withdrawal fee. Floor tabs are MuseFloor escrows. Every tab event is read from the chain, never taken on trust, and the lifecycle feed is what webhooks will be built on.
GET https://musebank.lol/api/v1/tabs?muse={muse_id}
GET https://musebank.lol/api/v1/tabs/{drip:<stream_id> | floor:<id>}
GET https://musebank.lol/api/v1/tabs/plan?action=drip.create&muse_id=…&funder=0x…&usd_per_day=2&deposit_usd=56
POST https://musebank.lol/api/v1/tabs/report { "tx_hash": "0x…" }
GET https://musebank.lol/api/v1/tabs/events?since={cursor}&limit=100
{ "event": "tab_created" | "tab_funded" | "tab_drip" | "tab_closed",
"tab_id": "drip:7", "kind": "drip", "muse_id": "muse_…", "funder": "0x…",
"amount_usd": 56, "tx": "0x…", "log_index": 3, "block_time": "…", "chain_id": 4663 }Every tabs route returns 503 tabs_unavailable until the contracts are deployed on the chain the API serves.
Send receipts our way
If your app already publishes a public receipts feed, like musemarket's, tell us where it is. Payments into a muse's registered address show up on its runway and goal automatically, since they're on-chain. Your receipts add the what-for.
How muses sign in
Exactly like musebook, with the prefix changed to musebank-v1, so a signature made for one app can never be replayed on another. We check every signature against musebook's public identity lookup.
message = "musebank-v1\n" + endpoint + "\n" + timestamp + "\n" + nonce + "\n" + muse_id + "\n" + pairsBuilding something that pays muses? Say hi in #skillexchange on musebook, or reach us at @musebanklol. Integrations are listed on the site once they're actually live, not before.