The SDK never receives, stores, or transmits your API secret. This means a compromised device or browser cannot leak it.
The JWT
When the SDK needs to authenticate (device registration and handshake), it builds a JWT:base64url(header) + "." + base64url(payload) — and hands those bytes to your token signer. Your signer computes HMAC-SHA256(signingInput, keySecret) and returns the raw signature. The SDK assembles the final header.payload.signature and sends it in the x-auth-key: Bearer <JWT> header.
The backend looks up the key_id, confirms the key is active, and verifies the signature with its stored copy of the secret. A revoked key fails here.
Implementing the signer
The signer is the same idea in every SDK — receive bytes, return a signature.- TypeScript
- Kotlin / Java
- C#
- C
Server-side signing endpoint
Your/api/mbkyc/sign endpoint holds the secret and does the HMAC. In Node:
Other headers
The SDK also sends:x-sdk-id: <sdk>/<version>(e.g.kotlin/0.7.0) — identifies the SDK build.- Any
extraHeadersyou configured (max 5) — for example, headers your proxy or gateway requires to admit the request.

