# CreatePublicKeyCredentialRequest

Artifact: [androidx.credentials:credentials](https://developer.android.com/jetpack/androidx/releases/credentials) [View Source](https://cs.android.com/search?q=file:androidx/credentials/CreatePublicKeyCredentialRequest.kt+class:androidx.credentials.CreatePublicKeyCredentialRequest) Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

*** ** * ** ***

<br />

```
class CreatePublicKeyCredentialRequest : CreateCredentialRequest
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.credentials.CreateCredentialRequest](https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest) ||
|   | ↳ | [androidx.credentials.CreatePublicKeyCredentialRequest](https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest) |

*** ** * ** ***

A request to register a passkey from the user's public key credential provider.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#CreatePublicKeyCredentialRequest(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.String,kotlin.Boolean,kotlin.Boolean)( requestJson: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, clientDataHash: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html?, preferImmediatelyAvailableCredentials: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, origin: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?, isAutoSelectAllowed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, isConditional: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Constructs a `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest` to register a passkey from the user's public key credential provider. |
| `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#CreatePublicKeyCredentialRequest(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.String,kotlin.String,kotlin.Boolean)( requestJson: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, clientDataHash: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html?, preferImmediatelyAvailableCredentials: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, origin: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?, preferDefaultProvider: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?, isAutoSelectAllowed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Constructs a `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest` to register a passkey from the user's public key credential provider. |

| ### Public properties |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html?` | `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#clientDataHash()` a clientDataHash value to sign over in place of assembling and hashing clientDataJSON during the signature request; only meaningful when `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.Boolean,androidx.credentials.CreateCredentialRequest.DisplayInfo,kotlin.String,android.os.Bundle,android.os.Bundle,kotlin.Boolean)` is set |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#isConditional()` whether the public key should be created opportunistically based on the user's credential provider already possessing a password for the same account and/or other provider specific conditions, and also based on internal system conditions. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#requestJson()` the request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson). |

### Inherited properties

From [androidx.credentials.CreateCredentialRequest](https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest) `https://developer.android.com/reference/android/os/Bundle.html` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#candidateQueryData()`

the partial request data in the `https://developer.android.com/reference/android/os/Bundle.html` format that will be sent to the provider during the initial candidate query stage, which should not contain sensitive user credential information (note: bundle keys in the form of `androidx.credentials.*` are reserved for internal library use)
`https://developer.android.com/reference/android/os/Bundle.html` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#credentialData()`

the request data in the `https://developer.android.com/reference/android/os/Bundle.html` format
`https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest.DisplayInfo` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#displayInfo()`

the information to be displayed on the screen
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#isAutoSelectAllowed()`

whether a create option will be automatically chosen if it is the only one available to the user
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#isSystemProviderRequired()`

true if must only be fulfilled by a system provider and false otherwise
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#origin()`

the origin of a different application if the request is being made on behalf of that application (Note: for API level \>=34, setting a non-null value for this parameter will throw a SecurityException if android.permission.CREDENTIAL_MANAGER_SET_ORIGIN is not present)
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#preferImmediatelyAvailableCredentials()`

true if you prefer the operation to return immediately when there is no available passkey registration offering instead of falling back to discovering remote options, and false (preferred by default) otherwise
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/kotlin/androidx/credentials/CreateCredentialRequest#type()`

the credential type determined by the credential-type-specific subclass (e.g. the type for `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePasswordRequest` is `https://developer.android.com/reference/kotlin/androidx/credentials/PasswordCredential#TYPE_PASSWORD_CREDENTIAL()` and for `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest` is `https://developer.android.com/reference/kotlin/androidx/credentials/PublicKeyCredential#TYPE_PUBLIC_KEY_CREDENTIAL()`)

## Public constructors

### CreatePublicKeyCredentialRequest

Added in [1.6.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.6.0)

```
CreatePublicKeyCredentialRequest(
    requestJson: String,
    clientDataHash: ByteArray? = null,
    preferImmediatelyAvailableCredentials: Boolean = false,
    origin: String? = null,
    isAutoSelectAllowed: Boolean = false,
    isConditional: Boolean = false
)
```

Constructs a `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest` to register a passkey from the user's public key credential provider.

| Parameters |
|---|---|
| `requestJson: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | the privileged request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson). |
| `clientDataHash: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html? = null` | a hash that is used to verify the relying party identity |
| `preferImmediatelyAvailableCredentials: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = false` | true if you prefer the operation to return immediately when there is no available passkey registration offering instead of falling back to discovering remote options, and false (default) otherwise |
| `origin: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html? = null` | the origin of a different application if the request is being made on behalf of that application (Note: for API level \>=34, setting a non-null value for this parameter will throw a SecurityException if android.permission.CREDENTIAL_MANAGER_SET_ORIGIN is not present) |
| `isAutoSelectAllowed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = false` | whether a create option will be automatically chosen if it is the only one available to the user (note that there is a chance that the crendeiatl provider does not support auto-select even if you turn this bit on) |
| `isConditional: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = false` | whether the public key credential should be created opportunistically based on the user's credential provider already possessing a password for the same account, and also based on internal system conditions, as well as conditions from the user's preferred credential provider, keeping in mind that this should be ideally set to true when making a request immediately after a successful, non-public-key sign-in or sign-up process (e.g. sign-in using a password) |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-null-pointer-exception/index.html` | If `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.String,kotlin.Boolean,kotlin.Boolean)` is null |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | If `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.String,kotlin.Boolean,kotlin.Boolean)` is empty, or if it is not a valid JSON, or if it doesn't have a valid `user.name` defined according to the webauthn spec (https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson) |

### CreatePublicKeyCredentialRequest

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
CreatePublicKeyCredentialRequest(
    requestJson: String,
    clientDataHash: ByteArray?,
    preferImmediatelyAvailableCredentials: Boolean,
    origin: String?,
    preferDefaultProvider: String?,
    isAutoSelectAllowed: Boolean
)
```

Constructs a `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest` to register a passkey from the user's public key credential provider.

| Parameters |
|---|---|
| `requestJson: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | the privileged request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson). |
| `clientDataHash: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html?` | a hash that is used to verify the relying party identity |
| `preferImmediatelyAvailableCredentials: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | true if you prefer the operation to return immediately when there is no available passkey registration offering instead of falling back to discovering remote options, and false (preferably) otherwise |
| `origin: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?` | the origin of a different application if the request is being made on behalf of that application (Note: for API level \>=34, setting a non-null value for this parameter will throw a SecurityException if android.permission.CREDENTIAL_MANAGER_SET_ORIGIN is not present) |
| `preferDefaultProvider: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?` | the preferred default provider component name to prioritize in the selection UI flows (Note: tour app must have the permission android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS to specify this, or it would not take effect; also this bit may not take effect for Android API level 33 and below, depending on the pre-34 provider(s) you have chosen) |
| `isAutoSelectAllowed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | whether a create option will be automatically chosen if it is the only one available to the user (note that there is a chance that the credential provider does not support auto-select even if you turn this bit on) |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-null-pointer-exception/index.html` | If `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.String,kotlin.String,kotlin.Boolean)` is null |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | If `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.String,kotlin.String,kotlin.Boolean)` is empty, or if it doesn't have a valid `user.name` defined according to the [webauthn spec](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson) |

## Public properties

### clientDataHash

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
val clientDataHash: ByteArray?
```

a clientDataHash value to sign over in place of assembling and hashing clientDataJSON during the signature request; only meaningful when `https://developer.android.com/reference/kotlin/androidx/credentials/CreatePublicKeyCredentialRequest#(kotlin.String,kotlin.ByteArray,kotlin.Boolean,kotlin.Boolean,androidx.credentials.CreateCredentialRequest.DisplayInfo,kotlin.String,android.os.Bundle,android.os.Bundle,kotlin.Boolean)` is set

### isConditional

Added in [1.6.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.6.0)

```
val isConditional: Boolean
```

whether the public key should be created opportunistically based on the user's credential provider already possessing a password for the same account and/or other provider specific conditions, and also based on internal system conditions. When set to true, it is important to note that no dialog like system UI is shown to the user, and instead the credential provider is to show a notification to the user when passkey creation is successful. Ideal scenarios to set this to true are when making a request immediately after a successful, non-passkey sign-in (e.g. sign-in using a password), or an independent sign-up process

### requestJson

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
val requestJson: String
```

the request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson).