Entorno de pruebas
Una copia vacía de tu cuenta para integrar de principio a fin sin comunicar nada al Ministerio, sin cobro y sin escribir a huéspedes reales.
Qué es
Cada cuenta tiene un entorno de pruebas: una cuenta gemela con sus propias reservas, propiedades, claves de API y webhooks. La API es la misma —mismas rutas, mismos campos, mismos eventos y mismos estados— y solo cambia lo que pasa al final del camino: el envío del parte lo contesta un simulador dentro de Kinapi en lugar del Ministerio del Interior.
Existe porque el Ministerio no da credenciales de pruebas a cada arrendador: su entorno de pruebas (PRE) es solo para quien desarrolla el servicio, no para sus clientes. Sin este entorno, probar una integración con Kinapi era probarla contra producción.
Cómo se activa
En el panel, abre el menú de la cuenta (arriba a la derecha) y pulsa Pasar al entorno de pruebas. También está en Configuración → API. Mientras estés en él, una franja ámbar lo recuerda arriba de todo y el panel solo enseña los datos de pruebas; para salir, Volver a producción.
La primera vez se crea el entorno, vacío, con tu marca, tus avisos al huésped y tus textos de correo copiados de producción. No se copian los webhooks —se configuran aparte, con su propia URL, para que los eventos de prueba no lleguen a tu receptor de producción— ni las credenciales del Ministerio, que aquí no hacen falta.
El entorno es cosa de tu navegador, no de la cuenta: tu equipo puede seguir trabajando en producción mientras tú pruebas. Al cerrar sesión o el navegador vuelves a producción.
Claves de pruebas
Con el entorno de pruebas activo, ve a Configuración → API y genera una clave. Empieza por kinapi_test_ y solo ve los datos de pruebas: no puede leer ni tocar nada de producción, porque pertenece a otra cuenta. Se usa exactamente igual que una clave de producción, también con el servidor MCP, que además trae herramientas para simular la respuesta del Ministerio, leer la bandeja de correos y vaciar el entorno.
Para saber con qué entorno habla una clave, mira livemode en GET /settings. Compruébalo al arrancar tu integración: es la forma de que una clave de pruebas no acabe por error en la configuración de producción, ni al revés.
curl https://api.kinapi.es/api/v1/settings \ -H "ocp-apim-subscription-key: kinapi_test_…"
{
"livemode": false,
"ses": { "submitRequiresSignature": false },
…
}Probar un parte aceptado y uno rechazado
El flujo es el de producción: creas la propiedad y la reserva, los huéspedes se registran desde su enlace (o los das de alta por API) y el parte sale la noche de llegada, o en el momento con POST /checkins/{reservationId}/ses. La diferencia es que la respuesta del «Ministerio» llega en segundos, no en el sondeo horario: recibes ses.submitted y justo después ses.confirmed o ses.error.
El resultado lo decides tú de dos formas: pidiéndolo explícitamente (la siguiente sección) o con los datos que envías, que sirve también para probar desde el enlace del huésped o desde el panel sin tocar la API:
| Campo | Tipo | Descripción |
|---|---|---|
apellido1: "RECHAZO" | huésped | Ese huésped se rechaza al consultar el lote, con el mismo formato de mensaje que usa el Ministerio («Valor incorrecto para el campo Primer apellido»). Los demás huéspedes de la reserva se aceptan. La reserva queda en error y recibes ses.error con phase "poll". |
codigoEstablecimiento: "RECHAZO" | propiedad | Se rechaza el envío entero en el momento, como un error de cabecera. La reserva no llega a enviarse y recibes ses.error con phase "submit". |
cualquier otro valor | — | Aceptado: cada huésped recibe un código de comunicación de prueba y recibes ses.confirmed. |
No importan las mayúsculas ni los acentos: «Rechazo» o «rechazó» cuentan igual. Los lotes y los códigos de comunicación de prueba empiezan por PRUEBA-, y en GET /checkins/{reservationId}/ses cada envío lleva env: "test".
Forzar la respuesta del Ministerio
/checkins/{reservationId}/ses/simulateComunica el parte ahora, como POST /checkins/{reservationId}/ses, y hace que el Ministerio simulado conteste lo que pidas, sin retocar los datos de la reserva. Todo lo demás pasa como en producción: el estado de la reserva, el detalle del envío y los webhooks. En el panel está en la ficha de cada reserva: «Simular la respuesta del Ministerio».
curl -X POST https://api.kinapi.es/api/v1/checkins/R-2026-0412/ses/simulate \
-H "ocp-apim-subscription-key: kinapi_test_…" \
-H "content-type: application/json" \
-d '{ "result": "rejected", "rejection": "numeroDocumento" }'{
"simulated": true,
"result": "rejected",
"lote": "PRUEBA-3f9a1c2e-DD",
"status": "error"
}| Campo | Tipo | Descripción |
|---|---|---|
accepted | resultado | Todos los huéspedes del envío reciben código de comunicación. Webhooks: ses.submitted y ses.confirmed. |
rejected | resultado | Los huéspedes se rechazan con el rechazo que elijas en rejection (por defecto, el del primer apellido). Con guestIds rechazas solo a esos y el resto se acepta. Webhooks: ses.submitted y ses.error con phase "poll". |
submit_error | resultado | El envío entero se rechaza en el momento, como un error de cabecera. Webhook: ses.error con phase "submit". |
blocked | resultado | La reserva queda retenida como si tu cuenta estuviera suspendida por impago. Webhook: ses.blocked. Se libera sola en el siguiente envío nocturno, como cuando una cuenta regulariza el pago. |
| Campo | Tipo | Descripción |
|---|---|---|
apellido1 | campoInvalido | «Valor incorrecto para el campo Primer apellido», con el apellido que enviaste. |
nombre | campoInvalido | «Valor incorrecto para el campo Nombre». |
numeroDocumento | campoInvalido | «Valor incorrecto para el campo NIF / NIE / Pasaporte», según el tipo de documento. |
fechaNacimiento | campoInvalido | «Valor incorrecto para el campo Fecha de nacimiento». |
documentoDuplicado | documentoDuplicado | «No se admiten datos repetidos de personas con el mismo rol en una comunicación». |
numPersonas | numPersonasNoCoincide | «El número de personas ingresado no coincide con los detalles proporcionados». |
codigoPostal | codigoPostalInvalido | «Un código postal ha de ser un número de longitud 5 y existir dentro del territorio español». |
sinClasificar | — | Un rechazo que Kinapi no sabe traducir: el mensaje llega en errores y rechazos va vacío. Sirve para probar el caso que tu integración no puede reconocer. |
Los mensajes copian el formato real del Ministerio y llevan los valores que enviaste, así que llegan en errores igual que uno de verdad y Kinapi los traduce en rechazos con el código de la segunda columna. Exige lo mismo que un envío real: huéspedes pendientes de comunicar, código de establecimiento en la propiedad y, si tu cuenta lo pide, el contrato firmado. Si falta algo responde 409 not_ready con el motivo. Con una clave de producción responde 403 test_mode_only, igual que el resto de endpoints de esta página.
Bandeja de correos de prueba
/test/emailsCada correo que genera el entorno de pruebas se guarda 30 días en una bandeja, haya salido hacia tu equipo o no: la invitación al huésped, el recordatorio, la copia del contrato firmado, el aviso de registro completo… Así ves lo que habría recibido cualquier huésped sin tener que poner tu correo en las reservas. En el panel está en la franja del entorno de pruebas, «Correos de prueba»; por API, del más reciente al más antiguo:
{
"results": [
{
"id": "6b1f…",
"to": "maria@example.com",
"subject": "María, completa tu registro para Casa Malia",
"kind": "guest_invitacion",
"delivered": false,
"attachments": [],
"text": "Hola, María: … https://www.kinapi.es/c/aGb3xKf9… …",
"html": "<!doctype html>…",
"createdAt": "2026-10-09T09:12:44.120Z"
}
]
}delivered dice si salió de verdad (la dirección es de tu equipo) o se quedó en la bandeja. El enlace de registro de una invitación está en text: tus pruebas automáticas pueden leerlo de ahí y recorrer el registro del huésped de principio a fin.
Vaciar el entorno y borrado automático
/test/resetBorra todas las reservas de pruebas con lo que cuelga de ellas: huéspedes, envíos, firmas, correos de la bandeja y entregas de webhooks. Se quedan las propiedades, propietarios, plantillas, normas, claves de API, el webhook y los ajustes, así que puedes llamarlo antes de cada pasada de pruebas para empezar siempre igual. No se manda ningún webhook por lo que borra. En el panel está en Configuración → Cuenta, con el entorno de pruebas activo.
{ "reset": true, "checkins": 12, "emails": 30 }Además, las reservas de pruebas se borran solas 30 días después de su fecha de salida, y los correos de la bandeja a los 30 días. A diferencia de producción —donde una reserva ya comunicada solo se cancela—, aquí nada llegó al Ministerio y no hay nada que conservar.
Qué cambia respecto a producción
| Ministerio | Nada sale de Kinapi: ni el alta del parte, ni la consulta del lote, ni la anulación al cancelar una reserva o cambiar sus fechas. No se usa ninguna credencial del Ministerio. |
|---|---|
| Facturación | Nada se factura ni consume tus reservas gratuitas. GET /usage con una clave de pruebas siempre está a cero. |
| Correos | Solo llegan a tu equipo: el correo del alta, los usuarios del panel y las direcciones que hayas puesto en tus avisos, siempre con [TEST] delante del asunto. A cualquier otra dirección no sale nada, aunque para el resto del sistema cuenta como enviado. Todos, salgan o no, quedan en la bandeja de correos de prueba. |
| Webhooks | Los mismos eventos, con livemode: false en el cuerpo y la cabecera X-Kinapi-Livemode: false. Se configuran aparte, en el propio entorno de pruebas. |
| Contrato | Se genera y se firma igual, pero no se archiva en el almacén inmutable ni se sella en una autoridad de sellado de tiempo: un contrato de pruebas no es evidencia de nada. GET …/evidence devuelve una lista vacía. |
| Enlace del huésped | La página de registro avisa arriba, en el idioma del huésped, de que es un entorno de pruebas. |
| Borrado | Las reservas se borran solas 30 días después de su salida, y puedes vaciarlas todas cuando quieras. En producción, una reserva ya comunicada no se borra. |
| Límites | Los mismos límites diarios que en producción. |
El entorno de pruebas no comprueba lo que solo el Ministerio sabe: que tu código de establecimiento exista o que tus credenciales sean válidas. Antes de salir a producción, prueba la conexión con tus credenciales reales desde Configuración → SES Hospedajes.
Pasar a producción
No hay nada que migrar: el entorno de pruebas es una cuenta aparte y lo que crees en él no pasa a producción. Genera una clave en producción (sin el prefijo test), da de alta allí tus propiedades con su código de establecimiento real y configura el webhook de producción. Si das de baja la cuenta, el entorno de pruebas se borra con ella.