--- title: "Reveal card details using Adyen's iOS SDK" description: "Allow your cardholders to see their card verification code (CVC), primary account number (PAN), and expiration date." url: "https://docs.adyen.com/issuing/manage-card-data/reveal-card-details-ios-sdk" source_url: "https://docs.adyen.com/issuing/manage-card-data/reveal-card-details-ios-sdk.md" canonical: "https://docs.adyen.com/issuing/manage-card-data/reveal-card-details-ios-sdk" last_modified: "2026-05-24T12:54:31+02:00" language: "en" --- # Reveal card details using Adyen's iOS SDK Allow your cardholders to see their card verification code (CVC), primary account number (PAN), and expiration date. [View source](/issuing/manage-card-data/reveal-card-details-ios-sdk.md) You can allow your cardholders to access the details of their Adyen-issued card within your app. This page explains how to use **Adyen's Card Reveal iOS SDK** to securely reveal card details in your user interface, such as: * Card verification code (CVC) * Primary account number (PAN) * Expiration date To reveal the card details in your user interface, you must first get the card details data from Adyen. To securely request the data, you use a base64-encoded [RSA](https://en.wikipedia.org/wiki/RSA_\(cryptosystem\)) public key and [Adyen's Card Reveal iOS SDK](https://github.com/Adyen/adyen-card-reveal-ios) to generate an encrypted session key. Use the session key to request from Adyen the encrypted card details assigned to an Adyen-issued card. You can decrypt this card data using Adyen's Card Reveal iOS SDK, and then reveal them to the cardholder. The following sequence diagram illustrates the workflow. ![](/user/pages/docs/07.issuing/17.manage-card-data/01.reveal-card-details-ios-sdk/pan-reveal-sdk.svg?decoding=auto\&fetchpriority=auto) As shown in the diagram, the steps for revealing the card details are: 1. [Get a public key from Adyen](#get-a-public-key). 2. [Generate an encrypted session key](#generate-session-key). 3. [Request card details from Adyen](#request-card-reveal). 4. [Decrypt and reveal the card details in your user interface](#decrypt-card-details). ## Requirements Ensure that: * You have [API credentials](/issuing/manage-access/api-credentials-web-service) for the [Configuration API](https://docs.adyen.com/api-explorer/balanceplatform/latest/overview). * Your API credential has the **Bank Issuing PaymentInstrument Reveal Webservice** role. * Your application uses iOS version 13.0 or later. * You installed [Adyen's Card Reveal iOS SDK](https://github.com/Adyen/adyen-card-reveal-ios). ## Get a public key from Adyen You need a base64-encoded [RSA](https://en.wikipedia.org/wiki/RSA_\(cryptosystem\)) public key to [generate an encrypted session key](#encrypt-aes-key). Use the [Configuration API](https://docs.adyen.com/api-explorer/balanceplatform/latest/overview) to get the public key from Adyen. To get a public key: 1. Make a GET [/publicKey](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/publicKey) request, specifying the following query parameters: * [purpose](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/publicKey#query-purpose): **panReveal** * [format](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/publicKey#query-format): **jwk** **Get a public key** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/publicKey?purpose=panReveal&format=jwk \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X GET \ -d '' ``` #### Java ```java // Adyen Java API Library v33.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.balanceplatform.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.service.balancePlatform.*; Client client = new Client("ADYEN_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Send the request ManageCardPinApi service = new ManageCardPinApi(client); PublicKeyResponse response = service.publicKey("String", "String", null); ``` #### PHP ```php setXApiKey("ADYEN_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); $requestOptions['queryParams'] = array('purpose' => 'string', 'format' => 'string'); // Send the request $service = new ManageCardPINApi($client); $response = $service->publicKey($requestOptions); ``` #### C\# ```cs // Adyen .net API Library v28.0.0 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.BalancePlatform; using Adyen.Service.BalancePlatform; var config = new Config() { XApiKey = "ADYEN_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Send the request var service = new ManageCardPINService(client); var response = service.PublicKey(purpose: "string", format: "string"); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v23.3.0 const { Client, BalancePlatformAPI } = require('@adyen/api-library'); const client = new Client({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: "TEST" }); // Send the request const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.ManageCardPINApi.publicKey("string", "string"); ``` #### Go ```go // Adyen Go API Library v17.0.0 import ( "context" "github.com/adyen/adyen-go-api-library/v17/src/common" "github.com/adyen/adyen-go-api-library/v17/src/adyen" "github.com/adyen/adyen-go-api-library/v17/src/balancePlatform" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Send the request service := client.BalancePlatform() req := service.ManageCardPINApi.PublicKeyInput() req = req.Purpose("string").Format("string") res, httpRes, err := service.ManageCardPINApi.PublicKey(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v13.3.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. query_parameters = { "purpose" : "string", "format" : "string" } # Send the request result = adyen.balancePlatform.manage_card_pin_api.public_key(query_parameters=query_parameters) ``` #### Ruby ```rb # Adyen Ruby API Library v10.1.1 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) query_params = { :purpose => 'string', :format => 'string' } # Send the request result = adyen.balancePlatform.manage_card_pin_api.public_key(query_params: query_params) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v23.3.0 import { Client, BalancePlatformAPI, Types } from "@adyen/api-library"; const client = new Client({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: "TEST" }); // Send the request const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.ManageCardPINApi.publicKey("string", "string"); ``` The response contains: * The public key * The expiry date of the public key **Response** ```json { "publicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMII...", "publicKeyExpiryDate": "2023-12-12" } ``` 2. Pass the [publicKey](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/publicKey#responses-200-publicKey) to your client. ## Generate an encrypted session key You need an encrypted symmetric session key to securely request the card details from Adyen. Generate the encrypted session key using the [public key](#get-a-public-key) and **Adyen's Card Reveal iOS SDK**. The steps are as follows: 1. Initialize the `CardRevealService` method. **Initialize the service** ```swift let revealService = CardRevealService() ``` 2. Call the `generateEncryptedKey` method, passing the [publicKey](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/publicKey#responses-200-publicKey) as a parameter. **Generate encrypted session key** ```swift let encryptedKey = try revealService.generateEncryptedKey(withJwk: publicKey) ``` Now, `encryptedKey` contains the encrypted symmetric session key that you need to request the card details from Adyen. ## Request card details from Adyen Request from Adyen the encrypted card details as follows: 1. Make a POST [/paymentInstruments/reveal](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments/reveal) request and specify the following parameters: | Parameter | Description | | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | | [paymentInstrumentId](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments/reveal#request-paymentInstrumentId) | The unique identifier of the card for which you are revealing the details. | | [encryptedKey](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments/reveal#request-encryptedKey) | The [encrypted symmetric session key](#generate-session-key). | **Request for revealing the details of a card** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/paymentInstruments/reveal \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "paymentInstrumentId": "PI6789678967896789", "encryptedKey": "75989E8881284D10153ABACF022EEA09F5..." }' ``` #### Java ```java // Adyen Java API Library v25.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.balancePlatform.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.service.balancePlatform.*; Client client = new Client("ADYEN_API_KEY", Environment.TEST); // Create the request object(s) PaymentInstrumentRevealRequest paymentInstrumentRevealRequest = new PaymentInstrumentRevealRequest() .encryptedKey("75989E8881284D10153ABACF022EEA09F5...") .paymentInstrumentId("PI6789678967896789"); // Make the API call PaymentInstrumentsApi service = new PaymentInstrumentsApi(client); PaymentInstrumentRevealResponse response = service.revealDataOfPaymentInstrument(paymentInstrumentRevealRequest, null); ``` #### PHP ```php // Adyen PHP API Library v17.4.0 use Adyen\Client; use Adyen\Environment; use Adyen\Model\BalancePlatform\PaymentInstrumentRevealRequest; use Adyen\Service\BalancePlatform\PaymentInstrumentsApi; $client = new Client(); $client->setXApiKey("ADYEN_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $paymentInstrumentRevealRequest = new PaymentInstrumentRevealRequest(); $paymentInstrumentRevealRequest ->setEncryptedKey("75989E8881284D10153ABACF022EEA09F5...") ->setPaymentInstrumentId("PI6789678967896789"); // Make the API call $service = new PaymentInstrumentsApi($client); $response = $service->revealDataOfPaymentInstrument($paymentInstrumentRevealRequest); ``` #### C\# ```cs // Adyen .net API Library v14.4.0 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.BalancePlatform; using Adyen.Service.BalancePlatform; var config = new Config() { XApiKey = "ADYEN_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) PaymentInstrumentRevealRequest paymentInstrumentRevealRequest = new PaymentInstrumentRevealRequest { EncryptedKey = "75989E8881284D10153ABACF022EEA09F5...", PaymentInstrumentId = "PI6789678967896789" }; // Make the API call var service = new PaymentInstrumentsService(client); var response = service.RevealDataOfPaymentInstrument(paymentInstrumentRevealRequest); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v16.2.0 // Require the parts of the module you want to use const { Client, BalancePlatformAPI } = require('@adyen/api-library'); // Initialize the client object const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Create the request object(s) const paymentInstrumentRevealRequest = { paymentInstrumentId: "PI6789678967896789", encryptedKey: "75989E8881284D10153ABACF022EEA09F5..." } // Make the API call const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.PaymentInstrumentsApi.revealDataOfPaymentInstrument(paymentInstrumentRevealRequest); ``` #### Go ```go // Adyen Go API Library v9.3.0 import ( "context" "github.com/adyen/adyen-go-api-library/v9/src/common" "github.com/adyen/adyen-go-api-library/v9/src/adyen" "github.com/adyen/adyen-go-api-library/v9/src/balancePlatform" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) paymentInstrumentRevealRequest := balancePlatform.PaymentInstrumentRevealRequest{ EncryptedKey: "75989E8881284D10153ABACF022EEA09F5...", PaymentInstrumentId: "PI6789678967896789", } // Make the API call service := client.BalancePlatform() req := service.PaymentInstrumentsApi.RevealDataOfPaymentInstrumentInput().PaymentInstrumentRevealRequest(paymentInstrumentRevealRequest) res, httpRes, err := service.PaymentInstrumentsApi.RevealDataOfPaymentInstrument(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v12.2.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "paymentInstrumentId": "PI6789678967896789", "encryptedKey": "75989E8881284D10153ABACF022EEA09F5..." } # Make the API call result = adyen.balancePlatform.payment_instruments_api.reveal_data_of_payment_instrument(request=json_request) ``` #### Ruby ```rb # Adyen Ruby API Library v9.3.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :paymentInstrumentId => 'PI6789678967896789', :encryptedKey => '75989E8881284D10153ABACF022EEA09F5...' } # Make the API call result = adyen.balancePlatform.payment_instruments_api.reveal_data_of_payment_instrument(request_body) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v16.2.0 // Require the parts of the module you want to use import { Client, BalancePlatformAPI, Types } from "@adyen/api-library"; // Initialize the client object const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Create the request object(s) const paymentInstrumentRevealRequest: Types.balancePlatform.PaymentInstrumentRevealRequest = { encryptedKey: "75989E8881284D10153ABACF022EEA09F5...", paymentInstrumentId: "PI6789678967896789" }; // Make the API call const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.PaymentInstrumentsApi.revealDataOfPaymentInstrument(paymentInstrumentRevealRequest); ``` The response contains the [encryptedData](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments/reveal#responses-200-encryptedData). **Response** ```json { "encryptedData": "4332F74A329924703EB12A6D5E7D...." } ``` 2. Pass the [encryptedData](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments/reveal#responses-200-encryptedData) to your client. ## Decrypt and reveal card details Use **Adyen's Card Reveal iOS SDK** to decrypt and reveal the card data as follows: 1. Call the `cardDetails` method to decrypt the [encryptedData](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments/reveal#responses-200-encryptedData). **Decrypt card details** ```swift let decryptedCardDetails = try revealService.cardDetails(from: encryptedData) ``` 2. Pass the `decryptedCardDetails` to your app. 3. Reveal the `decryptedCardDetails` in your user interface.