activated, waitingForTrigger, finished, terminated, stopped, and error. Each event carries the TWAP size, executed size and notional, duration, and trigger settings. This route returns the events of one wallet on Hyperliquid perpetuals. History starts June 17, 2026 18:00 UTC. Events are ordered oldest first. Page with meta.next_cursor until meta.has_more is false. A page never ends partway through a millisecond, so it can hold fewer events than limit.
Route Metadata
| Field | Value |
|---|---|
| Method | GET |
| Path | /v1/hyperliquid/twap/user/{user} |
| operationId | getHyperliquidUserTwap |
| Tag | Hyperliquid - Orders |
| Family | Hyperliquid Core |
| Deprecated or legacy | no |
Human endpoint reference
OpenGET /v1/hyperliquid/twap/user/{user} for authentication, parameters, responses, and examples.
Request Parameters
Path Parameters
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "getHyperliquidUserTwap path parameters",
"type": "object",
"required": [
"user"
],
"properties": {
"user": {
"description": "Wallet address: 0x followed by 40 hex characters (case-insensitive).",
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"example": "0x31ca8395cf837de08b24da3f660e77761dfb974b",
"x-parameter-location": "path"
}
}
}
Query Parameters
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "getHyperliquidUserTwap query parameters",
"type": "object",
"properties": {
"start": {
"description": "Start of the window: Unix milliseconds or an RFC 3339 timestamp. Defaults to 24 hours ago.",
"oneOf": [
{
"type": "integer",
"format": "int64",
"example": 1790812800000
},
{
"type": "string",
"format": "date-time",
"example": "2026-10-01T00:00:00Z"
}
],
"x-parameter-location": "query"
},
"end": {
"description": "End of the window: Unix milliseconds or an RFC 3339 timestamp. Defaults to now.",
"oneOf": [
{
"type": "integer",
"format": "int64",
"example": 1790899200000
},
{
"type": "string",
"format": "date-time",
"example": "2026-10-02T00:00:00Z"
}
],
"x-parameter-location": "query"
},
"cursor": {
"description": "Value of `meta.next_cursor` from the previous page. The next page starts after it.",
"type": "string",
"x-parameter-location": "query"
},
"limit": {
"description": "Maximum number of events to return (default: 100, max: 1000; larger values are capped at 1000).",
"type": "integer",
"default": 100,
"minimum": 1,
"maximum": 1000,
"x-parameter-location": "query"
}
}
}
Response Contracts
Status 200
TWAP order status events for the walletapplication/json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "getHyperliquidUserTwap response 200",
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"description": "One TWAP order status event.",
"type": "object",
"required": [
"block_number",
"block_time",
"coin",
"executed_notional",
"executed_size",
"minutes",
"randomize",
"reduce_only",
"side",
"size",
"started_at",
"status",
"timestamp",
"twap_id",
"user_address"
],
"properties": {
"block_number": {
"description": "Hyperliquid block number.",
"type": "integer",
"format": "int64"
},
"block_time": {
"description": "Time of the block that carried the event (RFC 3339, UTC).",
"type": "string",
"format": "date-time"
},
"coin": {
"description": "Market symbol.",
"type": "string",
"example": "HYPE"
},
"executed_notional": {
"description": "Notional filled so far, in quote units.",
"type": "number"
},
"executed_size": {
"description": "Size filled so far, in base units.",
"type": "number"
},
"minutes": {
"description": "TWAP duration in minutes.",
"type": "integer"
},
"randomize": {
"description": "True when slice timing is randomized.",
"type": "boolean"
},
"reduce_only": {
"description": "True for a reduce-only TWAP.",
"type": "boolean"
},
"side": {
"description": "`B` (buy) or `A` (sell).",
"type": "string",
"enum": [
"B",
"A"
]
},
"size": {
"description": "Total TWAP size, in base units.",
"type": "number"
},
"started_at": {
"description": "When the TWAP started (RFC 3339, UTC).",
"type": "string",
"format": "date-time"
},
"status": {
"description": "`activated`, `waitingForTrigger`, `finished`, `terminated`, `stopped`, or `error`.",
"type": "string",
"example": "activated"
},
"stop_px": {
"description": "Price bound that ends the TWAP: the highest price for a buy, the lowest for a sell. Omitted when not set.",
"type": "number"
},
"timestamp": {
"description": "When the status event happened (RFC 3339, UTC).",
"type": "string",
"format": "date-time"
},
"trigger_above": {
"description": "True when the TWAP activates at or above `trigger_px`. Omitted for a TWAP without a trigger.",
"type": "boolean"
},
"trigger_px": {
"description": "Activation trigger price. Omitted for a TWAP without a trigger.",
"type": "number"
},
"twap_id": {
"description": "TWAP order ID. Every event of one TWAP carries the same ID.",
"type": "integer",
"format": "int64"
},
"user_address": {
"description": "Wallet that placed the TWAP, lowercase.",
"type": "string"
}
}
}
},
"meta": {
"description": "Response metadata",
"type": "object",
"properties": {
"count": {
"description": "Number of records returned",
"type": "integer"
},
"coverage_from": {
"description": "Earliest coverage for the requested symbol and data type. Present only when the requested window ends before coverage begins.",
"type": "string",
"format": "date-time"
},
"has_more": {
"description": "Present on cursor-paged routes: true when another page exists. `next_cursor` is present exactly when it is true.",
"type": "boolean"
},
"next_cursor": {
"description": "Cursor for pagination (timestamp). Use this value as the `cursor` parameter to fetch the next page of results.",
"type": "string",
"nullable": true
},
"notice": {
"description": "Human-readable advisory about the response. Used when the requested window ends before coverage begins for the symbol, and on CVD responses that are one page of several; may carry other advisories in future.",
"type": "string"
},
"request_id": {
"description": "Unique request ID for support",
"type": "string",
"format": "uuid"
},
"symbol": {
"description": "Present on per-symbol routes: the symbol the response covers.",
"type": "string"
},
"venue": {
"description": "Present on per-symbol routes: the venue the response covers, for example `hyperliquid` or `hip3`.",
"type": "string"
}
}
},
"success": {
"type": "boolean",
"example": true
}
}
}
Status 400
Invalid requestapplication/json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "getHyperliquidUserTwap response 400",
"description": "Error response",
"type": "object",
"properties": {
"code": {
"description": "HTTP status code",
"type": "integer"
},
"error": {
"description": "Error message",
"type": "string"
},
"error_code": {
"description": "Machine-readable error code. Common values: `invalid_query_params` (a query parameter failed to parse or validate) and `invalid_path_params` (a path parameter failed to parse). Other endpoint-specific codes exist; treat unknown codes as generic errors of the given HTTP status.",
"type": "string"
},
"param": {
"description": "The parameter at fault, when the error is about one parameter.",
"type": "string"
},
"request_id": {
"description": "Unique request ID for support",
"type": "string",
"format": "uuid"
},
"success": {
"description": "Always false on an error.",
"type": "boolean",
"example": false
}
}
}
OpenAPI example
{
"code": 400,
"error": "Failed to deserialize query string: limit: invalid digit found in string",
"error_code": "invalid_query_params",
"param": "limit",
"request_id": "3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05",
"success": false
}
Status 401
Authentication requiredapplication/json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "getHyperliquidUserTwap response 401",
"description": "Error response",
"type": "object",
"properties": {
"code": {
"description": "HTTP status code",
"type": "integer"
},
"error": {
"description": "Error message",
"type": "string"
},
"error_code": {
"description": "Machine-readable error code. Common values: `invalid_query_params` (a query parameter failed to parse or validate) and `invalid_path_params` (a path parameter failed to parse). Other endpoint-specific codes exist; treat unknown codes as generic errors of the given HTTP status.",
"type": "string"
},
"param": {
"description": "The parameter at fault, when the error is about one parameter.",
"type": "string"
},
"request_id": {
"description": "Unique request ID for support",
"type": "string",
"format": "uuid"
},
"success": {
"description": "Always false on an error.",
"type": "boolean",
"example": false
}
}
}
OpenAPI example
{
"code": 401,
"error": "Missing authentication credentials. Provide X-API-Key header or Bearer token.",
"error_code": "unauthorized",
"request_id": "71ed4b6f-63ef-4ae1-a123-07ffa47c1c14",
"success": false
}
Status 429
Rate limit exceededapplication/json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "getHyperliquidUserTwap response 429",
"description": "Error response",
"type": "object",
"properties": {
"code": {
"description": "HTTP status code",
"type": "integer"
},
"error": {
"description": "Error message",
"type": "string"
},
"error_code": {
"description": "Machine-readable error code. Common values: `invalid_query_params` (a query parameter failed to parse or validate) and `invalid_path_params` (a path parameter failed to parse). Other endpoint-specific codes exist; treat unknown codes as generic errors of the given HTTP status.",
"type": "string"
},
"param": {
"description": "The parameter at fault, when the error is about one parameter.",
"type": "string"
},
"request_id": {
"description": "Unique request ID for support",
"type": "string",
"format": "uuid"
},
"success": {
"description": "Always false on an error.",
"type": "boolean",
"example": false
}
}
}
OpenAPI example
{
"code": 429,
"error": "Rate limit exceeded"
}