Manage Credential Profiles
This guide covers how to manage your credential profiles after creation: listing, viewing, updating, and deleting them.
Every endpoint below shares the same path parameters and authentication:
- orgID: String (required) - Your organization ID, e.g.
test.enterprise-sandbox.waltid.dev. - target: String (required) - For List, the issuer service path
{organizationID}.{tenantID}.{issuerServiceID}(e.g.waltid.tenant1.issuer1). For View, Update, and Delete, append the profile's own ID as the final path segment:{organizationID}.{tenantID}.{issuerServiceID}.{profileId}(e.g.waltid.tenant1.issuer1.profile-abc123). - Authorization: String (required) - Bearer token. Format:
Bearer {token}.
List All Profiles
Retrieve every credential profile for your issuer service.
Endpoint: GET /v2/{target}/issuer-service-api/credentials/profiles/list | API Reference
Example Request
curl -X 'GET' \
'https://{orgID}.enterprise-sandbox.waltid.dev/v2/{target}/issuer-service-api/credentials/profiles/list' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {yourToken}'
Example Response
[
{
"profileId": "profile-abc123",
"name": "Open Badge Credential Profile",
"version": 1,
"credentialConfigurationId": "OpenBadgeCredential_jwt_vc_json",
"createdAt": 1704067200000,
"updatedAt": 1704067200000
},
{
"profileId": "profile-def456",
"name": "Identity Credential Profile",
"version": 2,
"credentialConfigurationId": "identity_credential_vc+sd-jwt",
"createdAt": 1704067200000,
"updatedAt": 1704153600000
}
]
Response Codes
200— List returned (empty array if no profiles exist).401— Invalid or missing authentication token.
The list returns every profile that currently exists. Deleted profiles are removed from storage and no longer appear here.
View a Profile
Retrieve the full details of a specific credential profile.
Endpoint: GET /v2/{target}.{profileId}/issuer-service-api/credentials/profiles | API Reference
The profile to view is identified by the last path segment of the target, {target}.{profileId}.
Example Request
curl -X 'GET' \
'https://{orgID}.enterprise-sandbox.waltid.dev/v2/waltid.tenant1.issuer1.profile-abc123/issuer-service-api/credentials/profiles' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {yourToken}'
Path Parameters
- profileId: String (required) - The profile's own ID, appended to the issuer service target as the final segment (
{target}.{profileId}).
Example Response
{
"profileId": "profile-abc123",
"name": "Open Badge Credential Profile",
"version": 1,
"credentialConfigurationId": "OpenBadgeCredential_jwt_vc_json",
"issuerKeyId": "waltid.tenant1.kms1.key1",
"issuerDid": "did:key:z6MkjoRhq1jSNJdLiruSXrFFxagqrztZaXHqHGUTKJbcNywp",
"credentialData": { "...": "..." },
"mapping": { "...": "..." },
"createdAt": 1704067200000,
"updatedAt": 1704067200000
}
Response Codes
200— Profile returned.404— No profile with that ID exists.401— Invalid or missing authentication token.
Update a Profile
Update an existing credential profile. This creates a new version of the profile.
When you update a profile, a new version is created. Existing credential offers continue to use the profile version they were created with; new offers use the latest version.
Endpoint: PUT /v2/{target}.{profileId}/issuer-service-api/credentials/profiles | API Reference
The profile to update is identified by the last path segment of the target, {target}.{profileId}.
Example Request
curl -X 'PUT' \
'https://{orgID}.enterprise-sandbox.waltid.dev/v2/waltid.tenant1.issuer1.profile-abc123/issuer-service-api/credentials/profiles' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {yourToken}' \
-H 'Content-Type: application/json' \
-d '{
"name": "Open Badge Credential Profile (Updated)",
"credentialConfigurationId": "OpenBadgeCredential_jwt_vc_json",
"issuerKeyId": "waltid.tenant1.kms1.key1",
"issuerDid": "did:key:z6MkjoRhq1jSNJdLiruSXrFFxagqrztZaXHqHGUTKJbcNywp",
"credentialData": {
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"type": ["Profile"],
"name": "Jobs for the Future (JFF)",
"url": "https://www.jff.org/",
"image": "https://w3c-ccg.github.io/vc-ed/plugfest-1-2022/images/JFF_LogoLockup.png"
},
"credentialSubject": {
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"type": ["Achievement"],
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
}
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
}
]
},
"mapping": {
"id": "<uuid>",
"validFrom": "<timestamp>",
"validUntil": "<timestamp-in:730d>"
}
}'
Path Parameters
- profileId: String (required) - The profile's own ID, appended to the issuer service target as the final segment (
{target}.{profileId}).
Body Parameters
The body has the same shape as Create a Profile. Server-managed fields (profileId, version, createdAt, updatedAt) are accepted but ignored.
Example Response
{
"profileId": "profile-abc123",
"name": "Open Badge Credential Profile (Updated)",
"version": 2,
"credentialConfigurationId": "OpenBadgeCredential_jwt_vc_json",
"issuerKeyId": "waltid.tenant1.kms1.key1",
"issuerDid": "did:key:z6MkjoRhq1jSNJdLiruSXrFFxagqrztZaXHqHGUTKJbcNywp",
"credentialData": { "...": "..." },
"mapping": { "...": "..." },
"createdAt": 1704067200000,
"updatedAt": 1704153600000
}
Response Codes
200— Profile updated;versionincremented.400— Invalid request body.401— Invalid or missing authentication token.
Delete a Profile
Permanently delete a credential profile. The profile is removed from storage and can no longer be used to create new credential offers.
This is a hard delete and cannot be undone. The profile is completely removed from the system. If you may need the profile (or its configuration) later, export or back it up before deleting.
Existing credential offers created from this profile are not affected by the deletion. They were captured at offer-creation time and continue to work until they expire.
Endpoint: DELETE /v2/{target}.{profileId}/issuer-service-api/credentials/profiles | API Reference
The profile to delete is identified by the last path segment of the target, {target}.{profileId}.
Example Request
curl -X 'DELETE' \
'https://{orgID}.enterprise-sandbox.waltid.dev/v2/waltid.tenant1.issuer1.profile-abc123/issuer-service-api/credentials/profiles' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {yourToken}'
Path Parameters
- profileId: String (required) - The profile's own ID, appended to the issuer service target as the final segment (
{target}.{profileId}).
Example Response
An empty body with status 200.
Response Codes
200— Profile deleted (or did not exist). The response body is empty.401— Invalid or missing authentication token.
Next Steps
- Create Credential Offers – Use your profiles to create credential offers.
- Notifications & Session Events – Configure webhook notifications for your profiles.
