Monero Blaster : Fast semi-custodial simultaneous Monero payments API with auto-sweep
API v0.9.1 · Doc updated 2026-04-29 · GET /version
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
Self-service tenant creation is available at /admin. Your tenant ID and API key are shown on the admin dashboard.
Email: (coming soon)
Matrix: (coming soon)
Get your Master wallet address — send XMR to this address to fund your tenant:
curl "https://blaster.libremonero.com/tenants/YOUR_TENANT_ID/api/orchestrator/master/balance"
Response includes address (the XMR address to fund) and current balances:
{
"success": true,
"address": "47CtgrDGM2tKmDZH...",
"balance": 0.0,
"unlocked_balance": 0.0
}
Base URL: https://blaster.libremonero.com/tenants/YOUR_TENANT_ID/api/orchestrator/
0.001), NOT atomic units.X-Blaster-Key: YOUR_API_KEY (from Admin → Settings).
curl -X POST "https://blaster.libremonero.com/tenants/YOUR_TENANT_ID/api/orchestrator/transfer" \
-H "Content-Type: application/json" \
-H "X-Blaster-Key: YOUR_API_KEY" \
-d '{
"address": "4xxxxx...",
"amount": 0.001
}'
curl -X POST "https://blaster.libremonero.com/tenants/YOUR_TENANT_ID/api/orchestrator/send_split" \
-H "Content-Type: application/json" \
-H "X-Blaster-Key: YOUR_API_KEY" \
-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 availability and version — no auth required:
curl "https://blaster.libremonero.com/tenants/YOUR_TENANT_ID/api/orchestrator/health"
{
"status": "ok",
"version": "0.9.1",
"tenant_id": "YOUR_TENANT_ID",
"tenant_version": {"blaster_version_created": "0.9.1", "tenant_created_at": "2026-04-29"},
"service": {"state": "ready", "available": true, "available_workers": 2, "max_amount_per_tx": 0.05}
}
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_TENANT_ID with your actual tenant ID and
blaster_your_api_key with your real API key (Admin → Settings → API Key).
The host blaster.libremonero.com is already set.
Amounts are always in XMR as a float (e.g. 0.001 = 1 mXMR). Never use atomic units.X-Blaster-Key.
import requests
HOST = "https://blaster.libremonero.com"
TENANT_ID = "YOUR_TENANT_ID"
BASE = f"{HOST}/tenants/{TENANT_ID}/api/orchestrator"
# Service availability and version
health = requests.get(f"{BASE}/health").json()
svc = health["service"]
print(f"Version: {health['version']}")
print(f"Available: {svc['available']} ({svc['available_workers']}/{svc['total_workers']} workers)")
if not svc["available"]:
print(f"Retry in: {svc.get('retry_in_seconds')}s")
# Master wallet address — send XMR here to fund your tenant
master = requests.get(f"{BASE}/master/balance").json()
print(f"Master address: {master['address']}")
print(f"Balance: {master['balance']} XMR (unlocked: {master['unlocked_balance']} XMR)")
import requests
HOST = "https://blaster.libremonero.com"
TENANT_ID = "YOUR_TENANT_ID"
API_KEY = "blaster_your_api_key" # from Admin > Settings > API Key
BASE = f"{HOST}/tenants/{TENANT_ID}/api/orchestrator"
HEADERS = {"Content-Type": "application/json", "X-Blaster-Key": API_KEY}
response = requests.post(f"{BASE}/transfer", headers=HEADERS, 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 = result.get("retry_in_seconds")
if retry:
print(f"Retry in: {retry}s")
import requests
HOST = "https://blaster.libremonero.com"
TENANT_ID = "YOUR_TENANT_ID"
API_KEY = "blaster_your_api_key"
BASE = f"{HOST}/tenants/{TENANT_ID}/api/orchestrator"
HEADERS = {"Content-Type": "application/json", "X-Blaster-Key": API_KEY}
response = requests.post(f"{BASE}/send_split", headers=HEADERS, json={
"destinations": [
{"address": "4SellerAddress...", "amount_xmr": 0.001, "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: {result['destinations_count']} recipients | Hash: {result['tx_hash']} | Fee: {result['fee']} XMR")
else:
print(f"Error: {result.get('error')} — {result.get('message')}")
const HOST = "https://blaster.libremonero.com";
const TENANT_ID = "YOUR_TENANT_ID";
const BASE = `${HOST}/tenants/${TENANT_ID}/api/orchestrator`;
const health = await fetch(`${BASE}/health`).then(r => r.json());
console.log(`Version: ${health.version} | Available: ${health.service.available}`);
const master = await fetch(`${BASE}/master/balance`).then(r => r.json());
console.log(`Master address: ${master.address}`);
console.log(`Balance: ${master.balance} XMR (unlocked: ${master.unlocked_balance} XMR)`);
const HOST = "https://blaster.libremonero.com";
const TENANT_ID = "YOUR_TENANT_ID";
const API_KEY = "blaster_your_api_key"; // from Admin > Settings > API Key
const BASE = `${HOST}/tenants/${TENANT_ID}/api/orchestrator`;
const response = await fetch(`${BASE}/send_split`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Blaster-Key": API_KEY
},
body: JSON.stringify({
destinations: [
{ address: "4SellerAddr...", amount_xmr: 0.001, label: "Seller", merchant_id: "seller_001" },
{ address: "4PlatformAddr...", amount_xmr: 0.0002, label: "Platform", merchant_id: "platform" }
],
priority: 1
})
});
const result = await response.json();
if (result.success) {
console.log(`TX sent: ${result.tx_hash} | ${result.destinations_count} recipients | Fee: ${result.fee} XMR`);
} else {
console.error(`Failed [${result.error_code}]: ${result.error}`);
if (result.retry_in_seconds) console.log(`Retry in ${result.retry_in_seconds}s`);
}
$host = "https://blaster.libremonero.com";
$tenant_id = "YOUR_TENANT_ID";
$api_key = "blaster_your_api_key"; // from Admin > Settings > API Key
$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",
"X-Blaster-Key: $api_key"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"destinations" => [
["address" => "4SellerAddress...", "amount_xmr" => 0.001, "label" => "Seller payment", "merchant_id" => "seller_001"],
["address" => "4PlatformAddress...", "amount_xmr" => 0.0002, "label" => "Platform fee", "merchant_id" => "platform"]
]
]));
$result = json_decode(curl_exec($ch));
if ($result->success) {
echo "TX: " . $result->tx_hash . " | Fee: " . $result->fee . " XMR";
} else {
echo "Error [{$result->error_code}]: {$result->error}";
}