{"title":"Reveal card details using Adyen's iOS SDK","category":"default","creationDate":1776961628,"content":"<p>You can allow your cardholders to access the details of their Adyen-issued card within your app. This page explains how to use <strong>Adyen's Card Reveal iOS SDK<\/strong> to securely reveal card details in your user interface, such as:<\/p>\n<ul>\n<li>Card verification code (CVC)<\/li>\n<li>Primary account number (PAN)<\/li>\n<li>Expiration date<\/li>\n<\/ul>\n<p>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 <a href=\"https:\/\/en.wikipedia.org\/wiki\/RSA_(cryptosystem)\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">RSA<\/a> public key and <a href=\"https:\/\/github.com\/Adyen\/adyen-card-reveal-ios\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Adyen's Card Reveal iOS SDK<\/a> to generate an encrypted session key.<\/p>\n<p>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.<\/p>\n<p>The following sequence diagram illustrates the workflow.<\/p>\n<p><img alt=\"\" src=\"\/user\/pages\/docs\/07.issuing\/17.manage-card-data\/01.reveal-card-details-ios-sdk\/pan-reveal-sdk.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/p>\n<p>As shown in the diagram, the steps for revealing the card details are:<\/p>\n<ol>\n<li><a href=\"#get-a-public-key\">Get a public key from Adyen<\/a>.<\/li>\n<li><a href=\"#generate-session-key\">Generate an encrypted session key<\/a>.<\/li>\n<li><a href=\"#request-card-reveal\">Request card details from Adyen<\/a>.<\/li>\n<li><a href=\"#decrypt-card-details\">Decrypt and reveal the card details in your user interface<\/a>.<\/li>\n<\/ol>\n<h2>Requirements<\/h2>\n<p>Ensure that:<\/p>\n<ul>\n<li>You have <a href=\"\/pt\/issuing\/manage-access\/api-credentials-web-service\">API credentials<\/a> for the <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/overview\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Configuration API<\/a>.<\/li>\n<li>Your API credential has the <strong>Bank Issuing PaymentInstrument Reveal Webservice<\/strong> role.<\/li>\n<li>Your application uses iOS version 13.0 or later.<\/li>\n<li>You installed <a href=\"https:\/\/github.com\/Adyen\/adyen-card-reveal-ios\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Adyen's Card Reveal iOS SDK<\/a>.<\/li>\n<\/ul>\n<h2 id=\"get-a-public-key\">Get a public key from Adyen<\/h2>\n<p>You need a base64-encoded <a href=\"https:\/\/en.wikipedia.org\/wiki\/RSA_(cryptosystem)\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">RSA<\/a> public key to <a href=\"#encrypt-aes-key\">generate an encrypted session key<\/a>. Use the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/overview\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Configuration API<\/a> to get the public key from Adyen.<\/p>\n<p>To get a public key:<\/p>\n<ol>\n<li>\n<p>Make a GET  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/get\/publicKey\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/publicKey<\/a> request, specifying the following query parameters:<\/p>\n<ul>\n<li> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/get\/publicKey#query-purpose\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">purpose<\/a>&#58; <strong>panReveal<\/strong><\/li>\n<li> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/get\/publicKey#query-format\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">format<\/a>&#58; <strong>jwk<\/strong><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Get a public key'\" :id=\"'get-public-key-ios'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/balanceplatform-api-test.adyen.com\\\/bcl\\\/v2\\\/publicKey?purpose=panReveal&amp;format=jwk \\\\\\n-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-X GET \\\\\\n-d ''&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v33.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.balanceplatform.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.balancePlatform.*;\\n\\nClient client = new Client(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, Environment.TEST);\\n\\\/\\\/ Send the request\\nManageCardPinApi service = new ManageCardPinApi(client);\\nPublicKeyResponse response = service.publicKey(\\&quot;String\\&quot;, \\&quot;String\\&quot;, null);&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v24.0.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Service\\\\BalancePlatform\\\\ManageCardPINApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n$requestOptions['queryParams'] = array('purpose' =&gt; 'string', 'format' =&gt; 'string');\\n\\n\\\/\\\/ Send the request\\n$service = new ManageCardPINApi($client);\\n$response = $service-&gt;publicKey($requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v28.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.BalancePlatform;\\nusing Adyen.Service.BalancePlatform;\\n\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Send the request\\nvar service = new ManageCardPINService(client);\\nvar response = service.PublicKey(purpose: \\&quot;string\\&quot;, format: \\&quot;string\\&quot;);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v23.3.0\\nconst { Client, BalancePlatformAPI } = require('@adyen\\\/api-library');\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Send the request\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.ManageCardPINApi.publicKey(\\&quot;string\\&quot;, \\&quot;string\\&quot;);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v17.0.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/balancePlatform\\&quot;\\n)\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Send the request\\nservice := client.BalancePlatform()\\nreq := service.ManageCardPINApi.PublicKeyInput()\\nreq = req.Purpose(\\&quot;string\\&quot;).Format(\\&quot;string\\&quot;)\\nres, httpRes, err := service.ManageCardPINApi.PublicKey(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v13.3.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\nquery_parameters = {\\n  \\&quot;purpose\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;format\\&quot; : \\&quot;string\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.balancePlatform.manage_card_pin_api.public_key(query_parameters=query_parameters)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v10.1.1\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY'\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nquery_params = {\\n  :purpose =&gt; 'string',\\n  :format =&gt; 'string'\\n}\\n\\n# Send the request\\nresult = adyen.balancePlatform.manage_card_pin_api.public_key(query_params: query_params)&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v23.3.0\\nimport { Client, BalancePlatformAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Send the request\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.ManageCardPINApi.publicKey(\\&quot;string\\&quot;, \\&quot;string\\&quot;);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The response contains:<\/p>\n<ul>\n<li>The public key<\/li>\n<li>The expiry date of the public key<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"publicKey\\\": \\\"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMII...\\\",\\n    \\\"publicKeyExpiryDate\\\": \\\"2023-12-12\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Pass the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/get\/publicKey#responses-200-publicKey\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">publicKey<\/a> to your client.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"generate-session-key\">Generate an encrypted session key<\/h2>\n<p>You need an encrypted symmetric session key to securely request the card details from Adyen. Generate the encrypted session key using the <a href=\"#get-a-public-key\">public key<\/a> and <strong>Adyen's Card Reveal iOS SDK<\/strong>. The steps are as follows:<\/p>\n<ol>\n<li>\n<p>Initialize the <code>CardRevealService<\/code> method.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Initialize the service'\" :id=\"''\" :code-data='[{\"language\":\"swift\",\"tabTitle\":\"\",\"content\":\"let revealService = CardRevealService()\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Call the <code>generateEncryptedKey<\/code> method, passing the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/get\/publicKey#responses-200-publicKey\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">publicKey<\/a> as a parameter.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Generate encrypted session key'\" :id=\"''\" :code-data='[{\"language\":\"swift\",\"tabTitle\":\"\",\"content\":\"let encryptedKey = try revealService.generateEncryptedKey(withJwk: publicKey)\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<p>Now, <code>encryptedKey<\/code> contains the encrypted symmetric session key that you need to request the card details from Adyen.<\/p>\n<h2 id=\"request-card-reveal\">Request card details from Adyen<\/h2>\n<p>Request from Adyen the encrypted card details as follows:<\/p>\n<ol>\n<li>\n<p>Make a POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments\/reveal\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/paymentInstruments\/reveal<\/a> request and specify the following parameters:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments\/reveal#request-paymentInstrumentId\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">paymentInstrumentId<\/a><\/td>\n<td>The unique identifier of the card for which you are revealing the details.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments\/reveal#request-encryptedKey\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">encryptedKey<\/a><\/td>\n<td>The <a href=\"#generate-session-key\">encrypted symmetric session key<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Request for revealing the details of a card'\" :id=\"'reveal-card-details'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/balanceplatform-api-test.adyen.com\\\/bcl\\\/v2\\\/paymentInstruments\\\/reveal \\\\\\n-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-X POST \\\\\\n-d '{\\n    \\&quot;paymentInstrumentId\\&quot;: \\&quot;PI6789678967896789\\&quot;,\\n    \\&quot;encryptedKey\\&quot;: \\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v25.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.balancePlatform.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.balancePlatform.*;\\n\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nPaymentInstrumentRevealRequest paymentInstrumentRevealRequest = new PaymentInstrumentRevealRequest()\\n  .encryptedKey(\\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;)\\n  .paymentInstrumentId(\\&quot;PI6789678967896789\\&quot;);\\n\\n\\\/\\\/ Make the API call\\nPaymentInstrumentsApi service = new PaymentInstrumentsApi(client);\\nPaymentInstrumentRevealResponse response = service.revealDataOfPaymentInstrument(paymentInstrumentRevealRequest, null);&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen PHP API Library v17.4.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\PaymentInstrumentRevealRequest;\\nuse Adyen\\\\Service\\\\BalancePlatform\\\\PaymentInstrumentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$paymentInstrumentRevealRequest = new PaymentInstrumentRevealRequest();\\n$paymentInstrumentRevealRequest\\n  -&gt;setEncryptedKey(\\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;)\\n  -&gt;setPaymentInstrumentId(\\&quot;PI6789678967896789\\&quot;);\\n\\n\\\/\\\/ Make the API call\\n$service = new PaymentInstrumentsApi($client);\\n$response = $service-&gt;revealDataOfPaymentInstrument($paymentInstrumentRevealRequest);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v14.4.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.BalancePlatform;\\nusing Adyen.Service.BalancePlatform;\\n\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nPaymentInstrumentRevealRequest paymentInstrumentRevealRequest = new PaymentInstrumentRevealRequest\\n{\\n  EncryptedKey = \\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;,\\n  PaymentInstrumentId = \\&quot;PI6789678967896789\\&quot;\\n};\\n\\n\\\/\\\/ Make the API call\\nvar service = new PaymentInstrumentsService(client);\\nvar response = service.RevealDataOfPaymentInstrument(paymentInstrumentRevealRequest);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v16.2.0\\n\\\/\\\/ Require the parts of the module you want to use\\nconst { Client, BalancePlatformAPI } = require('@adyen\\\/api-library');\\n\\\/\\\/ Initialize the client object\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentInstrumentRevealRequest = {\\n  paymentInstrumentId: \\&quot;PI6789678967896789\\&quot;,\\n  encryptedKey: \\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;\\n}\\n\\n\\\/\\\/ Make the API call\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.PaymentInstrumentsApi.revealDataOfPaymentInstrument(paymentInstrumentRevealRequest);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v9.3.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/balancePlatform\\&quot;\\n)\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\npaymentInstrumentRevealRequest := balancePlatform.PaymentInstrumentRevealRequest{\\n  EncryptedKey: \\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;,\\n  PaymentInstrumentId: \\&quot;PI6789678967896789\\&quot;,\\n}\\n\\n\\\/\\\/ Make the API call\\nservice := client.BalancePlatform()\\nreq := service.PaymentInstrumentsApi.RevealDataOfPaymentInstrumentInput().PaymentInstrumentRevealRequest(paymentInstrumentRevealRequest)\\nres, httpRes, err := service.PaymentInstrumentsApi.RevealDataOfPaymentInstrument(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v12.2.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\n# Create the request object(s)\\njson_request = {\\n  \\&quot;paymentInstrumentId\\&quot;: \\&quot;PI6789678967896789\\&quot;,\\n  \\&quot;encryptedKey\\&quot;: \\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;\\n}\\n\\n# Make the API call\\nresult = adyen.balancePlatform.payment_instruments_api.reveal_data_of_payment_instrument(request=json_request)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v9.3.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :paymentInstrumentId =&gt; 'PI6789678967896789',\\n  :encryptedKey =&gt; '75989E8881284D10153ABACF022EEA09F5...'\\n}\\n\\n# Make the API call\\nresult = adyen.balancePlatform.payment_instruments_api.reveal_data_of_payment_instrument(request_body)&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v16.2.0\\n\\\/\\\/ Require the parts of the module you want to use\\nimport { Client, BalancePlatformAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\\/\\\/ Initialize the client object\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentInstrumentRevealRequest: Types.balancePlatform.PaymentInstrumentRevealRequest = {\\n  encryptedKey: \\&quot;75989E8881284D10153ABACF022EEA09F5...\\&quot;,\\n  paymentInstrumentId: \\&quot;PI6789678967896789\\&quot;\\n};\\n\\n\\\/\\\/ Make the API call\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.PaymentInstrumentsApi.revealDataOfPaymentInstrument(paymentInstrumentRevealRequest);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The response contains the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments\/reveal#responses-200-encryptedData\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">encryptedData<\/a>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"encryptedData\\\": \\\"4332F74A329924703EB12A6D5E7D....\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Pass the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments\/reveal#responses-200-encryptedData\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">encryptedData<\/a> to your client.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"decrypt-card-details\">Decrypt and reveal card details<\/h2>\n<p>Use <strong>Adyen's Card Reveal iOS SDK<\/strong> to decrypt and reveal the card data as follows:<\/p>\n<ol>\n<li>\n<p>Call the <code>cardDetails<\/code> method to decrypt the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments\/reveal#responses-200-encryptedData\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">encryptedData<\/a>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Decrypt card details'\" :id=\"''\" :code-data='[{\"language\":\"swift\",\"tabTitle\":\"\",\"content\":\"let decryptedCardDetails = try revealService.cardDetails(from: encryptedData)\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Pass the <code>decryptedCardDetails<\/code> to your app.<\/p>\n<\/li>\n<li>\n<p>Reveal the <code>decryptedCardDetails<\/code> in your user interface.<\/p>\n<\/li>\n<\/ol>","url":"https:\/\/docs.adyen.com\/pt\/issuing\/manage-card-data\/reveal-card-details-ios-sdk","articleFields":{"description":"Allow your cardholders to see their card verification code (CVC), primary account number (PAN), and expiration date.","parameters":{"directoryPath":"\/issuing"}},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/issuing\/manage-card-data\/reveal-card-details-ios-sdk","title":"Reveal card details using Adyen's iOS SDK","content":"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:\n\nCard verification code (CVC)\nPrimary account number (PAN)\nExpiration date\n\nTo 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 public key and Adyen's Card Reveal iOS SDK to generate an encrypted session key.\nUse 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.\nThe following sequence diagram illustrates the workflow.\n\nAs shown in the diagram, the steps for revealing the card details are:\n\nGet a public key from Adyen.\nGenerate an encrypted session key.\nRequest card details from Adyen.\nDecrypt and reveal the card details in your user interface.\n\nRequirements\nEnsure that:\n\nYou have API credentials for the Configuration API.\nYour API credential has the Bank Issuing PaymentInstrument Reveal Webservice role.\nYour application uses iOS version 13.0 or later.\nYou installed Adyen's Card Reveal iOS SDK.\n\nGet a public key from Adyen\nYou need a base64-encoded RSA public key to generate an encrypted session key. Use the  Configuration API to get the public key from Adyen.\nTo get a public key:\n\n\nMake a GET  \/publicKey request, specifying the following query parameters:\n\n purpose&#58; panReveal\n format&#58; jwk\n\n\n\n\nThe response contains:\n\nThe public key\nThe expiry date of the public key\n\n\n\n\n\n\nPass the  publicKey to your client.\n\n\nGenerate an encrypted session key\nYou need an encrypted symmetric session key to securely request the card details from Adyen. Generate the encrypted session key using the public key and Adyen's Card Reveal iOS SDK. The steps are as follows:\n\n\nInitialize the CardRevealService method.\n\n\n\n\n\nCall the generateEncryptedKey method, passing the  publicKey as a parameter.\n\n\n\n\n\nNow, encryptedKey contains the encrypted symmetric session key that you need to request the card details from Adyen.\nRequest card details from Adyen\nRequest from Adyen the encrypted card details as follows:\n\n\nMake a POST  \/paymentInstruments\/reveal request and specify the following parameters:\n\n\n\nParameter\nDescription\n\n\n\n\n paymentInstrumentId\nThe unique identifier of the card for which you are revealing the details.\n\n\n encryptedKey\nThe encrypted symmetric session key.\n\n\n\n\n\n\nThe response contains the  encryptedData.\n\n\n\n\n\nPass the  encryptedData to your client.\n\n\nDecrypt and reveal card details\nUse Adyen's Card Reveal iOS SDK to decrypt and reveal the card data as follows:\n\n\nCall the cardDetails method to decrypt the  encryptedData.\n\n\n\n\n\nPass the decryptedCardDetails to your app.\n\n\nReveal the decryptedCardDetails in your user interface.\n\n","type":"page","locale":"pt","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Adyen Issuing","lvl2":"Manage card data","lvl3":"Reveal card details using Adyen's iOS SDK"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/issuing","lvl2":"https:\/\/docs.adyen.com\/pt\/issuing\/manage-card-data","lvl3":"\/pt\/issuing\/manage-card-data\/reveal-card-details-ios-sdk"},"levels":4,"category":"Issuing","category_color":"green","tags":["Reveal","details","using","Adyen's"]},"articleFiles":{"pan-reveal-sdk.svg":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/07.issuing\/17.manage-card-data\/01.reveal-card-details-ios-sdk\/pan-reveal-sdk.svg?decoding=auto&amp;fetchpriority=auto\" \/>","reveal-card-details.js":"<p alt=\"\">reveal-card-details.js<\/p>"}}
