Clave API de App Store Connect (.p8): crearla y usarla
Por Mehdi Azizi
Publicado el , 10 min
La clave API de App Store Connect (.p8) se descarga una sola vez. Rol, Issuer ID, Key ID, revocación y su uso con Expo, fastlane o un script.
Una clave API de App Store Connect permite que una herramienta, como EAS, fastlane, RevenueCat o tu propio script, actúe sobre tu cuenta sin tu contraseña ni la autenticación de dos factores. Apple guarda la mitad pública de la clave, y tú descargas la mitad privada, un archivo .p8, una sola vez. Con ese archivo, el Issuer ID y el Key ID, firmas tokens válidos por 20 minutos como máximo para la mayoría de las solicitudes.
Publico mis apps iOS, entre ellas TradaZen y Nolera, con Expo. Una clave de equipo con el rol App Manager le sirve a RevenueCat, a mis builds de Expo y a una herramienta de línea de comandos que edita mis fichas. Esta guía sigue las páginas de Apple, Expo y fastlane revisadas el 3 de noviembre de 2026. No la confundas con las claves de servicios que se meten en el código de una app: esas se tratan en clave API secreta en una app Expo.
Qué hace una clave API de App Store Connect
Según la documentación de Apple, la API de App Store Connect exige un token JWT para cada solicitud. Tú lo generas y lo firmas con tu clave privada. La clave sirve únicamente para esta API: no puedes usarla para otros servicios de Apple.
Su ventaja cabe en una frase: nadie tiene que aprobar el inicio de sesión. Tu Apple ID choca con la autenticación de dos factores, lo que bloquea cualquier automatización. La guía EAS Submit iOS muestra lo que esto cambia al enviar una app Expo.
Antes que nada: solicitar acceso a la API
La primera clave no se crea de inmediato. La ayuda de App Store Connect lo deja claro: el Account Holder primero debe solicitar acceso a la API. Abre Users and Access, hace clic en Integrations y luego en Request Access. Apple revisa cada solicitud caso por caso.
El Account Holder es la persona que registró la cuenta. Si estás empezando, eres tú: la guía cuenta de desarrollador de Apple detalla el registro.
Clave de equipo o clave individual
Apple ofrece dos tipos de claves. Estas son sus diferencias, tomadas de la documentación y de la ayuda de App Store Connect:
| Criterio | Clave de equipo | Clave individual |
|---|---|---|
| Quién puede generarla | Account Holder o Admin | Casi cualquier usuario |
| Apps accesibles | Todas, sin excepción | Las del usuario |
| Permisos | Los del rol elegido | Los del usuario |
| Número de claves | Varias | Una activa por persona |
| Certificados y perfiles | Sí, según el rol | No |
| Ventas, finanzas, notaryTool | Según el rol | No |
| Campo del token | iss = Issuer ID | sub = user |
"Casi cualquier usuario" significa, según Apple: Account Holder, Admin, App Manager, Customer Support, Developer y Marketing, salvo que un Admin o el Account Holder les haya quitado el permiso de generar una clave individual.
Para Expo o fastlane, elige una clave de equipo. Una clave individual no tiene acceso a los endpoints de aprovisionamiento, los que crean certificados y perfiles. La documentación de fastlane lo confirma: las claves de equipo son obligatorias para cualquier acceso relacionado con el aprovisionamiento.
Qué rol darle a tu clave
Una clave de equipo accede a todas las apps de la cuenta, sea cual sea su rol. El rol decide lo que puede hacer. Apple advierte que una clave Admin puede crear y eliminar usuarios: dale el rol más bajo que cubra tu uso. Los permisos de abajo vienen de la tabla de roles de Apple.
| Uso de la clave | Roles que lo permiten |
|---|---|
| Enviar builds | Admin, App Manager, Developer |
| Gestionar los builds de TestFlight | Admin, App Manager |
| Crear certificados y perfiles | Admin, App Manager |
| Enviar una app a revisión | Admin, App Manager |
| Importar productos y precios (RevenueCat) | App Manager como mínimo |
| Generar otras claves de equipo | Admin |
La fila de RevenueCat viene de su documentación. La guía de Expo, por su parte, le da el rol Admin a la clave. En mis apps, el rol App Manager basta: EAS crea los perfiles de distribución con él, y RevenueCat importa los productos.
Una vez generada la clave, ya no puedes modificar ni su nombre ni su rol. Para cambiarlos, hay que revocarla y generar otra.
Crear una clave de equipo, paso a paso
Necesitas una cuenta Admin o Account Holder. Según Apple:
- Abre Users and Access y luego la pestaña Integrations.
- Elige App Store Connect API en la columna izquierda y luego la pestaña Team Keys.
- Haz clic en Generate API Key, o en el botón +.
- Ponle un nombre a la clave. Solo te sirve a ti, no forma parte de la clave. Ponle el nombre de la herramienta que la usará.
- Elige el rol en Access y haz clic en Generate.
- Descarga la clave privada con el enlace Download API Key.
El enlace de descarga desaparece en cuanto descargas el archivo, y Apple no guarda ninguna copia. Guarda el
.p8antes de cerrar la página.
Después anota los dos identificadores. Según la página de Apple sobre los tokens, el Issuer ID aparece en la parte superior de la página Integrations, con un botón Copy. El Key ID aparece en la lista de claves activas: pasa el cursor por encima para que aparezca Copy Key ID. El Issuer ID es el mismo para todas las claves de equipo de la cuenta. El Key ID es propio de cada clave.
Para una clave individual es más corto: abre tu perfil de usuario, baja hasta Individual API Key y haz clic en Generate API Key. La descarga también es única.
Guardar el archivo .p8
Apple pide tratar la clave como una contraseña: no la compartas, no la guardes en un repositorio de código, nunca la integres en el código de una app. Mi rutina:
- Una carpeta fuera del proyecto, o el gestor de secretos de tu herramienta de integración continua.
- La carpeta de claves en tu
.gitignore, si el archivo tiene que estar en el proyecto durante un envío. - Permisos estrictos. Una herramienta de línea de comandos para App Store Connect rechazó mi
.p8mientras el archivo podía ser leído por otras cuentas. Unchmod 600resolvió el problema. - Una clave por herramienta. Apple permite generar varias claves, con los roles que elijas.
Este último punto no lo apliqué al principio. Mi clave App Manager sirve a la vez para RevenueCat, mis builds y mi herramienta de fichas. Si tengo que revocarla, se caen tres herramientas juntas. Si empezara de nuevo, crearía una clave por herramienta, para poder cortar una sin tocar las demás.
Usarla con Expo
Tres maneras de darle la clave a EAS:
- Dejar que EAS la gestione.
eas credentials --platform iospuede crear una clave y guardarla en los servidores de Expo. Es el camino más sencillo. - Declararla en
eas.json. El perfilsubmitaceptaascApiKeyPath,ascApiKeyIssuerIdyascApiKeyId. Según la referencia de eas.json, estos campos aceptan variables de entorno, como$ASC_API_KEY_PATH. - Pasarla por el entorno. El repositorio de EAS CLI documenta
EXPO_ASC_API_KEY_PATH,EXPO_ASC_KEY_IDyEXPO_ASC_ISSUER_ID. Para una clave individual, se omite el Issuer ID.
Un límite que conviene conocer para los builds: Expo aclara que la API oficial no puede asociar un App Group, un Merchant ID o un contenedor de CloudKit. En ese caso necesitas iniciar sesión con tu Apple ID, en local. Me pasó en Nolera con el grupo de apps de su widget: la clave activaba la capacidad, pero sin asociar el grupo. Hice esa asociación en el portal de desarrolladores de Apple. Si la sincronización de capacidades se bloquea, EXPO_NO_CAPABILITY_SYNC=1 la desactiva, y activas tú mismo la capacidad en el identificador de la app. La firma de los builds se explica en certificado y provisioning profile de iOS.
Usarla con fastlane
fastlane lee la clave desde un archivo JSON. Los campos key_id, issuer_id y key, el contenido del .p8, son obligatorios. duration e in_house son opcionales. Valores ficticios:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "tu-issuer-id",
"key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
Luego pasas ese archivo a una acción, por ejemplo fastlane pilot distribute --api_key_path fastlane/cle.json. En un Fastfile, la acción app_store_connect_api_key recibe key_id, issuer_id y key_filepath. La duración de la sesión no supera los 1200 segundos, es decir, 20 minutos. No todas las acciones la admiten: fastlane indica, por ejemplo, que produce y pem no funcionan con una clave API.
Usarla en tu propio script
Sin herramienta, fabricas el token tú mismo. Apple define la receta:
- Encabezado:
algvaleES256,kidvale tu Key ID,typvaleJWT. - Contenido, clave de equipo:
iss, tu Issuer ID;iat, la hora de creación;exp, la hora de expiración;aud, que valeappstoreconnect-v1. - Contenido, clave individual:
subvaleuseren lugar deiss. - Duración: más allá de 20 minutos, Apple rechaza el token para la mayoría de las solicitudes.
En Python, con la biblioteca PyJWT y su dependencia criptográfica, instalada con pip install pyjwt[crypto] según su documentación. En la terminal de la Mac, usa comillas: pip install "pyjwt[crypto]", si no, zsh rechaza los corchetes.
import time
import jwt
KEY_ID = "XXXXXXXXXX"
ISSUER_ID = "tu-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)
Luego lo envías en el encabezado Authorization, como en el ejemplo de Apple:
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
Ejecuté este script el 3 de noviembre de 2026 con una clave desechable generada en mi máquina: el encabezado y el contenido del token coinciden con la página de Apple, y la firma ES256 se verifica. No lo envié a la API de Apple con esta clave de prueba, que no existe en Apple. Reutiliza el mismo token mientras sea válido: Apple lo recomienda para un mejor rendimiento.
Revocar una clave
Revoca una clave en cuanto se pierda, quede comprometida o una herramienta deje de usarla. Según la ayuda de App Store Connect, con una cuenta Account Holder o Admin:
- Abre Users and Access y luego Integrations.
- Elige Team Keys, o Individual Keys, y haz clic en Edit.
- Marca las claves que quieres revocar y luego Revoke Key.
- Confirma con Revoke.
Una clave revocada nunca se reactiva. Apple la muestra durante 30 días en Revoked. Cada herramienta que la usaba falla entonces en la autenticación. Con Expo, el mensaje es "App Store Connect rejected the API authentication credentials". Este mensaje y los demás fallos de envío se explican en los errores de envío con EAS y cómo corregirlos. Si la clave no está comprometida, prepara la nueva antes de cortar la antigua. Si lo está, Apple pide revocarla de inmediato.
Para tu propia clave individual: tu perfil, Individual API Key y luego Revoke.
Mi checklist de la clave .p8
- El Account Holder solicitó acceso a la API.
- La clave es de equipo si sirve para builds o perfiles.
- Su rol es el más bajo que cubre el uso, y su nombre dice qué herramienta la usa.
- El
.p8está guardado fuera del repositorio, con permisos estrictos y una copia de respaldo cifrada. - El Issuer ID y el Key ID están anotados aparte, sin el archivo.
- Cada herramienta tiene su clave, para poder revocar solo una.
Automatizar tu publicación sin exponer tu clave
La clave es solo una pieza del recorrido. El iOS & Android Kit parte del código base de mis apps, suscripciones incluidas, y sigue cuatro etapas hasta el App Store, a tu ritmo. Si conectas RevenueCat con esta clave, la configuración completa está en RevenueCat y la suscripción in-app en iOS.
Si estás preparando tu primer lanzamiento, haz tu diagnóstico gratuito: te dice qué te está frenando de verdad y te envía mi checklist antirrechazo de Apple. La página publicar una aplicación en el App Store repasa cada etapa, de la ficha a la aprobación.
Preguntas frecuentes
¿Cómo se crea una clave API de App Store Connect?
Primero, el Account Holder solicita acceso a la API. Después, un Admin abre Users and Access, pestaña Integrations, App Store Connect API, Team Keys. Hace clic en Generate API Key, elige un nombre y un rol, genera la clave y descarga el archivo .p8.
¿Se puede volver a descargar una clave .p8 perdida?
No. El archivo se descarga una sola vez, y Apple no guarda ninguna copia. Revoca la clave perdida, genera una nueva y actualiza cada herramienta que la usaba.
¿Dónde encuentro el Issuer ID y el Key ID?
En App Store Connect, menú Users and Access, pestaña Integrations. El Issuer ID aparece en la parte superior de la página. El Key ID figura en la lista de claves activas. Una clave individual no usa Issuer ID.
¿Qué rol darle a una clave que usa Expo?
La guía de Expo le da el rol Admin. Según la tabla de roles de Apple, App Manager basta para enviar builds y crear certificados y perfiles. Es el rol de mi clave, que uso para mis builds de Expo.
¿Se puede cambiar el rol de una clave API?
No. Apple no permite modificar ni el nombre ni el rol de una clave después de crearla. Revócala y genera una nueva con el rol correcto.
¿Una clave API de App Store Connect caduca?
Las páginas de Apple no mencionan ninguna caducidad de la clave, solo su revocación. Lo que caduca son los tokens firmados con ella, a los 20 minutos como máximo para la mayoría de las solicitudes.

