sifting/io
GET/v1/last/trade/:venue/:symbol

Last trade

Get the latest trade data for supported stocks, FX, crypto, commodities, and DEX markets, including price, size, symbol, and timestamp.

Format
JSON

Example

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/last/trade/crypto/BTCUSD"
200OKapplication/json
{  "s": "BTCUSD",  "p": "67234.5",  "P": "0.00432",  "t": 1746189123456}
Loading runner…
First load only

Parameters

Parameter
venuerequiredenum · path
stocks | crypto | forex | commodities | dex.
symbolrequiredstring · path
6–12 alphanumeric characters, no separators (e.g. BTCUSD). Case-insensitive.

Response fields

Field
sstring
Symbol.
pstring
Last trade price.
Pstring
Last trade size.
tint64 (epoch ms)
Exchange timestamp, Unix epoch milliseconds.

Reference

Price and size are strings, cast before math
Why
p (price) and P (size) come back as JSON strings to preserve exact precision. Only t is a number (epoch ms).
The trap
Math on the raw fields breaks: Python raises TypeError, JavaScript + silently joins the strings instead of adding.
Python
price = float(data["p"])
JavaScript
const price = Number(data.p);
cURL / jq
Cast in jq too: jq '.p | tonumber'
Historical bars differ
Bars from /v1/hist/* already return t, o, h, l, c, v as plain numbers, do not cast those.

Error responses

  • 503stale_snapshot

    Last tick is older than the staleness threshold (default 5s). Body carries last_t and server_now so clients can decide to retry or switch to WebSocket.

    {  "error": "stale_snapshot",  "last_t": 1746189100000,  "server_now": 1746189130000}

More in Live market data

See all