Configuración de la cuenta
Ajustes, marca del formulario y webhook saliente: todo lo que se configura en el panel, también por API.
Estos endpoints existen para que puedas dar de alta y configurar una cuenta entera sin entrar al panel — útil si gestionas muchos alojamientos o si automatizas el onboarding de tus clientes.
Ajustes generales
/settings/settings| Campo | Tipo | Descripción |
|---|---|---|
livemode | boolean · solo lectura | false si la clave es del entorno de pruebas, donde nada se comunica al Ministerio ni se factura. Compruébalo al arrancar tu integración para saber con qué entorno habla. Ver Entorno de pruebas. |
ses.submitRequiresSignature | boolean | Si es true, un parte no sale a SES hasta que todo el grupo ha firmado el contrato. |
notifications.locale | es | en | Idioma de los correos que Kinapi te manda A TI: registro completo de una reserva, incidencias del envío a SES, aviso de cupo a punto de agotarse y suspensión de la cuenta. No afecta a nada que vea el huésped. Ausente = castellano. En el panel es Ajustes → Notificaciones. |
notifications.telegram | object | null | Avisos a un bot propio: botToken, chatId y topicId opcional. null desactiva los avisos. |
notifications.guestInvitations | object | Los correos al huésped de la cuenta: enabled (invitación), daysBefore (días antes de la entrada, 1 a 30), reminder (recordatorio dos días antes) y lastCall (último aviso el día de la llegada). Los tres son independientes: si mandas tú el enlace, apaga la invitación y deja los recordatorios. Lo que no mandes conserva su valor. Cada propiedad puede decidir otra cosa con sus notifications. |
notifications.guestReplyTo | string | null | A dónde llegan las respuestas de los huéspedes a la invitación, los recordatorios y el contrato firmado. null o cadena vacía vuelve al correo de contacto de la cuenta. En la lectura, guestReplyToConfigured dice si es una dirección propia o el contacto de la cuenta. |
guestEmails | object | Tus textos para los correos al huésped: invitation, reminder y lastCall, cada uno por idioma (es, en, de, fr, nl, it, pt) con subject, headline y body. Lo que no rellenes sale con el texto de Kinapi; null en un idioma lo quita. Detalles más abajo, en Avisos por correo. |
Hay dos idiomas y no se pisan. Este notifications.locale es el tuyo, el de los avisos que recibes como gestor, y vive en la cuenta porque los manda el cron cuando no hay nadie delante. El del huésped —formulario, contrato y sus correos— es otra cosa y se decide en la reserva o en el alojamiento. Puedes leer tus avisos en inglés y atender en neerlandés a quien se aloja.
El PATCH es parcial también dentro de notifications: mandar solo telegram no toca el idioma, y mandar solo el idioma no toca Telegram ni los correos al huésped. Lo mismo con guestEmails: solo cambian los idiomas que mandas.
El botToken de Telegram se puede escribir pero nunca se devuelve: en las lecturas verás configured: true/false. Es una credencial de un tercero y no tiene por qué viajar de vuelta.
curl -X PATCH https://api.kinapi.es/api/v1/settings \
-H "ocp-apim-subscription-key: TU_API_KEY" \
-H "content-type: application/json" \
-d '{"ses":{"submitRequiresSignature":true}}'curl -X PATCH https://api.kinapi.es/api/v1/settings \
-H "ocp-apim-subscription-key: TU_API_KEY" \
-H "content-type: application/json" \
-d '{"notifications":{"guestInvitations":{"enabled":false,"reminder":true,"lastCall":true},"guestReplyTo":"reservas@example.com"}}'El idioma y el tema del panel (oscuro o claro) son preferencias de cada navegador, no de la cuenta: se cambian desde el icono de cuenta, arriba a la derecha, y no se configuran por API. No afectan al formulario del huésped, que va en el idioma de la reserva y con la marca del alojamiento.
Marca del formulario (marca blanca)
/branding/branding/brandingPersonaliza lo que ven tus huéspedes con tu color, tu logo y tu nombre comercial: su página de registro y la cabecera de sus correos. Nunca cambia el panel ni los contratos.
| Campo | Tipo | Descripción |
|---|---|---|
commercialName | string | null | Nombre comercial de tu empresa, como la conocen tus huéspedes. Sale en la cabecera de sus correos, bajo el nombre del alojamiento. Sin él no sale nada (antes salía el identificador de la cuenta). null o cadena vacía lo quita. Hasta 80 caracteres. |
primaryColor | string | null | Color de marca en formato #RRGGBB. El color del texto se calcula solo por contraste. null vuelve al azul por defecto. |
backgroundColor | string | null | Color de fondo de la página del huésped en formato #RRGGBB. De él se derivan tarjetas, bordes y textos secundarios, comprobando el contraste, para que todo siga leyéndose elijas un fondo claro u oscuro. null vuelve al fondo por defecto. |
logo | string | null | Imagen en base64 (admite prefijo data:). PNG, JPEG o WebP, máximo 1 MB. null quita el logo. SVG no se acepta. |
# color y logo a la vez
curl -X PATCH https://api.kinapi.es/api/v1/branding \
-H "ocp-apim-subscription-key: TU_API_KEY" \
-H "content-type: application/json" \
-d "{\"primaryColor\":\"#0B6E4F\",\"logo\":\"$(base64 -i logo.png)\"}"El formato del logo se decide leyendo sus bytes reales, no la extensión ni lo que declares. Se rechaza SVG a propósito: se sirve desde nuestro dominio y podría contener código.
Webhook saliente
/webhook/webhook/webhookConfigura a qué URL te avisamos y de qué eventos. El GET devuelve además la lista de eventos disponibles y el secreto con el que firmamos cada entrega — el mismo que necesitas para verificar la cabecera x-kinapi-signature-sha256 (cómo verificarla).
| Campo | Tipo | Descripción |
|---|---|---|
url | string | https:// público. Se rechazan direcciones internas. |
events | string[] | guest.registered, checkin.completed, ses.submitted, ses.confirmed, ses.error, ses.blocked, ses.cancelled, ses.cancel_failed, export.ready, export.failed (ver Webhooks) |
enabled | boolean | Por defecto true. |
secret | string | Opcional: si lo omites se conserva el actual (o se genera uno la primera vez). |
curl -X PUT https://api.kinapi.es/api/v1/webhook \
-H "ocp-apim-subscription-key: TU_API_KEY" \
-H "content-type: application/json" \
-d '{"url":"https://tu-sistema.com/hooks/kinapi","events":["ses.confirmed","ses.error"]}'Probar y depurar el webhook
/webhook/test/webhook/deliveriesLa prueba envía una entrega real y te devuelve el resultado del intento (código HTTP, duración y el cuerpo que respondió tu servidor), sin esperar a que ocurra un evento. El historial guarda los intentos de los últimos 30 días.
curl -X POST https://api.kinapi.es/api/v1/webhook/test \ -H "ocp-apim-subscription-key: TU_API_KEY"
Portal de facturación
/billing/portalDevuelve una URL de un solo uso al portal de Stripe, donde tu cuenta puede ver facturas y cambiar el método de pago. Caduca: pide una nueva cada vez, no la guardes.
Avisos por correo
Kinapi puede escribir al huésped para que haga su registro, y avisarte a ti cuando una reserva queda completa. Los dos vienen apagados, y a propósito: si tu PMS ya reparte el enlace dentro de su mensaje de bienvenida, encenderlos haría que el huésped reciba dos correos del mismo alojamiento diciendo lo mismo. Se activan en Configuración → Notificaciones, o por API con notifications.guestInvitations.
| Campo | Tipo | Descripción |
|---|---|---|
Invitación al huésped | huésped | Unos días antes de la entrada, configurable. Y en el acto si la reserva entra cuando ese día ya ha pasado — una reserva de hoy para mañana se queda si no sin ningún aviso. |
Recordatorio | huésped | Opcional, dos días antes de la entrada, y solo si sigue sin completarse. Sale aunque la invitación esté apagada. |
Último aviso | huésped | La mañana de la entrada, si aún faltan datos. El parte sale esa noche, así que todavía llega a tiempo. También se enciende y se apaga por separado. |
Reserva completa | gestor | En cuanto el último huésped termina su registro. Puedes mandarlo a una dirección distinta de la de la cuenta. |
Partes con incidencia | gestor | Resumen por la mañana con los partes rechazados por el Ministerio o sin comunicar. Siempre activo: es el que evita que un rechazo pase desapercibido. De cada reserva se avisa dos veces por la misma causa y después se calla —si la causa cambia, vuelve a avisar—; en el panel sigue a la vista siempre. |
El correo al huésped va a nombre del alojamiento, no de Kinapi. El huésped reservó contigo y no sabe quién somos: en la cabecera aparece el nombre comercial del alojamiento (o su nombre, si no tiene) y debajo el de tu empresa, y si responde, su respuesta llega a tu dirección de respuestas —por defecto, el contacto de tu cuenta—. El remitente sigue siendo Kinapi (no-reply@kinapi.es), y Kinapi aparece en una línea al pie.
Si el enlace lo mandas tú —desde tu PMS, con la url que devuelve la API—, apaga la invitación y deja encendidos el recordatorio y el último aviso. Kinapi solo escribe a quien todavía no se ha registrado: quien rellene con tu enlace no recibe nada nuestro, y quien no, recibe el recordatorio y el último aviso.
Tus textos en los correos al huésped
Puedes cambiar el asunto, el titular y el texto de entrada de la invitación, el recordatorio y el último aviso, en cada idioma. Lo que no rellenes sale con el texto de Kinapi. En el panel está en Configuración → Notificaciones → Textos de los correos, con vista previa y envío de prueba; por API, en guestEmails de PATCH /settings.
| Campo | Tipo | Descripción |
|---|---|---|
{nombre} | variable | Nombre del huésped titular. Si no lo sabemos, desaparece y la frase se recompone: «{nombre}, te esperamos» queda en «Te esperamos». |
{alojamiento} | variable | Nombre comercial del alojamiento, o su nombre si no tiene. |
{fecha_entrada} | variable | Fecha de entrada de la reserva. |
Sin enlaces | regla | No se admiten enlaces ni direcciones web: el único enlace del correo es el del botón. Nombrar el canal (Booking.com, Airbnb.com) sí se puede. |
Límites | regla | Asunto, una línea de hasta 150 caracteres. Titular, una línea de hasta 120. Texto, hasta 2.000 caracteres y 8 párrafos separados por una línea en blanco. |
Lo que no cambia | regla | El botón con el enlace, los documentos que hacen falta, la fecha de entrada y el aviso legal del RD 933/2021 salen siempre. |
curl -X PATCH https://api.kinapi.es/api/v1/settings \
-H "ocp-apim-subscription-key: TU_API_KEY" \
-H "content-type: application/json" \
-d '{"guestEmails":{"reminder":{"es":{"subject":"{nombre}, te esperamos en {alojamiento}","body":"Aún nos faltan tus datos.\n\nSon dos minutos y llegas con todo hecho."},"en":null}}}'Si algún texto no cumple las reglas, la respuesta es un 400 con code: guest_email_text y una lista en details con el correo, el idioma, el campo y el motivo (too_long, unknown_variable, link_not_allowed, single_line o too_many_paragraphs). No se guarda nada de esa llamada: o entra entera o no entra.
Cuándo se manda la invitación. El plazo lo decides tú, pero conviene no irse a ninguno de los dos extremos. Muy pronto no funciona: quien recibe el correo tres semanas antes no tiene a mano los documentos de todos los viajeros, lo aparca y no vuelve — y además la reserva aún puede cambiar o anularse. El mismo día tampoco: el huésped está viajando, no lo abre, y esa noche el parte sale incompleto. El valor por defecto deja margen para que quepa el recordatorio y para que te dé tiempo a reaccionar si nadie contesta.
Como máximo salen tres correos por reserva, y dejan de salir en cuanto todos los huéspedes se han registrado. Si dos de ellos cayeran el mismo día, solo se manda uno.