WolvPay API Documentation
Welcome to the WolvPay API documentation. Our API enables you to seamlessly integrate cryptocurrency invoice into your business with our secure, low-fee payment processor.
Base URL
https://wolvpay.com/api/v1
Authentication
The WolvPay API uses API keys to authenticate requests. You can view and manage your API keys in the WolvPay Dashboard.
Your API keys carry many privileges, so be sure to keep them secure. Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, etc.
Add the following header to your requests to authenticate:
Authorization: Bearer <your-api-key>
Coins
The Coins API allows you to retrieve information about supported cryptocurrencies and their details.
Get Supported Coins
Retrieves a list of all supported cryptocurrencies and their details.
Response
{
"success": true,
"result": "Coins retrieved successfully",
"code": 200,
"data": [
{
"coin": "btc",
"name": "Bitcoin",
"logo": "assets/images/coins/btc.png",
"minimum_transaction_coin": "0.000080000000000000",
"prices": {
"EUR": "93057.5144720163",
"USD": "105649.8096322775"
//....
}
},
{
"coin": "ltc",
"name": "Litecoin",
"logo": "assets/images/coins/ltc.png",
"minimum_transaction_coin": "0.002000000000000000",
"prices": {
"EUR": "77.8529331455",
"USD": "88.3877848318"
//....
}
}
//....
]
}
{
"success": false,
"error": "Not Found",
"code": 404,
"message": "No coins found."
}
Response Parameters
Parameter | Type | Description |
---|---|---|
success | boolean | Indicates whether the request was successful. |
result | string | A descriptive message about the operation result. |
code | number | HTTP status code of the response. |
data | array | Array of supported cryptocurrency objects. |
data[].coin | string | Unique identifier for the cryptocurrency (used in API calls). |
data[].name | string | Full name of the cryptocurrency. |
data[].logo | string | URL path to the cryptocurrency logo image. |
data[].minimum_transaction_coin | string | Minimum amount that can be paid in this cryptocurrency. |
data[].prices | object | Object containing current exchange rates for various fiat currencies. |
data[].prices.[currency] | string | Current price of the cryptocurrency in the specified fiat currency. |
Invoices
The Invoices API allows you to create, retrieve, and manage cryptocurrency invoice.
Create an Invoice
Creates a new payment invoice that customers can use to pay with cryptocurrency.
Request Parameters
Parameter | Type | Required | Description |
---|---|---|---|
amount | number | Yes | The payment amount in the specified currency. |
currency | string | No | The currency code (e.g., USD, EUR). Defaults to USD. Read the Supported Currencies section for available options. |
coin | string | No | The cryptocurrency to accept (e.g., btc, ltc, erc20_usdc). Read the Supported Currencies section for available options. If not provided, invoice will stay on AWAITING_PAYMENT status and append available_coins array to the response. Refer to the Invoice Status section for more details. |
description | string | No | A description of the payment. |
white_label | boolean | No | Whether the invoice is for a white-label solution. Defaults to true. |
redirect_url | string | No | URL to redirect after payment is completed. |
{
"amount": 100.00,
"currency": "USD",
"coin": "ltc",
"description": "Invoice for Order #1234",
"white_label": false,
"redirect_url": "https://example.com/thank-you"
}
Response Parameters
Parameter | Type | Description |
---|---|---|
success | boolean | Indicates whether the request was successful. |
result | string | A descriptive message about the operation result. |
code | number | HTTP status code of the response. |
data | object | Contains the invoice data object with all relevant information. |
data.invoice_id | string | Unique identifier for the created invoice. |
data.url | string | Hosted payment page URL (only for hosted invoices). |
data.amount | number | The payment amount in the specified fiat currency. |
data.description | string | Description of the payment (null if not provided). |
data.status | string | Current status of the invoice. Refer to the Invoice Status section for possible values. |
data.coin | string | Selected cryptocurrency code (only for white-label invoices). |
data.coin_amount | number | Amount to be paid in the selected cryptocurrency. |
data.coin_address | string | Cryptocurrency address where payment should be sent. |
data.redirect_url | string | URL to redirect after payment completion (null if not provided). |
data.created_at | string | Timestamp when the invoice was created. |
data.expires_at | string | Timestamp when the invoice expires. |
{
"success": true,
"result": "Invoice created successfully with selected cryptocurrency",
"code": 201,
"data": {
"invoice_id": "INVabc123def456",
"url": "https://invoices.wolvpay.com/INVabc123def456",
"status": "AWAITING_PAYMENT"
}
}
{
"success": true,
"result": "Invoice created successfully with selected cryptocurrency",
"code": 201,
"data": {
"invoice_id": "INVabc123def456",
"amount": 100,
"description": null,
"status": "AWAITING_PAYMENT",
"coin": "ltc",
"coin_amount": 0.0167,
"coin_address": "MQvWK1vphyfV1F6",
"redirect_url": null,
"created_at": "2025-06-01 15:24:48",
"expires_at": "2025-06-02 15:24:48"
}
}
{
"success": false,
"error": "Bad Request",
"code": 400,
"message": "The provided cryptocurrency code is not supported or not enabled."
}
Retrieve an Invoice
Retrieves the details of an existing invoice.
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
invoice_id | string | Yes | The ID of the invoice to retrieve. |
{
"success": true,
"message": "Invoice retrieved successfully",
"data": {
"invoice_id": "INV_abc123def456",
"amount": 100.00,
"description": "Invoice for Order #1234",
"status": "PAID",
"coin": "btc",
"coin_amount": 0.00234567,
"coin_received": 0.00234567,
"coin_address": "MQvWK1vphyfV1F6",
"redirect_url": "https://example.com/thank-you",
"created_at": "2024-01-15 10:30:00",
"expires_at": "2024-01-16 10:30:00"
}
}
{
"success": true,
"result": "Invoice retrieved successfully",
"code": 200,
"data": {
"invoice_id": "INV_abc123def456",
"amount": 100,
"description": null,
"status": "AWAITING_SELECTION",
"coin": null,
"coin_amount": null,
"coin_received": 0,
"coin_address": null,
"redirect_url": null,
"created_at": "2025-06-01 17:51:12",
"expires_at": "2025-06-02 17:51:12",
"available_coins": [
"bch",
"btc",
"ltc",
"bep20_usdc",
"bep20_usdt",
"eth",
"sol_sol",
"doge",
"polygon_pol",
"trx",
"erc20_usdc",
"polygon_usdc",
"sol_usdc",
"erc20_usdt",
"polygon_usdt",
"sol_usdt",
"trc20_usdt"
]
}
}
{
"success": true,
"result": "Invoice retrieved successfully",
"code": 200,
"data": {
"invoice_id": "INV_abc123def456",
"url": "https://invoices.wolvpay.com/INV_abc123def456",
"status": "AWAITING_PAYMENT"
}
}
{
"success": false,
"error": "Not Found",
"code": 404,
"message": "Invoice not found."
}
Update an Invoice
Updates an existing invoice by selecting a cryptocurrency. This is used when an invoice was created without specifying a coin and the customer needs to select one.
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
invoice_id | string | Yes | The ID of the invoice to update. |
Request Parameters
Parameter | Type | Required | Description |
---|---|---|---|
coin | string | Yes | The cryptocurrency code to use for payment (e.g., btc, ltc, erc20_usdc). Read the Supported Currencies section for available options. |
{
"coin": "btc"
}
Response
{
"success": true,
"result": "Coin selected successfully for invoice",
"code": 200,
"data": {
"invoice_id": "INV_abc123def456",
"amount": 100,
"description": null,
"status": "AWAITING_PAYMENT",
"coin": "ltc",
"coin_amount": 1.1345586566825505,
"coin_address": "MQvWK1vphyfV1F6",
"redirect_url": null,
"updated_at": "2025-06-01 18:19:56"
}
}
{
"success": false,
"error": "Bad Request",
"code": 400,
"message": "Missing required parameter: coin"
}
List All Invoices
Returns a list of invoices you've previously created with pagination.
Query Parameters
Parameter | Type | Required | Description |
---|---|---|---|
page | integer | No | The page number to retrieve. Default is 1. |
limit | integer | No | Number of invoices per page. Default is 3, maximum is 3. |
{
"success": true,
"result": "Transactions retrieved successfully",
"code": 200,
"data": {
"invoices": [
{
"invoice_id": "INV_abc123def456",
"amount": "100.00",
"description": null,
"status": "AWAITING_PAYMENT",
"coin": "ltc",
"coin_amount": "1.1345586566826",
"coin_address": "MQvWK1vphyfV1F6",
"fee_amount_coin": "0.02269117",
"fee_amount_usd": "2.00",
"apply_fee": 0,
"white_label": 1,
"redirect_url": null,
"created_at": "2025-06-01 18:18:56",
"updated_at": "2025-06-01 18:19:56"
},
{
"invoice_id": "INV_abc123def456",
"amount": "100.00",
"description": null,
"status": "AWAITING_SELECTION",
"coin": null,
"coin_amount": null,
"coin_address": null,
"fee_amount_coin": "0.00000000",
"fee_amount_usd": "0.00",
"apply_fee": 0,
"white_label": 0,
"redirect_url": null,
"created_at": "2025-06-01 18:18:51",
"updated_at": null
},
{
"invoice_id": "INV_abc123def456",
"amount": "100.00",
"description": null,
"status": "AWAITING_PAYMENT",
"coin": "btc",
"coin_amount": "0.00095132715370241",
"coin_address": "MQvWK1vphyfV1F6",
"fee_amount_coin": "0.00001903",
"fee_amount_usd": "2.00",
"apply_fee": 0,
"white_label": 0,
"redirect_url": null,
"created_at": "2025-06-01 18:11:18",
"updated_at": null
}
],
"pagination": {
"current_page": 1,
"per_page": 3,
"total_items": 59,
"total_pages": 20,
"has_next": true,
"has_previous": false,
"next_page": 2,
"previous_page": null
}
}
}
Webhooks
WolvPay uses webhooks to notify your application when an event occurs, such as an invoice being completed. You can use these notifications to trigger actions in your backend, like updating a database or sending emails.
Webhook Security
WolvPay signs every webhook request using your webhook secret. The signature is included in the
X-WolvPay-Signature
HTTP header.
You should compute the HMAC-SHA256 hash of the raw request body using your secret and compare it with the received signature.
$rawPayload = file_get_contents('php://input');
$headers = getallheaders();
$signature = $headers['X-WolvPay-Signature'] ?? '';
$computedSignature = hash_hmac('sha256', $rawPayload, 'your_webhook_secret');
if (!hash_equals($computedSignature, $signature)) {
http_response_code(401);
exit('Invalid signature');
}
$data = json_decode($rawPayload, true);
// Process $data
const crypto = require('crypto');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const webhookSecret = 'your_webhook_secret';
app.use(bodyParser.raw({ type: 'application/json' }));
app.post('/webhooks/wolvpay', (req, res) => {
const signature = req.headers['x-wolvpay-signature'];
const expectedSignature = crypto
.createHmac('sha256', webhookSecret)
.update(req.body)
.digest('hex');
if (crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature))) {
const data = JSON.parse(req.body.toString());
// Process data
res.sendStatus(200);
} else {
res.status(400).send('Invalid signature');
}
});
import hmac
import hashlib
from flask import Flask, request, abort
app = Flask(__name__)
webhook_secret = 'your_webhook_secret'
@app.route('/webhooks/wolvpay', methods=['POST'])
def handle_webhook():
signature = request.headers.get('X-WolvPay-Signature')
raw_payload = request.get_data()
expected_signature = hmac.new(
webhook_secret.encode(),
raw_payload,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(signature, expected_signature):
abort(400, 'Invalid signature')
data = request.get_json()
# Process data
return 'OK', 200
Webhook Payload
The webhook will POST the following JSON structure to your endpoint:
{
"invoice_id": "inv_4e5a2b3c",
"amount": 100.00,
"description": "Invoice for Order #1234",
"status": "PAID",
"coin": "BTC",
"coin_amount": 0.00367,
"coin_received": 0.00367,
"coin_address": "1A2b3C4d5E6F7g8H9i0J",
"redirect_url": "https://example.com/thank-you",
"created_at": "2023-09-15T14:30:00Z"
}
Currencies
WolvPay supports multiple cryptocurrencies and coins.
Supported currencies
WolvPay supports the following fiat currencies for invoice amounts. All amounts are automatically converted to USD for processing:
Currency Name | Currency Code |
---|---|
United Arab Emirates Dirham | AED |
Australian Dollar | AUD |
Bulgarian Lev | BGN |
Brazilian Real | BRL |
Canadian Dollar | CAD |
Swiss Franc | CHF |
Chinese Yuan | CNY |
Czech Koruna | COP |
Colombian Peso | CZK |
Danish Krone | DKK |
Euro | EUR |
British Pound Sterling | GBP |
Hong Kong Dollar | HKD |
Hungarian Forint | HUF |
Indonesian Rupiah | IDR |
Indian Rupee | INR |
Japanese Yen | JPY |
Sri Lankan Rupee | LKR |
Mexican Peso | MXN |
Malaysian Ringgit | MYR |
Nigerian Naira | NGN |
Norwegian Krone | NOK |
Philippine Peso | PHP |
Polish Zloty | PLN |
Romanian Leu | RON |
Russian Ruble | RUB |
Swedish Krona | SEK |
Singapore Dollar | SGD |
Thai Baht | THB |
Turkish Lira | TRY |
Taiwan Dollar | TWD |
Ukrainian Hryvnia | UAH |
Ugandan Shilling | UGX |
US Dollar | USD |
Vietnamese Dong | VND |
South African Rand | ZAR |
Payment Status Values
Invoices can have the following status values throughout their lifecycle:
Status | Description |
---|---|
AWAITING_SELECTION | Invoice is created but customer hasn't selected a cryptocurrency yet |
AWAITING_PAYMENT | Cryptocurrency selected, waiting for payment |
CONFIRMING_PAYMENT | Payment detected, waiting for blockchain confirmations |
PAID | Payment confirmed and completed successfully |
UNDERPAID | Payment received but amount is less than required |
EXPIRED | Invoice expired without payment |
Errors
WolvPay uses conventional HTTP response codes to indicate the success or failure of an API request.
Code | Description |
---|---|
200 - OK | Everything worked as expected. |
400 - Bad Request | The request was unacceptable, often due to missing a required parameter. |
401 - Unauthorized | No valid API key provided. |
402 - Request Failed | The parameters were valid but the request failed. |
404 - Not Found | The requested resource doesn't exist. |
429 - Too Many Requests | Too many requests hit the API too quickly. |
500, 502, 503, 504 - Server Errors | Something went wrong on WolvPay's end. |
Error Response Format
{
"error": {
"type": "invalid_request_error",
"message": "Missing required parameter: amount",
"code": "missing_parameter",
"param": "amount"
}
}
Rate Limits
The WolvPay API has rate limits to protect against abuse and ensure a reliable service for all users.
The current rate limit is 100 requests per minute per API key. If you exceed this limit, you'll receive a 429 Too Many Requests response.
The following headers are included in the response to help you manage your rate limits:
Header | Description |
---|---|
X-RateLimit-Limit | The maximum number of requests you're permitted to make per minute. |
X-RateLimit-Remaining | The number of requests remaining in the current rate limit window. |
X-RateLimit-Reset | The time at which the current rate limit window resets in UTC epoch seconds. |