auto_awesome GET STARTED

Developer Documentation

Welcome to the Quickremita API documentation. Our platform enables businesses to orchestrate complex payment flows, manage virtual accounts, and process transactions with institutional-grade security.

shield

Secure & Compliant

Built on industry-standard encryption protocols and fully PCI-DSS compliant infrastructure.

speed

Lightning Fast

Optimize your workflows with sub-millisecond API response times and global edge nodes.

Developer workspace

"Quickremita redefined how we handle high-volume settlements." — TechCorp Engineering


key AUTHENTICATION

API Authentication

All API requests require authentication using your Business ID and Secret Key. You can find these credentials in your Developer Settings after logging in.

info

Important Security Notice

Never share your Secret Key publicly. Always use environment variables or secure vaults.

API Base URL

https://merchant.bexlo.com.ng/api/v1


account_balance_wallet CORE MODULES

Virtual Accounts

Generate unique, dedicated virtual bank accounts for each of your customers to streamline bank transfer collections. Automate reconciliation and gain instant visibility.

Wema Bank

bank: wema-bank

Titan Paystack

bank: titan-paystack

Create Virtual Account (PHP)

PHP - cURL Example
<?php
// Create Virtual Account API

$apiUrl = "https://merchant.bexlo.com.ng/api/v1/virtual_account/";

// Your credentials from Developer Dashboard
$payload = [
    "business_id" => "YOUR_BUSINESS_ID",
    "secret_key"  => "YOUR_SECRET_KEY",
    "email"       => "customer@gmail.com",
    "first_name"  => "John",
    "last_name"   => "Doe",
    "phone"       => "08012345678",
    "bank"        => "wema-bank"  // or titan-paystack
];

// Initialize cURL
$ch = curl_init($apiUrl);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json",
        "Accept: application/json"
    ],
]);

$response = curl_exec($ch);
$err = curl_error($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

if ($err) {
    echo "cURL Error: " . $err;
} else {
    $data = json_decode($response, true);
    if ($data['status'] == 1) {
        echo "Account: " . $data['data']['account_number'];
    }
}

Success Response

HTTP 200 OK
{
  "status": 1,
  "message": "Virtual account Created",
  "data": {
    "account_name": "BEXPAY/DOE JOHN",
    "account_number": "9810719346",
    "bank_name": "Wema Bank",
    "provider": "wema-bank"
  }
}

notifications_active REAL-TIME SYNC

Webhooks

Subscribe to events on your account so your application can automatically trigger reactions when changes occur. We use HTTPS POST to deliver JSON-formatted payloads to your server.

Webhook Handler (PHP)

webhook.php
<?php
/**
 * Webhook Handler for Quickremita
 * Copy this code to your endpoint: https://your-site.com/webhook.php
 */

// Get the raw POST data
$payload = file_get_contents("php://input");
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

// Your secret key from Developer Dashboard
$secret = "YOUR_SECRET_KEY_HERE";

// Verify signature for security
$expected = hash_hmac('sha256', $payload, $secret);

if (!hash_equals($expected, $signature)) {
    http_response_code(403);
    exit("Invalid signature");
}

// Parse the payload
$data = json_decode($payload, true);

if (!$data) {
    http_response_code(400);
    exit("Invalid JSON");
}

// Process payment success event
if ($data['event'] === 'payment.success') {
    $payment = $data['data'];
    
    $amount = $payment['amount'];
    $reference = $payment['reference'];
    $senderName = $payment['sender_name'];
    
    // TODO: Credit your user's account here
    // UPDATE users SET balance = balance + $amount WHERE ...
    
    // Log the payment
    error_log("Payment received: $reference - ₦$amount from $senderName");
}

// Always return 200 OK
http_response_code(200);
echo "OK";

Example Webhook Payload

Event: payment.success
{
  "event": "payment.success",
  "data": {
    "amount": 150,
    "credited_amount": 148.50,
    "charges": 1.50,
    "reference": "090405260318182239129116302580",
    "account_number": "9754714042",
    "sender_name": "TIMZTECH DEV CONCEPTS",
    "sender_bank": "Moniepoint MFB",
    "date": "18 Mar 2026, 5:22 PM",
    "status": "success"
  }
}

error ERROR HANDLING

HTTP Status Codes

The API uses standard HTTP response codes to indicate success or failure of a request.

200 OK Request successful. The response contains the requested data.
400 Bad Request Invalid parameters or malformed request body.
401 Unauthorized Missing or invalid API credentials (business_id / secret_key).
402 Payment Required Insufficient balance to complete the transaction.
404 Not Found Requested resource does not exist.
409 Conflict Duplicate request or conflicting resource state.
429 Too Many Requests Rate limit exceeded. Please slow down your requests.
500 Internal Server Error Something went wrong on our end. Please try again later.

rocket_launch

Ready to start integrating?

Get your API keys and start building amazing payment experiences.

login Login to Get Started