Develop

SDKs

First-party clients for Python and TypeScript/JavaScript. Everything else is plain HTTP.

Two clients exist

Python and TypeScript/JavaScript, and both are real. This page used to also list Go and Rust SDKs, a CLI installer, and three community libraries — none of those exist, and the samples called methods the clients don’t have. They have been removed rather than left as a preview of something nobody is building.

Python

Published to PyPI as nodedata. Python 3.9+, and light enough to install onto a Jetson beside a pinned torch/numpy stack.

bash
pip install nodedata
python
from nodedata import NodeData

nd = NodeData()  # reads NODE_DATA_API_KEY from the environment

page = nd.models.list(q="manipulation", limit=20)
for asset in page["items"]:
    print(asset["slug"], asset["price"]["amount"] / 100)

asset = nd.models.retrieve("bin-picking-policy-v2")

Source lives in packages/sdk-python in the Node Data repo. It is at an earlier stage than the TypeScript client — check its README for which endpoints are covered before depending on it.

TypeScript / JavaScript

The more complete of the two: every endpoint, cursor pagination as an async iterable, typed errors carrying the API’s stable codes, retries with jittered backoff, streaming inference, and webhook signature verification. Zero dependencies, and it runs on Node 18+, Bun, Deno, Cloudflare Workers, and Vercel Functions.

Not on npm yet

npm install @node-data/sdk will not resolve — the package isn’t on the public registry. It is still a real npm package, so install it from the URL the registry would have served. It lands under the real package name, so imports read @node-data/sdk and moving to the registry later is a one-line change.
bash
npm install https://www.nodedata.dev/node-data-sdk-latest.tgz
typescript
import { NodeData } from "@node-data/sdk";

const nd = new NodeData({ apiKey: process.env.NODE_DATA_API_KEY });

// Cursor pagination, handled for you
const page = await nd.models.list({ q: "manipulation", limit: 20 });
for await (const asset of page) {
  console.log(asset.slug, asset.price.amount / 100);
}

// Signed, short-lived download URL — hand it to any downloader
const { url } = await nd.models.download("bin-picking-policy-v2");

Ships ESM and CommonJS entry points with bundled type declarations, so require() works too:

javascript
const { NodeData } = require("@node-data/sdk");

const nd = new NodeData({ apiKey: process.env.NODE_DATA_API_KEY });

Full method list on the SDK reference.

Other languages

There is no Go SDK, no Rust crate, no CLI, and no community client. The API is ordinary HTTP and JSON with bearer auth, so any language works without one:

bash
curl "https://www.nodedata.ai/api/v1/models?limit=5" \
  -H "Authorization: Bearer $NODE_DATA_API_KEY"

See the API reference for every endpoint, and errors for the retry rules a hand-rolled client should follow.

Pin your version

Minor releases can add fields. Pin the exact version in CI and bump deliberately — with a tarball install that means pinning the versioned filename rather than -latest.