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
- Sign in to your Personal Account
- Navigate to the "API Keys" section
- Create a new API key and save it securely
- Use the API key in the
x-api-keyheader for all requests
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
}
}
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"