This documentation provides a comprehensive guide to the Trading Platform API. The API is built using NestJS and provides endpoints for authentication, user management, wallet operations, order management, trading bots, and cryptocurrency data.
The API is RESTful and uses JSON for data exchange. All endpoints return a standardized response format. The platform also provides real-time updates via WebSocket connections.
The base URL for all API endpoints is: https://api.tandemamltd.com/
All API responses follow a standard format:
{
"ok": true|false,
"message": "Human-readable message describing the result",
"data": {
// Response data specific to the endpoint
},
"meta": {
// Optional metadata for pagination, etc.
}
}
The API uses JWT (JSON Web Tokens) for authentication. After successful login or registration, a token is returned which must be included in the Authorization header for subsequent requests.
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
URL: /login
Method: POST
Auth Required: No
Content-Type: application/json
Request Body:
{
"email": "user@example.com",
"password": "password123"
}
Success Response:
{
"ok": true,
"message": "Login successful",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"email": "user@example.com",
"full_name": "John Doe",
"is_verified": true,
"created_at": "2023-01-01T00:00:00.000Z",
"updated_at": "2023-01-01T00:00:00.000Z"
}
}
}
Error Response:
{
"ok": false,
"message": "Invalid credentials",
"data": null
}
URL: /register
Method: POST
Auth Required: No
Content-Type: application/json
Request Body:
{
"email": "newuser@example.com",
"password": "password123",
"confirm_password": "password123"
}
Success Response:
{
"ok": true,
"message": "Registration successful. Please verify your email with the OTP sent.",
"data": {
"user_id": 2,
"email": "newuser@example.com"
}
}
Error Response:
{
"ok": false,
"message": "Email already exists",
"data": null
}
URL: /verify-otp
Method: POST
Auth Required: No
Content-Type: application/json
Request Body:
{
"email": "newuser@example.com",
"otp": "123456"
}
Success Response:
{
"ok": true,
"message": "OTP verified successfully",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 2,
"email": "newuser@example.com",
"is_verified": true,
"created_at": "2023-01-01T00:00:00.000Z",
"updated_at": "2023-01-01T00:00:00.000Z"
}
}
}
Error Response:
{
"ok": false,
"message": "Invalid OTP",
"data": null
}
URL: /resend-otp
Method: POST
Auth Required: No
Content-Type: application/json
Request Body:
{
"email": "user@example.com"
}
Success Response:
{
"ok": true,
"message": "OTP resent successfully",
"data": {
"email": "user@example.com"
}
}
Error Response:
{
"ok": false,
"message": "User not found",
"data": null
}
The User API provides endpoints for retrieving and managing user information and verification status. All endpoints in this section require authentication.
URL: /user/get
Method: GET
Auth Required: Yes (JWT Token)
Success Response:
{
"ok": true,
"message": "User retrieved successfully",
"data": {
"id": 1,
"email": "user@example.com",
"full_name": "John Doe",
"country": "United States",
"is_verified": true,
"verification_level": "BASIC",
"created_at": "2023-01-01T00:00:00.000Z",
"updated_at": "2023-01-01T00:00:00.000Z"
}
}
Error Response:
{
"ok": false,
"message": "User not found",
"data": null
}
URL: /verify-basic
Method: POST
Auth Required: Yes (JWT Token)
Content-Type: application/json
Request Body:
{
"full_name": "John Doe",
"country": "United States"
}
Success Response:
{
"ok": true,
"message": "Successfully submitted, waiting for review.",
"data": {
"id": 1,
"user_id": 1,
"full_name": "John Doe",
"country": "United States",
"status": "PENDING",
"created_at": "2023-01-01T00:00:00.000Z",
"updated_at": "2023-01-01T00:00:00.000Z"
}
}
Error Response:
{
"ok": false,
"message": "Verification already submitted",
"data": null
}
URL: /get-verification
Method: GET
Auth Required: Yes (JWT Token)
Success Response:
{
"ok": true,
"message": "Verification retrieved successfully",
"data": {
"id": 1,
"user_id": 1,
"full_name": "John Doe",
"country": "United States",
"status": "APPROVED",
"level": "BASIC",
"created_at": "2023-01-01T00:00:00.000Z",
"updated_at": "2023-01-01T00:00:00.000Z"
}
}
Error Response:
{
"ok": false,
"message": "Verification not found",
"data": null
}
The Wallet API provides endpoints for managing user balances, deposits, withdrawals, and transaction history. All endpoints in this section require authentication.
URL: /wallet/balance
Method: GET
Auth Required: Yes (JWT Token)
Query Parameters: currency (optional)
Success Response (Single Currency):
{
"ok": true,
"message": "Balance retrieved successfully",
"data": {
"currency": "BTC",
"available": "0.12345678",
"locked": "0.01234567",
"total": "0.13580245"
}
}
Success Response (All Currencies):
{
"ok": true,
"message": "Balances retrieved successfully",
"data": [
{
"currency": "BTC",
"available": "0.12345678",
"locked": "0.01234567",
"total": "0.13580245"
},
{
"currency": "ETH",
"available": "1.23456789",
"locked": "0.12345678",
"total": "1.35802467"
},
{
"currency": "USDT",
"available": "1000.00",
"locked": "250.00",
"total": "1250.00"
}
]
}
Error Response:
{
"ok": false,
"message": "Invalid currency code",
"data": null
}
URL: /wallet/credit
Method: POST
Auth Required: Yes (JWT Token)
Content-Type: application/json
Request Body:
{
"currency": "BTC",
"amount": "0.01",
"type": "deposit",
"reference": "tx_12345",
"description": "Deposit from external wallet"
}
Success Response:
{
"ok": true,
"message": "Wallet credited successfully",
"data": {
"id": 123,
"user_id": 1,
"currency": "BTC",
"amount": "0.01",
"type": "deposit",
"reference": "tx_12345",
"description": "Deposit from external wallet",
"created_at": "2023-01-01T00:00:00.000Z"
}
}
Error Response:
{
"ok": false,
"message": "Invalid currency or amount",
"data": null
}
URL: /wallet/debit
Method: POST
Auth Required: Yes (JWT Token)
Content-Type: application/json
Request Body:
{
"currency": "BTC",
"amount": "0.01",
"type": "withdrawal",
"reference": "tx_67890",
"description": "Withdrawal to external wallet"
}
Success Response:
{
"ok": true,
"message": "Wallet debited successfully",
"data": {
"id": 124,
"user_id": 1,
"currency": "BTC",
"amount": "-0.01",
"type": "withdrawal",
"reference": "tx_67890",
"description": "Withdrawal to external wallet",
"created_at": "2023-01-01T00:00:00.000Z"
}
}
Error Response:
{
"ok": false,
"message": "Insufficient balance",
"data": null
}
URL: /wallet/update-currencies
Method: POST
Auth Required: Yes (JWT Token + Admin Role)
Success Response:
{
"success": true,
"message": "Currencies updated successfully",
"data": {
"created": 5,
"updated": 10,
"errors": 0,
"total": 15
}
}
Error Response:
{
"success": false,
"message": "Failed to update currencies",
"data": null
}
URL: /wallet/generate-address
Method: POST
Auth Required: Yes (JWT Token)
Content-Type: application/json
Request Body:
{
"currency": "BTC"
}
Success Response:
{
"success": true,
"message": "Payment address generated successfully",
"data": {
"payment_id": "12345-67890-abcdef",
"address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
"currency": "BTC",