Crear una aplicación

POST /v1/applications · permiso applications:write

Crea una aplicación (un cliente OAuth/OIDC) en el entorno de la clave que realiza la llamada. key, name, app_type y party son obligatorios; cada uno de los demás campos recibe un valor predeterminado seguro derivado del tipo de aplicación. La respuesta incluye un ETag que usted envía como If-Match al actualizar o eliminar. Esta operación no crea un secreto de cliente; los secretos y las claves se gestionan a través de los endpoints de credenciales de la aplicación.

Solicitud

Cuerpo (application/json). Los campos desconocidos se rechazan. Solo key, name, app_type y party son obligatorios.

Campo Tipo Obligatorio Descripción
key string sí Clave de configuración estable, ^[a-z0-9_-]{1,64}$, única por entorno. Obligatoria al crear; no puede cambiarse después.
name string sí Nombre para mostrar, de 1 a 100 caracteres.
app_type string sí web, spa, native, m2m, device o management. Obligatorio al crear; no puede cambiarse después.
party string sí first_party o third_party. Obligatorio al crear; solo puede cambiar de first_party a third_party.
owner_org_id string o null no Id org_… de la organización propietaria; solo para aplicaciones m2m; no puede cambiarse.
status string no active o suspended. Una aplicación suspendida no puede obtener nuevos tokens.
allowed_web_origins string[] no Orígenes CORS permitidos (https://host[:port]), como máximo 20, sin comodines.
organization_usage string no deny, allow o require. Regula el parámetro de autorización organization (un id org_… o el slug de la organización): deny lo rechaza, allow lo hace opcional y require lo hace obligatorio. El token incluye org_id solo después de verificar la membresía del usuario.
org_access_mode string no Acceso de inicio de sesión a organizaciones: all_organizations (predeterminado; todos los miembros de todas las organizaciones), enabled_organizations (solo organizaciones donde la aplicación está habilitada) o assigned_only (además, solo membresías asignadas o grupos de directorio). Consulte aplicaciones de organización.
registration_mode string o null no open, invite_only o closed; vacío hereda la configuración del entorno.
registration_source string no dashboard o management_api al crear (predeterminado management_api); no puede cambiarse. Las respuestas también pueden mostrar dcr o cimd.
verification_status string no verified o unverified.
security_profile string no baseline (el único perfil editable actualmente).
token_endpoint_auth_method string no private_key_jwt, client_secret_basic, client_secret_post o none; debe estar permitido para el app_type.
grant_types string[] no Tipos de concesión permitidos; un subconjunto de lo que permite el app_type.
default_api_id string o null no Id api_… de la API que se usa cuando una solicitud no tiene resource.
require_par boolean no Exige solicitudes de autorización enviadas por push.
require_state boolean no Exige state.
require_nonce boolean no Exige nonce.
pkce_required boolean no Exige PKCE; solo puede desactivarse para una aplicación web confidencial. Sin PKCE, nonce es la única defensa contra la inyección de código de autorización, por lo que require_nonce debe permanecer activado fuera de los entornos de desarrollo (de lo contrario, validation_failed en /require_nonce).
skip_consent boolean no Omite la pantalla de consentimiento; solo para aplicaciones de primera parte.
token_binding_policy string no none o dpop_required.
login_host string o null no Uno de los hosts de inicio de sesión del entorno (nombre DNS en minúsculas).
default_max_age_s integer o null no max_age predeterminado en segundos.
min_acr string o null no Garantía mínima de autenticación: urn:idp:acr:1fa, urn:idp:acr:mfa o urn:idp:acr:phr.
access_token_lifetime_s integer o null no Duración del token de acceso, de 60 a 86400 segundos.
refresh_idle_s integer o null no Duración de inactividad del token de actualización en segundos; no puede superar refresh_absolute_s.
refresh_absolute_s integer o null no Duración absoluta del token de actualización en segundos.
refresh_reuse_interval_s integer no Ventana de reutilización del token de actualización, de 0 a 30 segundos (predeterminado 5).
backchannel_logout_uri string o null no URI de cierre de sesión por canal de fondo (https).
frontchannel_logout_uri string o null no URI de cierre de sesión por canal frontal (https).
frontchannel_logout_session_required boolean no Añade iss y sid a la URI de cierre de sesión por canal frontal. Si se establece en true mientras la configuración de cierre de sesión por canal frontal del entorno está desactivada, devuelve 422. Predeterminado false.
initiate_login_uri string no URI de inicio de sesión iniciado por OIDC (OpenID Connect Core 1.0 §4): tras un inicio de sesión SAML iniciado por el IdP, el navegador se envía aquí con iss, y la aplicación inicia su propio flujo de código de autorización con state y PKCE. URL https absoluta con host DNS en minúsculas, sin fragmento ni información de usuario, de como máximo 2048 bytes; no permitida para aplicaciones m2m y management. Solo una aplicación con esta URI puede ser destino iniciado por el IdP.
id_token_org_claims boolean no Cuando es true (predeterminado), el ID token de un inicio de sesión en organización incluye org_id, org_slug y org_roles; cuando es false, el ID token no incluye reclamaciones de organización. Los tokens de acceso no se ven afectados, y los ID tokens nunca incluyen permisos.
policy_uri string o null no URI de la política de privacidad (https), mostrada en la pantalla de consentimiento.
tos_uri string o null no URI de las condiciones del servicio (https).
client_uri string o null no URI de la página principal de la aplicación (https).
jwks object o null no Conjunto de claves JWK en línea ({"keys":[…]}): de 1 a 5 claves públicas, como máximo 16 KiB; se rechazan los miembros de clave privada. Mutuamente excluyente con jwks_uri.
jwks_uri string o null no URI remota de conjunto JWK (https); mutuamente excluyente con jwks.
software_id string o null no Solo para aplicaciones DCR.
software_version string o null no Solo para aplicaciones DCR.
m2m_token_lifetime_s integer o null no Duración del token para aplicaciones m2m, de 60 a 86400 segundos.
redirect_uris string[] no URI de redirección permitidas, como máximo 50; deben estar vacías para m2m y management.
post_logout_redirect_uris string[] no URI de redirección posterior al cierre de sesión permitidas, como máximo 50.
connection_ids string[] no Conexiones habilitadas en la aplicación (conn_…), ordenadas; el orden es el orden de los botones. Como máximo 100.
allowed_first_factors string[] no Primeros factores permitidos en la aplicación: valores de password, passkey, email_otp, magic_link, sms_otp, social, enterprise, sin duplicados; se devuelven en este orden. Una lista vacía (predeterminado) significa que la aplicación no añade restricción. El conjunto se intersecta con los allowed_first_factors del entorno; si no queda ningún método, 422 policy_conflict.
allowed_response_modes string[] no Los valores de response_mode que la aplicación puede usar en las solicitudes de autorización y en las solicitudes de autorización enviadas por push: query, form_post (uno o ambos, sin duplicados); se devuelven en este orden. Predeterminado ["query"]: una aplicación que recibe la respuesta de autorización mediante form post añade form_post explícitamente. Una solicitud de autorización cuyo response_mode no esté en la lista se rechaza; una solicitud sin response_mode usa query. Una lista vacía devuelve 422. Los modos JARM (jwt, query.jwt, fragment.jwt, form_post.jwt) aún no son compatibles. Las aplicaciones registradas mediante registro dinámico de clientes o un documento de metadatos de ID de cliente reciben ["query"].

Respuesta

201 Created con la aplicación y un encabezado ETag.

{
  "id": "app_6f8d0cjgbmf0gtn2rg6pscp3cg",
  "client_id": "app_6f8d0cjgbmf0gtn2rg6pscp3cg",
  "version": 1,
  "created_at": "2026-10-05T10:00:01Z",
  "updated_at": "2026-10-05T10:00:01Z",
  "key": "portal",
  "name": "Portal",
  "app_type": "web",
  "party": "first_party",
  "status": "active",
  "redirect_uris": ["https://portal.example.com/cb"],
  "...": "all other fields from the field reference"
}

Errores

HTTP code Cuándo
401 unauthenticated La clave falta, no es válida o ha sido revocada.
403 insufficient_permissions La clave no tiene el permiso requerido.
409 conflict Ya existe una aplicación con esta key.
422 validation_failed Un campo no es válido; errors[].pointer lo indica (por ejemplo /redirect_uris/0).
422 policy_conflict allowed_first_factors no tiene ningún método en común con el conjunto de primeros factores del entorno.
400 unknown_field El cuerpo tiene un campo que no forma parte del esquema.
403 quota_exceeded Se ha alcanzado el límite del plan para aplicaciones.

Ejemplo

curl -X POST https://api.eu.keenauth.com/v1/applications \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key":"portal","name":"Portal","app_type":"web","party":"first_party","redirect_uris":["https://portal.example.com/cb"]}'

Campos de la respuesta

id y client_id son el id de la aplicación (app_…); version también se devuelve como ETag; created_at, updated_at, last_token_issued_at y last_token_asn son de solo lectura. Se devuelve cada campo editable indicado arriba. Los secretos de cliente nunca forman parte de este recurso.