Generated mirror. The source of truth is the private
opendpp-nodebackend; the SDKs here are generated from its public OpenAPI contract. Pull requests are closed automatically — but issues are welcome (seeCONTRIBUTING.md).
Official client SDKs for the OpenDPP Digital Product Passport API — generated from the public OpenAPI contract and version-locked to it.
| SDK | Package | Source |
|---|---|---|
| TypeScript | @opendpp/sdk (npm) |
typescript/ |
| Java | eu.opendpp-node:opendpp-sdk (Maven Central) |
java/ |
| Kotlin | via the Java artifact — same coordinates, idiomatic from Kotlin | java/ |
| Python | opendpp-sdk (PyPI) |
python/ |
Part of the OpenDPP open client surface (Apache-2.0). The SDKs are ergonomics only — they embed no tier/masking logic and no restricted-key knowledge; every privileged operation is a typed call to the hosted node behind a Developer-Plan key. A rival could regenerate an equivalent from the public spec in an afternoon — the value is the hosted node it calls, not the client.
npm install @opendpp/sdkimport { createOpenDppClient, getHealth } from "@opendpp/sdk";
const client = createOpenDppClient({ apiKey: process.env.OPENDPP_API_KEY });
const health = await getHealth({ client });Full SDK + docs: typescript/.
implementation("eu.opendpp-node:opendpp-sdk:1.11.0")import eu.opendppnode.sdk.OpenDpp;
import eu.opendppnode.sdk.api.ServiceApi;
import eu.opendppnode.sdk.invoker.ApiClient;
ApiClient client = OpenDpp.client(System.getenv("OPENDPP_API_KEY"));
var health = new ServiceApi(client).getHealth();Java 17+, built on the JDK HttpClient with Jackson. Full SDK + docs: java/.
Kotlin consumes the same artifact idiomatically — no separate package:
val client = OpenDpp.client(System.getenv("OPENDPP_API_KEY"))
val health = ServiceApi(client).healthpip install opendpp-sdkA fully-typed client (pydantic v2 + urllib3, synchronous) for Python ≥ 3.9, generated with the same
openapi-generator toolchain as the Java lane. Response models never reject unknown fields (a future
MINOR server release must not crash deployed clients); the hand-written
opendpp_sdk.ergonomics module carries the configured-client
factory and the resolve_*_as helpers for the content-negotiated public resolvers.
from opendpp_sdk.api.service_api import ServiceApi
from opendpp_sdk.ergonomics import create_opendpp_client, resolve_public_passport_as
client = create_opendpp_client(api_key=os.environ["OPENDPP_API_KEY"])
health = ServiceApi(client).get_health()
doc = resolve_public_passport_as(client, passport_id, "application/ld+json")Each SDK is mechanically generated from openapi.json (the
curated public API contract) and version-locked to OPENAPI_VERSION — the SDK's major.minor is
the contract version (@opendpp/sdk@1.11.x targets contract 1.11), while the patch digit is the
SDK's own lane for client-only fixes against the same contract. CI regenerates and fails on any
drift, so the committed client always matches the spec. The two openapi-generator lanes (Java,
Python) read the contract through one shared normalizer (scripts/normalize-spec.mjs,
authored and unit-tested in the OpenDPP node repository and synced here) rather than per-lane
private rewrites. Releases are keyless where the registry supports it (OIDC trusted publishing: npm
for TypeScript, PyPI for Python); the Java artifacts are GPG-signed and published to Maven Central.
Nothing here re-implements a server-side capability.
- opendpp-interop — interop boundary kit: official AAS + UNTP schemas, validated samples, an offline conformance validator, the OpenAPI contract.
- opendpp-knowledge — the API as an OKF (Open Knowledge Format) bundle for AI agents.
- Live service · API reference ·
openapi.json
Apache-2.0 © Opendpp UAB. See NOTICE and TRADEMARK.md.
"OpenDPP" is a trademark of Opendpp UAB; the license grants no rights to the marks.
