Skip to content

SDKs

First-party clients for TypeScript and Python wrap the parts of this API that are protocol rather than payload: token minting and refresh, retry behavior, WebSocket resume, and webhook signature verification. They are the fastest correct path, and everything they do is documented here as raw HTTP if you would rather not use them.

Not published to a package registry yet

The SDKs are not on npm or PyPI. There is no npm install or pip install for them that works today, and the package names are not final. They are delivered as source with your integration pack; add them to your project the way you would any vendored dependency. Publication is part of general availability and will be a changelog entry.

What they handle for you

Concern What the SDK does
Tokens Mints on first use, caches, and refreshes ahead of expiry — including across concurrent callers, so a cold start does not become a burst of token requests.
Retries Retries only what is safe to retry, honors Retry-After, and backs off with jitter. It never retries a 409.
Errors Raises a typed error per error code, each carrying the code and the request_id.
Streaming A resumable socket that negotiates the subprotocol, tracks the last processed seq, and re-subscribes with after_seq after a drop.
Webhooks Signature verification, including the two-signature rotation window, with a constant-time compare and the timestamp tolerance already applied.
Versioning Asserts at build time that the SDK's major matches the API's, so a mismatched pairing fails loudly instead of at runtime.

Request and response shapes are generated from the same definition that produces the reference, so they cannot drift from it.

Both SDKs also carry the write-side helpers: an Idempotency-Key is minted for you when you do not supply one, and a read-modify-write helper handles the ETag/If-Match cycle so a stale update is re-read rather than blindly replayed. Neither SDK auto-retries a 409 — reusing a key on a changed request is never safe, and that is a decision only your code can make.

Shape of the TypeScript client

// The package name is finalized at general availability. Your integration pack
// names the current one.
import { PlatformClient } from '<platform-sdk>';

const client = new PlatformClient({
  baseUrl: process.env.PLATFORM_BASE_URL!,
  credentials: {
    clientId: process.env.PLATFORM_CLIENT_ID!,
    clientSecret: process.env.PLATFORM_CLIENT_SECRET!,
    scope: 'accounts:read transactions:read'
  }
});

Shape of the Python client

# The distribution name is finalized at general availability. Your integration
# pack names the current one.
from platform_sdk import ClientCredentials, PlatformClient

client = PlatformClient(
    os.environ["PLATFORM_BASE_URL"],
    credentials=ClientCredentials(
        client_id=os.environ["PLATFORM_CLIENT_ID"],
        client_secret=os.environ["PLATFORM_CLIENT_SECRET"],
        scope="accounts:read transactions:read",
    ),
)

The Python client runs on the standard library — installing it pulls nothing into your dependency tree. If you already depend on an HTTP library, you can supply it through the client's transport hook instead.

Dependencies and support

  • TypeScript: Node 22 or later.
  • Python: 3.10 or later.

Both are covered by your platform agreement rather than an open-source license; they are yours to embed in your own application, not to redistribute.