Para desarrolladores
Si tienes tu propia web (hecha a mano, con WordPress, Wix o lo que sea) y no quieres usar la plantilla de Kustom, puedes seguir usando el motor de reservas por detrás: catálogo, disponibilidad, reservas y reseñas, con una simple clave.
1. Actívala en tu panel
Ve a Ajustes → Integraciones → API pública en tu panel de Kustom. Activa el interruptor y copia la clave que aparece (empieza por pk_live_) — es una clave publicable, como la de Stripe: viaja en el JavaScript de tu web, no hace falta esconderla.
Después, añade el dominio exacto desde el que vas a llamar (por ejemplo https://tudominio.com) a la lista de dominios permitidos. Es el único sitio desde el que un navegador podrá usar la clave — sin ningún dominio dado de alta, solo funcionará desde tu propio servidor, nunca desde el navegador de una visitante.
2. Dos cabeceras en cada petición
Toda petición a la API pública necesita estas dos cabeceras:
X-Client: api
X-Kustom-Key: pk_live_TU_CLAVEX-Client: api le dice a Kustom que la petición viene de la web propia de un negocio, no de la web de Kustom ni de la app móvil. X-Kustom-Key identifica DE QUÉ negocio se trata — no hace falta ningún subdominio ni cabecera Host especial, la clave ya lo dice todo.
Si llamas desde el navegador (fetch/XHR), el navegador añade la cabecera Origin él solo — no tienes que hacer nada más, pero recuerda que ese origen tiene que estar en tu lista de dominios permitidos (paso 1) o la petición se rechaza con un 403.
3. Un ejemplo real
Pedir el catálogo de servicios y productos:
curl "https://api.tudominio.com/api/v1/catalog" \
-H "X-Client: api" \
-H "X-Kustom-Key: pk_live_TU_CLAVE"O desde JavaScript, en la propia web:
fetch("https://api.tudominio.com/api/v1/catalog", {
headers: {
"X-Client": "api",
"X-Kustom-Key": "pk_live_TU_CLAVE",
},
})
.then((r) => r.json())
.then((catalogo) => console.log(catalogo));Comprobar huecos libres de un servicio concreto (los próximos 7 días desde una fecha):
curl "https://api.tudominio.com/api/v1/availability?item_id=EL_ID_DEL_SERVICIO&date_from=2026-09-10&days=7" \
-H "X-Client: api" \
-H "X-Kustom-Key: pk_live_TU_CLAVE"Y crear una reserva (como invitada, sin cuenta):
fetch("https://api.tudominio.com/api/v1/bookings", {
method: "POST",
headers: {
"X-Client": "api",
"X-Kustom-Key": "pk_live_TU_CLAVE",
"Content-Type": "application/json",
},
body: JSON.stringify({
item_id: "EL_ID_DEL_SERVICIO",
staff_id: "EL_ID_DE_LA_PROFESIONAL",
starts_at: "2026-09-10T10:00:00+02:00",
customer_name: "Elena Vidal",
customer_email: "elena@example.com",
accepted_privacy_policy: true,
}),
})
.then((r) => r.json())
.then((reserva) => console.log(reserva));4. Todos los endpoints disponibles
| Método | Ruta | Para qué sirve |
|---|---|---|
| GET | /api/v1/store | Ficha del negocio: nombre, tema, colores, horario. |
| GET | /api/v1/locations | Sedes del negocio, si tiene más de una. |
| GET | /api/v1/categories | Categorías del catálogo. |
| GET | /api/v1/catalog | Servicios y productos (filtra por ?kind=service|product). |
| GET | /api/v1/catalog/{slug} | Ficha de un servicio o producto. |
| GET | /api/v1/staff | El equipo — quién atiende qué. |
| GET | /api/v1/availability | Huecos libres de un servicio (y, si quieres, de una profesional) en un rango de fechas. |
| POST | /api/v1/bookings | Crear una reserva — con cuenta o como invitada. |
| GET | /api/v1/reviews | Reseñas publicadas (de un servicio, de una profesional, o todas). |
| POST | /api/v1/reviews | Dejar una reseña sobre una cita o un pedido ya completado. |
El catálogo y las sedes admiten el filtro ?location=slug-de-la-sede si tu negocio tiene más de una (ver GET /api/v1/locations para la lista). Las respuestas son exactamente las mismas que usa la propia web de Kustom — no hay una versión “recortada” para la API pública.
5. WordPress, Wix o HTML plano
Para plantar el catálogo (o cualquier otra llamada) en una plataforma que solo te deja pegar un bloque de código HTML — un bloque “HTML personalizado” en WordPress (Gutenberg → bloque HTML personalizado, o el widget “HTML” clásico), o el elemento “Insertar código HTML/Embed” de Wix — este bloque autocontenido sirve tal cual, sin ningún framework:
<div id="kustom-catalogo">Cargando…</div>
<script>
fetch("https://api.tudominio.com/api/v1/catalog", {
headers: {
"X-Client": "api",
"X-Kustom-Key": "pk_live_TU_CLAVE",
},
})
.then(function (r) { return r.json(); })
.then(function (catalogo) {
var contenedor = document.getElementById("kustom-catalogo");
contenedor.innerHTML = catalogo
.map(function (item) {
return (
'<div style="padding:12px 0;border-bottom:1px solid #eee">' +
'<strong>' + item.name + '</strong> — ' +
(item.price_cents / 100).toFixed(2) + ' €' +
'</div>'
);
})
.join("");
})
.catch(function () {
document.getElementById("kustom-catalogo").textContent =
"No se pudo cargar el catálogo ahora mismo.";
});
</script>En WordPress con Elementor, el widget se llama “HTML” (bajo “General”); en Divi, “Código”. En Wix, busca “Insertar HTML” o “Embed” al añadir un elemento. En cualquiera de los tres, pega el bloque de arriba entero — el <script> incluido — y cambia pk_live_TU_CLAVE por tu clave real. Recuerda dar de alta el dominio de esa página (paso 1) o la petición se rechazará.
Reseñas
Pedir las reseñas publicadas de un servicio:
curl "https://api.tudominio.com/api/v1/reviews?item_id=EL_ID_DEL_SERVICIO" \
-H "X-Client: api" \
-H "X-Kustom-Key: pk_live_TU_CLAVE"