/v1/holder/presentations
API Key
Create a credential presentation
Create a selective disclosure presentation from a credential. This allows holders to share
only specific claims with verifiers while proving the credential’s authenticity.
Parameters
| Name | Location | Type | Description |
|---|---|---|---|
X-API-Key
*
|
header | string | API key for holder authentication |
* Required parameter
Request Body
Parameters for creating a selective disclosure presentation
credential_uuid
*
string (uuid)
UUID of the credential to present
Example: f27a22e1-c304-4316-a0c8-1d5706b8794a
disclosed_claims
*
array[string]
Claim names to disclose
Example: ["name","email","birthDate"]
Array items:
audience
string
Intended recipient of the presentation
Example: https://verifier.example.com
purpose
string
Purpose of the presentation
Example: Age verification for online purchase
expires_in
integer
Expiration in seconds from now
Example: 3600
Response
Content-Type: application/json
success
boolean
data
object
A verifiable presentation with selective disclosure of claims
uuid
*
string (uuid)
Unique identifier for the presentation
Example: 0dc32c8f-d774-4887-8338-6ca2d630608f
credential_uuid
*
string (uuid)
UUID of the source credential
Example: 8e732b14-c35f-4a7d-8c02-d9858581e125
disclosed_claims
*
array[string]
List of claim names included in this presentation
Example: ["name","degree"]
Array items:
disclosed_values
object
nullable
The actual values of disclosed claims (dynamic, schema-dependent)
Example: {"name":"Jane Doe","degree":"Bachelor of Science"}
audience
string
nullable
Intended recipient of this presentation
Example: Acme Corp HR Department
purpose
string
nullable
Why this presentation was created
Example: Employment verification
status
*
string
Current status of the presentation: - active: Valid and can be verified - expired: Past its expiration date - revoked: Manually invalidated by the holder
Allowed values: "active", "expired", "revoked"
Example: active
expires_at
string (date-time)
nullable
When the presentation expires (null if no expiration)
Example: 2025-04-01T23:59:59Z
verification_count
*
integer
Number of times this presentation has been verified
Example: 3
created_at
*
string (date-time)
When the presentation was created
Example: 2025-03-01T10:00:00Z
presentation_token
string
The signed SD-JWT presentation token
Example: eyJhbGciOiJFUzI1NiJ9.eyJfc2QiOlsiLi4uIl19.signature~disclosure1~disclosure2
share_data
object
nullable
Data for sharing this presentation
presentation_url
string (uri)
Direct link to view/verify the presentation
Example: https://aho.com/verify/presentation/2baca3a0-62b5-4675-9507-d615e6fb1f05
uuid
string (uuid)
Presentation UUID for reference
Example: bca45724-2a5c-4a5e-acb2-19af7a96ca05
credential_type
string
Type of the source credential
Example: UniversityDegreeCredential
issuer
string
Name of the credential issuer
Example: Stanford University
disclosed_claims
array[string]
List of claim names included
Example: ["name","degree"]
Array items:
expires_at
string (date-time)
nullable
When the presentation expires
Example: 2025-04-01T23:59:59Z
Code Examples
import os
from aho_sdk import AhoSdk
client = AhoSdk.holder(api_key=os.environ["AHO_API_KEY"])
result = client.presentations.create(
body={
"credential_uuid": "f27a22e1-c304-4316-a0c8-1d5706b8794a",
"disclosed_claims": ["name", "email", "birthDate"],
"audience": "https://verifier.example.com",
"purpose": "Age verification for online purchase",
"expires_in": 3600
}
)
client = AhoSdk.holder(api_key: ENV["AHO_API_KEY"])
result = client.presentations.create(
body: {
credential_uuid: "f27a22e1-c304-4316-a0c8-1d5706b8794a",
disclosed_claims: ["name", "email", "birthDate"],
audience: "https://verifier.example.com",
purpose: "Age verification for online purchase",
expires_in: 3600
}
)
import { AhoSdk } from '@aho/sdk';
const client = AhoSdk.holder({ apiKey: process.env.AHO_API_KEY });
const result = await client.presentations.create({
body: {
credentialUuid: "f27a22e1-c304-4316-a0c8-1d5706b8794a",
disclosedClaims: ["name", "email", "birthDate"],
audience: "https://verifier.example.com",
purpose: "Age verification for online purchase",
expiresIn: 3600
}
});
curl -X POST 'https://api.aho.com/v1/holder/presentations' \
-H 'X-API-Key: $AHO_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"credential_uuid": "f27a22e1-c304-4316-a0c8-1d5706b8794a",
"disclosed_claims": [
"name",
"email",
"birthDate"
],
"audience": "https://verifier.example.com",
"purpose": "Age verification for online purchase",
"expires_in": 3600
}'
Try It
Log in to test this endpoint directly from the documentation.
Log in