This quickstart walks the shortest path to a credential in your wallet. You will onboard yourself as a user, sign in to the didx:me wallet, then issue a credential to that wallet from your tenant. End state: a credential called DEMO in your wallet, with your name and surname inside it.Documentation Index
Fetch the complete documentation index at: https://docs.didx.co.za/llms.txt
Use this file to discover all available pages before exploring further.
Get sandbox access
Sandbox credentials are handed out via Slack while we polish the self-serve flow.Tokens are valid for five minutes. If your script takes longer, re-run the auth call.
- Join the public DIDx Slack.
- Drop a note in the relevant channel and ping Willem or Robbie to say you’d like a sandbox
clientIdandclientSecretfor didx:me. - They’ll send you the credentials and confirm the sandbox base URLs.
clientId and clientSecret for a bearer access token using the OAuth client_credentials flow described on the Authentication page. Every step below sends the bearer in the Authorization header:Onboard yourself as a user
The Consumer Onboarding API provisions users in your tenant. For this quickstart, you’ll provision yourself.Response (201):Save the
tempPassword. You’ll use it to sign in to the wallet.Sign in to the wallet
Open the didx:me wallet at https://test.didxtech.com/me-wallet/app/login. It runs in any browser; for the most realistic feel, open it on your phone.Sign in with the email you just onboarded (first screen), then the temp password (second screen). You’ll land on an empty wallet: your name in a welcome banner, with No credentials yet below.Keep this tab open.
Create a credential template
A template defines the shape of the credential. Define it once, then issue many credentials from it.Each attribute takes a JSON key (the field name inside the credential payload) and a few properties:
type is the JSON type, name is the display label shown in the wallet, required controls whether issuance demands a value, and alwaysDisclosed controls whether the holder can withhold the attribute at presentation time. An optional description adds wallet-side helper text; omitted here for brevity. See Credentials for the selective-disclosure model behind alwaysDisclosed.The response includes the template’s id. Save it for the next step.The outer
name field is the template’s display name. The inner attributes.name defines an attribute called name. Different scopes; they don’t collide in JSON.Create an issuance
An issuance binds a template to a specific set of values for one credential.The response (201) includes the Save the
offerUri:offerUri.Push the offer to your wallet
Send the credential offer directly to your wallet’s inbox.A
201 Created with { "data": null } confirms the offer was delivered.Accept the credential in the wallet
Switch to the wallet tab. Refresh if needed. A Pending Credentials section now shows a card for your DEMO credential.Tap into the card. The detail view shows the claims (Name, Surname) and credential information. Tap Accept.The credential moves from Pending to Recent. You now have a verifiable credential signed by your tenant, held in your wallet.
What next
Once the quickstart works, common next moves:- Webhooks. Your application learns about issuance lifecycle events (
offered,completed,failed,expired) without polling. See Webhooks. - Verify a credential. Define a presentation template, request a presentation from a holder, validate what they share. See the Verification guides.
- Trust hardening. Attach trusted entities to your presentation templates so verifiers only accept credentials from issuers you have explicitly named. See Trust.
- Production readiness. Rotate certificates, set up retry policies on your webhook handler, switch from sandbox to production keys (ask in Slack when you’re ready).

