Developers
LutraID issues credentials to EUDI-compatible wallets over OpenID4VCI and verifies presentations over OpenID4VP. You provision issuers, verifiers and profiles in the dashboard, then drive them from your backend with a scoped API key.
How an integration is shaped
| Step | Runs where |
|---|---|
| Create an issuer or verifier, assign profiles | Dashboard |
| Mint an API key scoped to it | Dashboard |
| Create an offer or a verification request | Your backend |
| Render the returned URI as a QR code or link | Your frontend |
| Poll for the outcome | Your backend |
Wallets talk to LutraID directly over the protocol endpoints. You never proxy them.
Base URL
Paths in these pages are relative to your deployment's API base URL. The generated OpenAPI reference is served by the API itself at /doc/reference, the raw document at /doc.
export LUTRAID_API="https://your-lutraid-host"
export LUTRAID_KEY="iss_..."
export ORG="<organizationId>" ISSUER="<issuerId>" VERIFIER="<verifierId>"
Editions
LutraID ships in three editions and they do not expose the same routes. GET /health tells you which one you are talking to.
curl -s "$LUTRAID_API/health"
# {"status":"ok","edition":"saas","timestamp":"...","version":"..."}
| SaaS · Self-hosted | Public | |
|---|---|---|
| Create offers and verification requests | yes | yes |
| Email delivery, bulk offers | yes | no |
| Offer status, diagnostics, platform root CA | no | yes |
| API key management endpoints | yes | seeded keys only |
Every endpoint below carries an Editions line. public is the sandbox edition described in Local testing.
Conventions
- Authentication is the
X-API-Keyheader. See Authentication. - Every response carries
X-Request-ID; an inbound W3Ctraceparentis honoured and threaded through logs and diagnostics. - There are no outbound webhooks. You poll. See Status and diagnostics.