Skip to content

OTC Trading

Over-the-counter trading for high-volume currency conversions. Requires OTC access to be approved by an admin before use.

Auth required: JWT
Base path: /api/v1/otc

Note: All OTC endpoints require your business to have OTC access enabled. Contact support to request access.


Get Available Accounts

Returns the platform OTC accounts you can trade with (bank details, supported currencies).

http
GET /api/v1/otc/accounts
Authorization: Bearer <token>
Permission: otc:view

Get Quote

http
GET /api/v1/otc/quote
Authorization: Bearer <token>
Permission: otc:view

Query parameters

ParamDescription
fromSource currency (e.g. GBP)
toTarget currency (e.g. NGN)
amountAmount in source currency

Response

json
{
  "rate": "1950.50",
  "from": "GBP",
  "to": "NGN",
  "amount": "5000.00",
  "converted": "9752500.00",
  "expires_at": "2025-06-18T12:05:00Z"
}

Create Order

Lock in a quote and create a trade order.

http
POST /api/v1/otc/orders
Authorization: Bearer <token>
Permission: otc:trade
Content-Type: application/json
json
{
  "from": "GBP",
  "to": "NGN",
  "amount": "5000.00",
  "account_id": "acc_123"
}

Response

json
{
  "id": "order_abc",
  "status": "pending_payment",
  "rate": "1950.50",
  "from_amount": "5000.00",
  "to_amount": "9752500.00",
  "payment_details": {
    "bank_name": "...",
    "account_number": "...",
    "sort_code": "..."
  },
  "expires_at": "2025-06-18T12:35:00Z"
}

Mark Order as Paid

After sending the bank transfer, mark the order as paid so the platform can verify and release funds.

http
POST /api/v1/otc/orders/:id/paid
Authorization: Bearer <token>
Permission: otc:trade

Get Order

http
GET /api/v1/otc/orders/:id
Authorization: Bearer <token>
Permission: otc:view

Refresh Quote

If the quote has expired before you've paid, refresh it to get the latest rate.

http
POST /api/v1/otc/orders/:id/refresh
Authorization: Bearer <token>
Permission: otc:trade

Trade History

http
GET /api/v1/otc/history
Authorization: Bearer <token>
Permission: otc:view

OTC AML Compliance

OTC access requires completing an AML (Anti-Money Laundering) form via the KYC endpoints:

EndpointDescription
GET /api/v1/kyc/otc/statusCheck OTC AML status
PUT /api/v1/kyc/otc/draftSave draft AML form
POST /api/v1/kyc/otc/submitSubmit AML form for review

Rach Payments API