Monero Blaster

Monero Blaster : Fast semi-custodial simultaneous Monero payments API with auto-sweep

API v0.9.1  ·  Doc updated 2026-04-29  ·  GET /version

⚡ Quick Start 📡 API Reference 💻 Code Examples

⚡ Quick Start Guide

Accept Monero payments with simultaneous multi-recipient transactions and rapid successive payments - no more 20-minute waits!

✓ Non-Custodial: Your funds go directly to your sovereign wallet. We never hold your Monero.
✓ Privacy-First: View-only wallets. No KYC. No tracking.
✓ Fast Detection: Payment detected in ~10 seconds instead of 20 minutes.

🎯 What is Monero Blaster?

💥

Split Transactions

Send Monero to 1-16 recipients in a single transaction. Perfect for marketplaces, affiliates, and revenue sharing.

🔫

Rapid-Fire Payments

Send up to 10 consecutive payments with minimal wait time. Worker wallets act like cartridges in a magazine.

🔄

Auto-Refill

Workers automatically refill from master wallet. Funds return to your sovereign wallet after X days.

🛡️

Non-Custodial

Your keys, your crypto. We never hold your funds. View-only wallets for maximum security.

💰 Pricing

Standard

Free
  • 0.5% commission per transaction
  • 2-4 worker wallets
  • ~30s payment detection
  • Split transactions (1-16 recipients)
  • Basic support
  • Priority processing
  • Dedicated infrastructure
💡 Note: Pricing is loaded from config/pricing.json and can be updated dynamically.

🚀 5-Minute Setup

Step 1: Get Your Wallet Ready

You'll need your Monero wallet's primary address and view key. We never ask for your spend key!

How to get your view key (click to expand)

Using Monero GUI Wallet:

  1. Open your wallet
  2. Go to Settings → Seed & Keys
  3. Copy your "Secret view key"

Using monero-wallet-cli:

viewkey

Step 2: Get API Access

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)

Step 3: Fund Your Master Wallet

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
}

Step 4: Send a Transaction

Base URL: https://blaster.libremonero.com/tenants/YOUR_TENANT_ID/api/orchestrator/

Amount format: Always use XMR as a float (e.g. 0.001), NOT atomic units.
Authentication: POST endpoints require X-Blaster-Key: YOUR_API_KEY (from Admin → Settings).

Simple transfer (1 recipient):

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
  }'

Split transaction (up to 16 recipients):

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
  }'

Step 5: Check Service Health

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}
}
Done! You're now accepting Monero with split transactions and rapid payments!

🔐 Security Best Practices

💡 Use Cases

1. Marketplace Revenue Sharing

Split each sale between seller (70%), platform (25%), and affiliate (5%) in one transaction.

2. Escrow Services

Hold funds and release to multiple parties upon completion (seller + arbitrator fees).

3. Multi-Store Checkout

Customer buys from 3 different stores - one payment, three recipients.

4. Affiliate Networks

Pay multiple affiliates their commissions in a single transaction.

📞 Support

Need help? We're here for you:

Interactive API reference — API v0.9.1. Raw spec: swagger.yaml (OpenAPI 3.0)

💻 Code Examples

Important: Replace 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.

Auth note: GET endpoints (health, version, master/balance, workers) are public. POST endpoints (transfer, send_split) require X-Blaster-Key.

Python

Check health & get master address (no auth)
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)")
Single Transfer
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")
Split Transaction (multiple recipients)
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')}")

JavaScript / Node.js

Check health & master balance (no auth)
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)`);
Split Transaction
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`);
}

PHP

Split Payment in PHP
$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}";
}