API reference

Integrate the risk engine.

Wallet checks, deposit AML, USDT transfer monitoring, balance retrieval, and self-service risk models in one production API surface.

Getting Started

Base URL
https://chainysoft.io/api/external
Quick Start
  1. Sign in to your Personal Account
  2. Navigate to the "API Keys" section
  3. Create a new API key and save it securely
  4. Use the API key in the x-api-key header for all requests
Important: Keep your API key secure and never share it publicly. If compromised, revoke it immediately and create a new one.

Authentication

All API requests must include your API key in the request header:

x-api-key: sk_your_api_key_here
Example Request
curl -X POST https://chainysoft.io/api/external/checks/create \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_your_api_key_here" \
  -d '{
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "network": "eth"
  }'

API Endpoints

POST /api/external/checks/create

Create a new blockchain address verification check. Funds will be deducted from your account balance.

Request Parameters
Parameter Type Required Description
address string Yes Blockchain wallet address to check
network string Yes Network identifier (e.g., "eth", "btc", "trx")
Example Request
{
  "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
  "network": "eth"
}
Success Response

200 OK

{
  "status": true,
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb",
    "network": "eth",
    "status": "pending",
    "createdAt": "2024-01-15T12:00:00.000Z",
    "checkUrl": "https://chainysoft.io/check-details.html?uuid=a1b2c3d4..."
  },
  "balance": {
    "previous": 100.00,
    "current": 80.00,
    "charged": 20.00
  }
}
Error Responses

400 Bad Request - Missing required parameters

{
  "status": false,
  "error": "address and network are required"
}

402 Payment Required - Insufficient balance

{
  "status": false,
  "error": "Insufficient balance",
  "details": {
    "required": 20.00,
    "current": 5.00,
    "currency": "USD"
  }
}

401 Unauthorized - Invalid or missing API key


GET /api/external/checks/:uuid

Retrieve the status and results of a verification check.

URL Parameters
Parameter Type Description
uuid string Unique identifier of the check (returned from create endpoint)
Example Request
curl -X GET https://chainysoft.io/api/external/checks/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "x-api-key: sk_your_api_key_here"
Success Response (Pending)

200 OK

{
  "status": true,
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb",
    "network": "eth",
    "status": "pending",
    "checkType": "address",
    "createdAt": "2024-01-15T12:00:00.000Z",
    "updatedAt": "2024-01-15T12:00:00.000Z"
  }
}
Success Response (Completed)

200 OK

{
  "status": true,
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb",
    "network": "eth",
    "status": "completed",
    "checkType": "address",
    "createdAt": "2024-01-15T12:00:00.000Z",
    "updatedAt": "2024-01-15T12:05:00.000Z",
    "result": {
      "addressInfo": {
        "balance": "1.234",
        "transactions": 42,
        "firstSeen": "2020-01-01T00:00:00.000Z"
      },
      "aiSummary": "This wallet shows normal activity...",
      "aiReport": "Detailed AI analysis report..."
    }
  }
}
Error Responses

404 Not Found - Check not found

{
  "status": false,
  "error": "Check not found"
}

403 Forbidden - Access denied (check belongs to another user)

{
  "status": false,
  "error": "Access denied: This check belongs to another user"
}

GET /api/external/balance

Get current account balance and pricing information.

Example Request
curl -X GET https://chainysoft.io/api/external/balance \
  -H "x-api-key: sk_your_api_key_here"
Success Response

200 OK

{
  "status": true,
  "data": {
    "balance": 100.00,
    "currency": "USD",
    "pricePerCheck": 20.00,
    "availableChecks": 5
  }
}

GET /api/external/checks/list

Retrieve a paginated list of all your verification checks.

Query Parameters
Parameter Type Required Description
limit integer No Number of results per page (default: 100, max: 100)
offset integer No Number of results to skip (default: 0)
status string No Filter by status: "pending", "completed", "failed"
Example Request
curl -X GET "https://chainysoft.io/api/external/checks/list?limit=10&offset=0&status=completed" \
  -H "x-api-key: sk_your_api_key_here"
Success Response

200 OK

{
  "status": true,
  "data": {
    "checks": [
      {
        "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb",
        "network": "eth",
        "status": "completed",
        "checkType": "address",
        "createdAt": "2024-01-15T12:00:00.000Z",
        "updatedAt": "2024-01-15T12:05:00.000Z",
        "checkUrl": "https://chainysoft.io/check-details.html?uuid=a1b2c3d4..."
      },
      {
        "uuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "address": "0x123...",
        "network": "btc",
        "status": "pending",
        "checkType": "address",
        "createdAt": "2024-01-15T11:00:00.000Z",
        "updatedAt": "2024-01-15T11:00:00.000Z",
        "checkUrl": "https://chainysoft.io/check-details.html?uuid=b2c3d4e5..."
      }
    ],
    "pagination": {
      "total": 42,
      "limit": 10,
      "offset": 0,
      "hasMore": true
    }
  }
}

POST /api/external/usdt-transfers

Retrieve USDT transfers for a specific address on supported networks (ETH, BSC, TRX).

Request Parameters
Parameter Type Required Description
address string Yes Wallet address to check
network string Yes Network identifier ("eth", "bsc", "trx")
limit integer No Max number of transfers to return (default: 50)
Example Request
curl -X POST https://chainysoft.io/api/external/usdt-transfers \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_your_api_key_here" \
  -d '{
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "network": "eth",
    "limit": 10
  }'
Success Response

200 OK

{
  "status": true,
  "data": {
    "address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb",
    "network": "ETH",
    "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
    "transfers": [
      {
        "hash": "0x123...",
        "from": "0xabc...",
        "to": "0x742...",
        "value": "100000000",
        "valueUsdt": 100.0,
        "blockNumber": 12345678,
        "timestamp": 1640995200000,
        "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
        "network": "ETH"
      }
    ],
    "stats": {
      "total": 1,
      "totalSent": "0.00",
      "totalReceived": "100.00",
      "netBalance": "100.00"
    }
  }
}

Deposit Checks (AML/KYT)

Verify incoming cryptocurrency deposits for AML/KYT compliance using BitOK integration.

POST /api/external/deposit-checks

Create a new deposit check. Initiates AML/KYT verification for an incoming transaction.

Request Parameters
Parameter Type Required Description
network string Yes Blockchain network: "ETH", "BSC", "TRX"
tx_hash string Yes Transaction hash to verify
deposit_address string Yes Receiving wallet address
token_id string No Token contract address (for token transfers)
amount string No Transfer amount
Example Request
curl -X POST https://chainysoft.io/api/external/deposit-checks \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_your_api_key_here" \
  -d '{
    "network": "TRX",
    "tx_hash": "4e6c26c52f829b75d9c9ca2e7ef7a867ec8618efd9d0d4fb35932585a0927808",
    "deposit_address": "TDo5WPJoaTsFe8QtQQ3WTtaVEPqaN9ebLW",
    "token_id": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
  }'
Success Response

200 OK

{
  "status": true,
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "network": "TRX",
    "tx_hash": "4e6c26c52f829b75d9c9ca2e7ef7a867ec8618efd9d0d4fb35932585a0927808",
    "deposit_address": "TDo5WPJoaTsFe8QtQQ3WTtaVEPqaN9ebLW",
    "token_id": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "kyt_status": "REGISTERED",
    "decision": "PENDING",
    "createdAt": "2026-01-19T10:00:00.000Z"
  },
  "already_exists": false
}
Error Responses

400 Bad Request - Missing required parameters or unsupported network

{
  "status": false,
  "error": "Required fields: network, tx_hash, deposit_address"
}

GET /api/external/deposit-checks/:uuid

Retrieve deposit check status and results. Poll this endpoint until is_complete is true.

URL Parameters
Parameter Type Description
uuid string Unique identifier returned from create endpoint
Example Request
curl -X GET https://chainysoft.io/api/external/deposit-checks/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "x-api-key: sk_your_api_key_here"
Response (Pending)

200 OK

{
  "status": true,
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "network": "TRX",
    "tx_hash": "4e6c26c52f829b75d9c9...",
    "deposit_address": "TDo5WPJoaTsFe8QtQQ3WTtaVEPqaN9ebLW",
    "kyt_status": "REGISTERED",
    "decision": "PENDING",
    "risk_score": null,
    "decision_reason": "Analysis in progress (Attempt 2/10)",
    "createdAt": "2026-01-19T10:00:00.000Z",
    "updatedAt": "2026-01-19T10:00:10.000Z"
  },
  "is_complete": false
}
Response (Complete)

200 OK

{
  "status": true,
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "network": "TRX",
    "tx_hash": "4e6c26c52f829b75d9c9...",
    "deposit_address": "TDo5WPJoaTsFe8QtQQ3WTtaVEPqaN9ebLW",
    "kyt_status": "CHECKED",
    "decision": "ALLOW",
    "risk_score": 15,
    "decision_reason": null,
    "createdAt": "2026-01-19T10:00:00.000Z",
    "updatedAt": "2026-01-19T10:01:00.000Z",
    "result": {
      "risks": [],
      "exposure": {
        "check_status": "checked",
        "direct_interaction": null,
        "indirect_interaction": [...]
      },
      "counterparty": {
        "check_status": "checked",
        "entity_category": null,
        "exposure": [...]
      }
    }
  },
  "is_complete": true
}
Decision Values
Decision Risk Score Description
PENDING null Check in progress, poll again
ALLOW 0-49 Low risk, deposit is safe
HOLD 50-79 Medium risk, manual review recommended
REJECT 80-100 High risk, deposit should be rejected
Error Responses

404 Not Found - Check not found

403 Forbidden - Access denied

Error Handling

The API uses standard HTTP status codes to indicate success or failure:

Status Code Description
200 Success - Request completed successfully
400 Bad Request - Invalid parameters or malformed request
401 Unauthorized - Invalid or missing API key
402 Payment Required - Insufficient account balance
403 Forbidden - Access to resource denied
404 Not Found - Resource does not exist
500 Internal Server Error - Server-side error occurred
Error Response Format

All error responses follow this format:

{
  "status": false,
  "error": "Human-readable error message",
  "details": {
    // Optional additional details about the error
  }
}
Rate Limiting: API requests are subject to rate limiting based on your account tier. Contact support to increase limits.

Code Examples

const axios = require('axios');

const API_KEY = 'sk_your_api_key_here';
const BASE_URL = 'https://chainysoft.io/api/external';

async function createCheck(address, network) {
  try {
    const response = await axios.post(`${BASE_URL}/checks/create`, {
      address: address,
      network: network
    }, {
      headers: {
        'x-api-key': API_KEY,
        'Content-Type': 'application/json'
      }
    });
    
    console.log('Check created:', response.data);
    return response.data.data.uuid;
  } catch (error) {
    console.error('Error:', error.response.data);
  }
}

async function getCheckResult(uuid) {
  try {
    const response = await axios.get(`${BASE_URL}/checks/${uuid}`, {
      headers: {
        'x-api-key': API_KEY
      }
    });
    
    console.log('Check result:', response.data);
    return response.data;
  } catch (error) {
    console.error('Error:', error.response.data);
  }
}

// Usage
(async () => {
  const uuid = await createCheck('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb', 'eth');
  
  // Poll for results
  const checkInterval = setInterval(async () => {
    const result = await getCheckResult(uuid);
    if (result.data.status === 'completed') {
      console.log('Check completed!', result.data.result);
      clearInterval(checkInterval);
    }
  }, 5000);
})();
import requests
import time

API_KEY = 'sk_your_api_key_here'
BASE_URL = 'https://chainysoft.io/api/external'

def create_check(address, network):
    headers = {
        'x-api-key': API_KEY,
        'Content-Type': 'application/json'
    }
    data = {
        'address': address,
        'network': network
    }
    
    response = requests.post(f'{BASE_URL}/checks/create', json=data, headers=headers)
    response.raise_for_status()
    
    result = response.json()
    print('Check created:', result)
    return result['data']['uuid']

def get_check_result(uuid):
    headers = {'x-api-key': API_KEY}
    response = requests.get(f'{BASE_URL}/checks/{uuid}', headers=headers)
    response.raise_for_status()
    return response.json()

# Usage
uuid = create_check('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb', 'eth')

# Poll for results
while True:
    result = get_check_result(uuid)
    if result['data']['status'] == 'completed':
        print('Check completed!', result['data']['result'])
        break
    time.sleep(5)
# Create a check
curl -X POST https://chainysoft.io/api/external/checks/create \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_your_api_key_here" \
  -d '{
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "network": "eth"
  }'

# Get check result
curl -X GET https://chainysoft.io/api/external/checks/{uuid} \
  -H "x-api-key: sk_your_api_key_here"

# Get balance
curl -X GET https://chainysoft.io/api/external/balance \
  -H "x-api-key: sk_your_api_key_here"

# List all checks
curl -X GET "https://chainysoft.io/api/external/checks/list?limit=10" \
  -H "x-api-key: sk_your_api_key_here"