API Documentation

Everything you need to integrate cryptocurrency payments into your application.

Base URL https://destroy.wtf
Overview

The DESTROY.WTF API is a RESTful JSON API that lets you create cryptocurrency payment orders, check their status, and manage payments programmatically. All responses are JSON-encoded.

Protocol
HTTPS
All requests must use HTTPS
Invoice Range
$0.50$2,000
USD per order
Order Expiry
2 Hours
From creation time
Supported Cryptos
10 Networks
BTC, ETH, LTC, SOL, BCH, BNB, DOGE, TRX, XRP, XMR

Create a $25 BTC payment order with a single command:

cURL
curl "https://destroy.wtf/api/order/create?api_key=YOUR_API_KEY&amount_usd=25.00&crypto_type=BTC"
Authentication

All merchant API requests are authenticated using an API key. Generate your key from the Dashboard after creating an account. Pass the key as the api_key parameter in the request body (POST) or query string (GET).

Keep your API key secret. Do not expose it in client-side code or public repositories. Before creating orders, configure your payout addresses for each cryptocurrency on the API key in the Dashboard.
Example — API Key in request body
// GET /api/order/create?api_key=550e8400-...&amount_usd=25.00&crypto_type=BTC
{
  "api_key": "550e8400-e29b-41d4-a716-446655440000",
  "amount_usd": 25.00,
  "crypto_type": "BTC"
}
Payment Flow

Follow these steps to accept a cryptocurrency payment from start to finish.

1

Create an Order

Call POST /api/order/create with the USD amount, crypto type, and your API key. You'll receive a payment address and a hosted payment page URL.

2

Direct the Customer

Redirect the customer to the payment_gateway_url returned in the response, or display the payment address and amount directly in your own UI.

3

Poll for Status

Call GET /api/order/status periodically to check when the payment is confirmed. Status progresses from PENDING to CONFIRMING to COMPLETED.

4

Receive Payout

Once confirmed, funds are automatically forwarded to the payout address configured on your API key. The merchant_txid field will contain the payout transaction ID.

There is no webhook/callback system. Use polling on /api/order/status to detect payment completion. The return_url parameter is a client-side link shown on the payment page for the customer to navigate back to your site.
Endpoints
POST /api/order/create API Key Create a payment order

Creates a new cryptocurrency payment order. Also accepts GET with query parameters.

ParameterTypeRequiredDescription
api_key string Required Your API key (UUID v4 format)
amount_usd float Required Invoice amount in USD. Min 0.50, max 2000
crypto_type string Optional Cryptocurrency to accept. Default: LTC
return_url string Optional URL displayed on the payment page for the customer to return to your site after paying
Success — 200
// curl "https://destroy.wtf/api/order/create?api_key=YOUR_API_KEY&amount_usd=50.00&crypto_type=BTC"
{
  "success": true,
  "order_id": "550e8400-e29b-41d4-a716-446655440000",
  "crypto_type": "BTC",
  "amount_usd": 50.00,
  "crypto_amount": "0.0005123400",
  "crypto_price": 97591.23,
  "crypto_address": "bc1q...example",
  "payment_gateway_url": "https://destroy.wtf/pay/550e8400-...",
  "created_at": "2026-02-17T12:00:00.000000+00:00",
  "expire_time": "2026-02-17T14:00:00.000000+00:00",
  "return_url": "https://your.shop/thankyou",
  "destination_tag": 123456  // XRP only
}
FieldTypeDescription
order_idstringUnique order identifier (UUID v4)
crypto_amountstringAmount the customer must send, formatted to 10 decimal places
crypto_pricefloatUSD price of the crypto at order creation
crypto_addressstringBlockchain address to send payment to
payment_gateway_urlstringHosted payment page URL — redirect customers here
expire_timestringISO-8601 UTC timestamp, 2 hours after creation
destination_tagintXRP only. Customer must include this tag in their payment
GET /api/order/status Public Check order status

Retrieves the current status and details of an order. No authentication required. Also accepts POST with JSON body.

ParameterTypeRequiredDescription
order_id string Required The order UUID to look up
Success — 200
// curl "https://destroy.wtf/api/order/status?order_id=ORDER_ID"
{
  "success": true,
  "order_id": "550e8400-e29b-41d4-a716-446655440000",
  "crypto_type": "BTC",
  "amount_usd": 50.00,
  "crypto_amount": "0.0005123400",
  "crypto_price": 97591.23,
  "crypto_address": "bc1q...example",
  "paid": false,
  "tx_id": "N/A",
  "created_at": "2026-02-17T12:00:00.000000+00:00",
  "expire_time": "2026-02-17T14:00:00.000000+00:00",
  "status": "PENDING",
  "withdrawn": false,
  "merchant_txid": null,
  "return_url": "https://your.shop/thankyou",
  "paid_usd": 0.00,
  "destination_tag": 123456  // XRP only
}
FieldTypeDescription
paidboolWhether the order has been fully paid
tx_idstringIncoming transaction IDs (comma-separated), or "N/A"
statusstringCurrent order status (see Order Statuses)
withdrawnboolWhether payout to merchant has been sent
merchant_txidstring|nullPayout transaction ID once funds are sent
paid_usdfloatActual USD value received based on crypto received
POST /api/order/update API Key Change crypto type

Changes the cryptocurrency type for an existing unpaid order. A new payment address is generated and the crypto amount is recalculated at the current price. The USD amount remains unchanged.

ParameterTypeRequiredDescription
order_id string Required The order UUID to update
crypto_type string Required New cryptocurrency type to switch to
api_key string Optional Your API key. If provided, must match the order's key
Success — 200
// curl "https://destroy.wtf/api/order/update?order_id=ORDER_ID&crypto_type=ETH&api_key=YOUR_API_KEY"
{
  "success": true,
  "message": "Order updated successfully",
  "order_id": "550e8400-...",
  "crypto_type": "ETH",
  "crypto_amount": "0.0152340000",
  "crypto_price": 3282.45,
  "crypto_address": "0xabc...example",
    // ... full order fields
}
Orders that have already received any payment (paid_usd > 0) cannot be updated. The old payment address is replaced — any funds sent to the previous address after the update will still be detected but the order now expects the new crypto type.
POST /api/order/cancel API Key Cancel an order

Cancels a pending order. Only works if no payment has been received yet. Also accepts GET with query parameters.

ParameterTypeRequiredDescription
order_id string Required The order UUID to cancel
api_key string Required Your API key (must own the order)
Success — 200
// curl "https://destroy.wtf/api/order/cancel?api_key=YOUR_API_KEY&order_id=ORDER_ID"
{
  "success": true,
  "message": "Order cancelled successfully",
  "order_id": "550e8400-...",
  "status": "CANCELED",
    // ... full order fields
}
GET /api/crypto Public List available cryptocurrencies

Returns all supported cryptocurrencies with their current USD prices. Optionally filter by API key to see which cryptos are available for that key.

ParameterTypeRequiredDescription
api_key string Optional If provided, filters to only cryptos configured for this API key
Success — 200
// curl "https://destroy.wtf/api/crypto"
{
  "success": true,
  "supported": {
    "BTC": 97591.23,
    "ETH": 3282.45,
    "LTC": 128.45,
    "SOL": 195.67,
        // ... all configured cryptos
  }
}
Order Statuses

An order progresses through these statuses during its lifecycle. A payment is considered sufficient when it reaches at least 94% of the expected crypto amount.

StatusDescription
PENDING
Order created, awaiting payment from the customer
PARTIAL PAYMENT
Payment received but below the 94% threshold of the expected amount
CONFIRMING
Payment at or above the threshold detected, awaiting blockchain confirmation
COMPLETED
Payment fully confirmed. Payout to merchant will be processed automatically
CANCELED
Order was cancelled via API or admin action. Only possible before payment
Once an order reaches COMPLETED, the gateway automatically processes payouts. Check the withdrawn and merchant_txid fields to confirm the payout was sent.
Error Handling

All error responses follow a consistent format. The HTTP status code will be 200 for business-logic errors (invalid parameters, not found) or 429 for rate limiting.

Error Response Format
{
  "success": false,
  "error": "Human-readable error message"
}
ErrorCause
"No api_key"The api_key parameter is missing or empty
"Invalid api_key"API key format is invalid or the key does not exist
"Invalid order ID"The order_id is not a valid UUID v4
"Order not found"No order exists with the given ID
"Unsupported cryptocurrency"The requested crypto_type is not recognized
"Unauthorized: api_key does not own this order"The API key provided does not match the order's key
"Amount must be between 0.5 and 2000 USD"The amount_usd is outside the allowed range
"Crypto price not available"Price data has not been fetched yet for this crypto
"Rate limit exceeded"Too many requests — HTTP 429 (see Rate Limits)
Rate Limits

The API enforces rate limits per IP address to protect against abuse.

Request Limit
5 per second
Sliding window per IP
Block Duration
30 seconds
Wait before retrying
Status Code
429
Too Many Requests
If you are behind Cloudflare, the real client IP is read from the CF-Connecting-IP header. Implement exponential backoff in your polling logic to stay within limits.
Quick Start Examples

Complete examples to create an order and poll for payment status.

Python
import requests, time

API_KEY  = "your-api-key"
BASE_URL = "https://destroy.wtf"

# 1. Create an order
resp = requests.post(f"{BASE_URL}/api/order/create", json={
    "api_key":     API_KEY,
    "amount_usd":  25.00,
    "crypto_type": "BTC",
    "return_url":  "https://your.shop/success"
}).json()

order_id = resp["order_id"]
print(f"Pay: {resp['payment_gateway_url']}")

# 2. Poll until completed
while True:
    status = requests.get(
        f"{BASE_URL}/api/order/status",
        params={"order_id": order_id}
    ).json()

    print(f"Status: {status['status']}")

    if status["status"] == "COMPLETED":
        print(f"Paid! TX: {status['tx_id']}")
        break

    if status["status"] == "CANCELED":
        print("Order was cancelled.")
        break

    time.sleep(15)
cURL
# Create an order
curl -X POST https://destroy.wtf/api/order/create \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "your-api-key",
    "amount_usd": 25.00,
    "crypto_type": "BTC"
  }'

# Check order status
curl "https://destroy.wtf/api/order/status?order_id=ORDER_ID_HERE"

# Cancel an order
curl -X POST https://destroy.wtf/api/order/cancel \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "your-api-key",
    "order_id": "ORDER_ID_HERE"
  }'
JavaScript (Node.js)
const BASE_URL = "https://destroy.wtf";
const API_KEY  = "your-api-key";

// Create an order
const res = await fetch(`${BASE_URL}/api/order/create`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    api_key:     API_KEY,
    amount_usd:  25.00,
    crypto_type: "BTC",
    return_url:  "https://your.shop/success"
  })
});

const order = await res.json();
console.log("Payment URL:", order.payment_gateway_url);

// Poll for status
const check = await fetch(
  `${BASE_URL}/api/order/status?order_id=${order.order_id}`
);
const status = await check.json();
console.log("Status:", status.status);