---
title: "Rolling 24-hour market VWAP"
method: GET
path: "/api/public/v1/pulse/market/vwap/{coin}"
tags: ["Market"]
---

# Rolling 24-hour market VWAP

`GET /api/public/v1/pulse/market/vwap/{coin}`

## Request

- Base URL: `https://api.coinversa.ai`
- URL: `https://api.coinversa.ai/api/public/v1/pulse/market/vwap/{coin}`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/coinversa/apis/coinversa-api/docs/api/public/v1/pulse/market/vwap/:coin/get.ts> (a function with typed inputs; its response is checked against the schema)

Exact volume-weighted execution price from indexed perpetual fills over [windowStart, windowEnd), not candles or open-position entries. One current 24h result per venue market; no custom windows or anchors. Markets with at least 25,000 per-user fill rows/day are refreshed together every two minutes; smaller markets and requests before the first successful warm calculate on demand. Requests never start the exchange-wide batch. Failed batch refreshes may serve older results: inspect windowEnd, calculatedAt and latestTradeAt. An empty window returns null vwap, zero volumes and null latestTradeAt; 404 is returned only when the venue confirms the symbol is unknown. No migrations or additional indexes are required.

## Path parameters

- `coin` string, required: Perpetual market, e.g. BTC or xyz:GOLD. Case and surrounding whitespace are normalized. Spot and outcome contracts are not supported.

## Response `200`

OK

- MarketVWAPBody
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `baseVolume` number, double, required: Base-asset volume, counting each match once (sum of both users' fill sizes divided by two).
  - `cached` boolean, required: True when this response came from the scheduled large-market snapshot; false for an on-demand calculation.
  - `calculatedAt` string, date-time, required: When the calculation completed, not the newest fill time.
  - `coin` string, required
  - `fillRows` integer, required: Indexed per-user fill rows, normally two per match. Also used to classify expensive markets.
  - `latestTradeAt` string, date-time, nullable, required: Newest indexed fill included in this calculation. Null for an empty window; the window end alone does not establish feed freshness.
  - `quoteVolume` number, double, required: Quote notional, counting each match once (sum of both users' price * size divided by two).
  - `vwap` number, double, nullable, required: SUM(price * size) / SUM(size) over indexed fills in the window. Null when there is no volume; not a candle approximation or open-position entry price.
  - `window` '24h', required
  - `windowEnd` string, date-time, required: Exclusive UTC cutoff captured before the query. Preserved on cache hits and failed refreshes.
  - `windowStart` string, date-time, required: Inclusive UTC start, exactly 24 hours before windowEnd.

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error
- `504`: Gateway Timeout

## Changes

- **2026-10-21** `3454317a5830`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/coinversa/apis/coinversa-api/changes/api/public/v1/pulse/market/vwap/:coin/get.md)

---

[API](https://skmtc.dev/coinversa/apis/coinversa-api.md) - [All operations](https://skmtc.dev/coinversa/apis/coinversa-api/llms.txt) - [OpenAPI document](https://skmtc.dev/coinversa/apis/coinversa-api/revisions/3454317a5830?raw)
