Esta página se genera de la misma definición que sirve la
especificación OpenAPI , y un test del repositorio comprueba que cada endpoint documentado existe de verdad y que cada endpoint que existe está documentado. No puede quedarse desfasada sin que se rompa la compilación.
General Comprobar la credencial y conocer el recinto.
GET /api/v1/ping cualquier clave
Comprueba la credencial
Devuelve el camping, los permisos y el entorno de la clave. Primera llamada recomendada.
Ejemplo bash
curl "https://pernocta.app/api/v1/ping" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"ok": true,
"camping": { "id": "bebdfebc-…", "name": "Área de autocaravanas", "timezone": "Europe/Madrid" },
"scopes": ["reservations:read", "access:read", "access:write"],
"environment": "test",
"serverTime": "2026-08-21T18:00:00.000Z"
}Probar en la consola → GET /api/v1/camping reservations:read
Datos del recinto
Nombre, zona horaria y horarios de entrada y salida. La zona horaria importa: todas las fechas de estancia se interpretan en la hora local del recinto, no en UTC.
Ejemplo bash
curl "https://pernocta.app/api/v1/camping" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"id": "bebdfebc-…", "name": "Área de autocaravanas", "slug": "area-ejemplo",
"timezone": "Europe/Madrid", "checkinTime": "16:00", "checkoutTime": "12:00",
"city": "Pontevedra", "postalCode": "36001", "country": "ES"
}
}Probar en la consola → GET /api/v1/pitches reservations:read
Plazas, tipos y zonas
El catálogo con los identificadores de plaza que hacen falta para crear reservas.
Ejemplo bash
curl "https://pernocta.app/api/v1/pitches" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"pitches": [{ "id": "…", "code": "A-04", "typeCode": "PARCELA", "typeLabel": "Parcela", "zoneName": "Zona A", "active": true }],
"types": [{ "id": "…", "code": "PARCELA", "label": "Parcela", "maxPersons": 6 }],
"zones": [{ "id": "…", "name": "Zona A" }]
}
}Probar en la consola → Reservas Leer, crear y mover reservas.
GET /api/v1/availability reservations:read
Disponibilidad entre dos fechas
Qué queda libre y desde qué precio. Es el mismo cálculo que usa el portal público: no hay una disponibilidad «de la API» distinta de la real.
Parámetros
fromstring · obligatorio — Entrada (YYYY-MM-DD) tostring · obligatorio — Salida (YYYY-MM-DD) typestring — Filtrar por código de tipo de plaza onlyFreestring — 1 (por defecto) solo libres, 0 todas Ejemplo bash
curl "https://pernocta.app/api/v1/availability?from=…&to=…" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"from": "2026-09-01", "to": "2026-09-04", "nights": 3, "minStay": 2, "meetsMinStay": true,
"pitches": [{ "pitchId": "…", "code": "A-04", "typeCode": "PARCELA", "free": true,
"fromPerNightCents": 2450, "totalCents": 7350 }]
}
}Probar en la consola → GET /api/v1/reservations reservations:read
Listado de reservas
Parámetros
fromstring — Solape desde (YYYY-MM-DD) tostring — Solape hasta (YYYY-MM-DD) statusstring — Estados separados por comas platestring — Matrícula (se normaliza sola) numberinteger — Localizador de la reserva emailstring — Email del titular limitinteger — 1-200, por defecto 50 offsetinteger — Desplazamiento Ejemplo bash
curl "https://pernocta.app/api/v1/reservations" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "…", "number": 59383, "guestName": "Ana Pérez", "plate": "1234ABC",
"from": "2026-09-01", "to": "2026-09-04", "persons": 2, "status": "confirmada",
"checkin": "completado", "totalCents": 7350, "channel": "web" }],
"pagination": { "total": 128, "limit": 50, "offset": 0, "hasMore": true }
}Probar en la consola → POST /api/v1/reservations reservations:write cambia datos Idempotency-Key
Crea una reserva
Pasa por el mismo camino que el mostrador: hereda anti-overbooking, precio y políticas.
Cuerpo
pitchId uuid guestName string from YYYY-MM-DD to YYYY-MM-DD persons integer? plate string? email string? phone string? status pendiente|confirmada? Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/reservations" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{
"pitchId": "UUID_DE_LA_PLAZA",
"guestName": "Ana Pérez",
"from": "2026-09-01",
"to": "2026-09-04",
"persons": 2,
"plate": "1234ABC",
"email": "ana@example.com"
}'Probar en la consola → GET /api/v1/reservations/{id} reservations:read
Detalle de una reserva, con viajeros y acceso vigente
Ejemplo bash
curl "https://pernocta.app/api/v1/reservations/RESERVA_UUID" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"id": "…", "number": 59383, "guestName": "Ana Pérez", "pitchCode": "A-04",
"from": "2026-09-01", "to": "2026-09-04", "status": "en_casa", "checkin": "completado",
"access": { "validFrom": "2026-09-01T00:00:00.000Z", "validTo": "2026-09-04T12:00:00.000Z", "provider": "ttlock" },
"travelers": [{ "id": "…", "esTitular": true, "nombre": "ANA", "apellido1": "PEREZ",
"numeroDocumento": "12345678Z", "nacionalidad": "ESP", "sesStatus": "enviado" }]
}
}Probar en la consola → POST /api/v1/reservations/{id}/checkin reservations:write cambia datos Idempotency-Key
Marca la entrada del huésped
También se marca sola cuando el huésped cruza la barrera con su matrícula o con su código.
Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/reservations/RESERVA_UUID/checkin" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Probar en la consola → POST /api/v1/reservations/{id}/checkout reservations:write cambia datos Idempotency-Key
Marca la salida
Sella la hora de salida y libera la plaza para limpieza.
Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/reservations/RESERVA_UUID/checkout" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Probar en la consola → POST /api/v1/reservations/{id}/cancel reservations:write cambia datos Idempotency-Key
Cancela la reserva (sin mover dinero)
Registra la cancelación y deja la devolución en manos de una persona del camping. Un sistema externo no debería poder emitir reembolsos por su cuenta.
Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/reservations/RESERVA_UUID/cancel" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Probar en la consola → POST /api/v1/reservations/{id} reservations:write cambia datos Idempotency-Key
Actualiza datos de una reserva
Matrícula, contacto, hora de llegada y titular. Las fechas, la plaza y el precio NO se tocan por aquí: eso mueve disponibilidad y dinero, y pasa por el motor de reservas con sus reglas.
Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/reservations/RESERVA_UUID" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{
"plate": "4321CBA",
"phone": "+34600111222"
}'Probar en la consola → GET /api/v1/quote reservations:read
Cuánto costaría una estancia
Cotiza sin crear nada, con el MISMO motor que el portal y el mostrador: el precio que devuelve es el que se va a cobrar, con suplementos, tasa turística y cupón incluidos. Es lo que permite que otra plataforma venda plazas del recinto.
Parámetros
pitchIdstring · obligatorio — Plaza a cotizar fromstring · obligatorio — Entrada (YYYY-MM-DD) tostring · obligatorio — Salida (YYYY-MM-DD) personsinteger — Ocupantes (por defecto 2) childreninteger — Menores, para la exención de tasa teensinteger — Adolescentes babiesinteger — Bebés (la franja de edad más baja) vehiclesinteger — Vehículos petsinteger — Mascotas ratePlanIdstring — Plan tarifario; si se omite, el de por defecto couponstring — Código promocional a validar Ejemplo bash
curl "https://pernocta.app/api/v1/quote?pitchId=…&from=…&to=…" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"nights": 3,
"baseCents": 6600,
"extrasCents": 450,
"touristTaxCents": 300,
"discountCents": 0,
"totalCents": 7350,
"depositCents": 2205,
"breakdown": [{ "date": "2026-09-01", "cents": 2200 }]
}
}Probar en la consola → GET /api/v1/services reservations:read
Extras y suplementos del catálogo
Con su precio, su IVA y su unidad (por noche, por estancia, por persona). Sin esto, quien vende desde fuera no puede ofrecer la luz, la mascota o el vehículo adicional.
Ejemplo bash
curl "https://pernocta.app/api/v1/services" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "…", "code": "luz", "name": "Electricidad", "priceCents": 450,
"taxRatePct": 21, "unit": "per_night", "mandatory": false, "bookableOnline": true }]
}Probar en la consola → GET /api/v1/closures reservations:read
Días en que el recinto no admite reservas
Consúltalo antes de ofrecer fechas: enterarse de que el área está cerrada DESPUÉS de cobrarle al cliente es la peor forma de descubrirlo.
Ejemplo bash
curl "https://pernocta.app/api/v1/closures" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"bookingsClosed": false,
"closedReason": null,
"periods": [{ "id": "…", "from": "2026-11-15", "to": "2026-12-01", "reason": "Obras" }]
}
}Probar en la consola → Control de accesos Matrículas, barreras y auditoría de entradas.
GET /api/v1/access/whitelist access:read
Matrículas autorizadas ahora mismo
La lista que debe vivir DENTRO de la cámara para que la barrera funcione sin conexión.
Parámetros
daysinteger — Días de llegadas futuras a precargar (0-30) Ejemplo bash
curl "https://pernocta.app/api/v1/access/whitelist" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "plate": "1234ABC", "reservationId": "…", "reservationNumber": 59383,
"guestName": "Ana Pérez", "from": "2026-09-01", "to": "2026-09-04", "status": "en_casa" }],
"generatedAt": "2026-08-21T18:00:00.000Z",
"refreshSeconds": 300
}Probar en la consola → POST /api/v1/access/plate access:write cambia datos Idempotency-Key
Notifica una matrícula leída y abre si procede
Cuerpo
plate string open boolean? lockId uuid? deviceId string? Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/access/plate" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{
"plate": "1234ABC",
"open": false,
"deviceId": "carril-entrada"
}'Respuesta json
{
"data": {
"authorized": true, "opened": true, "cooldown": false, "exactMatch": true, "plate": "1234ABC",
"deviceId": "carril-entrada",
"reservation": { "id": "…", "number": 59383, "guestName": "Ana Pérez",
"from": "2026-09-01", "to": "2026-09-04", "status": "en_casa" }
}
}Probar en la consola → POST /api/v1/access/open access:write cambia datos Idempotency-Key
Abre una puerta directamente
Cuerpo
lockId uuid? reservationId uuid? Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/access/open" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{}'Probar en la consola → GET /api/v1/access/doors access:read
Puertas del recinto
Con su identificador, para dirigir la apertura a una puerta concreta.
Ejemplo bash
curl "https://pernocta.app/api/v1/access/doors" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{ "data": [{ "id": "…", "label": "Barrera de entrada", "isPrimary": true, "enabled": true }] }Probar en la consola → GET /api/v1/access/events access:read
Histórico de aperturas (auditoría)
Quién entró, cuándo, por qué medio y con qué matrícula. Es lo que se enseña cuando hay que demostrar el control de accesos, no solo tenerlo.
Parámetros
fromstring — Desde (ISO 8601) tostring — Hasta (ISO 8601) limitinteger — 1-500, por defecto 100 offsetinteger — Desplazamiento Ejemplo bash
curl "https://pernocta.app/api/v1/access/events" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "…", "at": "2026-08-21T16:55:21.000Z", "door": "Barrera de entrada",
"method": "matricula", "success": true, "guestName": "Ana Pérez", "reservationId": "…" }],
"pagination": { "limit": 100, "offset": 0, "count": 1 }
}Probar en la consola → GET /api/v1/access/passes access:read
Pasos por la cámara de matrículas, incluidos los rechazos
Lo que vio la cámara, abriera o no. A diferencia de /access/events (aperturas físicas de la cerradura), aquí están también los coches a los que NO se les abrió, con el motivo: es lo que se revisa al día siguiente en un recinto sin nadie de guardia.
Parámetros
limitinteger — 1-500, por defecto 100 outcomestring — abierto | denegado directionstring — entrada | salida Ejemplo bash
curl "https://pernocta.app/api/v1/access/passes" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "…", "at": "2026-09-07T03:14:00.000Z", "plate": "9999ZZZ",
"direction": "entrada", "outcome": "denegado", "reason": "unknown_plate",
"who": null, "reservationId": null, "reservationNumber": null }],
"pagination": { "limit": 100, "count": 1 }
}Probar en la consola → POST /api/v1/access/close access:write cambia datos Idempotency-Key
Cierra una puerta
La barrera es de pulso: quien gobierna el carril desde su propio sistema necesita poder mandar también el impulso de cierre.
Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/access/close" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{}'Probar en la consola → GET /api/v1/reservations/{id}/access-code access:read
Código de acceso de la estancia
Para que una app propia se lo enseñe al huésped sin replicar nuestra lógica de emisión. `provider: "ttlock"`, `"nuki"`, `"raixer"`, `"akiles"`, `"igloohome"`, `"tedee"`, `"2n"` o `"hikvision"` = el código lo emitió la cerradura y abre de verdad; `null` = código local, informativo.
Ejemplo bash
curl "https://pernocta.app/api/v1/reservations/RESERVA_UUID/access-code" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"code": "154236",
"provider": "ttlock",
"validFrom": "2026-09-01T00:00:00.000Z",
"validTo": "2026-09-04T12:00:00.000Z",
"active": true
}
}Probar en la consola → Facturación Facturas y cobros, para la gestoría o el ERP.
GET /api/v1/invoices billing:read
Facturas emitidas
Parámetros
fromstring — Emitidas desde (YYYY-MM-DD) tostring — Emitidas hasta (YYYY-MM-DD) limitinteger — 1-500, por defecto 100 offsetinteger — Desplazamiento Ejemplo bash
curl "https://pernocta.app/api/v1/invoices" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "…", "series": "A", "number": 143, "reference": "A143",
"issuedAt": "2026-08-20T10:12:00.000Z", "customerName": "Ana Pérez",
"customerNif": "12345678Z", "totalCents": 7350, "status": "emitida", "type": "F1" }],
"pagination": { "total": 143, "limit": 100, "offset": 0, "hasMore": true }
}Probar en la consola → GET /api/v1/invoices/{id} billing:read
Factura con sus líneas, bases e impuestos
Ejemplo bash
curl "https://pernocta.app/api/v1/invoices/RESERVA_UUID" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Probar en la consola → GET /api/v1/payments billing:read
Cobros y devoluciones
Se filtra por la fecha en que ENTRÓ el dinero, no por la de creación: en un cobro online el enlace puede generarse días antes de que alguien lo pague.
Parámetros
fromstring — Cobrado desde (YYYY-MM-DD) tostring — Cobrado hasta (YYYY-MM-DD) reservationIdstring — Solo los de una reserva statusstring — Estado del cobro limitinteger — 1-500, por defecto 100 offsetinteger — Desplazamiento Ejemplo bash
curl "https://pernocta.app/api/v1/payments" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "…", "reservationId": "…", "method": "tarjeta", "status": "pagado",
"amountCents": 7350, "refundedCents": 0, "provider": "stripe",
"providerRef": "pi_3Q…", "settledAt": "2026-08-20T10:11:44.000Z" }]
}Probar en la consola → TPV externo Que el TPV del bar o el restaurante cargue tickets a la cuenta de una reserva.
GET /api/v1/stays charges:write
Busca la estancia a la que cargar
Quién está hoy en el camping, por código de plaza (sin distinguir mayúsculas ni guiones), número de reserva o nombre (sin acentos). Devuelve lo mínimo para elegir la cuenta, sin datos de contacto. La estancia se identifica por `stay`, su número de reserva: es lo que se usa para cargarle.
Parámetros
pitchstring — Código de la plaza, p. ej. A12 numberinteger — Número de reserva namestring — Nombre del titular (2 letras o más) Ejemplo bash
curl "https://pernocta.app/api/v1/stays" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "stay": 50123, "guestName": "Jordi Puig", "pitch": "A12",
"from": "2026-10-17", "to": "2026-10-20", "status": "en_casa" }]
}Probar en la consola → POST /api/v1/stays/{number}/charges charges:write cambia datos Idempotency-Key
Carga un ticket a la cuenta
Apunta un ticket del TPV del bar como deuda de la reserva, sin factura de Pernocta: el ticket fiscal es el de tu TPV. El huésped lo paga a la salida con el resto de consumos. Idempotente por `externalId`: repetir el envío devuelve el mismo cargo (200); la primera vez, 201. Solo reservas confirmadas o en el camping.
Cuerpo
source tu TPV, p. ej. «agora» (obligatorio) externalId nº del ticket en tu TPV (obligatorio) description texto (obligatorio) lines líneas con name, qty, unitPriceCents y taxRate totalCents total en céntimos, si no mandas líneas Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/stays/{number}/charges" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{
"source": "agora",
"externalId": "T-2026-004512",
"description": "Bar · mesa 4",
"lines": [
{
"name": "Caña",
"qty": 2,
"unitPriceCents": 250,
"taxRate": 10
},
{
"name": "Bocadillo",
"qty": 1,
"unitPriceCents": 600,
"taxRate": 10
}
]
}'Respuesta json
{
"data": { "id": "c1f0…", "stay": 50123, "source": "agora", "externalId": "T-2026-004512",
"description": "Bar · mesa 4", "totalCents": 1100, "status": "pending", "settledMethod": null,
"settledAt": null, "createdAt": "2026-10-18T13:05:00.000Z" }
}Probar en la consola → GET /api/v1/stays/{number}/charges charges:write
Cargos de una reserva
Los tickets cargados a la cuenta y en qué estado están: por cobrar (pending), cobrado (settled) o anulado (voided).
Ejemplo bash
curl "https://pernocta.app/api/v1/stays/{number}/charges" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Probar en la consola → POST /api/v1/charges/{id}/void charges:write cambia datos Idempotency-Key
Anula un cargo
Cuando el TPV anula el ticket. Solo los cargos de tu propia clave y mientras no se hayan cobrado; uno cobrado lo devuelve recepción desde Pernocta. Anular dos veces da el mismo resultado.
Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/charges/RESERVA_UUID/void" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{}'Probar en la consola → Operativa Clientes y partes de limpieza.
GET /api/v1/customers customers:read
Clientes con su historial
Agrupados por email, que es la identidad estable: la misma persona aparece con el nombre escrito de tres formas a lo largo de cinco años.
Parámetros
searchstring — Busca en nombre, email y teléfono limitinteger — 1-200, por defecto 50 offsetinteger — Desplazamiento Ejemplo bash
curl "https://pernocta.app/api/v1/customers" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "email": "ana@example.com", "name": "Ana Pérez", "phone": "+34600111222",
"stays": 7, "firstStay": "2023-06-12", "lastStay": "2026-08-04",
"totalCents": 214500, "pendingCents": 0, "overdueCents": 0,
"tags": ["habitual"], "hasAccount": true }]
}Probar en la consola → GET /api/v1/housekeeping reservations:read
Partes de limpieza del día
Qué plaza hay que limpiar, en qué estado está y cuál es prioritaria porque entra alguien hoy. Para quien tenga su propia app de limpieza o subcontrate el servicio.
Parámetros
daystring — Día (YYYY-MM-DD); por defecto hoy en la hora del recinto Ejemplo bash
curl "https://pernocta.app/api/v1/housekeeping" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"day": "2026-08-21",
"tasks": [{ "id": "…", "pitchCode": "A-04", "location": "A-04", "zoneName": "Zona A",
"kind": "salida", "status": "pendiente", "assignedTo": "Marta",
"priority": true, "arrivalTime": "17:00", "notes": null, "completedAt": null }]
}
}Probar en la consola → Eventos para reconciliar y consumo de tu credencial.
GET /api/v1/events reservations:read
Eventos emitidos, para reconciliar
Si tu servidor estuvo caído, lee desde el instante que te falte en vez de pedir un reenvío a ciegas. Se registran los eventos de los tipos a los que tengas algún webhook suscrito.
Parámetros
sincestring — Desde (ISO 8601) eventstring — Tipos separados por comas limitinteger — 1-200, por defecto 50 Ejemplo bash
curl "https://pernocta.app/api/v1/events" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "…", "event": "access.opened", "createdAt": "2026-08-21T18:00:00.000Z",
"data": { "plate": "1234ABC", "via": "anpr" }, "deliveryStatus": "delivered", "attempts": 1 }]
}Probar en la consola → GET /api/v1/webhooks cualquier clave
Webhooks suscritos
Los webhooks del recinto de eventos que tu clave puede recibir. Nunca devuelve el secreto de firma.
Ejemplo bash
curl "https://pernocta.app/api/v1/webhooks" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": [{ "id": "6f1c…", "url": "https://hooks.zapier.com/hooks/standard/…", "events": ["reservation.created"],
"enabled": true, "description": "Creado por la API", "createdAt": "2026-10-17T18:00:00.000Z" }]
}Probar en la consola → POST /api/v1/webhooks cualquier clave cambia datos Idempotency-Key
Suscribe un webhook
Crea una suscripción a eventos y devuelve su secreto de firma (una sola vez). Es lo que usan Zapier y Make al activar un Zap o un escenario. Solo te puedes suscribir a los eventos que podrías leer con tu clave. Si tu endpoint responde 410, la suscripción se desactiva sola.
Cuerpo
url https://… (obligatorio) events lista de eventos (obligatorio) description texto libre (opcional) Ejemplo bash
curl -X POST "https://pernocta.app/api/v1/webhooks" \
-H "Authorization: Bearer pna_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{
"url": "https://hooks.zapier.com/hooks/standard/123/abc/",
"events": [
"reservation.created",
"reservation.cancelled"
]
}'Respuesta json
{
"id": "6f1c…", "url": "https://hooks.zapier.com/hooks/standard/123/abc/",
"events": ["reservation.created", "reservation.cancelled"], "secret": "whsec_…"
}Probar en la consola → DELETE /api/v1/webhooks/{id} cualquier clave cambia datos
Da de baja un webhook
Borra la suscripción. Responde 204 sin cuerpo. Lo llaman Zapier y Make al apagar el Zap o el escenario.
Ejemplo bash
curl -X DELETE "https://pernocta.app/api/v1/webhooks/RESERVA_UUID" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Probar en la consola → GET /api/v1/usage cualquier clave
Consumo de tu credencial
Peticiones y errores de los últimos 30 días, y tu cuota actual. Cada clave solo ve lo suyo.
Ejemplo bash
curl "https://pernocta.app/api/v1/usage" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"last30Days": { "requests": 4210, "errors": 12 },
"today": { "day": "2026-08-21", "requests": 143, "errors": 0, "lastEndpoint": "/api/v1/access/plate" },
"rateLimit": { "limit": 600, "remaining": 598, "reset": 1787331302 }
}
}Probar en la consola → GET /api/v1/occupancy reservations:read
Ocupación por día
Plazas ocupadas y porcentaje, día a día. Para el cuadro de mando de un ayuntamiento o una gestora, sin tener que descargarse todas las reservas y contar por su cuenta.
Parámetros
fromstring · obligatorio — Desde (YYYY-MM-DD) tostring · obligatorio — Hasta, exclusivo (YYYY-MM-DD) Ejemplo bash
curl "https://pernocta.app/api/v1/occupancy?from=…&to=…" \
-H "Authorization: Bearer pna_live_TU_CLAVE"Respuesta json
{
"data": {
"from": "2026-08-01", "to": "2026-08-08", "totalPitches": 60,
"days": [{ "day": "2026-08-01", "occupied": 47, "occupancyRate": 78.3 }]
}
}Probar en la consola →