Skip to Content
API ReferenceIdentity API

Identity API

The Identity API manages decentralized identities. Users authenticate with DID-based challenges, store verifiable credentials, share claims selectively, and maintain linked accounts.

Base URL: https://identity.solidus.network/v1


Authentication

Request Challenge

Begin a DID authentication flow by requesting a challenge for a specific DID. The challenge must be signed and returned as a Verifiable Presentation.

POST /auth/challenge

Auth: None

// Request body { "did": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K" }
// Response 200 { "challengeId": "chl_3Vn9wLkDfT", "challenge": { "nonce": "a1b2c3d4e5f6789012345678", "domain": "identity.solidus.network", "expiresAt": "2026-05-07T14:35:00Z" } }

Verify Challenge

Submit a signed Verifiable Presentation to complete authentication and receive a JWT.

POST /auth/verify

Auth: None

// Request body { "challengeId": "chl_3Vn9wLkDfT", "presentation": { "@context": ["https://www.w3.org/2018/credentials/v1"], "type": ["VerifiablePresentation"], "holder": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K", "proof": { "type": "Ed25519Signature2020", "created": "2026-05-07T14:30:00Z", "challenge": "a1b2c3d4e5f6789012345678", "domain": "identity.solidus.network", "verificationMethod": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K#key-1", "proofValue": "z3FXQjecWufY46...yUPgbT" } } }
// Response 200 { "token": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9...", "user": { "id": "usr_7Hk3mRtQZv", "did": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K", "displayName": "John Doe", "avatarUrl": null, "createdAt": "2026-04-15T08:00:00Z" } }

Get Current User

Retrieve the authenticated user profile.

GET /auth/me

Auth: JWT Bearer

// Response 200 { "user": { "id": "usr_7Hk3mRtQZv", "did": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K", "displayName": "John Doe", "bio": "Web3 builder", "avatarUrl": "https://identity.solidus.network/avatars/usr_7Hk3mRtQZv.jpg", "linkedAccounts": ["google", "github"], "credentialCount": 3, "createdAt": "2026-04-15T08:00:00Z" } }

OAuth Login

Redirect users to Google or GitHub for OAuth-based login. After authorization, the user is redirected to the callback URL with a JWT.

GET /auth/google — Redirects to Google OAuth

GET /auth/github — Redirects to GitHub OAuth


Credentials

List Credentials

Retrieve all verifiable credentials stored in the user’s wallet.

GET /credentials

Auth: JWT Bearer

// Response 200 { "credentials": [ { "id": "vc_3Kn8rTpXm2", "type": ["VerifiableCredential", "KYCCredential"], "issuer": "did:solidus:issuer_9Xm4pLk", "issuerName": "Solidus Verify", "issuanceDate": "2026-05-07T14:25:30Z", "expirationDate": "2027-05-07T14:25:30Z", "status": "active", "claims": { "level": 2, "country": "US", "verifiedAt": "2026-05-07T14:25:30Z" } }, { "id": "vc_8Rn3mKpWxT", "type": ["VerifiableCredential", "EmailCredential"], "issuer": "did:solidus:issuer_9Xm4pLk", "issuerName": "Solidus Identity", "issuanceDate": "2026-04-20T10:00:00Z", "expirationDate": "2027-04-20T10:00:00Z", "status": "active", "claims": { "email": "[email protected]", "verified": true } } ] }

Get Credential

Retrieve a single credential with its verification status.

GET /credentials/:vcId

Auth: JWT Bearer

curl https://identity.solidus.network/v1/credentials/vc_3Kn8rTpXm2 \ -H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."
// Response 200 { "credential": { "id": "vc_3Kn8rTpXm2", "type": ["VerifiableCredential", "KYCCredential"], "issuer": "did:solidus:issuer_9Xm4pLk", "issuerName": "Solidus Verify", "issuanceDate": "2026-05-07T14:25:30Z", "expirationDate": "2027-05-07T14:25:30Z", "status": "active", "claims": { "level": 2, "country": "US", "verifiedAt": "2026-05-07T14:25:30Z" }, "proof": { "type": "Ed25519Signature2020", "created": "2026-05-07T14:25:30Z", "verificationMethod": "did:solidus:issuer_9Xm4pLk#key-1", "proofValue": "z4MXy7Lk9Rn3..." }, "onChainAnchor": "0x8a3f...b7c2" }, "verification": { "valid": true, "checks": ["signature", "expiration", "revocation", "onChainAnchor"], "verifiedAt": "2026-05-07T14:30:00Z" } }

Sharing

Share credentials or specific claims with third parties. Users approve or deny sharing requests and can revoke access at any time.

List Sharing Requests

Retrieve pending credential sharing requests from third parties.

GET /sharing/requests

Auth: JWT Bearer

// Response 200 { "requests": [ { "id": "req_5Wn2kLpMxR", "requester": { "did": "did:solidus:app_4Tn7mLkPxR", "name": "DeFi Exchange", "domain": "exchange.example.com" }, "requestedCredentials": ["KYCCredential"], "requestedClaims": ["level", "country"], "purpose": "Regulatory compliance for trading", "status": "pending", "createdAt": "2026-05-07T15:00:00Z", "expiresAt": "2026-05-08T15:00:00Z" } ] }

Respond to Sharing Request

Approve or deny a credential sharing request.

POST /sharing/requests/:requestId/respond

Auth: JWT Bearer

// Request body — approve with selective disclosure { "action": "approve", "credentialId": "vc_3Kn8rTpXm2", "sharedClaims": ["level", "country"] }
// Response 200 { "share": { "id": "shr_6Wn9pMkRxT", "requestId": "req_5Wn2kLpMxR", "credentialId": "vc_3Kn8rTpXm2", "sharedClaims": ["level", "country"], "requester": { "did": "did:solidus:app_4Tn7mLkPxR", "name": "DeFi Exchange" }, "status": "active", "createdAt": "2026-05-07T15:05:00Z" } }
// Request body — deny { "action": "deny" }
// Response 200 { "message": "Request denied" }

List Active Shares

View all currently active credential shares.

GET /sharing/active

Auth: JWT Bearer

// Response 200 { "shares": [ { "id": "shr_6Wn9pMkRxT", "credentialId": "vc_3Kn8rTpXm2", "credentialType": "KYCCredential", "sharedClaims": ["level", "country"], "requester": { "did": "did:solidus:app_4Tn7mLkPxR", "name": "DeFi Exchange", "domain": "exchange.example.com" }, "status": "active", "createdAt": "2026-05-07T15:05:00Z" } ] }

Revoke Share

Revoke a previously approved credential share.

DELETE /sharing/active/:shareId

Auth: JWT Bearer

curl -X DELETE https://identity.solidus.network/v1/sharing/active/shr_6Wn9pMkRxT \ -H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."
// Response 200 { "message": "Share revoked" }

Inbox

The inbox contains credential offers from issuers. Users can accept offers to add credentials to their wallet or decline them.

List Credential Offers

GET /inbox

Auth: JWT Bearer

Query ParamTypeDescription
statusstringFilter by status: pending, accepted, declined, expired
// Response 200 { "offers": [ { "id": "ofr_7Hk3mRtQZv", "issuer": { "did": "did:solidus:issuer_9Xm4pLk", "name": "Solidus Verify" }, "credentialType": "KYCCredential", "preview": { "level": 2, "country": "US" }, "status": "pending", "createdAt": "2026-05-07T14:25:30Z", "expiresAt": "2026-05-14T14:25:30Z" } ] }

Accept Offer

Accept a credential offer and add it to your wallet.

POST /inbox/:offerId/accept

Auth: JWT Bearer

curl -X POST https://identity.solidus.network/v1/inbox/ofr_7Hk3mRtQZv/accept \ -H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."
// Response 200 { "credential": { "id": "vc_3Kn8rTpXm2", "type": ["VerifiableCredential", "KYCCredential"], "issuer": "did:solidus:issuer_9Xm4pLk", "status": "active", "createdAt": "2026-05-07T14:30:00Z" } }

Decline Offer

Decline a credential offer.

POST /inbox/:offerId/decline

Auth: JWT Bearer

curl -X POST https://identity.solidus.network/v1/inbox/ofr_7Hk3mRtQZv/decline \ -H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."
// Response 200 { "message": "Offer declined" }

Users

List Linked Accounts

Retrieve OAuth accounts linked to the authenticated user.

GET /users/me/linked-accounts

Auth: JWT Bearer

// Response 200 { "accounts": [ { "provider": "google", "providerId": "118234567890", "email": "[email protected]", "name": "John Doe", "avatarUrl": "https://lh3.googleusercontent.com/...", "linkedAt": "2026-04-20T10:00:00Z" }, { "provider": "github", "providerId": "12345678", "email": "[email protected]", "name": "johndoe", "avatarUrl": "https://avatars.githubusercontent.com/u/12345678", "linkedAt": "2026-04-22T14:00:00Z" } ] }

Remove a linked OAuth account.

DELETE /users/me/linked-accounts/:provider

Auth: JWT Bearer

curl -X DELETE https://identity.solidus.network/v1/users/me/linked-accounts/github \ -H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."
// Response 200 { "message": "Account unlinked" }

Get Public Profile

Retrieve the public profile of any user by their DID. This endpoint is public and requires no authentication.

GET /users/:did

Auth: None

curl https://identity.solidus.network/v1/users/did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K
// Response 200 { "user": { "did": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K", "displayName": "John Doe", "bio": "Web3 builder", "avatarUrl": "https://identity.solidus.network/avatars/usr_7Hk3mRtQZv.jpg", "createdAt": "2026-04-15T08:00:00Z" }, "credentials": [ { "type": "KYCCredential", "issuerName": "Solidus Verify", "level": 2, "issuedAt": "2026-05-07T14:25:30Z", "status": "active" } ] }

Only credentials that the user has marked as publicly visible are included in the response.

Last updated on