Which DPDP Guard SDKs are available today?
Eight, all published to public package registries, plus the shared @dpdpguard/contract package they're built against. Verified live directly against each registry on 31 August 2026: @dpdpguard/js 2.1.0 and @dpdpguard/server 2.1.0 on npm, @dpdpguard/react-native 2.0.0 on npm, dpdpguard-sdk 1.1.0 (Python) on PyPI, dpdpguard_flutter 1.1.0 on pub.dev, and ai.dpdpguard:consent-sdk 1.2.0 (Android) and ai.dpdpguard:server-sdk 1.1.0 (JVM server) on Maven Central. The iOS SDK, DPDPGuardConsent, installs through Swift Package Manager from tag 1.3.0. All three mobile client SDKs — iOS (1.3.0, 24 Aug), Android (1.2.0, 29 Aug) and React Native (2.0.0, 29 Aug) — now ship the same on-device offline consent capture, signing a capture with a Secure-Enclave- or StrongBox/TEE-backed device key so field agents can record consent with zero connectivity and sync later; React Native's release is a major bump because it now requires the New Architecture for that native module. Six of the eight had cut a major release earlier, on 29 July 2026, because the shared contract package published its one breaking version to date and the versioning policy forces a major bump in everything that consumes it.
Do I need an SDK to use DPDP Guard?
No. The fastest path to a live consent banner is the copy-paste install script from DPDP Guard's Implementation guide, which needs no SDK wiring at all. The SDKs exist for cases the hosted banner cannot cover: a native mobile app, a bespoke consent UI, or backend code that must check consent before it processes personal data.
Is the DPDP Guard /api/v1 API generally available?
Yes, fully, as of 14 August 2026. The public and session-authenticated parts — organisation lookup, published notices, banner configuration, anonymous consent capture, and the staff DSR/grievance endpoints that reuse a DPO's own dashboard login — have been live for every organisation since 24 July 2026. What used to require asking us first was minting a NEW service API key, which the authenticated server-SDK methods (brokerToken(), hasConsent(), server-side DSR/grievance workflows) need: convex/apiKeys.ts's create mutation previously called a requireCmApiEnabled check that blocked it platform-wide. That check no longer exists — the platform's entire feature-flag system was removed on 14 August 2026, and a direct read of the current create mutation confirms it now inserts a new service key unconditionally for any signed-in fiduciary admin or DPO. Generate your own key from the Integrations page (/dashboard/fiduciary/integrations) and start calling the authenticated methods immediately — no request to us required.
Which SDK should I install for my platform?
For a React Native app, @dpdpguard/react-native. For Flutter, dpdpguard_flutter. For a native Android app, ai.dpdpguard:consent-sdk. For a native iOS or macOS app, the DPDPGuardConsent Swift package. For a Node backend, @dpdpguard/server. For a Python backend — Django, FastAPI, Flask or a plain worker — dpdpguard-sdk. For a Kotlin or Java backend, ai.dpdpguard:server-sdk. For a browser or any other JavaScript runtime where you are building your own consent UI, @dpdpguard/js.
Is there a Python SDK for DPDP Guard?
Yes. dpdpguard-sdk is DPDP Guard's official Python server SDK, published on PyPI at version 1.1.0 (MIT licensed, Python 3.9 and newer). Install it with `pip install dpdpguard-sdk` or `uv add dpdpguard-sdk` and import it as `dpdpguard`. It is hand-maintained to mirror the Node reference SDK, @dpdpguard/server, method for method, so a Django, FastAPI or Flask backend gets the same behaviour a Node one does: a typed client over /api/v1, token brokering for your apps, DSR and grievance workflows, a consent gate to call before your own code processes personal data, HMAC-SHA256 verification of inbound webhook signatures, and audit-hash helpers tested against the same golden vectors as every other DPDP Guard SDK. It has one runtime dependency, httpx, and ships type hints with a py.typed marker. It replaces the earlier advice to generate your own Python client from the OpenAPI description — generation remains the documented fallback only for languages without an official SDK.
Do the React Native and Flutter SDKs need a native module?
No. Both are plain HTTP clients — the React Native SDK runs on fetch and the Flutter SDK on package:http — with no turbo module, no platform channel and no native folders to link. That is a deliberate design decision, not a gap: the Android and iOS SDKs are separately versioned native libraries, and bridging to them would tie every hybrid release to whichever native version happened to be vendored alongside it.
Can a mobile app mint its own DPDP Guard access token?
No, and by design. Minting a data-principal access token requires a service API key, which is extractable from any app binary and must never be shipped in one. The mobile and hybrid SDKs therefore omit the token-broker call entirely: your own backend holds the API key, calls the broker endpoint using @dpdpguard/server, dpdpguard-sdk (Python) or ai.dpdpguard:server-sdk, and passes the resulting short-lived token to the app via setAccessToken(). The same reasoning keeps audit-hash and webhook-signature code out of the client SDKs — both need a server-held HMAC secret.
What is @dpdpguard/contract and do I need to install it?
@dpdpguard/contract is the published package that holds the OpenAPI description of the API, the stable error catalog, and the audit-hash canonicalisation spec with its golden test vectors. Its latest published version is 1.6.0 (npm, Apache-2.0), published 24 August 2026, carrying OpenAPI description version 2.9.0 for one new endpoint, GET /api/v1/consent-status — minor and purely additive, so it forced no breaking change and no SDK release (none of the eight consumes that endpoint directly; it backs the in-dashboard Consent Status Lookup console instead). The prior release, 1.5.0 (11 August 2026, OpenAPI 2.8.0), did prompt all eight SDKs to sync to it as a routine minor bump on 11-12 August, which is also what finally brought Flutter and iOS onto the current contract generation. You do not normally install it — every SDK is built against it. Install it directly only if you are generating your own client for a language the SDK family does not cover yet, or if you want to validate your own requests against the same schemas the API is held to.
How do the SDKs keep the DPDP audit trail consistent across platforms?
Every SDK that computes an audit hash runs the same golden vectors from @dpdpguard/contract as a required test, so a hash produced on Android, on iOS or on a server must match the platform's own canonicalisation or that SDK's build fails. This matters for evidence: a consent audit trail is only defensible under India's Digital Personal Data Protection Act, 2023 if records written from different clients reconcile.
How do SDK errors work?
Every non-2xx response raises a DpdpGuardApiError — the same name in the TypeScript, Dart and Kotlin SDKs — carrying the HTTP status and a stable code drawn from the shared error catalog in @dpdpguard/contract. Branch on the code, never on the free-text message: the codes are part of the versioned contract, the messages are not.
Do any of the SDKs cover the /mcp/v1 agent surface?
No. All eight SDKs are clients for the /api/v1 HTTP surface. DPDP Guard also has a second, separately versioned surface at /mcp/v1 for AI agents, and @dpdpguard/contract 1.2.0 (31 July 2026) added eleven error codes that belong to it — SCOPE_INSUFFICIENT, TOOL_NOT_AVAILABLE, ORG_DISABLED, APPROVAL_REQUIRED, APPROVAL_BACKLOG_FULL, PROPOSAL_EXPIRED, SECOND_REVIEWER_REQUIRED, PROPOSAL_ALREADY_REVIEWED, DATA_VOLUME_EXCEEDED, PLAN_LIMIT_REACHED and AGENT_WRITE_BLOCKED. If you read the shared error catalog you will see them, so it is worth knowing what they are: none of the eleven is ever returned by an /api/v1 endpoint, and no SDK on this page implements or calls the /mcp/v1 surface at all — it is a separate integration surface for AI agents, not something any of these eight SDKs is meant to cover. Nothing about the codes changes how the eight SDKs behave; they were the only content of contract 1.2.0, which is why that release moved no SDK version.
Are the DPDP Guard SDKs open source?
Mostly, yes. The source for all of them is public on GitHub under the dpdp-guard-ai organisation. Seven of the eight are MIT licensed: the JavaScript, Node, React Native, Flutter and Python repositories each carry an MIT LICENSE file, the Python package additionally declares MIT in its PyPI metadata, and both Maven Central artefacts — ai.dpdpguard:consent-sdk (Android) and ai.dpdpguard:server-sdk (JVM) — declare MIT in the POM published alongside them. The shared @dpdpguard/contract package is Apache-2.0. The one exception is the iOS SDK, DPDPGuardConsent, which declares no licence in its repository or its package manifest, so treat its terms as unspecified until it does.
Which SDKs are built against the current contract, and which are not?
As of 12 August 2026, all eight are on the current 1.x generation of @dpdpguard/contract for the first time. @dpdpguard/js, @dpdpguard/server and @dpdpguard/react-native each depend on the contract package by range; ai.dpdpguard:server-sdk generates its client from the current OpenAPI description; and ai.dpdpguard:consent-sdk (Android) and dpdpguard-sdk (Python) hand-maintain their models against the current conformance data, all re-synced in the same 11-12 August window. Flutter and iOS had lagged behind on the older 0.2.0 schemas since this page began tracking them — Flutter's 1.0.0 was written but blocked from publishing by a tag-push restriction, and iOS's 1.0.0 tag had bumped its version number without re-vendoring the schemas — and both gaps closed in this window: dpdpguard_flutter published straight to 1.1.0 once the publish block cleared, and DPDPGuardConsent's 1.1.0 tag re-vendors the OpenAPI description and error codes it had been missing. Historically this mattered for one thing — request validation. Contract 1.0.0 was a deliberately breaking release that added non-empty constraints (minLength: 1 / minItems: 1) to the consent, grievance and nomination request bodies, so a call that the older 0.2.0 schemas would have accepted with an empty string or an empty array returns a 400 from the API; that gap is now closed for every SDK, but still branch on the error code from the shared catalog rather than the free-text message if you do get a 400. Every contract release since the 1.0.0 breaking change — through 1.6.0 — has been purely additive and changed nothing for any SDK's existing behaviour: new endpoints are flag-gated, several are backend-only or consumed only by an in-dashboard console rather than an SDK, and none touches an existing endpoint, field or error code. Audit-hash canonicalisation and the persisted consent-record shape have not changed in any release: the golden audit-hash vectors are byte-identical from 0.2.0 through 1.6.0 and in every SDK's vendored copy, so consent evidence written from any of the eight still reconciles.
Was the Flutter SDK ever blocked from publishing?
Yes, for several weeks, and it is resolved now. dpdpguard_flutter 1.0.0 was written, committed and passing CI well before it could actually be installed: pub.dev's automated publishing only trusts a workflow run triggered by a version tag, and the publishing environment could not push tags, so pub.dev kept serving the older 0.1.0 the whole time — a version number sitting in a repository is not something a developer can install. That restriction cleared on 12 August 2026, and because 1.0.0 itself was never published, the release jumped straight from 0.1.0 to 1.1.0, landing on the current contract generation in the same step. If you installed 0.1.0 before this date, upgrade to 1.1.0 — its request validation now matches every other SDK's rather than the older 0.2.0 schemas.
How are the SDKs versioned against the API?
Three axes move independently: the wire API's major version lives in its URL path (/api/v1), the shared @dpdpguard/contract package follows semantic versioning, and each SDK carries its own semantic version on its own registry. A breaking contract change — a newly required field, a removal, an error-code change, or any change to audit-hash canonicalisation — forces a major bump in the SDKs that consume it, and an audit-hash change additionally requires a human sign-off before anything downstream is published. That policy is why six SDKs released a new major version on 29 July 2026 with no functional change of their own: contract 1.0.0 was classified breaking, so the bump was mandatory rather than discretionary. It also means an SDK's major number tells you which contract generation it belongs to, not how much its own API moved. The reverse case is just as visible on this page, six times over: contract 1.1.0 (30 July 2026) added three read-only partner routes for a fiduciary's own backend, 1.2.0 (31 July 2026) added eleven error codes for the separate /mcp/v1 agent surface, 1.3.0 (4 August 2026) added one server-integration endpoint for offline/QR consent links, 1.4.0 (8 August 2026) added the offline-capture surface plus a Consent Gate decision endpoint, 1.5.0 (11 August 2026) added two more Consent Gate observability endpoints plus a documentation-only key-versions section, and 1.6.0 (24 August 2026) added the GET /api/v1/consent-status identifier-resolution endpoint. All six are minor, purely additive releases that touch no existing endpoint, field or error code, so none was legally required to force an SDK release — 1.5.0 was still used as the occasion for a routine, voluntary sync across all eight SDKs on 11-12 August 2026 (see the versions listed above), which is what finally brought Flutter and iOS off the older 0.2.0 schemas the first four additive releases had left them on, and 1.6.0 moved no SDK because nothing consumes its one new endpoint. The OpenAPI description carries its own version too, separate from both the /api/v1 path and the contract package's own semver — it has moved from 2.4.1 up to 2.9.0 across these six releases as new (mostly flag-gated) endpoints were documented.