User-Facing API
Direct endpoints for mobile app integration — typically called by your own backend on the end user's behalf. Same authentication as every other tenant-facing route on this site: X-API-Key + X-API-Secret (see Authentication).
All user endpoints are prefixed with /api/v1/u/ and automatically resolve the user from the JWT token.
Wallet Endpoints
Create Wallet
Creates or returns existing custodial wallet for the authenticated user.
curl -X POST "http://localhost:8100/api/v1/u/wallet/create" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET" \
-d '{
"chain": "celo"
}'{
"address": "0xe3f53fe54f8e1b5e8c86f070e4c9c2c7fa641d0d",
"chainId": 11142220,
"chains": [
"celo",
"ethereum",
"base"
]
}Get Wallet
Returns the user's custodial wallet.
curl -X GET "http://localhost:8100/api/v1/u/wallet" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"address": "0xe3f53fe54f8e1b5e8c86f070e4c9c2c7fa641d0d",
"chainId": 11142220
}Wallet Balance
Returns native + token balances for the user's wallet.
curl -X GET "http://localhost:8100/api/v1/u/wallet/balance" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"address": "0xe3f53fe54f8e1b5e8c86f070e4c9c2c7fa641d0d",
"chainId": 11142220,
"balances": {
"native": "0.5",
"USDT": {
"balance": "10000000",
"decimals": 6,
"humanAmount": 10
},
"IMC": {
"balance": "447000000",
"decimals": 6,
"humanAmount": 447
}
}
}All Balances (Multi-Chain)
Returns balances across all configured chains.
curl -X GET "http://localhost:8100/api/v1/u/wallet/balances" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"balances": [
{
"chain": "celo",
"address": "0xe3f53fe54f8e1b5e8c86f070e4c9c2c7fa641d0d",
"native": "0.5",
"tokens": {
"USDT": {
"balance": "10000000",
"decimals": 6,
"humanAmount": 10
},
"IMC": {
"balance": "447000000",
"decimals": 6,
"humanAmount": 447
}
}
}
],
"count": 1
}Token Endpoints
Mint Token
Mints tokens to the user's wallet.
curl -X POST "http://localhost:8100/api/v1/u/token/mint" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET" \
-d '{
"symbol": "USDT",
"chain": "celo",
"amountBase": 10000000,
"externalId": "deposit-001"
}'{
"txHash": "0x...",
"chain": "celo",
"symbol": "USDT",
"amount": 10
}Send Token
Transfers tokens from the user's wallet.
curl -X POST "http://localhost:8100/api/v1/u/token/send" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET" \
-d '{
"symbol": "USDT",
"chain": "celo",
"to": "0xe3f53fe54f8e1b5e8c86f070e4c9c2c7fa641d0d",
"amountBase": 5000000
}'{
"txHash": "0x...",
"chain": "celo",
"symbol": "USDT",
"amount": 5
}Burn Token
Burns tokens from the user's wallet (requires prior approval on EVM chains — see Approve Spender. Stellar has no allowance concept; use Burn (Holder) semantics there instead, which this proxy endpoint applies automatically per chain).
curl -X POST "http://localhost:8100/api/v1/u/token/burn" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET" \
-d '{
"symbol": "USDT",
"chain": "celo",
"amountBase": 5000000,
"externalId": "withdrawal-001"
}'{
"txHash": "0x...",
"chain": "celo",
"symbol": "USDT",
"amount": 5
}Token Balance
Returns balance for a specific token.
curl -X GET "http://localhost:8100/api/v1/u/token/balance?symbol=USDT&chain=celo" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"symbol": "USDT",
"chain": "celo",
"balance": "10000000",
"decimals": 6,
"humanAmount": 10
}IMC Balance
curl -X GET "http://localhost:8100/api/v1/u/token/balance?symbol=IMC&chain=celo" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"symbol": "IMC",
"chain": "celo",
"balance": "447000000",
"decimals": 6,
"humanAmount": 447
}IMC itself is a Celo asset — no toggle here; use the generic Token Balance endpoint above with your own Stellar asset's symbol instead.
Swap Endpoints
These proxy the Celo Uniswap V2 AMM specifically (note the path/router response fields) — no chain toggle here, since Stellar's AMM is a separate native mechanism with no equivalent mobile proxy today. For a chain-agnostic swap, see IMM instead.
Swap Quote
Get a price quote for a token swap.
curl -X GET "http://localhost:8100/api/v1/u/swap/quote?from=USDT&to=IMC&amount=10.0&chain=celo" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"from": "USDT",
"to": "IMC",
"amountIn": 10,
"amountOut": 9.98,
"rate": 0.998,
"path": [
"0x...",
"0x..."
],
"router": "0x..."
}Execute Swap
Execute a token swap via AMM.
curl -X POST "http://localhost:8100/api/v1/u/swap" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET" \
-d '{
"from": "USDT",
"to": "IMC",
"amountIn": 10,
"minAmountOut": 9.9,
"chain": "celo"
}'{
"txHash": "0x...",
"from": "USDT",
"to": "IMC",
"amountIn": 10,
"amountOut": 9.98,
"chain": "celo"
}Airtime Deposit (Proxy)
These endpoints delegate to app-core-backend for airtime tokenization.
Submit Airtime Deposit
curl -X POST "http://localhost:8100/api/v1/u/airtime/deposit" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET" \
-d '{
"carrier": "safaricom",
"phone": "+254712345678",
"amountKES": 500,
"screenshotUrl": "https://..."
}'{
"depositId": "dep-001",
"status": "pending",
"amountKES": 500
}List Airtime Deposits
curl -X GET "http://localhost:8100/api/v1/u/airtime/deposits?status=pending&limit=10" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"deposits": [
{
"depositId": "dep-001",
"status": "pending",
"amountKES": 500,
"createdAt": "2026-08-30T12:00:00Z"
}
],
"count": 1
}Get Deposit Status
curl -X GET "http://localhost:8100/api/v1/u/airtime/deposit/dep-001" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "X-API-Secret: YOUR_API_SECRET"{
"depositId": "dep-001",
"status": "completed",
"amountKES": 500,
"tokenMinted": "5000000",
"txHash": "0x..."
}