Muny API
Introduction
The Muny API lets you send $MUNY payouts to any Solana wallet — one at a time or thousands in a batch — with idempotent requests, signed webhooks and a clear payout lifecycle.
Authentication
API keys for servers, tokens for apps.
Your first payout
Send MUNY with one request.
Bulk payouts
CSV or API batches at scale.
Webhooks
Signed, retried event delivery.
Base URL#
All endpoints are versioned under /v1 and accept and return JSON. The same API powers the Muny dashboard and the Muny mobile apps, so anything you can do in the dashboard you can do over the API.
https://api.muny.io/v1The full machine-readable specification is available as OpenAPI 3, with an interactive API explorer.
Conventions#
- JSON fields are
snake_case; timestamps are ISO-8601 strings in UTC. - Token amounts are decimal strings in whole token units —
"500","12.5"— never JSON numbers. Floating-point numbers can't represent money exactly, so the API rejects them. - IDs are UUIDs. Lists are cursor-paginated:
{ object: "list", data, has_more, next_cursor }. Passcursorandlimit(max 100). - Every response carries an
x-request-idheader. Include it when you contact support.
Payout lifecycle#
A payout is your business intent — pay this amount to this address. It settles through an on-chain transaction. The two are tracked separately, and a payout only becomes confirmed once its Solana transaction is confirmed by the network.
| Status | Meaning |
|---|---|
draft | Created but not submitted. Submit it when ready. |
awaiting_approval | Above your organization's approval threshold. A Finance, Admin or Owner member must approve it. |
queued | Accepted and waiting to be sent. |
processing | A Solana transaction has been built and submitted; waiting for network confirmation. |
confirmed | The transaction reached confirmed commitment on Solana. Funds are with the recipient. |
failed | Settlement failed. See failure_code. Failed payouts can be retried safely. |
cancelled | Cancelled before it was sent. No funds moved. |
A signature is not a confirmation
Submitting a transaction returns a signature immediately, but that alone proves nothing — the transaction can still be dropped. Muny waits for network confirmation before moving a payout toconfirmed and sending payout.confirmed.SDK#
The official TypeScript SDK wraps every endpoint, generates idempotency keys for you and retries safely.
import { Muny } from "@muny/sdk";
const muny = new Muny({ apiKey: process.env.MUNY_API_KEY });
const payout = await muny.payouts.create({
recipient: "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
amount: "500",
reference: "affiliate-123",
});