3.2 KiB
3.2 KiB
Sub2API Admin API: Payment Integration
This document describes the minimum Admin API surface for external payment systems (for example, sub2apipay) to complete balance top-up and reconciliation.
Base URL
- Production:
https://<your-domain> - Beta:
http://<your-server-ip>:8084
All endpoints below use:
- Header:
x-api-key: admin-<64hex>(recommended for server-to-server) - Header:
Content-Type: application/json
Note: Admin JWT is also accepted by admin routes, but machine-to-machine integration should use admin API key.
1) Create + Redeem in One Step
POST /api/v1/admin/redeem-codes/create-and-redeem
Purpose:
- Atomically create a deterministic redeem code and redeem it to a target user.
- Typical usage: called after payment callback succeeds.
Required headers:
x-api-keyIdempotency-Key
Request body:
{
"code": "s2p_cm1234567890",
"type": "balance",
"value": 100.0,
"user_id": 123,
"notes": "sub2apipay order: cm1234567890"
}
Rules:
code: external deterministic order-mapped code.type: currently recommendedbalance.value: must be> 0.user_id: target user id.
Idempotency semantics:
- Same
code, sameused_byuser: return200(idempotent replay). - Same
code, differentused_byuser: return409conflict. - Missing
Idempotency-Key: return400(IDEMPOTENCY_KEY_REQUIRED).
Example:
curl -X POST "${BASE}/api/v1/admin/redeem-codes/create-and-redeem" \
-H "x-api-key: ${KEY}" \
-H "Idempotency-Key: pay-cm1234567890-success" \
-H "Content-Type: application/json" \
-d '{
"code":"s2p_cm1234567890",
"type":"balance",
"value":100.00,
"user_id":123,
"notes":"sub2apipay order: cm1234567890"
}'
2) Query User (Optional Pre-check)
GET /api/v1/admin/users/:id
Purpose:
- Check whether target user exists before payment finalize/retry.
Example:
curl -s "${BASE}/api/v1/admin/users/123" \
-H "x-api-key: ${KEY}"
3) Balance Adjustment (Existing Interface)
POST /api/v1/admin/users/:id/balance
Purpose:
- Existing reusable admin interface for manual correction.
- Supports
set,add,subtract.
Request body example (subtract):
{
"balance": 100.0,
"operation": "subtract",
"notes": "manual correction"
}
Example:
curl -X POST "${BASE}/api/v1/admin/users/123/balance" \
-H "x-api-key: ${KEY}" \
-H "Idempotency-Key: balance-subtract-cm1234567890" \
-H "Content-Type: application/json" \
-d '{
"balance":100.00,
"operation":"subtract",
"notes":"manual correction"
}'
4) Error Handling Recommendations
- Persist upstream payment result independently from recharge result.
- Mark payment success immediately after callback verification.
- If recharge fails after payment success, keep order retryable by admin operation.
- For retry, always reuse deterministic
code+ newIdempotency-Key.
5) Suggested doc_url Setting
Sub2API already supports doc_url in system settings.
Recommended values:
- View URL:
https://github.com/Wei-Shaw/sub2api/blob/main/ADMIN_PAYMENT_INTEGRATION_API.md - Direct download URL:
https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/ADMIN_PAYMENT_INTEGRATION_API.md