Chave API App Store Connect (.p8): como criar e usar
Por Mehdi Azizi
Publicado em , 10 min
A chave API App Store Connect (.p8) só pode ser baixada uma vez. Função, Issuer ID, Key ID, revogação e uso com Expo, fastlane ou um script.
Uma chave API App Store Connect permite que uma ferramenta, como EAS, fastlane, RevenueCat ou o seu próprio script, aja na sua conta sem a sua senha e sem a autenticação de dois fatores. A Apple guarda a metade pública da chave, e você baixa a metade privada, um arquivo .p8, uma única vez. Com esse arquivo, o Issuer ID e o Key ID, você assina tokens válidos por no máximo 20 minutos para a maioria das requisições.
Eu publico meus apps iOS, entre eles TradaZen e Nolera, com Expo. Uma chave de equipe com a função App Manager serve para o RevenueCat, para os meus builds Expo e para uma ferramenta de linha de comando que edita minhas páginas na loja. Este guia segue as páginas da Apple, da Expo e do fastlane relidas em 3 de novembro de 2026. Não confunda com as chaves de serviços colocadas no código de um app: essas são tratadas em chave API secreta em um app Expo.
O que faz uma chave API App Store Connect
Segundo a documentação da Apple, a API App Store Connect exige um token JWT em cada requisição. Você gera esse token e assina com a sua chave privada. A chave serve só para essa API: você não pode usá-la em outros serviços da Apple.
A vantagem cabe numa frase: ninguém precisa validar o login. O seu Apple ID esbarra na autenticação de dois fatores, o que trava qualquer automação. O guia EAS Submit iOS mostra o que isso muda no envio de um app Expo.
Antes de tudo: pedir acesso à API
A primeira chave não pode ser criada de cara. A ajuda do App Store Connect é clara: o Account Holder precisa primeiro pedir acesso à API. Ele abre Users and Access, clica em Integrations e depois em Request Access. A Apple analisa o pedido caso a caso.
O Account Holder é a pessoa que cadastrou a conta. Se você está começando, é você: o guia conta de desenvolvedor Apple detalha o cadastro.
Chave de equipe ou chave individual
A Apple oferece dois tipos de chave. Veja as diferenças, tiradas da documentação e da ajuda do App Store Connect:
| Critério | Chave de equipe | Chave individual |
|---|---|---|
| Quem pode gerar | Account Holder ou Admin | Quase qualquer usuário |
| Apps acessíveis | Todos, sem exceção | Os do usuário |
| Permissões | A função escolhida | As do usuário |
| Número de chaves | Várias | Uma ativa por pessoa |
| Certificados e perfis | Sim, conforme a função | Não |
| Vendas, finanças, notaryTool | Conforme a função | Não |
| Campo do token | iss = Issuer ID | sub = user |
"Quase qualquer usuário" quer dizer, segundo a Apple: Account Holder, Admin, App Manager, Customer Support, Developer e Marketing, a menos que um Admin ou o Account Holder tenha tirado deles o direito de gerar uma chave individual.
Para Expo ou fastlane, escolha uma chave de equipe. Uma chave individual não tem acesso aos endpoints de provisionamento, os que criam certificados e perfis. A documentação do fastlane confirma: chaves de equipe são obrigatórias para qualquer acesso ligado ao provisionamento.
Qual função dar à sua chave
Uma chave de equipe acessa todos os apps da conta, seja qual for a função. A função decide o que ela pode fazer. A Apple avisa que uma chave Admin pode criar e excluir usuários: dê a menor função que cubra o seu uso. As permissões abaixo vêm da tabela de funções da Apple.
| Uso da chave | Funções que permitem |
|---|---|
| Enviar builds | Admin, App Manager, Developer |
| Gerenciar builds do TestFlight | Admin, App Manager |
| Criar certificados e perfis | Admin, App Manager |
| Enviar um app para revisão | Admin, App Manager |
| Importar produtos e preços (RevenueCat) | App Manager no mínimo |
| Gerar outras chaves de equipe | Admin |
A linha do RevenueCat vem da documentação dele. Já o guia da Expo dá a função Admin à chave. Nos meus apps, a função App Manager basta: o EAS cria os perfis de distribuição com ela, e o RevenueCat importa os produtos.
Depois que a chave é gerada, você não pode mais alterar nem o nome nem a função. Para mudar, é preciso revogá-la e gerar outra.
Criar uma chave de equipe, passo a passo
Você precisa de uma conta Admin ou Account Holder. Segundo a Apple:
- Abra Users and Access, depois a aba Integrations.
- Escolha App Store Connect API na coluna da esquerda, depois a aba Team Keys.
- Clique em Generate API Key, ou no botão +.
- Dê um nome à chave. Ele serve só para você, não faz parte da chave. Use o nome da ferramenta que vai usá-la.
- Escolha a função em Access e clique em Generate.
- Baixe a chave privada pelo link Download API Key.
O link de download some assim que você baixa o arquivo, e a Apple não guarda nenhuma cópia. Guarde o
.p8antes de fechar a página.
Depois anote os dois identificadores. Segundo a página da Apple sobre tokens, o Issuer ID aparece no topo da página Integrations, com um botão Copy. O Key ID aparece na lista de chaves ativas: passe o mouse sobre ele para ver Copy Key ID. O Issuer ID é o mesmo para todas as chaves de equipe da conta. O Key ID é próprio de cada chave.
Para uma chave individual, é mais rápido: abra o seu perfil de usuário, desça até Individual API Key e clique em Generate API Key. O download também é único.
Guardar o arquivo .p8
A Apple pede para tratar a chave como uma senha: não compartilhe, não coloque num repositório de código, nunca inclua no código de um app. Minha rotina:
- Uma pasta fora do projeto, ou o gerenciador de segredos da sua ferramenta de integração contínua.
- A pasta das chaves no seu
.gitignore, se o arquivo precisar ficar no projeto durante um envio. - Permissões restritas. Uma ferramenta de linha de comando para o App Store Connect recusou meu
.p8enquanto o arquivo podia ser lido por outras contas. Umchmod 600resolveu. - Uma chave por ferramenta. A Apple permite gerar várias chaves, com as funções que você quiser.
Esse último ponto eu não segui no começo. Minha chave App Manager serve ao mesmo tempo para o RevenueCat, meus builds e minha ferramenta de páginas. Se eu precisar revogá-la, três ferramentas caem juntas. Se fosse para refazer, eu criaria uma chave por ferramenta, para poder cortar uma sem mexer nas outras.
Usar com Expo
Três jeitos de passar a chave para o EAS:
- Deixar o EAS gerenciar.
eas credentials --platform iospode criar uma chave e guardá-la nos servidores da Expo. É o caminho mais simples. - Declarar no
eas.json. O perfilsubmitaceitaascApiKeyPath,ascApiKeyIssuerIdeascApiKeyId. Segundo a referência do eas.json, esses campos aceitam variáveis de ambiente, como$ASC_API_KEY_PATH. - Passar pelo ambiente. O repositório do EAS CLI documenta
EXPO_ASC_API_KEY_PATH,EXPO_ASC_KEY_IDeEXPO_ASC_ISSUER_ID. Para uma chave individual, omita o Issuer ID.
Um limite que você precisa conhecer nos builds: a Expo explica que a API oficial não consegue vincular um App Group, um Merchant ID ou um contêiner CloudKit. Nesse caso, é preciso fazer login com o seu Apple ID, localmente. Passei por isso no Nolera com o grupo de apps do widget: a chave ativava a capability, sem vincular o grupo. Fiz esse vínculo no portal de desenvolvedor da Apple. Se a sincronização das capabilities travar, EXPO_NO_CAPABILITY_SYNC=1 a desativa, e você ativa a capability manualmente no identificador do app. A assinatura dos builds está detalhada em certificado e provisioning profile iOS.
Usar com fastlane
O fastlane lê a chave de um arquivo JSON. Os campos key_id, issuer_id e key, o conteúdo do .p8, são obrigatórios. duration e in_house são opcionais. Valores fictícios:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "seu-issuer-id",
"key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
Depois você passa esse arquivo para uma action, por exemplo fastlane pilot distribute --api_key_path fastlane/cle.json. Num Fastfile, a action app_store_connect_api_key recebe key_id, issuer_id e key_filepath. A duração da sessão não passa de 1.200 segundos, ou seja, 20 minutos. Nem todas as actions têm suporte: o fastlane avisa, por exemplo, que produce e pem não funcionam com uma chave API.
Usar no seu próprio script
Sem ferramenta, você mesmo monta o token. A Apple define a receita:
- Cabeçalho:
algvaleES256,kidvale o seu Key ID,typvaleJWT. - Payload, chave de equipe:
iss, o seu Issuer ID;iat, o horário de criação;exp, o horário de expiração;aud, que valeappstoreconnect-v1. - Payload, chave individual:
subvaleuserno lugar deiss. - Duração: acima de 20 minutos, a Apple rejeita o token na maioria das requisições.
Em Python, com a biblioteca PyJWT e sua dependência de criptografia, instalada com pip install pyjwt[crypto] segundo a documentação dela. No terminal do Mac, use aspas: pip install "pyjwt[crypto]", senão o zsh recusa os colchetes.
import time
import jwt
KEY_ID = "XXXXXXXXXX"
ISSUER_ID = "seu-issuer-id"
with open("AuthKey_XXXXXXXXXX.p8") as f:
private_key = f.read()
now = int(time.time())
token = jwt.encode(
{"iss": ISSUER_ID, "iat": now, "exp": now + 20 * 60, "aud": "appstoreconnect-v1"},
private_key,
algorithm="ES256",
headers={"kid": KEY_ID, "typ": "JWT"},
)
print(token)
Depois você envia o token no cabeçalho Authorization, como no exemplo da Apple:
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
Rodei esse script em 3 de novembro de 2026 com uma chave descartável gerada na minha máquina: o cabeçalho e o payload do token batem com a página da Apple, e a assinatura ES256 é verificada. Não enviei o token para a API da Apple com essa chave de teste, que não existe na Apple. Reutilize o mesmo token enquanto ele for válido: a Apple recomenda isso para ter melhor desempenho.
Revogar uma chave
Revogue uma chave assim que ela for perdida, comprometida, ou quando uma ferramenta não a usar mais. Segundo a ajuda do App Store Connect, com uma conta Account Holder ou Admin:
- Abra Users and Access, depois Integrations.
- Escolha Team Keys, ou Individual Keys, e clique em Edit.
- Marque as chaves a revogar e clique em Revoke Key.
- Confirme com Revoke.
Uma chave revogada nunca é reativada. A Apple a exibe por 30 dias em Revoked. Toda ferramenta que a usava passa a falhar na autenticação. Com Expo, a mensagem é "App Store Connect rejected the API authentication credentials". Essa mensagem e as outras falhas de envio são explicadas em os erros de envio com EAS e como corrigir. Se a chave não estiver comprometida, prepare a nova antes de cortar a antiga. Se estiver, a Apple pede para revogá-la imediatamente.
Para a sua própria chave individual: seu perfil, Individual API Key e depois Revoke.
Meu checklist da chave .p8
- O Account Holder pediu acesso à API.
- A chave é de equipe se for usada para builds ou perfis.
- A função é a menor que cobre o uso, e o nome diz qual ferramenta a usa.
- O
.p8está guardado fora do repositório, com permissões restritas e uma cópia de backup criptografada. - O Issuer ID e o Key ID estão anotados à parte, sem o arquivo.
- Cada ferramenta tem a sua chave, para poder revogar só uma.
Automatizar sua publicação sem expor sua chave
A chave é só uma peça do caminho. O iOS & Android Kit parte do código inicial dos meus apps, com assinaturas incluídas, e segue quatro etapas até a App Store, no seu ritmo. Se você conectar o RevenueCat com essa chave, a configuração completa está em RevenueCat e assinatura in-app no iOS.
Se você está preparando o seu primeiro lançamento, faça o seu diagnóstico gratuito: ele mostra o que realmente está te travando e te envia o meu checklist anti-rejeição da Apple. A página publicar um aplicativo na App Store retoma cada etapa, da página na loja até a aprovação.
Perguntas frequentes
Como criar uma chave API App Store Connect?
O Account Holder pede primeiro acesso à API. Depois, um Admin abre Users and Access, aba Integrations, App Store Connect API, Team Keys. Ele clica em Generate API Key, escolhe um nome e uma função, gera a chave e baixa o arquivo .p8.
Dá para baixar de novo uma chave .p8 perdida?
Não. O arquivo só pode ser baixado uma vez, e a Apple não guarda nenhuma cópia. Revogue a chave perdida, gere uma nova e atualize cada ferramenta que a usava.
Onde encontrar o Issuer ID e o Key ID?
No App Store Connect, menu Users and Access, aba Integrations. O Issuer ID aparece no topo da página. O Key ID está na lista de chaves ativas. Uma chave individual não usa Issuer ID.
Qual função dar a uma chave usada pela Expo?
O guia da Expo indica a função Admin. Segundo a tabela de funções da Apple, App Manager basta para enviar builds e criar certificados e perfis. É a função da minha chave, usada nos meus builds Expo.
Dá para mudar a função de uma chave API?
Não. A Apple não permite alterar nem o nome nem a função de uma chave depois de criada. Revogue a chave e gere uma nova com a função certa.
Uma chave API App Store Connect expira?
As páginas da Apple não mencionam nenhuma expiração da chave, só a revogação. Quem expira são os tokens assinados com ela, em no máximo 20 minutos para a maioria das requisições.

