Added

v1.17.0 - 2026-03-06

Added

  • New endpoint: GET /v2/account_history (Beta) — cursor-based account history

    A new version of the account history endpoint with cursor-based pagination, advanced filtering, and sorting. The original GET /account_history endpoint remains available and unchanged.

    Key differences from V1:

    FeatureV1 (/account_history)V2 (/v2/account_history)
    Paginationcount paramCursor-based (cursor, next_cursor)
    FilteringNoneevent_types, actions, markets, transfer_type
    SortingFixed ascendingsortKey + sortOrder
    ResponseFlat history[] arrayStructured events[] with typed data
    TimestampsMillisecondsSeconds
    Event IDNoneUnique id per event

    Request example:

    GET /v2/account_history?address=0x...&event_types=trade,transfer&sortKey=timestamp&sortOrder=desc&limit=50

    This endpoint is in Beta and has not been fully validated in production yet.

  • New error responses for POST /deposit — launch guardrails

    Two new error responses when platform capacity limits are reached:

    • 400 DEPOSIT_LIMIT_EXCEEDED — Returned when a deposit would cause total cumulative deposits for the account to exceed the platform limit. Includes limit, currentTotal, and requested fields.

    • 403 ACCOUNT_LIMIT_REACHED — Returned when the platform has reached its maximum number of accounts and the deposit would create a new account. Includes limit field.

  • New error code: SIGNATURE_DEADLINE_INVALID

    Replaces the generic signature expired error with enhanced diagnostic fields. When a signature deadline is missing, expired, or outside the acceptable window, the error response now includes:

    • serverTime — Current server Unix timestamp (seconds)
    • minTimestamp — Minimum acceptable deadline
    • maxTimestamp — Maximum acceptable deadline
    • givenTimestamp — The deadline value provided by the client

    Helps diagnose clock skew issues between client and server. Currently returned by POST /heartbeat; other endpoints may adopt this in future releases.

  • New rejection reasons for PATCH /limit — wash trading and self-crossing prevention

    Edited orders can now be rejected with two additional reasons in the rejected[] array:

    • wash trading violation — Edited order would cross the maker's own resting orders
    • self crossing orders submitted — Multiple edits in the same batch would cross each other

    These checks already existed for POST /limit and now apply to PATCH /limit as well.

Changed

  • Breaking: PATCH /limit now creates a new order ID on edit

    Editing a limit order now internally cancels the original order and creates a new one with a new order_id derived from the new signature. The old order_id is discarded.

    Before: The order retained its original order_id after editing.

    After: A new order_id is returned in the response. The system emits a CancelOrder event for the old order followed by a PostOrder event for the new order.

    Migration: Clients tracking orders by ID must update their references to the new order_id returned in the edited[] array. WebSocket subscribers will see CancelOrder + PostOrder events instead of the previous EditOrder event.

  • POST /combototal_net_premium sign convention corrected

    The sign convention for total_net_premium in combo trade responses has been fixed:

    • Negative = net debit (taker pays)
    • Positive = net credit (taker receives)

    Only options legs contribute to this value; perpetual legs are excluded.

    Migration: Clients consuming total_net_premium should verify their sign handling — values may be inverted compared to previous behavior.

  • GET /orders — description updated to "open orders"

    The endpoint summary and description now say "open orders" instead of "active orders" to match the order_state: "open" enum value. No behavioral change.

Fixed

  • POST /mmp/config — corrected EIP-712 signature type definition

    The documented EIP-712 type MMPConfigType incorrectly included quantityLimit, deltaLimit, and vegaLimit fields. The actual signed message only contains 6 fields: smartAccountAddress, pairSymbol, status, interval, frozenTime, and deadline. The risk limit fields are part of the request body but are not signed.

    Migration: If you implemented MMP config signing based on the 9-field type from previous documentation, update your signing code to use only the 6 fields above. The limit values should still be included in the request body, just not in the EIP-712 signature.

Documentation

  • Split GET /account_history into separate V1 and V2 endpoint pages
  • Fixed V1 AccountHistory schema to match actual flat array response (was incorrectly showing nested trades/account_events object)
  • Added SIGNATURE_DEADLINE_INVALID to StandardError error codes reference
  • Added wash trading and self-crossing rejection reasons to PATCH /limit response schema
  • Corrected POST /mmp/config EIP-712 type from 9 fields to actual 6 fields
  • Removed stale edit_order WebSocket event type from all orderbook channel docs (replaced by cancel_order + post_order sequence when editing orders)