API Documentation

Table of Contents

Introduction

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.

Base URL

The base URL for all API endpoints is: https://api.tandemamltd.com/

Development Environment

API Response Format

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.
  }
}

Authentication

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...

Login

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
}

Register

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
}

Verify OTP

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
}

Resend OTP

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
}

User

The User API provides endpoints for retrieving and managing user information and verification status. All endpoints in this section require authentication.

Get User

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
}

Add Basic Verification

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
}

Get Verification Status

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
}

Wallet

The Wallet API provides endpoints for managing user balances, deposits, withdrawals, and transaction history. All endpoints in this section require authentication.

Get Balance

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
}

Credit Wallet

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
}

Debit Wallet

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
}

Update Currencies

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
}

Generate Payment Address

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",