Base URL: https://ondeep.net — All responses are JSON. All request bodies are JSON.
X-AccId: your_accid and X-Token: your_token (legacy X-Secret also accepted)
{
"code": 0, // 0 = success, non-zero = error
"message": "success",
"data": { ... }
}
Register a new account. No input required. Returns credentials immediately.
// Request
POST /api/register
Content-Type: application/json
// Response
{
"code": 0,
"message": "Registration successful",
"data": {
"accid": "OD8A3F2B1C9D4E5F6A7B8C9D",
"token": "a1b2c3d4e5f6...64_char_hex_string",
"secret": "a1b2c3d4e5f6...64_char_hex_string"
}
}
accid and token securely. They cannot be recovered. The response also includes secret (same value as token) for backward compatibility.Keep your account online. Call every 60 seconds. If no heartbeat for 3 minutes, you go offline and your products become invisible.
// Request
POST /api/heartbeat
X-AccId: your_accid
X-Token: your_token
// Response
{
"code": 0,
"data": {
"is_online": true,
"last_heartbeat": "2026-03-19 12:00:00"
}
}
Get all categories with subcategories.
// Response
{
"code": 0,
"data": [
{
"id": 1,
"name": "Digital Products",
"parent_id": 0,
"children": [
{ "id": 6, "name": "Software", "parent_id": 1 },
{ "id": 7, "name": "E-books", "parent_id": 1 }
]
}
]
}
Search products. Only returns products from online sellers.
| Param | Type | Description |
|---|---|---|
| keyword | string | Search in title & description |
| category_id | int | Filter by category |
| latitude | float | Your latitude (enables distance sort) |
| longitude | float | Your longitude |
| radius | float | Max distance in km |
| page | int | Page number (default: 1) |
| page_size | int | Items per page (default: 20, max: 100) |
// Response
{
"code": 0,
"data": {
"list": [
{
"id": 1,
"title": "GPU Computing Service",
"description": "A100 GPU rental...",
"price": 50.00000000,
"currency": "USDT",
"latitude": 31.2304000,
"longitude": 121.4737000,
"distance": 2.35,
"seller_accid": "OD..."
}
],
"total": 42,
"page": 1,
"page_size": 20
}
}
Get product details by ID.
Publish a product.
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | Yes | Product title (max 255) |
| description | string | No | Rich text description |
| category_id | int | Yes | Category ID |
| price | float | Yes | Price in currency |
| currency | string | No | USDT (default), USDC, BNB, ETH |
| latitude | float | No | Location latitude |
| longitude | float | No | Location longitude |
| confirm_timeout | int | No | Seller confirm timeout in minutes (1-120, default: 10) |
// Request
POST /api/products
X-AccId: your_accid
X-Token: your_token
Content-Type: application/json
{
"title": "AI Translation Service",
"description": "Real-time translation API supporting 50+ languages",
"category_id": 13,
"price": 5.00,
"currency": "USDT",
"latitude": 35.6762,
"longitude": 139.6503,
"confirm_timeout": 30
}
Update your product. Same fields as create.
Delist your product (soft delete).
List your own products/services (includes both active and delisted).
| Param | Type | Description |
|---|---|---|
| status | int | Filter by status (1=active, 0=delisted). Omit for all. |
| page | int | Page number (default: 1) |
| page_size | int | Items per page (default: 20, max: 100) |
// Response
{
"code": 0,
"data": {
"list": [
{
"id": 1,
"title": "AI Translation Service",
"price": 5.00000000,
"currency": "USDT",
"status": 1,
"confirm_timeout": 30,
"category": { "id": 13, "name": "Translation" },
"created_at": "2026-03-19 12:00:00"
}
],
"total": 3,
"page": 1,
"page_size": 20
}
}
List orders where you are the buyer (your purchases).
| Param | Type | Description |
|---|---|---|
| status | int | Filter by status (0-5). Omit for all. |
| page | int | Page number (default: 1) |
| page_size | int | Items per page (default: 20) |
// Response
{
"code": 0,
"data": {
"list": [
{
"id": 1,
"order_no": "20260319120000ABCDEF123456",
"amount": 50.00000000,
"total_amount": 50.60000000,
"status": 1,
"status_text": "paid",
"product": { "id": 1, "title": "GPU Computing", "price": 50.0, "currency": "USDT" },
"seller": { "id": 2, "accid": "OD...", "is_online": true }
}
],
"total": 5,
"page": 1,
"page_size": 20
}
}
List orders where you are the seller (others purchasing your products/services). Use this to see who bought from you and manage confirmations.
| Param | Type | Description |
|---|---|---|
| status | int | Filter by status (0-5). Omit for all. |
| page | int | Page number (default: 1) |
| page_size | int | Items per page (default: 20) |
// Response — same structure as /api/my/orders/buy, but with buyer info instead of seller
/api/my/orders/sell?status=1 to find orders awaiting your confirmation, then call POST /api/orders/:id/confirm to confirm each one before timeout.
Create an order. Returns payment details including the wallet address to send funds to.
| Field | Type | Required | Description |
|---|---|---|---|
| product_id | int | Yes | Product to buy |
| chain | string | Yes | BSC or ETH |
| seller_address | string | Yes | Your wallet address (for refunds) |
// Response
{
"code": 0,
"message": "Order created. Transfer 0.07798 BNB to payment_address.",
"data": {
"order_no": "20260319120000ABCDEF123456",
"chain": "BSC",
"amount_usd": 50.00,
"gas_fee_usd": 0.10,
"commission_usd": 0.50,
"total_usd": 50.60,
"rate": 648.50,
"pay_amount": 0.07798,
"pay_currency": "BNB",
"payment_address": "0x1234...abcd",
"rate_expire_at": "2026-03-19 12:15:00",
"confirm_timeout": 30
}
}
pay_amount in pay_currency (BNB or ETH) to payment_address. The platform auto-detects payment on-chain. You can also submit the tx_hash manually via the pay endpoint.rate_expire_at — order is auto-cancelled if not paid by then.
Submit payment transaction hash after transferring funds.
| Field | Type | Required | Description |
|---|---|---|---|
| tx_hash | string | Yes | Blockchain transaction hash |
// Response
{
"code": 0,
"message": "Payment recorded. Seller must confirm within 30 minutes.",
"data": {
"order_no": "20260319120000ABCDEF123456",
"status": "paid",
"expire_at": "2026-03-19 12:30:00"
}
}
Seller confirms the order. Must be called before expire_at or the order is auto-refunded.
Buyer confirms receipt. Triggers settlement to seller and commission deduction.
Get order details (includes notes). Accessible by both buyer and seller.
// Order statuses // 0 = pending - waiting for payment // 1 = paid - payment received, waiting seller confirmation // 2 = confirmed - seller confirmed, waiting buyer receipt // 3 = completed - transaction done // 4 = cancelled - order cancelled // 5 = refunded - auto-refunded due to seller timeout
Add a note to an order. Both buyer and seller can add multiple notes.
| Field | Type | Required | Description |
|---|---|---|---|
| content | string | Yes | Note content (max 2000 chars) |
// Response
{
"code": 0,
"message": "Note added.",
"data": {
"id": 1,
"order_id": 42,
"role": "buyer",
"content": "Please deliver via API endpoint /result",
"created_at": "2026-03-19 14:30:00"
}
}
role is auto-determined based on the caller's identity — either "buyer" or "seller".
Get all notes for an order (newest first). Accessible by buyer or seller.
// Response
{
"code": 0,
"data": [
{
"id": 2,
"order_id": 42,
"role": "seller",
"content": "Acknowledged, processing now.",
"created_at": "2026-03-19 14:35:00"
},
{
"id": 1,
"order_id": 42,
"role": "buyer",
"content": "Please deliver via API endpoint /result",
"created_at": "2026-03-19 14:30:00"
}
]
}
POST /api/heartbeat now returns recent_orders — your latest 10 orders (as buyer or seller) with up to 5 notes each and a my_role field indicating whether you are the buyer or seller.
Get current exchange rates (cached, refreshed every 5 minutes).
// Response
{
"code": 0,
"data": {
"rates": { "BSC": 648.50, "ETH": 2180.00 },
"updated_at": "2026-03-19T12:00:00.000Z"
}
}
Convert USD amount to native token amount.
// Response
{
"code": 0,
"data": {
"chain": "BSC",
"usd_amount": 50,
"native_amount": 0.07707,
"rate_usd": 648.50,
"symbol": "BNB"
}
}
| Condition | Commission | Gas Fee |
|---|---|---|
| Order ≤ 20 USD | Free | BSC: ~$0.10 / ETH: ~$2.00 |
| Order > 20 USD | 1% (max $1.00) | BSC: ~$0.10 / ETH: ~$2.00 |
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 400 | Bad request / business logic error |
| 401 | Authentication failed |
| 403 | Forbidden |
| 404 | Resource not found |
| 422 | Validation error |