Fast, private, and simultaneous Monero payments API
Accept Monero payments with simultaneous multi-recipient transactions and rapid successive payments - no more 20-minute waits!
Send Monero to 1-16 recipients in a single transaction. Perfect for marketplaces, affiliates, and revenue sharing.
Send up to 10 consecutive payments with minimal wait time. Worker wallets act like cartridges in a magazine.
Workers automatically refill from master wallet. Funds return to your sovereign wallet after X days.
Your keys, your crypto. We never hold your funds. View-only wallets for maximum security.
config/pricing.json and can be updated dynamically.
You'll need your Monero wallet's primary address and view key. We never ask for your spend key!
Using Monero GUI Wallet:
Using monero-wallet-cli:
viewkey
Request API access by contacting us (self-service coming soon):
Email: contact@monero-blaster.com
Matrix: @monero-blaster:matrix.org
Base URL structure: http://YOUR_HOST/tenants/YOUR_TENANT_ID/api/orchestrator/
0.001), NOT atomic units. Amounts are in XMR, not picoXMR.
curl -X POST "http://YOUR_HOST/tenants/YOUR_TENANT_ID/api/orchestrator/transfer" \
-H "Content-Type: application/json" \
-d '{
"address": "4xxxxx...",
"amount": 0.001
}'
curl -X POST "http://YOUR_HOST/tenants/YOUR_TENANT_ID/api/orchestrator/send_split" \
-H "Content-Type: application/json" \
-d '{
"destinations": [
{
"address": "4xxxxx...",
"amount_xmr": 0.001,
"label": "Seller payment",
"merchant_id": "seller_001"
},
{
"address": "4yyyyy...",
"amount_xmr": 0.0002,
"label": "Platform fee",
"merchant_id": "platform"
}
],
"priority": 1
}'
Monitor health and available funds:
curl "http://YOUR_HOST/tenants/YOUR_TENANT_ID/api/orchestrator/health"
Split each sale between seller (70%), platform (25%), and affiliate (5%) in one transaction.
Hold funds and release to multiple parties upon completion (seller + arbitrator fees).
Customer buys from 3 different stores - one payment, three recipients.
Pay multiple affiliates their commissions in a single transaction.
Need help? We're here for you:
YOUR_HOST and YOUR_TENANT_ID with your actual values.
Amounts are always in XMR as a float (e.g. 0.001 = 1 mXMR). Never use atomic units (picoXMR).
import requests
HOST = "http://YOUR_HOST"
TENANT_ID = "YOUR_TENANT_ID"
BASE = f"{HOST}/tenants/{TENANT_ID}/api/orchestrator"
response = requests.post(f"{BASE}/transfer", json={
"address": "4xxxRecipientAddress...",
"amount": 0.001 # XMR float, NOT atomic units
})
result = response.json()
if result["success"]:
print(f"TX Hash: {result['tx_hash']}")
print(f"Fee: {result['fee']} XMR")
else:
print(f"Error [{result.get('error_code')}]: {result.get('error')}")
# Retry-after (if workers locked):
retry = result.get('retry_in_seconds')
if retry:
print(f"Retry in: {retry}s")
import requests
HOST = "http://YOUR_HOST"
TENANT_ID = "YOUR_TENANT_ID"
BASE = f"{HOST}/tenants/{TENANT_ID}/api/orchestrator"
response = requests.post(f"{BASE}/send_split", json={
"destinations": [
{
"address": "4SellerAddress...",
"amount_xmr": 0.001, # XMR float
"label": "Seller payment",
"merchant_id": "seller_001"
},
{
"address": "4PlatformAddress...",
"amount_xmr": 0.0002,
"label": "Platform fee",
"merchant_id": "platform"
},
{
"address": "4AffiliateAddress...",
"amount_xmr": 0.00005,
"label": "Affiliate commission",
"merchant_id": "affiliate_42"
}
],
"priority": 1 # 1=default, 2=elevated, 3=priority
})
result = response.json()
if result["success"]:
print(f"Split TX sent to {result['destinations_count']} recipients")
print(f"TX Hash: {result['tx_hash']}")
print(f"Fee: {result['fee']} XMR")
print(f"Sent from: {'master' if result['worker_id'] == 0 else f'worker {result[\"worker_id\"]}'}")
else:
print(f"Error: {result.get('error')} - {result.get('message')}")
import requests
HOST = "http://YOUR_HOST"
TENANT_ID = "YOUR_TENANT_ID"
BASE = f"{HOST}/tenants/{TENANT_ID}/api/orchestrator"
status = requests.get(f"{BASE}/health").json()
svc = status.get("service", {})
print(f"Available: {svc.get('available')}")
print(f"Master address: {svc.get('master_address')}")
print(f"Workers ready: {svc.get('available_workers')}")
print(f"Max per TX: {svc.get('max_amount_per_tx')} XMR")
if not svc.get('available'):
print(f"Retry in: {svc.get('retry_in_seconds')}s")
const HOST = "http://YOUR_HOST";
const TENANT_ID = "YOUR_TENANT_ID";
const BASE = `${HOST}/tenants/${TENANT_ID}/api/orchestrator`;
const response = await fetch(`${BASE}/send_split`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
destinations: [
{ address: "4SellerAddr...", amount_xmr: 0.001, label: "Seller", merchant_id: "seller_001" },
{ address: "4PlatformAddr...", amount_xmr: 0.0002, label: "Fee", merchant_id: "platform" }
],
priority: 1
})
});
const result = await response.json();
if (result.success) {
console.log(`TX sent: ${result.tx_hash} | Fee: ${result.fee} XMR`);
} else {
console.error(`Failed: ${result.error}`, result);
}
$host = "http://YOUR_HOST";
$tenant_id = "YOUR_TENANT_ID";
$base = "$host/tenants/$tenant_id/api/orchestrator";
$ch = curl_init("$base/send_split");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'destinations' => [
[
'address' => '4SellerAddress...',
'amount_xmr' => 0.001, // XMR float, NOT atomic units
'label' => 'Seller payment',
'merchant_id' => 'seller_001'
],
[
'address' => '4PlatformAddress...',
'amount_xmr' => 0.0002,
'label' => 'Platform fee',
'merchant_id' => 'platform'
]
]
]));
$response = curl_exec($ch);
$result = json_decode($response);
if ($result->success) {
echo "✅ TX: " . $result->tx_hash;
} else {
echo "❌ Error: " . $result->error;
}