PingOne Credentials

Verifiable credentials are cryptographically secure digital proofs containing any identity data, issued to users’ biometrically secured device wallets. They contain important information about the issuer, who it was issued to, specific identity attributes, and expiration, ensuring the provenance of the credential and a chain of trust. Verifiable credentials are used for any data that necessitates real-time verification.

Use the Credentials service to create custom verifiable credentials for users. The resulting credentials can then be shared with compatible wallet apps. The Credentials service enables you to:

Credential Issuers

Use the Credential Issuers operations to retrieve or update the credential issuer information. A credential issuer profile, which enables issuance of credentials, is automatically created when the credential service is added to an environment.

Credential Issuers data model

Property Type Required? Mutable? Description
applicationInstance.id String N/A Read-only Identifier (UUID) of the application instance registered with the PingOne platform service. This enables the client to send messages to the service.
createdAt DateTime N/A Read-only Date and time the issuer profile was created.
id String N/A Read-only Identifier (UUID) of the credential issuer.
logo String Optional Mutable A URI containing the logo for the issuer. Restricted to a valid URL with a scheme of https: or a scheme of data: with a base64-encoded image. Included in credentials issued.
name String Required Immutable The name of the credential issuer. Included in credentials issued.
siteUrl String Optional Mutable URL, chosen by the issuer, that references the issuer in issued credentials.
updatedAt DateTime N/A Read-only Date and time the credential issuer profile was last updated; can be null.

The logo and name can be shown to the user when indicating the credential issuer by the wallet app using using the PingOne Neo Native SDKs with getIssuerMetadata for Android and getCredentialIssuerMetadataFromClaim(_:) for iOS.

Response codes

Code Message
200 Successful operation.
400 The request could not be completed.
401 You do not have access to this resource.
403 You do not have permissions or are not licensed to make this request.
404 The requested resource was not found.
500 Unexpected server error.

Read Credential Issuer Profile


Update Credential Issuer Profile

Credential Types

Use the Credentials Types operations to create, read, and update the credential types used by compatible wallet apps.

Versioning

If the updated credential type differs from the existing credential type, the service saves the existing credential type as a Credential Type Version and increments version.number in the updated credential type. Credential Type Versions can be read with Read All Credential Type Versions.

Automatic deletion and revocation

Typical behavior for credential types is to automatically revoke user credentials when a credential type, user, or environment is deleted. However, some credential types, such as birth certificates, university degrees, or marriage certificates, should never be automatically revoked even if the user or environment is deleted. You control this using onDelete.revokeIssuedCredentials on the credential type.

The selected deletion and revocation behavior cascades over all resources managed by the service: credential types, issuance rules, staged changes, digital wallet applications, digital wallets, and user credentials.

Environment deleted:

  • Delete all credential types

  • Delete all issuance rules

  • Delete all staged changes

  • Delete all digital wallet applications

  • Delete all digital wallets

  • Delete all user credentials

  • Delete all provisioned credentials

  • Delete all credential type counts

  • Delete environment credential count

Population deleted:

  • Remove population from existing issuance rules

Group deleted:

  • Remove group from existing issuance rules

User deleted:

  • Delete user credential

  • Delete digital wallets

Application (associated with digital wallet applications) deleted:

  • No impact

Credential type deleted:

  • Revoke issued credentials based on delete flag

  • Delete issuance rule

Issuance rule deleted

  • Delete staged changes

Digital wallet application deleted:

  • Disable digital wallets that are of this type

Digital wallet deleted:

  • Revoke credentials that were provisioned to the digital wallet based on credential type delete flag

User credential deleted:

  • Revoke provisioned credentials based on credential type delete flag

Regardless of the setting of onDelete.revokeIssuedCredentials, the service always deletes any pending credentials. (Pending credentials are staged for issue but not provisioned to a wallet because no paired digital wallet exists.)

Credential schema

When the service creates a credential from a credential type, it maintains the full credential schema, including attributes without corresponding values in the Create a User Credential request, so that the credential structure is consistent and predictable. It assigns an empty string ("") to any attribute without a value in the request body.

Credential Types data model

Property Type Required? Mutable? Description
cardDesignTemplate String Required Immutable An SVG formatted image containing placeholders for the credentials fields that need to be displayed in the image. Refer to warning following this table. Not returned with Read All Credential Types. You must Read One Credential Type with the id of the credential type you want to review.
cardType String Optional Mutable A descriptor of the credential type. Can be non-identity types such as proof of employment or proof of insurance.
createdAt DateTime N/A Read-only Date and time the credential type was created.
deletedAt DateTime N/A Read-only Date and time the credential type was deleted. Returned only with Read One Credential Type.
description String Optional Mutable A description of the credential type.
environment.id String N/A Read-only PingOne environment identifier (UUID) in which the credential type exists.
expiration Object Optional Mutable Object that identifies how to evaluate the expiration date. Requires one and only one of after, timestamp, or expression. Permitted only when management.mode is AUTOMATED.
expiration.after Object Required/Optional Mutable Contains the numeric duration and its time unit for calculating an expiration date.
expiration.after.duration Integer Required Mutable Length of time before transaction timeout expires; range is from a 1 hour minimum (or equivalent) to an (effectively) unbounded maximum.
expiration.after.timeUnit String Required Mutable Time unit of transaction timeout; can be SECONDS, MINUTES, HOURS, or DAYS.
expiration.expression String Required/Optional Mutable PingOne Expression Language (PEL) expression that evaluates to an ISO 8601 date. For more information on PEL, refer to PingOne expression language.
expiration.fieldName String Required/Optional Mutable On issuance, name of the field in the credential to hold the expiration that, when evaluated, returns an expiration date. Must be unique from all fields defined in the metadata object of Create Credential Type. Required when expiration.type is SOFT. Optional when expiration.type is HARD and ignored if used.
expiration.timestamp DateTime Required/Optional Mutable The date and time to expire in ISO 8601 YYYY-MM-DDTHH:MM:SS.sssZ format (milliseconds optional).
expiration.type String Required Mutable Indicates how expiration of the credential is presented. Can be SOFT or HARD. A SOFT expiration appears as a user-defined field (named in fieldName) in the credential but returns no expiration date in Read One User Credential. A HARD expiration appears as a standards-based expiration field in the credential and returns an expiration date in Read One User Credential.
id String N/A Read-only Identifier (UUID) associated with the credential type.
issuer.id String N/A Read-only The identifier (UUID) of the issuer.
issuerName String Optional Mutable Issuer name associated with the card, can differ from title.
management.mode String Optional Mutable Management mode of the credential type. Can be AUTOMATED (the default) or MANAGED. Refer to the note following this table.
metadata Object Required Mutable Contains the names, data types, and other metadata related to the credential; refer to metadata object data model.
multiple Object Optional Mutable Object containing directives that enable you to Issue multiple credentials to a user based on a directory attribute.
multiple.expression String Required Mutable A PingOne Expression Language (PEL) expression that evaluates to a number or array. If an array, calculates the array length for the count. Populates the limit to a variable, __ITERATOR__, available to PEL expressions in metadata.fields.attribute.
onDelete.revokeIssuedCredentials Boolean Optional Mutable Whether user credentials are automatically revoked when a credential type, user, or environment is deleted. Defaults to true. For credential types (such as birth certificates, university degrees, or marriage certificates) that should never be automatically revoked even if the user or environment is deleted, set this to false.
title String Required Immutable Title of the credential. Verification sites are expected to be able to request the issued credential from the compatible wallet app using the title.
updatedAt DateTime N/A Read-only Date and time the credential type was last updated; can be null.
version.id String N/A Read-only Identifier (UUID) of this version of the credential type. The service assigns identifiers.
version.number Integer N/A Read-only Version of this credential type. The service assigns versions.
version.uri String N/A Read-only A URI to of this version of the credential type. The service assigns URIs.

If management.mode is AUTOMATED, the credential type is only issued by its associated credential issuance rule. If management.mode is MANAGED, the credential type is only issued by Create a User Credential or Update a User Credential API requests. If you change management.mode from AUTOMATED to MANAGED and an associated issuance rule exists, the rule is disabled, but not deleted.

If management.mode is AUTOMATED, you can value one and only one of the three properties in the expiration object and the associated credential issuance rule automatically assigns an expiration date when it issues the credential. If management.mode is MANAGED and an expiration object is present, it causes an error.

If you want to change management.mode from AUTOMATED to MANAGED, but one of the three properties in the expiration object is valued, you must remove the expiration object. Use Update the Credential Type with no expiration object, which removes it from the credential type, and with management.mode set to MANAGED.

metadata object data model

The metadata object is not returned with Read All Credential Types. You must Read One Credential Type with the id of the credential type you want to review.

Property Type Required? Mutable? Description
backgroundImage String Optional Mutable URL to an image of the background to show in the credential. Must be no more than 50 KB in size.
bgOpacityPercent String Optional Mutable Percent opacity of the background image in the credential. High percentage opacity may make reading text difficult.
cardColor String Optional Mutable Color to show on the credential.
columns Integer Optional Mutable Number of columns of visible fields to use when displaying the credential. Must be between 1 and 3. Defaults to 1.
description String Optional Mutable Description of the credential.
fields Object[] Optional Mutable Array of objects representing the fields.
fields.attribute String Required/Optional Mutable Name of the PingOne Directory attribute. Required if field.type is Directory Attribute, otherwise optional and ignored if used. Refer to fields.attribute definition.
fields.default String Optional Mutable Assigns a default value if a PingOne Expression Language (PEL) in the fields.attribute evaluates to no value.
fields.id String Required Mutable Identifier of the field. Ping Identity recommends that id is text formatted as "<fields.type> -> <fields.title>" to show the type of data expected as well as for what it is used. Examples include: "Alphanumeric Text -> Department" or "Directory Attribute -> Username".
fields.fileSupport String Optional Mutable Specifies how an image is stored in the credential; refer to fields.fileSupport types.
fields.isVisible Boolean Required Mutable Whether the field should be visible to viewers of the credential.
fields.required Boolean Optional Mutable Whether the field is required for the credential. Defaults to false.
fields.title String Required Mutable Descriptive text when showing the field.
fields.type String Required Mutable Type of data in the field; refer to fields.type types.
fields.value String Required/Optional Mutable The text to appear on the credential for a type of Alphanumeric Text. Required if type is Alphanumeric Text and management.mode is AUTOMATED, optional if type is Alphanumeric Text and management.mode is MANAGED (effectively a default that can be overridden by a data value in Create a User Credential or Update a User Credential), and otherwise ignored if present.
logoImage String Optional Mutable URL to an image of the logo to show in the credential. Must be no more than 25 KB in size.
name String Optional Mutable Name of the credential.
textColor String Optional Mutable Color of the text to show on the credential.
version Integer Optional Mutable Version of this credential metadata. If not provided, the service assigns a version.

fields.attribute definition

Although fields.attribute is always a string type, the service supports two interpretations of its string.

If the string begins with ${ and ends with }, the string is interpreted as a PingOne Expression Language (PEL) expression. As a PEL expression, the string must have user. before any attribute names. A PEL expression is essential to Issue multiple credentials to a user based on a directory attribute. The PEL expression extracts specific elements from the multiple potential credentials found in the attribute.

If the string does not have ${ and }, the string is interpreted as the traditional pointer to an attribute name in the directory. That is, you supply an attribute name as the string and the service supplies the value of that attribute to the credential. When used as a pointer, the string does not need user. to reference an attribute.

fields.fileSupport types

A credential field that uses a type of Directory Attribute can contain a URL that references a JPEG, PNG, or GIF image file uploaded with Create Image. The credential type is limited to 5 fields that have fileSupport set to BASE64_STRING or INCLUDE_FILE. For credentials, an image file has a maximum size of 2 MB. A credential cannot exceed 2.5 MB including all images.

Type Description
BASE64_STRING Image is base64-encoded to a string in the credential.
INCLUDE_FILE Image binary is included in the credential.
REFERENCE_FILE Only a URL referencing the image is in the credential. The image binary remains stored external to the credential.

fields.type types

Type Description
Alphanumeric Text A static text string of letters, numbers, or punctuation set on fields.value.
Issued Timestamp Date and time the credential was issued.
Directory Attribute Any PingOne Directory standard or custom attribute. When used in a credential for a user, the service reads that attribute from the user and puts the value in the credential. The name of the attribute is in fields.attribute.

Automatic deletion and revocation

Typical behavior for credential types is to automatically revoke user credentials when a credential type, user, or environment is deleted. However, some credential types, such as birth certificates, university degrees, or marriage certificates, should never be automatically revoked even if the user or environment is deleted. You control this using onDelete.revokeIssuedCredentials on the credential type.

The selected deletion and revocation behavior cascades over all resources managed by the service: credential types, issuance rules, staged changes, digital wallet applications, digital wallets, and user credentials.

If onDelete.revokeIssuedCredentials is true:

  • User credentials are revoked and deleted when the credential type is deleted.

  • Provisioned credentials are revoked when a user credential is deleted, its credential type is deleted, or its digital wallet is disabled or deleted.

If onDelete.revokeIssuedCredentials is false:

  • User credentials are only revoked if the issuance rule causes it to be revoked or if Update a User Credential sets the expiration date.

  • Provisioned credentials are revoked if the user credential is revoked (refer to previous item).

Issue multiple credentials to a user based on a directory attribute

Some customers must issue multiple credentials to a user based on a directory attribute. For example, a bank might issue credit cards in their own name while also issuing credit cards branded for their customers. A user may have more than one of these credit cards in their wallet. The directory service requires an attribute that contains all the credit cards for that user and the service must support credential issuance to any or all of that user's credit cards.

The customer can define a single directory attribute for each user to hold a data object that contains the different accounts owned by the user. Our hypothetical bank wants to support the end user being able to present a verifiable credential that contains only the information from one of these accounts. Although issuance of multiple credentials is initiated by a single directory attribute, definition of the credential type can reference any directory attributes for its fields.

The definition of the data object is up to the customer. They then use PingOne Expression Language (PEL) expressions to retrieve any information as required. The Credential Types multiple.expression contains a PEL expression that counts qualifying entries in the data object. The Credential Types metadata.fields.attribute contains a PEL expression to retrieve individual data elements that populates a field in the credit type definition.

When you Apply Credential Issuance Rule Staged Changes for a user for a credential type that has multiple configured, the service creates multiple, separate user credentials for the credential type.

An example may better illustrate applying these concepts.

Example data object

Our hypothetical bank customer, BigBank, uses this JSON object, stored as a JSON binary large object (blob), as the source for credit card information.

{
  "credit_cards": {
    "branded": [
      {
        "oem_merchant": "ChainRetailer",
        "customer_id": "0010380",
        "user_id": "1506980157738"
      },
      {
        "oem_merchant": "GlobalOil",
        "customer_id": "0475932",
        "user_id": "1506980157739"
      }
    ],
    "owned": [
      {
        "customer_id": "0010380",
        "int_id" : "03918203198"
      },
      {
        "customer_id": "0475932",
        "int_id" : "03918203100"
      }
    ]
  }
}

An administrator at BigBank creates two different credential types, one each for branded and owned. Each credential type is configured to issue a credential for each JSON object in that array.

Example API

This demonstrates the API using the branded array. An administrator at BigBank created this credential type for branded.

A body for Create a credential type (automated) that creates multiple credentials from the data object for the credit_cards.branded is:

{
    "title": "Branded Cards",
    "description": "Example for branded cards attribute for BigBank",
    "metadata": {
        "fields": [
            {
                "id": "title",
                "title": "oem_merchant",
                "attribute": "${user.credit_cards['branded'][__ITERATOR__].oem_merchant}",
                "isVisible": true,
                "type": "Directory Attribute",
                "default": "Use this if missing"
            },
            {
                "id": "Directory Attribute -> user_id",
                "title": "user_id",
                "attribute": "${user.credit_cards['branded'][__ITERATOR__].user_id}",
                "isVisible": true,
                "type": "Directory Attribute"
            },
            {
                "id": "Directory Attribute -> customer_id",
                "title": "customer_id",
                "attribute": "${user.credit_cards['branded'][__ITERATOR__].customer_id}",
                "isVisible": true,
                "type": "Directory Attribute"
            }
        ]
    },
    "cardDesignTemplate": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 740 480\">...</svg>",
    "multiple": {
        "expression": "${user.credit_cards['branded']}"
    }
}

The PEL expression in multiple.expression returns the count of objects in the credit_cards.branded object array of the data object. This populates the iteration limit of the system __ITERATOR__ variable seen in the PEL expressions of the three metadata.fields.attribute values.

A body for Create a credential type (automated) that creates multiple credentials from the data object for the credit_cards.owned is:

{
    "title": "Owned",
    "description": "Example for owned attribute for BigBank",
    "metadata": {
        "fields": [
            {
                "id": "Directory Attribute -> int_id",
                "title": "int_id",
                "attribute": "${user.credit_cards['owned'][__ITERATOR__].int_id}",
                "isVisible": true,
                "type": "Directory Attribute"
            },
            {
                "id": "Directory Attribute -> customer_id",
                "title": "customer_id",
                "attribute": "${user.credit_cards['owned'][__ITERATOR__].customer_id}",
                "isVisible": true,
                "type": "Directory Attribute"
            }
        ],
        "textColor": "#000000",
        "version": 4
    },
    "cardDesignTemplate": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 740 480\">...</svg>",
    "multiple": {
        "expression": "${user.credit_cards['owned']}"
    }
}

The PEL expression in multiple.expression returns the count of objects in the credit_cards.owned object array of the data object. This populates the iteration limit of the system __ITERATOR__ variable seen in the PEL expressions of the two metadata.fields.attribute values.

Important considerations

  1. Do not use a multi-valued attribute type. Use a single JSON attribute that contains the necessary arrays.

    When configuring a custom JSON attribute for issuing multiple credentials for a user, the administrator can set it to a multi-valued type, which allows the attribute to be an array of JSON blobs. The PingOne Directory does not guarantee ordering for multi-valued attributes. Multi-valued attributes values are treated as a set rather than a list. This conflicts with how the service determines if a credential has changed, where order is essential. For example, a user has three credentials issued using a multi-valued type of [A, B, C]. If you add another JSON blob to the user attribute, one might expect the change to look like [A, B, C, D] (where each letter is a different credential) and issue one more credential to the user. However, with a multi-valued custom JSON attribute, the change may look like [A, C, D, B]. When the service compares the order, it interprets that two credentials have been updated and one more credential has been added.

    Due to this involuntary re-ordering behavior, multi-valued custom JSON attributes are strongly discouraged.

  2. Revocation can be affected by re-ordering.

    If the user has an array like [A, B, C] so that the service issues three credentials and an administrator then revokes the credential B, credential B remains revoked. If the user is updated to change some values in A, B, and C, A and C update while B remains revoked. However, if the user is updated with a new object or value added to the array such that it becomes [A, D, B, C], credential C updates to the values of B and a new credential issues for C. No credential will be issued or updated to have the values of D because it is in the second place and the credential for second place was revoked.

    To mitigate this behavior, always add new entries to the end of the arrays in the JSON blob.

Response codes

Code Message
200 Successful operation.
400 The request could not be completed.
401 You do not have access to this resource.
403 You do not have permissions or are not licensed to make this request.
404 The requested resource was not found.
500 Unexpected server error.

Create Credential Type (automated)


Create Credential Type (managed)


Read All Credential Types


Read All Credential Type Versions


Read One Credential Type


Read One Credential Type Version


Update a Credential Type


Delete a Credential Type

Credential Issuance Rules

Use the Credentials Issuance Rules operations to create, read, and update rules for issuing, updating, and revoking credentials by credential type. Rules are defined for:

  • A specific Credential Type in the endpoint

  • A specific Digital Wallet App in the request body

  • A specific set of users defined by one, and only one, of these filters in the request body:

A credential rule contains an automation object with available actions as keys: issue, revoke, and update. If an action is set to PERIODIC, the service performs the action at the end of the period. If an action is set to ON_DEMAND, you must use Apply Credential Issuance Rule Staged Changes to perform staged changes for those ON_DEMAND actions.

The general procedure for rules is:

  1. Create - create a new rule to stage actions for for the credential by user

  2. Update - update an existing rule to stage actions for the credential by user

  3. Staged Changes - show actions staged for execution

  4. Apply - act upon credentials staged for actions.

You can also monitor credential rules:

  • All Rules - view all rules defined for a credential type

  • One Rule - view a specific rule for a credential

  • Usage Counts - show counts by action applied to the credential by user

  • Usage Details - show details by action applied to the credential by user

You can, finally, remove a rule for a credential type:

  • Delete - remove a rule from a credential type

For actions set to PERIODIC, an improper credential could cause endless repetitious errors. The service monitors staged changes for errors. When an error occurs during processing, the service adds details of the error to the staged change so that errors can be tracked, counted, and returned to the user. If more than 3 errors occur for the same scheduled staged change, the service unschedules (changes stagedChanges.scheduled from true to false) that staged change so that the service no longer attempts to process it. The user can manually trigger the staged change with Apply Credential Issuance Rule Staged Changes.

Credentials unscheduled due to errors are reported. Some errors are known but there can also be unexpected errors. The errors.errorDetail object provides an error code and message. If the error was related to processing a specific credential field, the field name will be in errors.errorDetail.target. This includes the staged changes that exist when the request is made with 1 or more errors. It does not include a staged change that was failed in the past, but has since completed successfully or was deleted (because the user no longer matches the issuance rule). Requests that report errors include:

Credential Issuance Rules data model

Property Type Required? Mutable? Description
automation Object Required Mutable Contains a list of actions, as key names, and the update method for each action.
automation.issue String Required Mutable The method the service uses to issue credentials with the credential issuance rule. Can be PERIODIC or ON_DEMAND.
automation.revoke String Required Mutable The method the service uses to revoke credentials with the credential issuance rule. Can be PERIODIC or ON_DEMAND.
automation.update String Required Mutable The method the service uses to update credentials with the credential issuance rule. Can be PERIODIC or ON_DEMAND.
createdAt DateTime N/A Read-only Date and time the credential issuance rule was created.
credentialType.id String N/A Read-only Identifier (UUID) of the credential type with which this credential issuance rule is associated.
digitalWalletApplication.id String Optional Mutable Identifier (UUID) of the customer's Digital Wallet App that will interact with the user's Digital Wallet. Optional, and if present, digital wallet pairing automatically starts when a user matches the credential issuance rule.
environment.id String N/A Read-only PingOne environment identifier (UUID) in which the credential issuance rule exists.
filter Object Optional Mutable Contains one and only one filter (.groupIds, .populationIds, or .scim) that selects the users to which the credential issuance rule applies.
filter.groupIds String[] Required/Optional Mutable Array of one or more identifiers (UUIDs) of groups, any of which a user must belong for the credential issuance rule to apply. One and only one filter is required in filter, others are optional and cause an error if used.
filter.populationIds String[] Required/Optional Mutable Array of one or more identifiers (UUIDs) of populations, any of which a user must belong for the credential issuance rule to apply. One and only one filter is required in filter, others are optional and cause an error if used.
filter.scim String Required/Optional Mutable A SCIM query that selects users to which the credential issuance rule applies. One and only one filter is required in filter, others are optional and cause an error if used. For more information about SCIM syntax and operators, refer to Filtering collections.
id String N/A Read-only Identifier (UUID) of the credential issuance rule.
notification Object Optional Immutable Contains notification information. When this property is supplied, the information within is used to create a custom notification.
notification.methods String[] Optional Immutable Array of methods for notifying the user; can be EMAIL, SMS, or both.
notification.template Object Optional Immutable Contains template parameters.
notification.template.locale String Optional Immutable The ISO 2-character language code used for the notification; for example, en.
notification.template.variables Object[] Required/Optional Immutable An object of name-value pairs that defines the dynamic variables used by the content variant. Required if the template requires variables, otherwise ignored. For more information on dynamic variables, refer to Dynamic variables.
notification.template.variant String Optional Immutable The unique user-defined name for the content variant that contains the message text used for the notification. For more information on variants, refer to Creating custom contents.
status String Required Mutable Status of the credential issuance rule. Can be ACTIVE or DISABLED.
updatedAt DateTime N/A Read-only Date and time the credential issuance rule was last updated; can be null.

Actions within automation (.issue, .update, and .revoke) can be PERIODIC, the service applies the rule frequently every hour, or ON_DEMAND, the service applies the rule only with an Apply Credential Issuance Rule Staged Changes request. For ON_DEMAND, use Read Credential Issuance Rule Staged Changes to determine staged changes.

The one notification.template object applies a variant and locale to all three credential notification templates: credential_issued, credential_updated, and credential_revoked. When adding a variant or locale to any of the three notification templates, consider adding the same variant or locale to the other notification templates. If a requested variant is not defined, the notification uses the default notification template. If a requested locale is not defined, the notification uses the user's preferred language or, if the user has no preferred language, the default language of the environment.

Credential Issuance Rules staged changes data model

Property Type Required? Mutable? Description
stagedChanges.action String N/A Read-only Action determined by the service that should be taken for the credential based on the request that staged it. Can be ISSUE, UPDATE, or REVOKE.
stagedChanges.createdAt DateTime N/A Read-only Date and time the change was staged by the service.
stagedChanges.credentialType.id String N/A Read-only Identifier (UUID) of the credential type with which this credential issuance rule is associated.
stagedChanges.environment.id String N/A Read-only PingOne environment identifier (UUID) in which the credential issuance rule exists.
stagedChanges.issuanceRule.id String N/A Read-only Identifier (UUID) of the credential issuance rule.
stagedChanges.scheduled String N/A Read-only Whether or not the staged change is scheduled: true if the action on the credential issuance rule is set to PERIODIC and false if the action is set to ON_DEMAND.
stagedChanges.user.id String N/A Read-only Identifier (UUID) of the user identified by the filter on the credential issuance rule.
stagedChanges.errors Object[] N/A Read-only Array of objects representing credentials that had errors when attempting an action on it. Refer to Credential Issuance Rules errors object.

Credential Issuance Rules apply staged changes data model

This data model applies only to Read Credential Issuance Rule Staged Changes and Apply Credential Issuance Rule Staged Changes.

Property Type Required? Mutable? Description
issue String[] Optional Mutable Array of one or more identifiers (UUIDs) of users whose credentials are in an issue action state and should be issued.
revoke String[] Optional Mutable Array of one or more identifiers (UUIDs) of users whose credentials are in a revoke action state and should be revoked. Used only in the body of Apply Credential Issuance Rule Staged Changes.
update String[] Optional Mutable Array of one or more identifiers (UUIDs) of users whose credentials are in an update action state and should be updated. Used only in the body of Apply Credential Issuance Rule Staged Changes.
errors Object[] N/A Read-only Array of objects representing credentials that had errors when attempting an action on it. Refer to Credential Issuance Rules errors object.

Credential Issuance Rules usage counts data model

Property Type Required? Mutable? Description
issued Integer N/A Read-only Count of credentials issued by the rule since the time the credential issuance rule was created.
accepted Integer N/A Read-only Count of credentials accepted by users of credentials issued by the credential issuance rule since the time the credential issuance rule was created.
updated Integer N/A Read-only Count of credentials updated by the rule since the time the credential issuance rule was created.
revoked Integer N/A Read-only Count of credentials revoked by the rule since the time the credential issuance rule was created.
errors Integer N/A Read-only Count of credentials that caused errors since the time the credential issuance rule was created.

Credential Issuance Rules usage details data model

Property Type Required? Mutable? Description
issued Object[] N/A Read-only Credentials issued by the rule since the time the credential issuance rule was created.
issued.user.id String N/A Read-only Identifier (UUID) of the user identified by the filter on the credential issuance rule.
issued.credential.id String N/A Read-only Identifier (UUID) of the credential subject to the issue action identified by the credential issuance rule.
issued.createdAt DateTime N/A Read-only Date and time the credential was issued by the service.
updated Object[] N/A Read-only Credentials updated by the rule since the time the credential issuance rule was created.
updated.user.id String N/A Read-only Identifier (UUID) of the user identified by the filter on the credential issuance rule.
updated.credential.id String N/A Read-only Identifier (UUID) of the credential subject to the update action identified by the credential issuance rule.
updated.createdAt DateTime N/A Read-only Date and time the credential was updated by the service.
revoked Object[] N/A Read-only Credentials revoked by the rule since the time the credential issuance rule was created.
revoked.user.id String N/A Read-only Identifier (UUID) of the user identified by the filter on the credential issuance rule.
revoked.credential.id String N/A Read-only Identifier (UUID) of the credential subject to the revoke action identified by the credential issuance rule.
revoked.createdAt DateTime N/A Read-only Date and time the credential was revoked by the service.
errors Object[] N/A Read-only Array of objects representing credentials that had errors when attempting an action on it. Refer to Credential Issuance Rules errors object.

Credential Issuance Rules errors object

Property Type Required? Mutable? Description
errors Object[] N/A Read-only Array of objects representing errors recorded when attempting an action on a credential.
errors.recordedAt DateTime N/A Read-only Date and time the error was recorded by the service.
errors.errorDetail.code String N/A Read-only A code that indicates the error encountered by the service. Refer to Credential Issuance Rules staged changes error codes.
errors.errorDetail.target String N/A Read-only The part of the credential that caused the error encountered by the service.
errors.errorDetail.message String N/A Read-only A message that describes the error encountered by the service.
credentialType.id String N/A Read-only Identifier (UUID) of the credential type with which this credential issuance rule is associated.
environment.id String N/A Read-only PingOne environment identifier (UUID) in which the credential issuance rule exists.
issuanceRule.id String N/A Read-only Identifier (UUID) of the credential issuance rule.
user.id String N/A Read-only Identifier (UUID) of the user identified by the filter on the credential issuance rule.
id String N/A Read-only Identifier (UUID) of the error.
action String N/A Read-only Action determined by the service that should be taken for the credential based on the request that staged it. Can be ISSUE, UPDATE, or REVOKE.
scheduled String N/A Read-only Whether or not the staged change is scheduled: true if the action on the credential issuance rule is set to PERIODIC and false if the action is set to ON_DEMAND.
createdAt DateTime N/A Read-only Date and time the error was created by the service.
updatedAt DateTime N/A Read-only Date and time the error was updated by the service.

Credential Issuance Rules staged changes error codes

Error Code Description
TEMPLATE_ERROR An error in the template placeholders of the cardDesignTemplate SVG.
SVG_ERROR An error in the syntax of the cardDesignTemplate SVG.
CREDENTIAL_TYPE_INVALID Credential Type was invalid when the staged change was performed.
FILE_RESOLUTION_ERROR User attribute for a field with fileSupport did not reference a supported file, such as an unsupported URL, file too large, or error reading file.
CREDENTIAL_TOO_LARGE Size of data collected for the credential exceeds the maximum that can be stored in a credential.
UNEXPECTED_ERROR An unexpected error occurred.

Response codes

Code Message
200 Successful operation.
400 The request could not be completed.
401 You do not have access to this resource.
403 You do not have permissions or are not licensed to make this request.
404 The requested resource was not found.
500 Unexpected server error.

Create Credential Issuance Rule


Read All Credential Issuance Rules


Read One Credential Issuance Rule


Read All Credential Issuance Rule Staged Changes


Read One Credential Issuance Rule Staged Change


Read Credential Issuance Rule Usage Counts


Read Credential Issuance Rule Usage Details


Update Credential Issuance Rule


Apply Credential Issuance Rule Staged Changes


Delete Credential Issuance Rule

Digital Wallet Apps

The digital wallet apps service controls the relationship between the customer's digital wallet app, which communicates with users' digital wallets, and a customer's PingOne application.

Digital wallet app data model

Property Type Required? Mutable? Description
application.id String Required Immutable The identifier (UUID) of the PingOne application associated with the digital wallet app.
appOpenUrl String Required Mutable URL sent in notifications to the user to communicate with the service.
createdAt DateTime N/A Read-only Date and time the digital wallet app was created.
environment.id String N/A Read-only PingOne environment identifier (UUID) in which the digital wallet app exists.
id String N/A Read-only Identifier (UUID) associated with the digital wallet app.
name String Required Mutable Name associated with the digital wallet app.
updatedAt DateTime N/A Read-only Date and time the digital wallet app was last updated; can be null.
usesPingOneWalletSDK Boolean Optional Immutable Whether the user's wallet app uses the PingOne Wallet SDK; default is true.

Create Digital Wallet App


Read All Digital Wallet Apps


Read One Digital Wallet App


Update Digital Wallet App


Delete Digital Wallet App

Digital Wallets

The Digital Wallet service controls the relationship between a user's phone wallet app, which uses the Wallet SDK, and the customer's PingOne application. It also offers notifications when the PingOne application communicates with the user's Wallet SDK. Settings on the Digital Wallet configure sending push notifications from PingOne Credentials to the Wallet SDK of the user.

In the normal digital wallet pairing use case, you use Create Digital Wallet to create the Digital Wallet without the applicationInstance.id and a pairing session is created. The Digital Wallet service uses the digital_wallet_pairing notification template to send the pairing session URL (refer to appOpen.href in the response) to the user via email or text or you show a QR code (refer to qrUrl.href in the response) of the pairing session URL to the user. When the user opens the URL, it opens your app or takes them to a page with instructions on how to install the app. When the app opens the URL, it shares its applicationInstance.id with the service using the Wallet SDK.

Alternatively, you send the applicationInstance.id when you create the Digital Wallet. For example, if you have the user install your app, the user authenticates with your servers. When your app is installed, it creates an application instance. Since the app knows who the user is, the app sends its application instance identifier to your server and then your application sends the applicationInstance.id to the service when creating or updating the Digital Wallet. This creates a Digital Wallet with a known application instance identifier. Activation of the Digital Wallet requires sending some device data, such as SDK version and application bundle ID or package name, to PingOne Credentials:

  1. The service creates a pairing session and sends a pairing request message to the device.
  2. The Wallet SDK receives this request and the app approves the request.
  3. The Wallet SDK sends the device data to PingOne Credentials, which activates the Digital Wallet.

Digital wallet data model

Property Type Required? Mutable? Description
applicationInstance.id String Required/Optional Immutable Identifier (UUID) of the application running the Wallet SDK on the user's device and registered with the service. Registration is required before the wallet can be used. Registration is performed by a compatible wallet app using the Wallet SDK, or by the customer application using Create Digital Wallet or one Update Digital Wallet.
createdAt DateTime N/A Read-only Date and time the Digital Wallet was created.
deviceData Object N/A Read-only Contains metadata collected about the user's Wallet SDK.
digitalWalletApplication.id String Required Immutable Identifier (UUID) of the customer's PingOne application that interacts with the user's Wallet SDK.
environment.id String N/A Read-only PingOne environment identifier (UUID) in which the digital wallet app exists.
id String N/A Read-only Identifier (UUID) associated with the digital wallet.
notification Object Optional Immutable Contains notification information. When this property is supplied, the information within is used to create a custom notification.
notification.methods String[] Optional Immutable Array of methods for notifying the user; can be EMAIL, SMS, or both.
notification.results Object[] N/A Read-only Array of objects that contain the results of attempts to notify the user.
notification.results.error Object N/A Read-only Contains information regarding why a notification failed to send.
notification.results.error.code String N/A Read-only A short alphanumeric code identifying the error.
notification.results.error.details Object[] N/A Read-only Array of objects that contain details of the error as provided by the source of the error. Exact format varies by source.
notification.results.error.id String N/A Read-only Identifier (UUID) of the error message.
notification.results.error.message String N/A Read-only A textual message explaining the error.
notification.results.method String N/A Read-only Method used in the attempt to notify the user; can be EMAIL or SMS.
notification.results.notification.id String N/A Read-only Identifier (UUID) of the notification that was sent.
notification.results.sent Boolean N/A Read-only Whether the notification was successfully sent.
notification.template Object Optional Immutable Contains template parameters.
notification.template.locale String Optional Immutable The ISO 2-character language code used for the notification; for example, en.
notification.template.variables Object[] Required/Optional Immutable An object of name-value pairs that defines the dynamic variables used by the content variant. Required if the template requires variables, otherwise ignored. For more information on dynamic variables, refer to Dynamic variables.
notification.template.variant String Optional Immutable The unique user-defined name for the content variant that contains the custom message text used for the notification. For more information on variants, refer to Creating custom contents.
pairingAttempts Object[] N/A Read-only Array of result objects of all pairing attempts between the Digital Wallet and the Wallet SDK. Not returned when no pairing was attempted or when creating a Digital Wallet.
pairingAttempts.attemptedAt DateTime N/A Read-only Date and time the credential pairing was attempted.
pairingAttempts.details Object N/A Read-only Object with details regarding a pairing failure. Not returned when a pairing was successful. Content of the object varies depending on the error as explained in the Description column of Pairing attempt errors.
pairingAttempts.error String N/A Read-only As listed in the Error column of Pairing attempt error.
pairingAttempts.message String N/A Read-only Explanation of the error.
pairingAttempts.success Boolean N/A Read-only Whether the pairing attempt was successful.
pairingSession Object N/A Read-only Contains information regarding the pairing session.
status String Optional Mutable Status of the wallet; can be PAIRING_REQUIRED, ACTIVE, EXPIRED, or DISABLED.
updatedAt DateTime N/A Read-only Date and time the digital wallet was last updated; can be null.
user.id String N/A Read-only Identifier (UUID) of the user associated with the digital wallet.

Pairing attempt errors

Error Description
APP_PACKAGE_MISMATCH The package name or bundle ID sent by the Wallet SDK does not match the mobile settings of the PingOne Application (identified by digitalWalletApplication.id), details includes what was sent by the Wallet SDK in appPackage.
WALLET_ALREADY_PAIRED The digital wallet is already successfully paired or the instance of the Wallet SDK on the device has already been paired with a different digital wallet of the same user. If a user attempts to pair the same digital wallet twice, details includes the new application instance ID in newApplicationInstanceId. If a user attempts to pair the same Wallet SDK instance with a second digital wallet, details includes the existing digital wallet ID in existingDigitalWalletId.
WALLET_DISABLED Wallet is disabled.
UNEXPECTED_ERROR An unexpected error occurred in the service, no details object returned.

The digital wallet service uses the digital_wallet_pairing notification template to send the pairing session URL to the user via email or SMS text. The notification.template object can define a variant and locale for the notification, if needed.

Provisioned Credentials data model (wallet)

This object is shared with user credentials. It is returned only with Read One Digital Wallet Credentials and Read One User Credential Wallets. The former returns all user credentials associated with the specified digital wallet, the latter returns all digital wallets associated with the specified user credential.

Property Type Required? Mutable? Description
claimReference Object N/A Read-only The serialized JSON object used to create the ClaimReference object returned. This is needed to revoke an issued credential.
createdAt DateTime N/A Read-only Date and time the credential was provisioned.
credential.id String N/A Read-only Identifier (UUID) of the user credential associated with the provisioned credential.
digitalWallet.id String N/A Read-only Identifier (UUID) of the digital wallet associated with the provisioned credential.
environment.id String N/A Read-only Identifier (UUID) of the environment associated with the provisioned credential.
expiresAt Date N/A Read-only The date that the provisioned credential expires. If this value is null, the provisioned credential never expires.
id String N/A Read-only Identifier (UUID) of the provisioned credential.
status String N/A Read-only Status of the provisioned credential.
user.id String N/A Read-only Identifier (UUID) of the user associated with the provisioned credential.
walletActions Object[] N/A Read-only Array of actions taken regarding the provisioned credential.
walletActions.action String N/A Read-only Action taken regarding the provisioned credential; can be CREDENTIAL_ACCEPTED, CREDENTIAL_REJECTED, CREDENTIAL_REVOKED, or CREDENTIAL_DELETED.
walletActions.occurredAt DateTime N/A Read-only Date and time that the action occurred.

Create Digital Wallet


Read All Digital Wallets


Read One Digital Wallet


Read One Digital Wallet Credentials


Update Digital Wallet


Delete Digital Wallet

User Credentials

Use the User Credentials service to create a user credential and get the credential status. To issue the credential to the user you must first create a credential type (automated) or create a credential type (managed). After you create a credential type, you can issue credentials to users two ways depending on the management.mode of the credential type:

Regardless of management.mode, you can revoke a user credential, read all user credentials, read one user credential, or read one user credential wallets.

User Credentials data model

Property Type Required? Mutable? Description
createdAt DateTime N/A Read-only Date and time the user credential was created.
credentialType.id String Required Immutable Identifier of the credential type.
data Object Optional Mutable Fields submitted for the credential.
data.<field> String Required/Optional Mutable Fields for user data; refer to data object data model.
environment.id String N/A Read-only Identifier (UUID) of the environment associated with the user.
expiresAt DateTime Optional Mutable The date that the user credential expires. If this value is null, the credential never expires.
id String N/A Read-only Identifier (UUID) of the user credential.
notification Object Optional Immutable Contains notification information. When this property is supplied, the information within is used to create a custom notification.
notification.methods String[] Optional Immutable Array of methods for notifying the user; can be EMAIL, SMS, or both.
notification.results Object N/A Read-only Contains the results of attempts to notify the user.
notification.results.error Object N/A Read-only Contains information regarding why a notification failed to send.
notification.results.method String N/A Read-only Method used in the attempt to notify the user; can be EMAIL or SMS.
notification.results.notification.id String N/A Read-only Identifier (UUID) of the notification that was sent.
notification.results.sent Boolean N/A Read-only Whether the notification was successfully sent.
notification.template Object Optional Immutable Contains template parameters.
notification.template.locale String Optional Immutable The ISO 2-character language code used for the notification; for example, en.
notification.template.variables Object[] Required/Optional Immutable An object of name-value pairs that defines the dynamic variables used by the content variant. Required if the template requires variables, otherwise ignored. For more information on dynamic variables, refer to Dynamic variables.
notification.template.variant String Required Immutable The unique user-defined name for the content variant that contains the message text used for the notification. For more information on variants, refer to Creating custom contents.
status String N/A Read-only Status of the user credential.
title String N/A Read-only Returned as defined in the credential type.
updatedAt DateTime N/A Read-only Date and time the credential type was last updated; can be null.
user.id String Required Immutable Identifier (UUID) of the user. Supplied in the endpoint.

The one notification.template object applies a variant and locale to all three credential notification templates: credential_issued, credential_updated, and credential_revoked. When adding a variant or locale to any of the three notification templates, consider adding the same variant or locale to the other notification templates. If a requested variant is not defined, the notification uses the default notification template. If a requested locale is not defined, the notification uses the user's preferred language or, if the user has no preferred language, the default language of the environment.

Although notification.template is immutable, Update a User Credential can change notification.template on a specific credential for its life span.

data object data model

The data object can only be used for Credential Types where its management.mode is MANAGED. Individual fields in data can only be used where the corresponding credential type's metadata.fields.type is Alphanumeric Text. If the corresponding credential type's metadata.fields.value is valued, that value represents a default for the field and can be overridden in Create a User Credential or Update a User Credential API requests.

The data object contains any number of keys, where the key is the title in metadata.fields that represents a specific attribute of the credential type required by the issuer. For example, an insurance company might have a metadata.fields.title of Medical Limitations and the corresponding data key would be Medical Limitations. These data fields must match the metadata.fields defined for the credential type in credentialType.id. For more information on fields, refer to the fields object in metadata object data model and the data types in fields.type types.

Whether any given data.<field> is required or optional depends on the corresponding fields.required and fields.value in the metadata object of the credential type. A data.<field> is required when fields.required is true and no fields.value exists and optional when fields.required is false or when fields.value has a value.

Provisioned Credentials data model (credential)

This object is shared with digital wallets. It is returned only with Read One User Credential Wallets and Read One Digital Wallet Credentials. The former returns all digital wallets associated with the specified user credential, the latter returns all user credentials associated with the specified digital wallet.

Property Type Required? Mutable? Description
claimReference Object N/A Read-only The serialized JSON object used to create the ClaimReference object returned. This is needed to revoke an issued credential.
createdAt DateTime N/A Read-only Date and time the credential was provisioned.
credential.id String N/A Read-only Identifier (UUID) of the user credential associated with the provisioned credential.
digitalWallet.id String N/A Read-only Identifier (UUID) of the digital wallet associated with the provisioned credential.
environment.id String N/A Read-only Identifier (UUID) of the environment associated with the provisioned credential.
expiresAt Date N/A Read-only The date that the provisioned credential expires. If this value is null, the provisioned credential never expires.
id String N/A Read-only Identifier (UUID) of the provisioned credential.
status String N/A Read-only Status of the provisioned credential.
user.id String N/A Read-only Identifier (UUID) of the user associated with the provisioned credential.
walletActions Object[] N/A Read-only Array of actions taken regarding the provisioned credential.
walletActions.action String N/A Read-only Action taken regarding the provisioned credential; can be CREDENTIAL_ACCEPTED, CREDENTIAL_REJECTED, CREDENTIAL_REVOKED, or CREDENTIAL_DELETED.
walletActions.occurredAt DateTime N/A Read-only Date and time that the action occurred.

Response codes

Code Message
200 Successful operation.
400 The request could not be completed.
401 You do not have access to this resource.
403 You do not have permissions or are not licensed to make this request.
404 The requested resource was not found.
500 Unexpected server error.

Create a User Credential


Read All User Credentials


Read One User Credential


Read One User Credential Wallets


Update a User Credential


Revoke a User Credential

Credential Verifications

The Credential Verification service receives, and responds to, requests for credential verification using Decentralized Identity Foundation Java Web Token Verifiable Credentials Presentation Profile (DIF JWT-VC Profile). The profile uses such open standards as:

  • World Wide Web Consortium (W3C) Decentralized Identifiers (DID) for core architecture, data model, and representations

  • W3C Verifiable Credentials Data Model for the presentation data model

  • DIF Presentation Exchange for credential request

  • OpenID for Verifiable Presentations (OpenID4VP ID1) as the base protocol for transportation

Use of these standards provides interoperability with any app that complies with DIF JWT-VC Profile.

The service can also use PingOne native protocols. The PingOne native protocol only works with apps that use the PingOne Neo Native SDKs, which has more features but is restricted to only supported apps.

Credential Verifications session data model

Property Type Required? Mutable? Description
_links.appOpenURL.href String N/A Read-only URL to use in a mobile browser to open a compatible wallet app, such as the PingOne Neo Sample App.
_links.qr.href String N/A Read-only URL to return a QR code that, when evaluated, opens the compatible wallet app to this verification.
_links.self.href String N/A Read-only URL to return this same response.
applicationInstance.id String Required/Optional Immutable Identifier (UUID) of the application running the Wallet SDK on the user's device and registered with the service. When set and protocol is NATIVE, the service sends a push notification to the application instance using the settings of the digital wallet application.
didMethod String Optional Immutable The decentralized identifier method to use during the credential verification session. Can be JWK, the default, or ION.
digitalWalletApplication.id String Optional Immutable Identifier (UUID) of the customer's digital wallet app that interacts with the user's digital wallet. When set and protocol is NATIVE, the service uses the appOpenURL defined on the Digital Wallet App instead of shocard.pingone.com.
errors Object[] N/A Read-only Array of objects representing errors recorded when attempting an action on a credential. Refer to Credential Verifications errors object data model.
id String N/A Read-only Identifier (UUID) of the credential verification session.
issuerFilter.dids String[] Optional Immutable Array of unique Decentralized Identifiers (DID). Ignored if protocol is NATIVE. Refer to the note following this table.
issuerFilter.environmentIds String[] Optional Immutable Array of PingOne environment identifiers. Refer to the note following this table.
message String Optional Immutable A message shown to the user by the compatible wallet app to alert the user.
notification Object Optional Immutable Contains notification information. When protocol is NATIVE and applicationInstance.id is set, permits administrators to customize their push notification.
notification.template Object Optional Immutable Contains template parameters.
notification.template.locale String Optional Immutable The ISO 2-character language code used for the notification; for example, en.
notification.template.variables Object[] Required/Optional Immutable An object of name-value pairs that defines the dynamic variables used by the content variant. Required if the template requires variables, otherwise ignored. For more information on dynamic variables, refer to Dynamic variables.
notification.template.variant String Optional Immutable The unique user-defined name for the content variant that contains the message text used for the notification. For more information on variants, refer to Creating custom contents.
protocol String Optional Immutable Protocol to use for verification; can be OPENID4VP or NATIVE. If not present, defaults to NATIVE.
requestedCredentials Object[] Required Immutable Array of objects that contain the type of credentials to verify and the keys to return from the credential. Refer to the important note following this table.
requestedCredentials.keys String[] Optional Immutable Array of strings that identify the key names for selective disclosure to return from the credential.
requestedCredentials.type String Required Immutable Type of credential to verify. Must be the name of a PingOne credential type issued by the credential issuer.
status String N/A Read-only Status of the verification request; can be INITIAL, WAITING, VERIFICATION_SUCCESSFUL, VERIFICATION_FAILED, or VERIFICATION_EXPIRED.

The digital wallet service uses the credential_verification notification template to send a push notification to a digital wallet when a Create Credential Verification Session (NATIVE - Push Notification) is created. The notification.template object can define a variant and locale for the notification, if needed.

If issuerFilter.environmentIds is submitted, the service searches all listed environments for the issuer of the presented credential. If the user presents a credential that is not from one of these issuers, the verification fails with status of VERIFICATION_FAILED.

If issuerFilter.dids is submitted and protocol is OPENID4VP, the service searches all listed decentralized identifiers (DID) for the issuer of the presented credential. If the user presents a credential that is not from one of these issuers, the verification fails with status of VERIFICATION_FAILED.

This issuerFilter.dids typically contains decentralized identifiers for issuers that are not using PingOne Credentials for JWT-VC issuance. The service supports these three DID methods:

Credential Verifications credential data data model

Property Type Required? Mutable? Description
_links.self.href String N/A Read-only URL to return this verification credential data.
credentialData Object[] N/A Read-only Array of objects containing the data found on the credential.
credentialData.data Object[] N/A Read-only Array of objects containing the name-value pairs found on the credential. If a credential has not yet been shared, status is INITIAL or WAITING, then returns as an empty array.
credentialData.data.key String N/A Read-only Name of the key of a name-value pair found on the credential.
credentialData.data.value String N/A Read-only Value of a name-value pair found on the credential.
credentialData.issuerId String N/A Read-only Identifier (UUID) of the issuer of the credential verified in the format from the credential issuer.
credentialData.issuerLogo String N/A Read-only Base64-encoded logo of the issuer of the credential.
credentialData.issuerName String N/A Read-only Name of the issuer of the credential verified.
credentialData.type String N/A Read-only Space-delimited list of the types of credential verified.
credentialData.types String[] N/A Read-only Array of the types of credential verified.
errors Object[] N/A Read-only Array of objects representing errors recorded when attempting an action on a credential. Refer to Credential Verifications errors object data model.
id String N/A Read-only Identifier (UUID) of the verification credential data.
status String N/A Read-only Status of the verification request; can be INITIAL, WAITING, VERIFICATION_SUCCESSFUL, VERIFICATION_FAILED, or VERIFICATION_EXPIRED.

Credential Verifications session data data model

Property Type Required? Mutable? Description
_links.appOpenURL.href String N/A Read-only URL to use in a mobile browser to open a compatible wallet app, such as the PingOne Neo Sample App.
_links.qr.href String N/A Read-only URL to return a QR code that, when evaluated, opens the compatible wallet app to this verification.
_links.self.href String N/A Read-only URL to return this verification session data.
applicationInstance.id String N/A Read-only Identifier (UUID) of the application running the Wallet SDK on the user's device and registered with the service.
errors Object[] N/A Read-only Array of objects representing errors recorded when attempting an action on a credential. Refer to Credential Verifications errors object data model.
id String N/A Read-only Identifier (UUID) of the verification session data.
status String N/A Read-only Status of the verification request; can be INITIAL, WAITING, VERIFICATION_SUCCESSFUL, VERIFICATION_FAILED, or VERIFICATION_EXPIRED.
verifiedData Object[] N/A Read-only Array of objects containing the data found on the credential.
verifiedData.data Object[] N/A Read-only Array of objects containing the name-value pairs found on the credential. If a credential has not yet been shared, status is INITIAL or WAITING, then returns as an empty array.
verifiedData.data.key String N/A Read-only Name of the key of a name-value pair found on the credential.
verifiedData.data.value String N/A Read-only Value of a name-value pair found on the credential.
verifiedData.metaData Object N/A Read-only Contains metadata associated with the credential.
verifiedData.metaData.issuanceDate String N/A Read-only The date and time the credential was issued in ISO 8601 YYYY-MM-DDTHH:MM:SS.sssZ format (milliseconds optional).
verifiedData.metaData.issuerId String N/A Read-only Identifier (UUID) of the issuer of the credential verified in the format from the credential issuer.
verifiedData.metaData.issuerLogo String N/A Read-only Base64-encoded logo of the issuer of the credential.
verifiedData.metaData.issuerName String N/A Read-only Name of the issuer of the credential verified.
verifiedData.metaData.verificationStatus String N/A Read-only Verification status of the credential. Can be VALID or INVALID.
verifiedData.type String N/A Read-only Space-delimited list of the types of credential verified.
verifiedData.types String[] N/A Read-only Array of the types of credential verified.

Credential Verifications errors object data model

Property Type Required? Mutable? Description
errors.code String N/A Read-only A code that indicates the error encountered by the service. Refer to Credential Verifications error codes.
errors.target String N/A Read-only The part of the credential that caused the error encountered by the service.
errors.message String N/A Read-only A message that describes the error encountered by the service.

Credential Verifications error codes

Code Message
REQUESTED_CREDENTIAL_MISSING One or more of the requested credential types is not included in the presentation from the user.
REQUESTED_FIELD_MISSING One or more of the requested fields for one or more credential types is not included in the presentation from the user.
INVALID_TOKEN The idToken presented by the user's wallet is not valid (format or signature error).
INVALID_CREDENTIAL One or more of the credentials presented by the user could not be validated. Many different errors can cause this. A more specific error is returned in the errors array of the Read Credential Verification Credential Data or Read Credential Verification Session Data response.
UNEXPECTED_ERROR An unexpected error occurred during credential verification.

Response codes

Code Message
200 Successful operation.
400 The request could not be completed.
401 You do not have access to this resource.
403 You do not have permissions or are not licensed to make this request.
404 The requested resource was not found.
500 Unexpected server error.

Create Credential Verification Session (OPENID4VP)


Create Credential Verification Session (NATIVE)


Create Credential Verification Session (NATIVE - Push Notification)


Read One Credential Verification Status


Read Credential Verification Credential Data


Read Credential Verification Session Data


Delete Credential Verification Session

Working with PingOne APIs

If you want to start building your own workflows with PingOne APIs, the Workflow Library provides step-by-step workflows with linked Postman collections to help you start using the PingOne APIs in your Postman environment. For information about how PingOne secures APIs, resources, and data, and what you can do to implement security measures for your PingOne deployment and applications, refer to Platform security.

If you're new to PingOne and have not set up your test environment, refer to PingOne for Developers Getting Started. This guide helps you get an admin access token, which is required to make API calls to PingOne Credentials API resources.

PingOne API domains

This section discusses how PingOne API regional endpoints are entered in the domain name system (DNS). In DNS, and in our endpoints, the domain part of the uniform resource locator (URL) comprises three parts separated by periods, such as api.pingone.com: one of our service-specific subdomains, our PingOne domain name of pingone, and one of our top level domains.

We use Postman variables to manage this variety of domain parts in PingOne API endpoints. The later discussion is correct regarding the domain part that the variables evaluate to. However, to ease maintenance, the Postman environment template you get when you download a collection uses variables to isolate the TLD from the rest of the domain part and to isolate the domain part from the rest of the endpoint.

The environment template has a path variable for each subdomain. Each path variable uses another variable, {{tld}}, for the top level domain (TLD). Such as https://api.pingone.com/v1 for {{apiPath}}. The tld variable is first in the environment template that you downloaded.

The table below shows the top level domain value for each region. To change your region, simply change the default {{tld}} value from com to your region's TLD.

Region Code Top level domain
North America region (excluding Canada) NA com (default)
Canada region CA ca
European Union region EU eu
Australia region AU com.au
Singapore region SG sg
Asia-Pacific region AP asia

The PingOne API includes the following domains:

Domain Postman path variable Description
api.pingone.{{tld}}/v1 {{apiPath}} The primary domain for calling PingOne Management API resource server. Note: /v1 is required for {{apiPath}}.
auth.pingone.{{tld}} {{authPath}} The authorization and authentication server domain called to request the access token required to authenticate PingOne API requests. Note: do not include /v1 for {{authPath}}.
orchestrate-api.pingone.{{tld}}/v1 {{orchestratePath}} The primary domain for calling the PingOne DaVinci Management API resource server. Note: /v1 is required for {{orchestratePath}}.
scim-api.pingone.{{tld}}/v1 {{scimPath}} PingOne API service for Cross-domain Identity Management (SCIM). Note: /v1 is required for {{scimPath}}.

The {{...Path}} variable in the sample requests stand for the PingOne service endpoint. Refer to Public endpoints in the PingOne for Developers Foundations guide for more information.

The Try a Request feature

Our documentation for the PingOne APIs includes an interactive Try a Request feature. Try a Request enables you to configure and send a PingOne API request and get a response from within the documentation. This is a quick way to interactively test a PingOne API request without needing to use either Postman or the command line.

Requests in Authentication and Authorization APIs do not have the Try a Request feature due to a Cross-Origin Resource Sharing (CORS) constraint.

Calling the PingOne APIs from the command line

Each PingOne API request in the documentation includes an example request and response. By default, the example request is displayed using cURL. However, a number of coding languages are available in the associated drop-down list. If you want to run a request from the command line, you can select the coding language and copy the displayed request. You'll need to replace any variables in the request with the appropriate values before running the request.

Using Postman collection-level authorization

Most APIs require authorization to ensure that client requests access data securely. Postman can pass along whatever authorization details necessary for the method demanded by the endpoint. You can manually include authorization data in the header, body, or as parameters to a request. However, the easiest way is to use the Authorization tab in Postman. Select an authorization Type on that tab and Postman offers a dialog to gather the information required by that Type. When you run a request, Postman uses the information from the Authorization tab to automatically add the necessary authorization header, body, or parameters to the request. Postman offers the Authorization tab on requests, folders, and collections.

In PingOne collections, the authorization method is defined at the collection level. Only those requests that require a specific authorization method have authorization defined on the request (roughly 10% of PingOne requests). This allows you to easily change the authorization used for most requests. Refer to Postman Collection-Level Authorization for more information.

Postman and the PingOne APIs

We use Postman to create our PingOne Credentials API docs, and have supplied our Postman collections for you to download. There's also an accompanying Postman Environment template already populated with the variables used in the collections.

If you aren't currently using Postman, you can install the free version. Refer to Download Postman to install Postman, either locally, or in your browser.

Refer to The PingOne Credentials API Postman collections for the collections you can download or fork.

For more information about our Postman environment variables, refer to The PingOne Postman environment template.

You'll also find all of the Postman collections for our documented PingOne use cases in our Workflow Library.

The PingOne Postman collections

You can get the PingOne Credentials API Postman collection by following either of these methods for retrieving a Postman collection into your workspace:

  1. Fork the collection into your workspace. Postman retains an association between the source and your fork. If we update the source collection, you can pull those changes into the fork in your workspace.

  2. Import the collection into your workspace. This is a one-time transfer and retains no association to the source collection.

To retrieve a collection

Refer to The PingOne Credentials API collections on this page.

  1. Click the collection's Run In Postman button.

  2. At the prompt, click Fork Collection at the bottom of the dialog or click import a copy near the bottom of the dialog.

    RunInPostman

  3. Follow the on-screen instructions to fork or import the collection. You're prompted to select a Postman workspace for the retrieved collection.

When you fork a Postman collection, you create a copy of it in a selected workspace. Forking a collection creates a linked version that synchronizes with its source collection. This synchronization is apparent when you click the three dots icon on the forked collection - you'll see Pull changes on the context menu. When you click Pull changes, Postman compares the fork to the source collection. If changes are available, you can pull those changes into your fork. If you also elect to watch the collection, you'll receive notifications when the source changes.

If you import a collection, a copy is created in the selected workspace with no link back to the source. The collection is static. This may be desirable for some use cases. For example, if you intend to keep and use only some requests in a collection, a link back to the source is not needed.

You're not limited to choosing one method or the other. You can fork a copy to track the source and import a copy for experimentation, if you like.

The PingOne Credentials API collections

These Postman collections include requests for all create, read, update, and delete (CRUD) operations for the PingOne Credentials APIs.

Collection Description Retrieve
PingOne Credentials Postman requests for the PingOne Credentials API. Includes all environment variables. No example responses to make it easy to get started. Run In Postman
PingOne Credentials Postman requests for the PingOne Credentials API. Includes all PingOne Platform API Reference documentation and example responses. No environment variables are included. Run In Postman

For more information about the Postman environment variables included when you download or fork one of our Postman collections, refer to The PingOne Postman environment template.

The PingOne Postman environment template

Our Postman collections use variables in the request URLs to specify the UUIDs for PingOne resources. When you click the Run in Postman button for a collection, these environment variables are included in your download or fork. Use these environment variables as a template to assign your PingOne resource UUIDs with the common variables used in many of the requests.

For more information about using Postman environments, refer to the following topic in the Postman documentation: Environments in Postman.

POST requests in the PingOne Credentials API Postman collections that create a resource and return a resource ID include a Postman script. This script automatically adds a resource variable to your active Postman environment, and uses the newly created ID as the value.

For example, the following request creates a new Credentials variable. This request URL contains variables for the API path and environment ID:

POST {{apiPath}}/environments/{{envID}}/variables

To run this request, you must ensure the {{apiPath}} in the Postman environment template has the regional top-level domain (TLD) associated with your organization. Refer to Variables you must value for more information.

Almost every request in PingOne requires an environment ID. If you are working primarily in one environment for testing purposes, you'll want to add your environment's UUID to your active Postman environment as the value for the {{envID}} variable.

Requests to PingOne Management API endpoints require a valid access token to authenticate the request. In the PingOne Postman collections, the token value is represented in the Postman environment template as the variable {{accessToken}}.

With the {{tld}} and {{envID}} variables defined in your Postman template, and with a valid token value defined in the {{accessToken}} variable, you can run the request shown above:

POST {{apiPath}}/environments/{{envID}}/variables

If the request is successful, Postman adds a {{variableID}} variable to the current Postman environment automatically, and associates the new user's id property value (the UUID of the new user) with this variable.

Notes about environment variables and security

It's important to understand how Postman allows you to Store and reuse values using variables. Postman has two values for each environment variable: an Initial value and a Current value. You'll want to pay particular attention to differences between Initial and current values. Initial values are saved to Postman's cloud, and available to anyone who has access to the environment. Current values are saved only locally and available only to you. Postman uses only the current value in requests. If an environment variable has an initial value but no current value, Postman doesn't copy it to the current value or use the initial value in the request, the request simply fails. In this case, you need to manually copy the initial value to the current value.

When you create a new variable with an initial value and save the environment, Postman autofills the current value. However, that is the only time that Postman autofills the current value. If you subsequently delete the current value, the variable is no longer valued in a request.

Saving initial values to the Postman cloud impacts security. These initial values are available to anyone who has access to the workspace. If a workspace is public, you have a security issue.

Postman's recommended solution to exposing secrets is to Store secrets in your Postman Vault. Remember that Postman uses only current values in requests.

Variables you must value

When you download or fork a PingOne Postman collection, your workspace receives a set of Postman environment variables for you to use as a template. The variables that represent a resource in PingOne automatically receive a value when you create a new PingOne resource using Postman. Our script associated with the request (shown on the request's Scripts tab) inserts the identifier of the resource it creates as the value of the variable associated with that resource. However, some variables essential to using Postman with PingOne do not have their values inserted automatically. You must manually add the correct value to these variables before making any requests in Postman:

Postman variable PingOne resource
adminAppID The Client ID of the Worker app you created Create an admin Worker app connection.
adminAppSecret The Client Secret of the Worker app created.
adminEnvID The ID for the environment in which your Worker app resides.
envID The ID for the environment in which you are running your Postman API requests.
orgID The ID for your organization. In the PingOne admin console, select Environment and click Properties to view your organization ID.
tld The top-level domain to use for your environment. This is used in URLs containing apiPath, authPath, orchestratePath, and scimPath.
apiPath The regional domain for the PingOne management server (https://api.pingone.{{tld}}/v1).
authPath The regional domain for the PingOne authorization and authentication server (https://auth.pingone.{{tld}}).
orchestratePath The regional domain for the PingOne DaVinci management server (https://orchestrate-api.pingone.{{tld}}/v1).
scimPath The regional domain for the PingOne SCIM management server (https://scim-api.pingone.{{tld}}).