GET /api/v1/prices returns what each venue’s price for a pair is right now, from prices TetraFi already holds. No venue is asked, so it is fast, and it does not count against the one-every-3-seconds quote limit. Use it to show prices, size a trade or decide which venues to ask, then request quotes when you want to trade.
A price is never firm: every row carries firm: false, and no venue is bound to it. Whether a venue will be bound to its price is known only from a quote: ask POST /api/v1/quotes, and send filters.firmOnly: true to keep only firm quotes (Firm only).
The cURL block below continues the Quickstart: first copy its request helper and pair variables from step 1. You can also run the complete, quote-only search-basics.sh script after setting the same credentials; it defines the helper and variables for you.
Query parameters
The filters mean what they mean in a quote request, and
venues.include and venues.exclude take the same venue ids (Venue types and venues). A venue they exclude has no row.
An API key needs the prices_read scope, which the Read quotes permission grants (Permissions).
The response
Row status
Treat a status you do not recognise as “other”.
When to quote instead
Prices tell you what venues are showing. Request a quote when you want to trade:- only a quote has an
idyou can order; - a venue that publishes no price (
priceSourceNone) answers only a quote request; - an executable quote holds its terms until
expiresAt; a price holds nothing.
Caching and limits
- Each response carries an
ETag. Send it back inIf-None-Matchto get304 Not Modifiedwhen nothing changed. - Prices have their own rate limit, separate from quotes:
429 PRICES_RATE_LIMITwithRetry-Afterin seconds. GET /api/v1/prices/streamwatches up to 25 pairs at once (pairs=USDC:ETH,USDC:EURCinstead ofsellandbuy, the other parameters as above) and sends a pair’s snapshot as asnapshotserver-sent event when it changes. Each caller may hold up to 4 streams at once; another is refused with429 PRICES_STREAM_LIMIT.