3rd party API
Overview
This document describes the HTTP API that external partners can use to automate account provisioning, portfolio monitoring, trading oversight, and conversational support. All endpoints are versioned under /api/v1 and require an API key.
Need an API key? contact us on discord
Authentication
Error Handling
Every endpoint returns standard HTTP status codes. Error bodies follow this structure:
{
"error": {
"code": "string",
"message": "Human readable explanation",
"details": { "field": "optional data" }
}
}Pagination & Filtering
Collection endpoints accept
page,pageSize(default 25, max 200),sort, and resource-specific filters.
Resource Models
Below are the core objects returned by the API.
User
id, signupWalletId, wallets[] (each id, address, chain, type), provider, invitedBy, createdAt, updatedAt
{"id":"usr_123","provider":"wallet","wallets":[{"id":"wal_signup","address":"7HgJ...","chain":"solana","type":"signup"}]}
Holding
id, wallet, tokenAddress, chain, decimals, assetClass, totalHoldings, tokenUSDPrice, tokenSolPrice, totalUSDval, totalSolval, usdValueUpdatedAt, timestamps
{"id":"hld_1","wallet":"wal_1","tokenAddress":"So1111...","assetClass":"majors","totalUSDval":"200500.12"}
Transaction
id, walletId, orderId, txType (buy, sell, swap), fromToken, toToken, txAmount, toAmount, txSignature, solValue, usdValue, feeInLamports, timestamps
{"id":"txn_1","walletId":"wal_1","txType":"buy","usdValue":"2400.12","orderId":"ord_1"}
PositionThesis
id, userId, walletId, tokenAddress, tokenSymbol, thesis, riskRewardRatio, confidence, expiresAt, timestamps
{"id":"ths_1","userId":"usr_123","tokenSymbol":"HYPE","confidence":0.45}
AutoTradeLog
id, userId, log, thoughts, tokenAddress, createdAt
{"id":"log_1","userId":"usr_123","log":"Opened thesis on HYPE"}
AutoTradeInstruction
id, userId, instructions, allocation, allowList, strategy, riskTolerance, isActive, timestamps
{"id":"ati_1","userId":"usr_123","isActive":true,"riskTolerance":"balanced"}
Conversation
conversationId, userId, messages[] (each id, role, content, createdAt), updatedAt
{"conversationId":"65f...","userId":"usr_123","messages":[{"role":"user","content":"What is my PnL?"}]}
User payloads embed wallets, which mirror rows in milo.wallets and expose id, address, and chain (network, currently solana). The type field is normalized for this API: the wallet referenced by signupWalletId is labeled signup, and non-custodial wallets provisioned by Milo are labeled milo.
Wallet Structure Example
type is either signup (the onboarding wallet) or milo (non-custodial wallets issued by Milo). Additional non-custodial wallets inherit the same structure with their respective identifiers.
Endpoints
All endpoints below require the X-API-Key header described earlier (examples omit it for brevity). User-scoped endpoints always identify the target user through the userId path parameter.
Get Transactions
Return every on-chain confirmed transaction captured for a wallet.
Method: GET
Path:
/api/v1/wallets/{walletId}/transactions?page=1&pageSize=50Notes: Includes both executed order-linked transactions and ad-hoc transfers (
orderIdcan benull).txTypeis always one ofbuy,sell, orswap.Response:
Update Auto Trade Settings
Upsert the auto trade settings.
Method: PATCH
Path:
/api/v1/users/{userId}/auto-trade-settingsField requirements:
riskToleranceandstrategymust always be supplied.allocation,instructions, andallowListare optional.isActivecan be set totrueonly if the user’s Milo wallet currently holds at least 1 SOL.
Body:
Response:
Last updated