Skip to main content
Every SDK ships the same V3 operation registry. In TypeScript 0.12.2, Python 0.12.2, and Rust 0.15.2 it contains 120 operations, so new and less-common routes do not have to wait for a language-specific helper. Use a named helper when one exists and improves readability. Use the registered executor for complete coverage.

What is covered

The registry is the SDK contract for route availability. Endpoint reference pages remain the source for request fields and response shapes.

Discover operations

Call a registered route

Operation names use the exact METHOD /v3/path form shown by the registry. Pass template fields separately; the SDK URL-encodes them. The following request reads a wallet’s combo summary:

Add query parameters

The registered executor accepts wire-format query names. This is useful when one example should translate directly across all three SDKs.
group_by=order_hash and sort_by=order_hash are supported on the global, wallet, market-token, and market-slug trade routes. Grouped trade responses use a smaller envelope than ungrouped list responses. They include trades, rows_returned, and grouped_by (plus the route identifier where applicable), but omit limit, offset, and has_more. The request’s limit and offset still select the page. If you page grouped results, track those values in your application and stop after an empty trades array instead of waiting for has_more.

Read perps through V3

Perps REST data uses the same executor and API key:
See the Perps API for instruments, response fields, filters, and freshness behavior. For live updates, use the SDK perps stream.

TypeScript convenience methods

TypeScript also has typed helpers for frequently used V3 routes:
Use execute() whenever a route is in pn.v3.operations but does not have a dedicated helper.

Retries and mutations

The V3 clients:
  • retry safe reads after transient transport errors, 408, 425, 429, and server errors
  • honor Retry-After within the configured retry ceiling
  • use the registry’s retry policy for the two read-only batch POST operations
  • never retry state-changing requests automatically
  • expose the status, request ID, retry metadata, and a credential-redacted request URL on structured V3 errors
A timeout on a webhook create, update, delete, test, secret rotation, or profile mutation is an ambiguous result. Check the resource before trying the mutation again.

Precision

V3 responses may contain exact decimal and large integer values. TypeScript and Rust retain raw V3 JSON values without forcing monetary fields through binary floating point. Python decodes JSON decimal fractions as Decimal. Preserve decimal strings or decimal objects until display. Do not convert identifiers, raw amounts, or exact prices to a JavaScript number merely for convenience.

Raw additive routes

request() is an escape hatch for a newly additive /v3/ route before the published registry is updated. It is restricted to the client’s configured origin and keeps credentials out of query strings. Prefer execute() / execute_named() for registered routes because the registry supplies the correct retry policy.

Reference