FleexPay API Reference
The FleexPay API — operated by ISLA-MIA Blockchain Solutions LLC — gives approved wholesale partners programmatic access to custodial, exchange and blockchain infrastructure services. All access is restricted to partners who have completed KYB onboarding.
Content-Type: application/json. Responses are always JSON.2026-05-23T14:30:00.000Z"1.50000000"Idempotency-Key: <uuid-v4>. Duplicate keys return the original response safely.Authentication
Every request must carry three headers. We use API key + HMAC-SHA256 request signing — no OAuth, no sessions.
fpk_live_xxx (production) or fpk_test_xxx (sandbox).timestamp + METHOD + path + rawBody using your secret.const crypto = require('crypto'); const API_KEY = 'fpk_live_your_key'; const API_SECRET = 'your_secret'; function sign(method, path, body = '') { const ts = Date.now().toString(); const sig = crypto .createHmac('sha256', API_SECRET) .update(ts + method.toUpperCase() + path + body) .digest('hex'); return { 'FP-API-Key' : API_KEY, 'FP-Timestamp' : ts, 'FP-Signature' : sig, 'Content-Type' : 'application/json' }; }
Base URL
https://api.fleexpay.io/v1 — Real funds. Keys prefixed fpk_live_https://sandbox.api.fleexpay.io/v1 — No real funds. Keys prefixed fpk_test_Rate limits
Limits are per API key. Exceeding them returns 429. Response headers show current usage.
| Endpoint group | Limit | Window |
|---|---|---|
| Default (all) | 300 | per minute |
| Exchange — quote & order | 120 | per minute |
| Custody — transfers (write) | 60 | per minute |
| Blockchain — broadcast | 60 | per minute |
| Compliance — AML screen | 30 | per minute |
| Burst cap (any endpoint) | 20 | per second |
Errors
All errors use a consistent JSON envelope. The code field is machine-readable.
{
"success": false,
"error": {
"code": "INSUFFICIENT_BALANCE",
"message": "Wallet balance too low to complete the transfer.",
"details": { "available": "0.00012", "required": "0.00050" },
"request_id": "req_8f3a2b1c9d4e"
}
}
| HTTP | code | Meaning |
|---|---|---|
| 400 | INVALID_PARAMS | Missing or malformed request parameters. |
| 401 | INVALID_SIGNATURE | HMAC signature check failed. |
| 401 | EXPIRED_TIMESTAMP | Request timestamp outside ±30 s window. |
| 403 | INSUFFICIENT_PERMISSIONS | Key lacks scope for this operation. |
| 403 | ACCOUNT_SUSPENDED | Partner account suspended — contact support. |
| 400 | INSUFFICIENT_BALANCE | Wallet balance too low for the transfer. |
| 400 | INVALID_ADDRESS | Destination address invalid for the network. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests. See Retry-After header. |
| 400 | MARKET_CLOSED | Trading pair temporarily unavailable. |
| 400 | KYB_REQUIRED | Partner KYB not yet approved for this service. |
Pagination
Cursor-based pagination on all list endpoints. Pass the cursor value from a previous response to fetch the next page.
{
"success": true,
"data": [ /* items */ ],
"pagination": {
"cursor": "cur_eyJpZCI6MTIzfQ",
"has_more": true,
"limit": 50,
"total": 342
}
}
Query params: limit (1–100, default 50) · cursor · sort (asc|desc)
Webhooks
FleexPay POSTs signed JSON events to your HTTPS endpoint. Register URLs via the Account API or institutional dashboard.
error in payload.reason.Events carry FP-Webhook-Signature — HMAC-SHA256 of the raw JSON body using your webhook secret. Verify before processing.
// Verify webhook signature (Node.js) const expected = crypto.createHmac('sha256', WEBHOOK_SECRET) .update(rawBody).digest('hex'); if (req.headers['fp-webhook-signature'] !== expected) throw new Error('Signature mismatch');
Custodial Services
Create and manage segregated institutional wallets, generate deposit addresses and initiate outbound transfers with full policy controls.
List wallets
Paginated list of all custodial wallets under the authenticated partner.
| Param | Type | Req | Description |
|---|---|---|---|
| network | string | opt | Filter: bitcoin ethereum solana tron polygon arbitrum base |
| status | string | opt | active | frozen | archived |
| limit | integer | opt | 1–100, default 50. |
| cursor | string | opt | Pagination cursor from previous response. |
{
"success": true,
"data": [{
"id": "wal_3fK9mP2xQrT8",
"label": "Hot Wallet — EU",
"network": "ethereum",
"asset": "USDC",
"balance": "125000.000000",
"status": "active",
"custody_type": "mpc",
"created_at": "2026-03-15T09:00:00.000Z"
}],
"pagination": { "cursor": "cur_x", "has_more": false, "limit": 50, "total": 1 }
}
Create wallet
Creates a new segregated custodial wallet. Each wallet is isolated at the key level.
| Field | Type | Req | Description |
|---|---|---|---|
| network | string | req | Target blockchain network. |
| asset | string | req | Asset ticker: BTC ETH USDC USDT SOL etc. |
| label | string | opt | Human-readable label, max 120 chars. |
| custody_type | string | opt | mpc (default) or multisig. |
| metadata | object | opt | Arbitrary key-value pairs, max 10 keys. |
{ "network":"ethereum", "asset":"USDC", "label":"Client Pool EU", "custody_type":"mpc" }
Generate deposit address
Returns a fresh deposit address for the wallet. Each call generates a new address for on-chain privacy.
{
"success": true,
"data": {
"address": "0x3fA8b2e9c1D7F4a52bC6e8310d9A7f2B5c0E1d3",
"network": "ethereum",
"asset": "USDC",
"wallet_id": "wal_7gN1sY4wZpR3",
"created_at":"2026-05-23T14:31:00.000Z"
}
}
Create transfer
Initiates an outbound on-chain transfer from a custodial wallet. Transfers above partner policy thresholds require multi-approver sign-off before broadcast.
| Field | Type | Req | Description |
|---|---|---|---|
| wallet_id | string | req | Source wallet ID. |
| destination | string | req | Destination address, validated for the network. |
| amount | string | req | Amount as decimal string, e.g. "500.00". |
| asset | string | req | Must match the wallet asset. |
| fee_priority | string | opt | low | medium (default) | high |
| note | string | opt | Internal memo, not broadcast on-chain. |
| idempotency_key | string | opt | UUID v4 for safe retries. |
{
"wallet_id": "wal_7gN1sY4wZpR3",
"destination": "0xAbC123...def456",
"amount": "5000.00",
"asset": "USDC",
"fee_priority": "medium",
"idempotency_key": "550e8400-e29b-41d4-a716-446655440000"
}
Crypto Exchange
Institutional spot and OTC execution with aggregated liquidity. Quotes are firm for 30 seconds — pass the quote ID to execute at the locked rate.
Get quote
Returns a firm, 30-second locked quote. Pass the quote_id to POST /orders to execute at the guaranteed rate.
{ "from_asset":"USDC", "to_asset":"BTC", "amount":"100000.00", "side":"buy" }
Create order
Executes an order against a locked quote or as a market order. Fund from a custodial wallet via source_wallet_id or use exchange balance.
{
"quote_id": "qt_5mXaB3pLwT2K",
"from_asset": "USDC", "to_asset": "BTC",
"amount": "100000.00", "side": "buy",
"source_wallet_id": "wal_7gN1sY4wZpR3"
}
Ticker
Current best bid, ask and last price for a pair. Use underscore notation: BTC_USDC.
{
"pair":"BTC_USDC", "bid":"63750.00", "ask":"63775.00", "last":"63764.00",
"volume_24h":"8423104.50", "change_24h":"+1.42",
"high_24h":"64100.00", "low_24h":"62800.00"
}
Blockchain Infrastructure
Direct multi-chain node access: broadcast raw transactions, query status, inspect blocks and estimate fees — no need to run your own node estate.
Supported chains
All supported networks with current block height and operational status.
{
"data": [
{ "id":"bitcoin", "block_height":844123, "status":"operational", "confirmations":3 },
{ "id":"ethereum", "block_height":20104892, "status":"operational", "confirmations":12 },
{ "id":"solana", "block_height":291044012,"status":"operational", "confirmations":32 },
{ "id":"polygon", "block_height":57823441, "status":"operational", "confirmations":128 },
{ "id":"arbitrum", "block_height":221045612,"status":"operational", "confirmations":1 },
{ "id":"base", "block_height":15892312, "status":"operational", "confirmations":1 },
{ "id":"tron", "block_height":62184210, "status":"operational", "confirmations":20 }
]
}
Broadcast transaction
Broadcasts a raw signed transaction. Returns the hash immediately; poll GET /tx/{hash} for confirmation.
// Request { "raw_tx": "0x02f8..." } // Response 200 { "tx_hash":"0x4e3a8f2b...", "chain":"ethereum", "status":"pending" }
Gas estimate
Returns low/medium/high fee scenarios based on current mempool conditions.
{
"chain": "ethereum",
"base_fee_gwei": "12.4",
"low": { "max_fee_gwei":"14.0", "priority_gwei":"1.0", "eta_seconds":120 },
"medium": { "max_fee_gwei":"16.0", "priority_gwei":"1.5", "eta_seconds":30 },
"high": { "max_fee_gwei":"20.0", "priority_gwei":"2.5", "eta_seconds":12 }
}
Compliance & KYB
Partner KYB submission, AML address screening and Travel Rule data exchange. Mandatory for regulated use of the platform.
Submit KYB
Submits a KYB application for a new entity. Returns an application ID to track via webhooks or polling.
| Field | Type | Req | Description |
|---|---|---|---|
| legal_name | string | req | Registered entity name. |
| jurisdiction | string | req | ISO 3166-1 alpha-2 code, e.g. US DE SG. |
| registration_number | string | req | Company registration or license number. |
| business_type | string | req | exchange fintech bank fund payment other |
| beneficial_owners | array | req | UBOs >25%: name, dob, nationality, ownership_pct. |
| documents | array | req | Base64 documents. Types: certificate_of_incorporation license ubo_declaration. |
AML address screening
Screens a blockchain address against OFAC, EU and UN sanctions lists, dark-web entity databases and on-chain risk heuristics.
{ "address":"0x3fA8b2e9c1D7F4...", "chain":"ethereum" }
Travel Rule submission
FATF Travel Rule originator and beneficiary data for transfers above threshold (USD 1,000). FleexPay handles secure exchange with the counterparty VASP.
{
"transfer_id": "txf_9pL2kR7mWs4A",
"originator": { "name":"Acme Fintech GmbH", "account_id":"ACME-DE-00421" },
"beneficiary": {
"name":"Partner Exchange Ltd",
"vasp_did":"did:ethr:0xAbC123...",
"address":"0x3fA8b2e9c1D7F4..."
}
}
Account & API Keys
Manage your partner account, trading limits and the full lifecycle of API credentials.
Account info
{
"partner_id": "ptr_4xK9mQ2rBs7W",
"legal_name": "Acme Fintech GmbH",
"status": "active",
"kyb_status": "approved",
"tier": "institutional",
"services": ["custody", "exchange", "blockchain"],
"jurisdiction":"DE"
}
Create API key
Creates a new key pair. The api_secret is returned once only. Store it in a secrets manager immediately.
| Field | Type | Req | Description |
|---|---|---|---|
| label | string | req | Human-readable key name. |
| scopes | array | req | custody:read custody:write exchange:read exchange:write blockchain:read blockchain:write compliance:read compliance:write account:read |
| ip_whitelist | array | opt | Restrict to IPv4/IPv6 addresses or CIDR ranges. |
| expires_at | string | opt | ISO 8601 expiry. Omit for non-expiring key. |
// Response 201 { "key_id": "key_6tN3wS8vYc2P", "api_key": "fpk_live_6tN3wS8vYc2P...", "api_secret": "fps_sk_eyJhbGci...", "scopes": ["custody:read", "custody:write"], "created_at": "2026-05-23T14:30:00.000Z", "warning": "Store api_secret now — will not be shown again." }
Request API access
API credentials are issued exclusively to approved institutional and wholesale partners following KYB onboarding. Contact our institutional desk to apply.