{"title":"Upload apps and certificates","category":"default","creationDate":1606396740,"content":"<p>To be able to install your app on your Android payment terminals, you first need to upload the app so we can convert it into a format that the terminals can handle. If an app also requires a certificate, you need to upload the certificate as well.<\/p>\n<p>You can upload apps and certificates in your Customer Area or through API calls.<\/p>\n<p>After uploading, you can install your app and certificate on your payment terminals using <a href=\"\/pt\/point-of-sale\/android-terminals\/deploy-apps\/terminal-actions-api\">API calls<\/a> or <a href=\"\/pt\/point-of-sale\/android-terminals\/deploy-apps\/profiles\/\">profiles<\/a>, or manually using the <a href=\"\/pt\/point-of-sale\/android-terminals\/deploy-apps\/schedule\">Customer Area<\/a>, as described on other pages.<\/p>\n<div class=\"notices yellow\">\n<p>By choosing to upload, install, or run any third-party applications on an Adyen payment terminal, you accept full responsibility and liability for any consequences of uploading, installing, or running any such applications.<\/p>\n<\/div>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements and limitations.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">A <a href=\"\/pt\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API integration<\/a> with payment terminals or a <a href=\"\/pt\/point-of-sale\/standalone\">standalone solution<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><a href=\"\/pt\/development-resources\/api-credentials\">API credentials<\/a><\/strong><\/td>\n<td style=\"text-align: left;\">To upload apps and certificates using API requests, you must have an API credential with an API key and the following <a href=\"\/pt\/development-resources\/api-credentials#api-permissions\">role<\/a>: <ul><li markdown=\"1\"><strong>Management API\u2014Android apps\/certificates read and write<\/strong><\/li><\/ul> <br>If you have a Terminal API integration with <a href=\"\/pt\/point-of-sale\/design-your-integration\/choose-your-architecture#cloud-communications\">cloud-based communications<\/a>, you can use the existing API key that you use for Terminal API requests.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><a href=\"\/pt\/account\/user-roles\">Customer Area roles<\/a><\/strong><\/td>\n<td style=\"text-align: left;\">To upload apps and certificates using the Customer Area, you must have the following role: <ul><li markdown=\"1\"><strong>Merchant POS Terminal Management Admin role<\/strong><\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Hardware<\/strong><\/td>\n<td style=\"text-align: left;\">Android payment terminals.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">Take into account the following limitations: <ul><li markdown=\"1\">Requests to live Management API endpoints related to Android apps and certificates are subject to <a href=\"\/pt\/point-of-sale\/automating-terminal-management#rate-limits-in-the-live-environment\">rate limits<\/a>.<\/li><li markdown=\"1\">The <a href=\"#app-upload-and-storage-policy\">maximum number of versions for a single app<\/a> that you can store in your Customer Area is 50.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Prepare the APK file<\/h2>\n<p>Before you upload apps to Adyen, you need to create a signed APK file of your app:<\/p>\n<ol>\n<li>In Android Studio, select <span translate=\"no\"><strong>Build<\/strong><\/span> &gt; <span translate=\"no\"><strong>Generate Signed Bundle \/ APK<\/strong><\/span>.<\/li>\n<li>In the dialog, select <span translate=\"no\"><strong>APK<\/strong><\/span> and then <span translate=\"no\"><strong>Next<\/strong><\/span>.<\/li>\n<li>Configure your key store details and select <span translate=\"no\"><strong>Next<\/strong><\/span>.<\/li>\n<li>Select a build variant:\n<ul>\n<li>If your <code>minSdkVersion<\/code> is 23 or earlier, select <span translate=\"no\"><strong>V1 (Jar Signature)<\/strong><\/span>. We recommend also selecting <span translate=\"no\"><strong>V2 (Full APK Signature)<\/strong><\/span>.<\/li>\n<li>If your <code>minSdkVersion<\/code> is later than 23, we recommend selecting <span translate=\"no\"><strong>V2 (Full APK Signature)<\/strong><\/span>.<\/li>\n<\/ul><\/li>\n<li>Select <span translate=\"no\"><strong>Finish<\/strong><\/span>.<\/li>\n<\/ol>\n<div class=\"notices green\">\n<p>For more details, see the <a href=\"https:\/\/source.android.com\/security\/apksigning\/v2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Android APK signing documentation<\/a>.<\/p>\n<\/div>\n<h2 id=\"upload-your-app\">Upload the app<\/h2>\n\n<div id=\"tabFX6co\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Customer Area&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;After you &lt;a href=\\&quot;#prepare-the-apk-file\\&quot;&gt;have prepared the APK file&lt;\\\/a&gt;:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;In your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt;, go to &lt;strong&gt;In-person payments&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Android&lt;\\\/strong&gt; and select the &lt;strong&gt;Apps&lt;\\\/strong&gt; tab.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Upload app&lt;\\\/strong&gt;.\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;If you do not see the &lt;strong&gt;Upload app&lt;\\\/strong&gt; button, contact our &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/ca\\\/ca\\\/contactUs\\\/support.shtml?form=other\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Support Team&lt;\\\/a&gt; to enable it.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;li&gt;In the dialog box:\\n&lt;ol&gt;\\n&lt;li&gt;Drag the APK file to the upload box or select the box and choose the APK file.&lt;\\\/li&gt;\\n&lt;li&gt;Optionally, enter a description of the app so that we can store this in our systems.&lt;br \\\/&gt;\\nOn the terminal, we will use the app name that is included in the APK.&lt;\\\/li&gt;\\n&lt;li&gt;Select the checkbox to opt in.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Upload app&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&lt;\\\/li&gt;\\n&lt;li&gt;Stay on the page until the dialog box closes.&lt;br \\\/&gt;\\nOn the &lt;strong&gt;Android&lt;\\\/strong&gt; page, the &lt;strong&gt;Apps&lt;\\\/strong&gt; tab now shows the icon and APK name of your app.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Check the status of your app.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Status&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Processing&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;We are busy signing and converting the app. This can take up to an hour.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Error&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Something went wrong. Check that the app matches the &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/android-terminals\\\/app-requirements#app-specifications\\&quot;&gt;specifications&lt;\\\/a&gt; and retry &lt;a href=\\&quot;#upload-your-app\\&quot;&gt;uploading&lt;\\\/a&gt; the APK file. If the retry attempt fails as well, contact our &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/ca\\\/ca\\\/contactUs\\\/support.shtml?form=other\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Support Team&lt;\\\/a&gt; or your Adyen implementation manager.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Invalid&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;There is something wrong with the APK file. Contact our &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/ca\\\/ca\\\/contactUs\\\/support.shtml?form=other\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Support Team&lt;\\\/a&gt; or your Adyen implementation manager.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Ready&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;We finished signing and converting the app. The app is ready for installation.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:&quot;ca&quot;,&quot;oldTabId&quot;:&quot;upload-apps-ca_1&quot;,&quot;relation&quot;:&quot;ca&quot;},{&quot;title&quot;:&quot;API&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;You can use our Management API to upload your app. You need to prepare the APK file first and then pass it in the request body as multipart form data.&lt;\\\/p&gt;\\n&lt;p&gt;After you &lt;a href=\\&quot;#prepare-the-apk-file\\&quot;&gt;have prepared the APK file&lt;\\\/a&gt;:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Make a POST  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Management\\\/latest\\\/post\\\/companies\\\/(companyId)\\\/androidApps\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/companies\\\/{companyId}\\\/androidApps&lt;\\\/a&gt; request, specifying the following parameters.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;\\n&lt;p&gt;Path parameter:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;companyId&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The unique identifier of the company account.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Request body parameters:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;file&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The path to the Android Package (APK) of the app, in multipart form data format. The maximum APK file size is: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;Test environment: 700 MB.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;Live environment: 200 MB.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;description&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Your description of the Android app, in multipart form data format.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Upload an app&#039;\\&quot; :id=\\&quot;&#039;post-companies-companyid-androidapps-request-3537092475&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;curl https:\\\\\\\/\\\\\\\/management-test.adyen.com\\\\\\\/v3\\\\\\\/companies\\\\\\\/{companyId}\\\\\\\/androidApps \\\\\\\\\\\\n-H &#039;x-API-key: ADYEN_API_KEY&#039; \\\\\\\\\\\\n-X POST \\\\\\\\\\\\n-F &#039;file=@\\\\&amp;quot;PATH_TO_ANDROID_APP_APK_FILE\\\\&amp;quot;&#039; \\\\\\\\\\\\n-F &#039;description=\\\\&amp;quot;YOUR_DESCRIPTION\\\\&amp;quot;&#039;&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;java&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Java&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Java API Library v25.0.0\\\\nimport com.adyen.Client;\\\\nimport com.adyen.enums.Environment;\\\\nimport com.adyen.service.management.*;\\\\n\\\\nClient client = new Client(\\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, Environment.TEST);\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nAndroidFilesCompanyLevelApi service = new AndroidFilesCompanyLevelApi(client);\\\\nUploadAndroidAppResponse response = service.uploadAndroidApp(\\\\&amp;quot;companyId\\\\&amp;quot;, null);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;php&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;PHP&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen PHP API Library v17.4.0\\\\nuse Adyen\\\\\\\\Client;\\\\nuse Adyen\\\\\\\\Environment;\\\\nuse Adyen\\\\\\\\Service\\\\\\\\Management\\\\\\\\AndroidFilesCompanyLevelApi;\\\\n\\\\n$client = new Client();\\\\n$client-&amp;gt;setXApiKey(\\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;);\\\\n$client-&amp;gt;setEnvironment(Environment::TEST);\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\n$service = new AndroidFilesCompanyLevelApi($client);\\\\n$response = $service-&amp;gt;uploadAndroidApp(&#039;companyId&#039;);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;cs&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;C#&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen .net API Library v14.3.0\\\\nusing Adyen;\\\\nusing Environment = Adyen.Model.Environment;\\\\nusing Adyen.Service.Management;\\\\n\\\\nvar config = new Config()\\\\n{\\\\n    XApiKey = \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;,\\\\n    Environment = Environment.Test\\\\n};\\\\nvar client = new Client(config);\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nvar service = new AndroidFilesCompanyLevelService(client);\\\\nvar response = service.UploadAndroidApp(\\\\&amp;quot;companyId\\\\&amp;quot;);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;NodeJS (JavaScript)&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Node API Library v16.2.0\\\\n\\\\\\\/\\\\\\\/ Require the parts of the module you want to use\\\\nconst { Client, ManagementAPI } = require(&#039;@adyen\\\\\\\/api-library&#039;);\\\\n\\\\n\\\\\\\/\\\\\\\/ Initialize the client object\\\\nconst client = new Client({apiKey: \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, environment: \\\\&amp;quot;TEST\\\\&amp;quot;});\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nconst managementAPI = new ManagementAPI(client);\\\\nconst response = managementAPI.AndroidFilesCompanyLevelApi.uploadAndroidApp(\\\\&amp;quot;companyId\\\\&amp;quot;);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;go&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Go&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Go API Library v9.2.0\\\\nimport (\\\\n\\\\t\\\\&amp;quot;context\\\\&amp;quot;\\\\n\\\\t\\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/common\\\\&amp;quot;\\\\n\\\\t\\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/adyen\\\\&amp;quot;\\\\n\\\\t\\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/management\\\\&amp;quot;\\\\n)\\\\n\\\\nclient := adyen.NewClient(&amp;amp;common.Config{\\\\n    ApiKey:      \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;,\\\\n    Environment: common.TestEnv,\\\\n})\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nservice := client.Management()\\\\nreq := service.AndroidFilesCompanyLevelApi.UploadAndroidAppInput(\\\\&amp;quot;companyId\\\\&amp;quot;)\\\\nres, httpRes, err := service.AndroidFilesCompanyLevelApi.UploadAndroidApp(context.Background(), req)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;py&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Python&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;# Adyen Python API Library v12.2.0\\\\nimport Adyen\\\\n\\\\nadyen = Adyen.Adyen()\\\\nadyen.client.xapikey = \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;\\\\nadyen.client.platform = \\\\&amp;quot;test\\\\&amp;quot; # The environment to use library in.\\\\n\\\\nresult = adyen.management.android_files_company_level_api.upload_android_app(companyId=\\\\&amp;quot;companyId\\\\&amp;quot;)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;rb&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Ruby&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;# Adyen Ruby API Library v9.2.0\\\\nrequire \\\\&amp;quot;adyen-ruby-api-library\\\\&amp;quot;\\\\n\\\\nadyen = Adyen::Client.new\\\\nadyen.api_key = &#039;ADYEN_API_KEY&#039;\\\\nadyen.env = :test # Set to \\\\&amp;quot;live\\\\&amp;quot; for live environment\\\\n\\\\nresult = adyen.management.android_files_company_level_api.upload_android_app(&#039;companyId&#039;)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;ts&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;NodeJS (TypeScript)&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Node API Library v16.2.0\\\\n\\\\\\\/\\\\\\\/ Require the parts of the module you want to use\\\\nimport { Client, ManagementAPI, Types } from \\\\&amp;quot;@adyen\\\\\\\/api-library\\\\&amp;quot;;\\\\n\\\\n\\\\\\\/\\\\\\\/ Initialize the client object\\\\nconst client = new Client({apiKey: \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, environment: \\\\&amp;quot;TEST\\\\&amp;quot;});\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nconst managementAPI = new ManagementAPI(client);\\\\nconst response = managementAPI.AndroidFilesCompanyLevelApi.uploadAndroidApp(\\\\&amp;quot;companyId\\\\&amp;quot;);&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;When you receive the response, save the &lt;code&gt;id&lt;\\\/code&gt; of the uploaded Android app.&lt;br \\\/&gt;\\nYou need this ID if you want to &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/android-terminals\\\/deploy-apps\\\/terminal-actions-api\\&quot;&gt;use API calls&lt;\\\/a&gt; to schedule installing or uninstalling the app.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:&quot;api&quot;,&quot;oldTabId&quot;:&quot;upload-apps-api_2&quot;,&quot;relation&quot;:&quot;api&quot;}]\"\n            :should-update-when-url-changes='true'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<h2 id=\"upload-cert\">(Optional) Upload the certificate<\/h2>\n<p>Some apps need a digital certificate. For example, a certificate to protect network communications between a POS app and the back end of that app. Such a certificate needs to be installed on the terminal, and replaced with a new one before the validity period of the certificate expires.<\/p>\n\n<div id=\"tabQIYvo\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Customer Area&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;To upload the certificate of your Android app using the Customer Area:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;Make sure that you have the certificate in &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;.pem&lt;\\\/strong&gt;&lt;\\\/span&gt; or &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;.cert&lt;\\\/strong&gt;&lt;\\\/span&gt; format.&lt;\\\/li&gt;\\n&lt;li&gt;In your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt;, go to &lt;strong&gt;In-person payments&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Android&lt;\\\/strong&gt; and select the &lt;strong&gt;Certificates&lt;\\\/strong&gt; tab.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Upload new certificate&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;In the dialog box:\\n&lt;ol&gt;\\n&lt;li&gt;Drag the certificate file to the upload box or select the box and choose the certificate file.&lt;\\\/li&gt;\\n&lt;li&gt;Enter the certificate name to show in the Customer Area.&lt;\\\/li&gt;\\n&lt;li&gt;Optionally, enter a description of the certificate.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Upload certificate&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&lt;\\\/li&gt;\\n&lt;li&gt;Check that the &lt;strong&gt;Certificates&lt;\\\/strong&gt; tab now shows the name of your certificate, and the status &lt;strong&gt;Ready&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:&quot;ca&quot;,&quot;oldTabId&quot;:&quot;upload-certificates-ca_1&quot;,&quot;relation&quot;:&quot;ca&quot;},{&quot;title&quot;:&quot;API&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;To upload the certificate of your Android app using the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Management\\\/latest\\\/overview\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;Management API&lt;\\\/a&gt;:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Make a POST  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Management\\\/latest\\\/post\\\/companies\\\/(companyId)\\\/androidCertificates\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/companies\\\/{companyId}\\\/androidCertificates&lt;\\\/a&gt; request, specifying the following parameters.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;\\n&lt;p&gt;Path parameter:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;companyId&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The unique identifier of the company account.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Request body parameters:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;file&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The path to the .CRT or .PEM file of the certificate, in multipart form data format. The maximum file size is 100 KB.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;name&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The name of the certificate.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;description&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Your description of the Android certificate, in multipart form data format.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Upload a certificate&#039;\\&quot; :id=\\&quot;&#039;post-companies-companyid-androidcertificates-request-9806376336&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;curl https:\\\\\\\/\\\\\\\/management-test.adyen.com\\\\\\\/v3\\\\\\\/companies\\\\\\\/{companyId}\\\\\\\/androidCertificates \\\\\\\\\\\\n-H &#039;x-API-key: ADYEN_API_KEY&#039; \\\\\\\\\\\\n-X POST \\\\\\\\\\\\n-F &#039;file=@\\\\&amp;quot;PATH_TO_THE_CERTIFICATE_FILE\\\\&amp;quot;&#039; \\\\\\\\\\\\n-F &#039;name=\\\\&amp;quot;YOUR_NAME_FOR_THE_CERTIFICATE\\\\&amp;quot;&#039; \\\\\\\\\\\\n-F &#039;description=\\\\&amp;quot;YOUR_DESCRIPTION\\\\&amp;quot;&#039;&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;java&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Java&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Java API Library v25.0.0\\\\nimport com.adyen.Client;\\\\nimport com.adyen.enums.Environment;\\\\nimport com.adyen.service.management.*;\\\\n\\\\nClient client = new Client(\\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, Environment.TEST);\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nAndroidFilesCompanyLevelApi service = new AndroidFilesCompanyLevelApi(client);\\\\nUploadAndroidCertificateResponse response = service.uploadAndroidCertificate(\\\\&amp;quot;companyId\\\\&amp;quot;, null);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;php&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;PHP&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen PHP API Library v17.4.0\\\\nuse Adyen\\\\\\\\Client;\\\\nuse Adyen\\\\\\\\Environment;\\\\nuse Adyen\\\\\\\\Service\\\\\\\\Management\\\\\\\\AndroidFilesCompanyLevelApi;\\\\n\\\\n$client = new Client();\\\\n$client-&amp;gt;setXApiKey(\\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;);\\\\n$client-&amp;gt;setEnvironment(Environment::TEST);\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\n$service = new AndroidFilesCompanyLevelApi($client);\\\\n$response = $service-&amp;gt;uploadAndroidCertificate(&#039;companyId&#039;);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;cs&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;C#&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen .net API Library v14.3.0\\\\nusing Adyen;\\\\nusing Environment = Adyen.Model.Environment;\\\\nusing Adyen.Service.Management;\\\\n\\\\nvar config = new Config()\\\\n{\\\\n    XApiKey = \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;,\\\\n    Environment = Environment.Test\\\\n};\\\\nvar client = new Client(config);\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nvar service = new AndroidFilesCompanyLevelService(client);\\\\nvar response = service.UploadAndroidCertificate(\\\\&amp;quot;companyId\\\\&amp;quot;);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;NodeJS (JavaScript)&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Node API Library v16.2.0\\\\n\\\\\\\/\\\\\\\/ Require the parts of the module you want to use\\\\nconst { Client, ManagementAPI } = require(&#039;@adyen\\\\\\\/api-library&#039;);\\\\n\\\\n\\\\\\\/\\\\\\\/ Initialize the client object\\\\nconst client = new Client({apiKey: \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, environment: \\\\&amp;quot;TEST\\\\&amp;quot;});\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nconst managementAPI = new ManagementAPI(client);\\\\nconst response = managementAPI.AndroidFilesCompanyLevelApi.uploadAndroidCertificate(\\\\&amp;quot;companyId\\\\&amp;quot;);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;go&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Go&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Go API Library v9.2.0\\\\nimport (\\\\n\\\\t\\\\&amp;quot;context\\\\&amp;quot;\\\\n\\\\t\\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/common\\\\&amp;quot;\\\\n\\\\t\\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/adyen\\\\&amp;quot;\\\\n\\\\t\\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/management\\\\&amp;quot;\\\\n)\\\\n\\\\nclient := adyen.NewClient(&amp;amp;common.Config{\\\\n    ApiKey:      \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;,\\\\n    Environment: common.TestEnv,\\\\n})\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nservice := client.Management()\\\\nreq := service.AndroidFilesCompanyLevelApi.UploadAndroidCertificateInput(\\\\&amp;quot;companyId\\\\&amp;quot;)\\\\nres, httpRes, err := service.AndroidFilesCompanyLevelApi.UploadAndroidCertificate(context.Background(), req)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;py&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Python&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;# Adyen Python API Library v12.2.0\\\\nimport Adyen\\\\n\\\\nadyen = Adyen.Adyen()\\\\nadyen.client.xapikey = \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;\\\\nadyen.client.platform = \\\\&amp;quot;test\\\\&amp;quot; # The environment to use library in.\\\\n\\\\nresult = adyen.management.android_files_company_level_api.upload_android_certificate(companyId=\\\\&amp;quot;companyId\\\\&amp;quot;)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;rb&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Ruby&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;# Adyen Ruby API Library v9.2.0\\\\nrequire \\\\&amp;quot;adyen-ruby-api-library\\\\&amp;quot;\\\\n\\\\nadyen = Adyen::Client.new\\\\nadyen.api_key = &#039;ADYEN_API_KEY&#039;\\\\nadyen.env = :test # Set to \\\\&amp;quot;live\\\\&amp;quot; for live environment\\\\n\\\\nresult = adyen.management.android_files_company_level_api.upload_android_certificate(&#039;companyId&#039;)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;ts&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;NodeJS (TypeScript)&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Node API Library v16.2.0\\\\n\\\\\\\/\\\\\\\/ Require the parts of the module you want to use\\\\nimport { Client, ManagementAPI, Types } from \\\\&amp;quot;@adyen\\\\\\\/api-library\\\\&amp;quot;;\\\\n\\\\n\\\\\\\/\\\\\\\/ Initialize the client object\\\\nconst client = new Client({apiKey: \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, environment: \\\\&amp;quot;TEST\\\\&amp;quot;});\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the request\\\\nconst managementAPI = new ManagementAPI(client);\\\\nconst response = managementAPI.AndroidFilesCompanyLevelApi.uploadAndroidCertificate(\\\\&amp;quot;companyId\\\\&amp;quot;);&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;When you receive the response, save the &lt;code&gt;id&lt;\\\/code&gt; of the uploaded Android certificate.&lt;br \\\/&gt;\\nYou need this ID if you want to &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/android-terminals\\\/deploy-apps\\\/terminal-actions-api\\&quot;&gt;use API calls&lt;\\\/a&gt; to schedule installing a new certificate or uninstalling an expired certificate.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:&quot;api&quot;,&quot;oldTabId&quot;:&quot;upload-certificates-api_2&quot;,&quot;relation&quot;:&quot;api&quot;}]\"\n            :should-update-when-url-changes='true'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<h2>App upload and storage policy<\/h2>\n<p>The limit for the maximum number of versions for a single app that you can store in your Customer Area is 50. When you upload a new version of an app that already has 50 versions, the oldest uploaded app version is deleted automatically.<\/p>\n<p>For example: When you upload the 51st version of an app, the very first version you ever uploaded is deleted, maintaining a total of 50 versions.<\/p>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/android-terminals\/app-requirements\"\n                        target=\"_self\"\n                        >\n                    Specifications and testing of apps for Android terminals\n                <\/a><\/li><li><a href=\"\/point-of-sale\/android-terminals\/deploy-apps\/terminal-actions-api\"\n                        target=\"_self\"\n                        >\n                    Manage app deployment using API requests\n                <\/a><\/li><li><a href=\"\/point-of-sale\/android-terminals\/deploy-apps\/profiles\"\n                        target=\"_self\"\n                        >\n                    Deploy apps using profiles\n                <\/a><\/li><li><a href=\"\/point-of-sale\/android-terminals\/deploy-apps\/schedule\"\n                        target=\"_self\"\n                        >\n                    Manage app deployment using the Customer Area\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/android-terminals\/deploy-apps\/upload","articleFields":{"description":"Upload apps and certificates to Adyen for your Android payment terminals.","last_edit_on":"26-11-2020 14:19","feedback_component":true},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/android-terminals\/deploy-apps\/upload","title":"Upload apps and certificates","content":"To be able to install your app on your Android payment terminals, you first need to upload the app so we can convert it into a format that the terminals can handle. If an app also requires a certificate, you need to upload the certificate as well.\nYou can upload apps and certificates in your Customer Area or through API calls.\nAfter uploading, you can install your app and certificate on your payment terminals using API calls or profiles, or manually using the Customer Area, as described on other pages.\n\nBy choosing to upload, install, or run any third-party applications on an Adyen payment terminal, you accept full responsibility and liability for any consequences of uploading, installing, or running any such applications.\n\nRequirements\nBefore you begin, take into account the following requirements and limitations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals or a standalone solution.\n\n\nAPI credentials\nTo upload apps and certificates using API requests, you must have an API credential with an API key and the following role: Management API\u2014Android apps\/certificates read and write If you have a Terminal API integration with cloud-based communications, you can use the existing API key that you use for Terminal API requests.\n\n\nCustomer Area roles\nTo upload apps and certificates using the Customer Area, you must have the following role: Merchant POS Terminal Management Admin role\n\n\nHardware\nAndroid payment terminals.\n\n\nLimitations\nTake into account the following limitations: Requests to live Management API endpoints related to Android apps and certificates are subject to rate limits.The maximum number of versions for a single app that you can store in your Customer Area is 50.\n\n\n\nPrepare the APK file\nBefore you upload apps to Adyen, you need to create a signed APK file of your app:\n\nIn Android Studio, select Build &gt; Generate Signed Bundle \/ APK.\nIn the dialog, select APK and then Next.\nConfigure your key store details and select Next.\nSelect a build variant:\n\nIf your minSdkVersion is 23 or earlier, select V1 (Jar Signature). We recommend also selecting V2 (Full APK Signature).\nIf your minSdkVersion is later than 23, we recommend selecting V2 (Full APK Signature).\n\nSelect Finish.\n\n\nFor more details, see the Android APK signing documentation.\n\nUpload the app\n\n\n    \n        \n        \n    \n\n\n(Optional) Upload the certificate\nSome apps need a digital certificate. For example, a certificate to protect network communications between a POS app and the back end of that app. Such a certificate needs to be installed on the terminal, and replaced with a new one before the validity period of the certificate expires.\n\n\n    \n        \n        \n    \n\n\nApp upload and storage policy\nThe limit for the maximum number of versions for a single app that you can store in your Customer Area is 50. When you upload a new version of an app that already has 50 versions, the oldest uploaded app version is deleted automatically.\nFor example: When you upload the 51st version of an app, the very first version you ever uploaded is deleted, maintaining a total of 50 versions.\nSee also\n\n\n                    Specifications and testing of apps for Android terminals\n                \n                    Manage app deployment using API requests\n                \n                    Deploy apps using profiles\n                \n                    Manage app deployment using the Customer Area\n                \n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Terminais","lvl2":"Android terminals","lvl3":"Deploy apps to your terminals","lvl4":"Upload apps and certificates"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/point-of-sale","lvl2":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/android-terminals","lvl3":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/android-terminals\/deploy-apps","lvl4":"\/pt\/point-of-sale\/android-terminals\/deploy-apps\/upload"},"levels":5,"category":"In-person payments","category_color":"green","tags":["Upload","certificates"]},"articleFiles":{"post-companies-companyid-androidapps-request-3537092475.js":"<p alt=\"\">post-companies-companyid-androidapps-request-3537092475.js<\/p>","post-companies-companyid-androidcertificates-request-9806376336.js":"<p alt=\"\">post-companies-companyid-androidcertificates-request-9806376336.js<\/p>"}}
