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.

CURL

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.

CURL

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.

CURL

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; version incremented.
  • 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.

CURL

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

Last updated on July 28, 2026