Skip to content

API Endpoints

Complete list of all available API endpoints.

Health

Health Check

http
GET /health

Response:

json
{
  "success": true,
  "data": {
    "status": "healthy",
    "version": "1.0.0",
    "timestamp": "2026-02-08T12:00:00Z"
  }
}

Drivers

List Drivers

http
GET /api/v1/drivers

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size, max 100 (default: 50)
  • status (string, optional): Filter by status (active, inactive, pending)

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "drv_abc123",
        "ovnDriverId": "OVN-DRIVER-789",
        "name": "John Smith",
        "email": "john@example.com",
        "phone": "+15551234567",
        "status": "active",
        "kycStatus": "verified",
        "totalPaid": 125000,
        "pendingPayouts": 0
      }
    ],
    "total": 142,
    "page": 1,
    "pageSize": 50,
    "hasNextPage": true
  }
}

Get Driver by ID

http
GET /api/v1/drivers/:id

Response:

json
{
  "success": true,
  "data": {
    "id": "drv_abc123",
    "ovnDriverId": "OVN-DRIVER-789",
    "name": "John Smith",
    "email": "john@example.com",
    "phone": "+15551234567",
    "status": "active",
    "kycStatus": "verified"
  }
}

Register Driver

http
POST /api/v1/drivers

Body:

json
{
  "ovnDriverId": "OVN-DRIVER-789",
  "name": "John Smith",
  "email": "john@example.com",
  "phone": "+15551234567"
}

Response:

json
{
  "success": true,
  "data": {
    "id": "drv_abc123",
    "ovnDriverId": "OVN-DRIVER-789",
    "name": "John Smith",
    "status": "invited",
    "kycStatus": "pending"
  }
}

Update Driver

http
PUT /api/v1/drivers/:id

Delete Driver

http
DELETE /api/v1/drivers/:id

Get Driver Payouts

http
GET /api/v1/drivers/:id/payouts

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "pay_xyz",
        "loadId": "L-12345",
        "driverId": "drv_abc123",
        "driverName": "John Smith",
        "amount": 45000,
        "fee": 450,
        "netAmount": 44550,
        "status": "completed",
        "rail": "standard",
        "requestedAt": "2026-01-31T12:00:00Z",
        "completedAt": "2026-02-02T12:00:00Z"
      }
    ],
    "total": 12,
    "page": 1,
    "pageSize": 50
  }
}


Payouts

Create Payout

http
POST /api/v1/payouts

Body:

json
{
  "driverId": "drv_abc123",
  "amount": 45000,
  "urgency": "standard",
  "description": "Payment for load #L-12345"
}

Response:

json
{
  "success": true,
  "data": {
    "id": "pay_xyz",
    "loadId": "L-12345",
    "driverId": "drv_abc123",
    "driverName": "John Smith",
    "amount": 45000,
    "fee": 250,
    "netAmount": 44750,
    "status": "validated",
    "rail": "standard",
    "requestedAt": "2026-01-31T12:00:00Z"
  }
}

List Payouts

http
GET /api/v1/payouts

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size, max 100 (default: 50)
  • status (string, optional): Filter by status
  • driverId (string, optional): Filter by driver ID

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "pay_xyz",
        "loadId": "L-12345",
        "driverId": "drv_abc123",
        "driverName": "John Smith",
        "amount": 45000,
        "fee": 250,
        "netAmount": 44750,
        "status": "completed",
        "rail": "standard",
        "requestedAt": "2026-01-31T12:00:00Z",
        "completedAt": "2026-02-02T12:00:00Z"
      }
    ],
    "total": 45,
    "page": 1,
    "pageSize": 50,
    "hasNextPage": false
  }
}

Get Payout Details

http
GET /api/v1/payouts/:id

Response:

json
{
  "success": true,
  "data": {
    "id": "pay_xyz",
    "loadId": "L-12345",
    "driverId": "drv_abc123",
    "amount": 45000,
    "fee": 250,
    "netAmount": 44750,
    "status": "completed",
    "rail": "standard",
    "requestedAt": "2026-01-31T12:00:00Z",
    "completedAt": "2026-02-02T12:00:00Z"
  }
}

Cancel Payout

http
POST /api/v1/payouts/:id/cancel

Response:

json
{
  "success": true,
  "data": {
    "id": "pay_xyz",
    "status": "canceled",
    "canceledAt": "2026-01-31T12:30:00Z"
  }
}

Retry Failed Payout

http
POST /api/v1/payouts/:id/retry

Response:

json
{
  "success": true,
  "data": {
    "id": "pay_xyz",
    "status": "queued",
    "retriedAt": "2026-01-31T12:30:00Z"
  }
}

Instant Pay

Request Instant Pay

http
POST /api/v1/payouts/instant

Body:

json
{
  "driverId": "drv_abc123",
  "amount": 45000,
  "requestedBy": "driver-789"
}

Response:

json
{
  "success": true,
  "data": {
    "id": "pay_xyz",
    "driverId": "drv_abc123",
    "amount": 45000,
    "fee": 450,
    "netAmount": 44550,
    "status": "processing",
    "rail": "instant",
    "requestedAt": "2026-01-31T12:00:00Z",
    "estimatedSettlement": "~30 seconds"
  }
}

Get Instant Pay Fee

http
GET /api/v1/payouts/instant/fee?amount=50000

Response:

json
{
  "success": true,
  "data": {
    "amount": 50000,
    "fee": 250,
    "feePercent": 0.5,
    "total": 50250,
    "estimatedDeposit": 49750
  }
}

Batches

Create Batch

http
POST /api/v1/batches

Body:

json
{
  "name": "Weekly Payouts - 2026-01-31",
  "urgency": "standard",
  "payouts": [
    {
      "amount": 45000,
      "driverId": "drv_abc123",
      "loadId": "L-12345",
      "description": "Load #12345"
    }

**Response:**

```json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "name": "Weekly Payouts - 2026-01-31",
    "payoutCount": 3,
    "totalAmount": 135000,
    "totalFees": 675,
    "netAmount": 134325,
    "status": "queued",
    "createdAt": "2026-01-31T12:00:00Z"
  }
}

List Batches

http
GET /api/v1/batches

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size (default: 20)
  • status (string, optional): Filter by status

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "batch_xyz",
        "name": "Weekly Payouts - 2026-01-31",
        "payoutCount": 45,
        "totalAmount": 2025000,
        "totalFees": 11250,
        "netAmount": 2013750,
        "status": "completed",
        "createdAt": "2026-01-31T14:00:00Z",
        "completedAt": "2026-01-31T14:30:00Z"
      }
    ],
    "total": 8,
    "page": 1,
    "pageSize": 20,
    "hasNextPage": false
  }
}

Get Batch Details

http
GET /api/v1/batches/:id

Response:

json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "name": "Weekly Payouts - 2026-01-31",
    "payoutCount": 3,
    "totalAmount": 135000,
    "totalFees": 675,
    "netAmount": 134325,
    "status": "completed",
    "createdAt": "2026-01-31T12:00:00Z",
    "completedAt": "2026-01-31T14:30:00Z",
    "payouts": [
      {
        "id": "pay_xyz",
        "driverId": "drv_001",
        "driverName": "John Smith",
        "amount": 45000,
        "status": "completed"
      }
    ]
  }
}

Release Batch

http
POST /api/v1/batches/:id/release

Response:

json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "status": "processing",
    "releasedAt": "2026-01-31T12:00:00Z"
  }
}

Run Batch

http
POST /api/v1/batches/:id/run

Response:

json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "status": "processing",
    "processedAt": "2026-01-31T12:00:00Z"
  }
}

Create Batch

http
POST /api/v1/batches

Body:

json
{
  "name": "Weekly Payouts - 2026-01-31",
  "urgency": "standard",
  "payouts": [
    {
      "amount": 45000,
      "driverId": "drv_abc123",
      "loadId": "L-12345",
      "description": "Load #12345"
    },
    {
      "amount": 50000,
      "driverId": "drv_def456",
      "loadId": "L-12346",
      "description": "Load #12346"
    },
    {
      "amount": 40000,
      "driverId": "drv_ghi789",
      "description": "Bonus payment"
    }
  ],
  "scheduledFor": "2026-01-31T17:00:00Z"
}

Response:

json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "name": "Weekly Payouts - 2026-01-31",
    "payoutCount": 3,
    "totalAmount": 135000,
    "totalFees": 675,
    "netAmount": 134325,
    "status": "queued",
    "createdAt": "2026-01-31T12:00:00Z"
  }
}

List Batches

http
GET /api/v1/batches

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size (default: 20)
  • status (string, optional): Filter by status

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "batch_xyz",
        "name": "Weekly Payouts - 2026-01-31",
        "payoutCount": 45,
        "totalAmount": 2025000,
        "totalFees": 11250,
        "netAmount": 2013750,
        "status": "completed",
        "createdAt": "2026-01-31T12:00:00Z",
        "completedAt": "2026-01-31T14:00:00Z"
      }
    ],
    "total": 8,
    "page": 1,
    "pageSize": 20,
    "hasNextPage": false
  }
}

Get Batch Details

http
GET /api/v1/batches/:id

Response:

json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "name": "Weekly Payouts - 2026-01-31",
    "payoutCount": 3,
    "totalAmount": 135000,
    "totalFees": 675,
    "netAmount": 134325,
    "status": "completed",
    "createdAt": "2026-01-31T12:00:00Z",
    "completedAt": "2026-01-31T14:30:00Z",
    "payouts": [
      {
        "id": "pay_xyz",
        "driverId": "drv_001",
        "driverName": "John Smith",
        "amount": 45000,
        "status": "completed"
      }
    ]
  }
}

Release Batch

http
POST /api/v1/batches/:id/release

Response:

json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "status": "processing",
    "releasedAt": "2026-01-31T12:00:00Z"
  }
}

Run Batch

Process a scheduled batch immediately, regardless of its scheduled time.

http
POST /api/v1/batches/:id/run

Response:

json
{
  "success": true,
  "data": {
    "id": "batch_xyz",
    "status": "processing",
    "processedAt": "2026-01-31T12:00:00Z"
  }
}

Bulk Operations

Bulk operations allow you to process multiple items in a single request. All bulk operations return detailed results showing which items succeeded or failed. Maximum 100 items per request.

Bulk Register Drivers

http
POST /api/v1/drivers/bulk

Body:

json
{
  "drivers": [
    {
      "ovnDriverId": "OVN-DRIVER-789",
      "name": "John Smith",
      "email": "john@example.com",
      "phone": "+15551234567"
    },
    {
      "ovnDriverId": "OVN-DRIVER-790",
      "name": "Jane Doe",
      "email": "jane@example.com",
      "phone": "+15551234568"
    }
  ]
}

Response:

json
{
  "success": true,
  "data": {
    "succeeded": 2,
    "failed": 0,
    "total": 2,
    "results": [
      {
        "item": {
          "id": "drv_abc123",
          "ovnDriverId": "OVN-DRIVER-789",
          "name": "John Smith",
          "status": "invited"
        },
        "status": "success"
      },
      {
        "item": {
          "id": "drv_def456",
          "ovnDriverId": "OVN-DRIVER-790",
          "name": "Jane Doe",
          "status": "invited"
        },
        "status": "success"
      }
    ]
  }
}

Bulk Create Payouts

http
POST /api/v1/payouts/bulk

Body:

json
{
  "urgency": "standard",
  "payouts": [
    {
      "amount": 45000,
      "driverId": "drv_abc123",
      "loadId": "L-12345",
      "description": "Load #12345"
    },
    {
      "amount": 50000,
      "driverId": "drv_def456",
      "loadId": "L-12346",
      "description": "Load #12346"
    },
    {
      "amount": 40000,
      "driverId": "drv_ghi789",
      "description": "Bonus payment"
    }
  ]
}

Response:

json
{
  "success": true,
  "data": {
    "succeeded": 3,
    "failed": 0,
    "total": 3,
    "results": [
      {
        "item": {
          "id": "pay_xyz",
          "driverId": "drv_abc123",
          "amount": 45000,
          "status": "validated"
        },
        "status": "success"
      },
      {
        "item": {
          "id": "pay_def456",
          "driverId": "drv_def456",
          "amount": 50000,
          "status": "validated"
        },
        "status": "success"
      },
      {
        "item": {
          "id": "pay_ghi789",
          "driverId": "drv_ghi789",
          "amount": 40000,
          "status": "validated"
        },
        "status": "success"
      }
    ]
  }
}

Bulk Cancel Payouts

http
POST /api/v1/payouts/bulk/cancel

Body:

json
{
  "payoutIds": ["pay_xyz", "pay_abc", "pay_def"]
}

Response:

json
{
  "success": true,
  "data": {
    "succeeded": 3,
    "failed": 0,
    "total": 3,
    "results": [
      {
        "item": {
          "id": "pay_xyz",
          "status": "canceled"
        },
        "status": "success"
      }
    ]
  }
}

Bulk Retry Payouts

http
POST /api/v1/payouts/bulk/retry

Body:

json
{
  "payoutIds": ["pay_xyz", "pay_abc", "pay_def"]
}

Response:

json
{
  "success": true,
  "data": {
    "succeeded": 2,
    "failed": 1,
    "total": 3,
    "results": [
      {
        "item": {
          "id": "pay_xyz",
          "status": "queued"
        },
        "status": "success"
      },
      {
        "item": {
          "id": "pay_abc",
          "status": "queued"
        },
        "status": "success"
      },
      {
        "item": {
          "id": "pay_def",
          "status": "failed"
        },
        "status": "error",
        "error": "Insufficient funds"
      }
    ]
  }
}

Scheduled Payouts

List Scheduled Payouts

http
GET /api/v1/scheduled-payouts

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size, max 100 (default: 20)
  • status (string, optional): Filter by status (queued, processing, completed, failed)

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "batch_xyz",
        "name": "Weekly Payouts - 2026-02-08",
        "payoutCount": 45,
        "totalAmount": 2025000,
        "status": "queued",
        "scheduledFor": "2026-02-08T17:00:00Z",
        "createdAt": "2026-02-07T12:00:00Z"
      }
    ],
    "total": 12,
    "page": 1,
    "pageSize": 20
  }
}

Scheduled Payouts Stats

http
GET /api/v1/scheduled-payouts/stats

Response:

json
{
  "success": true,
  "data": {
    "total": 156,
    "byStatus": {
      "queued": 45,
      "processing": 12,
      "completed": 87,
      "failed": 12
    },
    "upcomingTotal": 892500,
    "nextScheduled": "2026-02-08T17:00:00Z"
  }
}

Funding

List Funding Transactions

http
GET /api/v1/funding/transactions

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size, max 100 (default: 50)
  • type (string, optional): Filter by transaction type

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "txn_abc123",
        "type": "credit",
        "amount": 1000000,
        "balance": 5000000,
        "description": "Wallet funding",
        "createdAt": "2026-02-08T10:00:00Z"
      }
    ],
    "total": 234,
    "page": 1,
    "pageSize": 50
  }
}

Get Funding Projection

http
GET /api/v1/funding/projection

Response:

json
{
  "success": true,
  "data": {
    "currentBalance": 5000000,
    "projectedBalance": 3500000,
    "projectedOutflow": 1500000,
    "dailyProjection": [
      { "date": "2026-02-08", "outflow": 250000 },
      { "date": "2026-02-09", "outflow": 300000 },
      { "date": "2026-02-10", "outflow": 275000 }
    ]
  }
}

Top Up Funding

http
POST /api/v1/funding/topup

Body:

json
{
  "amount": 500000,
  "description": "Weekly funding",
  "method": "bank_transfer"
}

Response:

json
{
  "success": true,
  "data": {
    "transactionId": "txn_xyz",
    "amount": 500000,
    "balance": 5500000,
    "status": "pending",
    "createdAt": "2026-02-08T10:00:00Z"
  }
}

Balance

Get Wallet Balance

http
GET /api/v1/balance

Response:

json
{
  "success": true,
  "data": {
    "available": 5000000,
    "pending": 50000,
    "inTransit": 25000,
    "currency": "USD"
  }
}

Analytics

Analytics endpoints provide business intelligence and reporting capabilities for OVN Pay platform.

Configure webhooks to receive real-time updates about payout status changes. All webhook payloads include a signature header for verification:

X-Signature: t={timestamp},v1={signature}

Paystream Webhook

http
POST /api/v1/webhooks/paystream

Webhook endpoint for Paystream events. Verifies webhook signatures.

Body:

json
{
  "event": "payout.completed",
  "timestamp": "2026-02-08T10:00:00Z",
  "data": {
    "payoutId": "pay_xyz",
    "status": "completed",
    "amount": 45000
  },
  "signature": "t=1234567890,v1 signature_here"
}

Response:

json
{
  "success": true,
  "data": {
    "message": "Webhook processed"
  }
}

Webhook Logs

http
GET /api/v1/webhooks/logs

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size (default: 50)
  • event (string, optional): Filter by event type

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "log_abc123",
        "event": "payout.completed",
        "payload": {},
        "processedAt": "2026-02-08T10:00:00Z",
        "status": "success"
      }
    ],
    "total": 456,
    "page": 1,
    "pageSize": 50
  }
}

API Keys (Developer)

List Your API Keys

http
GET /api/v1/developer/keys
Authorization: Bearer your_session_token

Response:

json
{
  "success": true,
  "keys": [
    {
      "id": "key_abc123",
      "name": "Development Key",
      "mode": "sandbox",
      "prefix": "ovnp_sbox_",
      "scopes": ["drivers:read", "payouts:read"],
      "approval_status": "approved",
      "created_at": "2026-02-15T10:00:00Z",
      "is_usable": true
    }
  ]
}

Create API Key

http
POST /api/v1/developer/keys
Authorization: Bearer your_session_token

Body:

json
{
  "name": "My Integration Key",
  "mode": "sandbox",
  "scopes": ["drivers:read", "payouts:read", "payouts:write"],
  "expires_in": 90
}

For production keys, include an approval reason:

json
{
  "name": "ERP Integration",
  "mode": "production",
  "scopes": ["drivers:read", "payouts:write", "balance:read"],
  "approval_reason": "Automated weekly payouts from our ERP system"
}

Get Key Details

http
GET /api/v1/developer/keys/:id
Authorization: Bearer your_session_token

Revoke Key

http
DELETE /api/v1/developer/keys/:id
Authorization: Bearer your_session_token

Regenerate Key

http
POST /api/v1/developer/keys/:id/regenerate
Authorization: Bearer your_session_token

List Available Scopes

http
GET /api/v1/developer/scopes
Authorization: Bearer your_session_token

API Keys (Admin)

Admin endpoints for managing all API keys and approving production keys. Requires owner or admin role.

List All API Keys

http
GET /api/v1/admin/api-keys
Authorization: Bearer your_session_token

Query Parameters:

  • page (number, optional): Page number (default: 1)
  • pageSize (number, optional): Page size (default: 20)
  • mode (string, optional): Filter by mode (sandbox, production)
  • status (string, optional): Filter by approval status (pending, approved, rejected)

Response:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "key_abc123",
        "name": "Development Key",
        "mode": "sandbox",
        "prefix": "ovnp_sbox_",
        "scopes": ["drivers:read", "payouts:read"],
        "created_by": "developer@example.com",
        "approval_status": "approved",
        "created_at": "2026-02-15T10:00:00Z",
        "expires_at": null,
        "last_used_at": "2026-02-18T14:30:00Z",
        "is_usable": true
      }
    ],
    "total": 15,
    "page": 1,
    "pageSize": 20
  }
}

List Pending Approval Keys

Get all production keys awaiting admin approval.

http
GET /api/v1/admin/api-keys/pending
Authorization: Bearer your_session_token

Response:

json
{
  "success": true,
  "keys": [
    {
      "id": "key_xyz789",
      "name": "ERP Integration",
      "mode": "production",
      "prefix": "ovnp_prod_",
      "scopes": ["drivers:read", "payouts:write", "balance:read"],
      "created_by": "developer@example.com",
      "approval_reason": "Automated weekly payouts from our ERP system",
      "approval_status": "pending",
      "created_at": "2026-02-18T10:00:00Z"
    }
  ]
}

Get Key Details

http
GET /api/v1/admin/api-keys/:id
Authorization: Bearer your_session_token

Response:

json
{
  "success": true,
  "data": {
    "id": "key_xyz789",
    "name": "ERP Integration",
    "mode": "production",
    "prefix": "ovnp_prod_",
    "scopes": ["drivers:read", "payouts:write", "balance:read"],
    "created_by": "developer@example.com",
    "approval_reason": "Automated weekly payouts from our ERP system",
    "approval_status": "pending",
    "approved_by": null,
    "approved_at": null,
    "created_at": "2026-02-18T10:00:00Z",
    "expires_at": null,
    "last_used_at": null,
    "revoked_at": null,
    "is_usable": false
  }
}

Approve Production Key

Approve a pending production key. The full key is returned once and cannot be retrieved again.

http
POST /api/v1/admin/api-keys/:id/approve
Authorization: Bearer your_session_token

Response:

json
{
  "success": true,
  "id": "key_xyz789",
  "name": "ERP Integration",
  "mode": "production",
  "approval_status": "approved",
  "approved_by": "admin@example.com",
  "approved_at": "2026-02-18T11:00:00Z",
  "key": "ovnp_prod_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "note": "Save this key now. It will not be shown again."
}

Reject Production Key

Reject a pending production key.

http
POST /api/v1/admin/api-keys/:id/reject
Authorization: Bearer your_session_token

Body:

json
{
  "reason": "Insufficient justification for production access"
}

Response:

json
{
  "success": true,
  "id": "key_xyz789",
  "approval_status": "rejected",
  "rejected_at": "2026-02-18T11:00:00Z"
}

Revoke Any Key

Admin can revoke any API key (sandbox or production).

http
DELETE /api/v1/admin/api-keys/:id
Authorization: Bearer your_session_token

Response:

json
{
  "success": true,
  "message": "API key revoked successfully"
}

Sandbox Utilities

These endpoints are available for sandbox keys to simulate various scenarios.

Reset Sandbox State

Clear all sandbox data and start fresh.

http
POST /api/v1/sandbox/reset
Authorization: Bearer ovnp_sbox_xxx

Response:

json
{
  "success": true,
  "message": "Sandbox state reset successfully"
}

Get Sandbox State

View current sandbox data (drivers, payouts, balance).

http
GET /api/v1/sandbox/state
Authorization: Bearer ovnp_sbox_xxx

Response:

json
{
  "success": true,
  "data": {
    "drivers": [...],
    "payouts": [...],
    "balance": 1000000
  }
}

Seed Sandbox Data

Pre-populate sandbox with test data.

http
POST /api/v1/sandbox/seed
Authorization: Bearer ovnp_sbox_xxx

Response:

json
{
  "success": true,
  "message": "Sandbox seeded with test data",
  "data": {
    "drivers": 5,
    "payouts": 10
  }
}

Sandbox Scenarios

Control sandbox behavior with the X-Sandbox-Scenario header:

http
POST /api/v1/payouts
Authorization: Bearer ovnp_sbox_xxx
X-Sandbox-Scenario: insufficient_funds

{
  "driverId": "drv_test",
  "amount": 50000
}

Available Scenarios:

ScenarioDescription
successDefault, operation succeeds
insufficient_fundsReturns 400, low balance error
payout_failedPayout transitions to failed status
kyc_pendingDriver returns kyc_pending status
rate_limitedReturns 429 Too Many Requests
slow_responseAdds 2 second delay