---
title: "Migrate to client key"
description: "Learn about how and why to switch to using the client key."
url: "https://docs.adyen.com/development-resources/client-side-authentication/migrate-from-origin-key-to-client-key"
source_url: "https://docs.adyen.com/development-resources/client-side-authentication/migrate-from-origin-key-to-client-key.md"
canonical: "https://docs.adyen.com/development-resources/client-side-authentication/migrate-from-origin-key-to-client-key"
last_modified: "2020-05-29T16:11:00+02:00"
language: "en"
---

# Migrate to client key

Learn about how and why to switch to using the client key.

[View source](/development-resources/client-side-authentication/migrate-from-origin-key-to-client-key.md)

If your Web integration uses the [origin key](/development-resources/how-to-get-an-origin-key) or your iOS or Android integration uses the client encryption public key, switch to the client key. In future versions the client key will be the only way to do client-side authentication. The client key makes it easier for you to manage the origins for your integration.

With the client key, you have:

* A single key for all your [allowed origins](/development-resources/client-side-authentication#allowed-origins) in an environment.
* Flexibility to add and remove origins without having to generate a new client key.
* A human-readable prefix, **test** or **live**, so you can easily tell which environment a client key is linked to.

The client key also enables card type detection through [Bank Identification Number (BIN)](/get-started-with-adyen/adyen-glossary/#bank-identification-number-bin) lookup, which is not available when using the origin key.

## Availability and compatibility

The client key is available for the following:

| Online payments integration    | Version                                                                                                                                                                                                                                  |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Web Drop-in and Components     | Available for 3.10.1 and later. Previous versions require [origin keys](/development-resources/how-to-get-an-origin-key) for client-side authentication. Starting 4.0.0 the client key is the only way to do client-side authentication. |
| iOS Drop-in and Components     | 3.7.0 and later. Previous versions require client encryption public keys. Starting 4.0.0 the client key is the only way to do client-side authentication.                                                                                |
| Android Drop-in and Components | 3.7.0 and later. Previous versions require client encryption public keys. Starting 4.0.0 the client key is the only way to do client-side authentication.                                                                                |

| In-person payments integration | Solutions                                 |
| ------------------------------ | ----------------------------------------- |
| POS Mobile SDK for iOS         | Tap to Pay on iPhone Card reader—iOS      |
| POS Mobile SDK for Android     | Tap to Pay on Android Card reader—Android |

The client key is backwards compatible with the origin key and the public key. Generating a client key doesn't invalidate a pre-existing origin key or public key.

## Switch to using the client key

To switch to using the client key, you must first generate your client key in your Customer Area:

1. Log in to your [Customer Area](https://ca-test.adyen.com/).

   1. Go to **Developers** > **API credentials**, and select the credential username for your integration, for example **ws\@Company.\[YourCompanyAccount]**.
   2. Under **Client settings** > **Authentication** select the **Client key** tab.
   3. Select **Generate client key**.
   4. Select the copy icon **and store your client key securely in your system.
   5. Under **Add allowed origins**, enter your [domains](/development-resources/client-side-authentication#allowed-origins) and select **Add**.
   6. Select **Save changes**.

Once you have your client key, you need to add it to your integration. Choose your platform:

### Tab: Web

You must be running [Web Drop-in](/online-payments/drop-in-web) or [Web Components](/online-payments/components-web/) version 3.10.1 or above.

Replace `originKey` in your Web Drop-in or Web Components configuration object with:

**Web Components**

```js
const configuration = {
    ...
    clientKey: "YOUR_CLIENT_KEY",
    ...
}
```

### Tab: iOS

You must be running [iOS Drop-in](/online-payments/build-your-integration/sessions-flow?platform=iOS\&integration=Drop-in) or [iOS Components](/online-payments/build-your-integration/sessions-flow?platform=iOS\&integration=Components) version 3.7.0 or above.

1. Create an instance of `APIContext` with the following parameters:

   | Parameter name | Required                                                                                    | Description                                                                                                                                                                              |
   | -------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
   | `clientKey`    | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your [client key](/development-resources/client-side-authentication).                                                                                                                    |
   | `environment`  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Use **test**. When you are ready to accept live payments, change the value to one of our [live environments](https://adyen.github.io/adyen-ios/5.0.0/documentation/adyen/environment/).  |

   **APIContext initialization**

   ```swift
   // When you are ready to go live, change environment to Environment.live
   // You can also use other environment values described in https://adyen.github.io/adyen-ios/Docs/Structs/Environment.html
   let apiContext = APIContext(environment: Environment.test, clientKey: clientKey)
   ```

2. Use `apiContext` in your iOS Drop-in or iOS Components configuration instead of `publicKey`:

   **iOS Drop-in**

   ```swift
   let configuration = DropInComponent.Configuration(apiContext: apiContext)
   let component = DropInComponent(paymentMethods: paymentMethods, configuration: configuration)
   ```

   **iOS Components**

   ```swift
   // Replace CardComponent with the payment method Component that you want to add.
   let cardComponent = CardComponent(paymentMethod: cardPaymentMethod, apiContext: apiContext)
   ```

### Tab: Android

You must be running [Android Drop-in](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Drop-in) or [Android Components](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components) version 3.7.0 or above.

Pass your `clientKey` to your Android Drop-in or Android Components configuration object:

**Android Drop-in**

```kotlin
val dropInConfiguration = DropInConfiguration.Builder(context, YourDropInService::class.java, "YOUR_CLIENT_KEY")
   // ...
   .build()
```

**Android Components**

```kotlin
val cardConfiguration = CardConfiguration.Builder(context, "YOUR_CLIENT_KEY")
   // ...
   .build()
```

## See also

* [Client-side authentication](/development-resources/client-side-authentication)
* [How to get the API key](/development-resources/api-credentials)
* [Web Drop-in](/online-payments/drop-in-web)
* [Web Components](/online-payments/components-web)
* [iOS Drop-in](/online-payments/build-your-integration/sessions-flow?platform=iOS\&integration=Drop-in)
* [iOS Components](/online-payments/build-your-integration/sessions-flow?platform=iOS\&integration=Components)
* [Android Drop-in](/online-payments/build-your-integration/sessions-flow/?platform=Android\&integration=Drop-in)
* [Android Components](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components)
