Overview
Clients frequently need prices for multiple assets at once. The current API requires one request per asset causing N round-trips. A batch endpoint reduces this to one call and allows parallel oracle fetches server-side.
Endpoint
POST /api/v1/prices/batch
Content-Type: application/json
{ "assets": [
{ "code": "XLM" },
{ "code": "USDC", "issuer": "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN" }
] }
Response:
{
"results": {
"XLM": { "price_usd": 0.112, "source": "stellar_dex", "is_stale": false },
"USDC:GA5Z...": { "price_usd": 1.0002, "source": "coingecko", "is_stale": false }
},
"fetched_at": "2024-01-15T10:30:00Z"
}
Requirements
- Maximum 50 assets per request (Zod validation)
- All assets fetched in parallel via
Promise.allSettled
- A single asset failure does not fail the whole batch — it appears with
price_usd: null
- Separate rate limit: 10 batch requests per minute per IP
- Response key format:
CODE for native, CODE:ISSUER for issued assets
Acceptance Criteria
Overview
Clients frequently need prices for multiple assets at once. The current API requires one request per asset causing N round-trips. A batch endpoint reduces this to one call and allows parallel oracle fetches server-side.
Endpoint
Response:
{ "results": { "XLM": { "price_usd": 0.112, "source": "stellar_dex", "is_stale": false }, "USDC:GA5Z...": { "price_usd": 1.0002, "source": "coingecko", "is_stale": false } }, "fetched_at": "2024-01-15T10:30:00Z" }Requirements
Promise.allSettledprice_usd: nullCODEfor native,CODE:ISSUERfor issued assetsAcceptance Criteria
POST /api/v1/prices/batchimplementedPromise.allSettled