Newaccess API · v1
Tu software
abre puertas.
Conecta tu sistema de reservas, tu ERP o tu app a las puertas y a los fichajes de Newaccess. Tú decides quién entra y cuándo. Nosotros abrimos la puerta y te avisamos al momento.
01 Así se abre una puerta
Un QR, una comprobación,
un clac.
- Enseña el QR de su móvil al lector de la puerta, o a una tablet con la app en modo lector.
- Newaccess comprueba si puede pasar: si es del local, si su acceso está en vigor y si le quedan entradas.
- El actuador del cuadro recibe la orden y da el pulso a la cerradura.
- La puerta se abre y la entrada queda registrada, con quién y a qué hora.
02 Tu reserva es su llave
Tu sistema reserva.
La puerta obedece.
Cuando alguien reserva en tu web, tu sistema llama a Newaccess y le crea el acceso: qué días vale y cuántas entradas tiene. Fuera de esas fechas, o sin entradas, no abre. Sin llaves que recoger ni códigos que cambiar.
- Marta paga la pista 3 para el sábado.
- Tu sistema le crea el acceso:
sábado 14 · 1 entrada. - El sábado, su QR abre. Le quedan
0entradas. - El domingo lo intenta otra vez: no abre.
POST /v1/locales/4/subscriptions
{ "user_id": 812, "start_date": "2026-11-14",
"end_date": "2026-11-14", "total_sessions": 1 }
03 Y te avisa de cada entrada
Cada puerta te habla
en tiempo real.
En cuanto alguien entra, o lo intenta, Newaccess envía un aviso automático a tu servidor (un webhook), firmado con tu clave para que sepas que viene de nosotros. Para entradas, accesos denegados, fichajes, altas y caducidades.
POST /newaccess HTTP/1.1
X-NewAccess-Event: actuator.qr_access_granted
X-NewAccess-Signature: sha256=9f2c41e07b…d3a8
{
"event": "actuator.qr_access_granted",
"timestamp": "2026-11-14T18:02:11+01:00",
"local": { "id": 4, "nombre": "Pádel Norte" },
"user": { "id": 812, "nombre": "Marta", … },
"data": { "descripcion": "ACCESS_OK_USER", … }
}
¿Sin programar? Plantillas de n8n: acceso denegado a Telegram, fichajes a Slack o a Google Sheets.
04 Fichajes dentro de tu sistema
El registro de jornada,
donde ya trabaja tu gente.
Ficha desde tu propia app, tu terminal o tu intranet con una llamada. Newaccess guarda el registro legal, que no se puede alterar, y te lo devuelve al instante para tu nómina o tu ERP.
- Trabajadores, departamentos y horarios
- Vacaciones, permisos e incidencias
- Cambios de turno y turnos de noche
- Resumen de horas y documentos del trabajador
POST /v1/integracion/locales/4/fichajes/eventos → fichaje.entrada_1 · a tu nómina, al momento
05 Lo que puedes construir
Tu sistema ya hace lo difícil.
Nosotros ponemos la puerta.
-
01
Pistas, salas, coworkings, trasteros
Reservas que abren la puerta
Tu web de reservas cobra y, al confirmar, le crea el acceso a esa persona para ese día. Con sus entradas contadas: cuando se le acaban, la puerta deja de abrirle.
- POST /integracion/locales/{id}/usuarios
- POST /locales/{id}/subscriptions
- actuator.qr_access_granted
-
02
Gimnasios y clubes con su propio programa
Solo entra quien está al día
Tu software de socios manda: cuando alguien paga, le das acceso hasta la fecha de su cuota; cuando caduca, Newaccess te avisa y la puerta ya no le abre.
- POST /locales/{id}/subscriptions
- DELETE /locales/{id}/subscriptions/{subId}
- subscriptions.expired
-
03
Empresas con su ERP o su nómina
Los fichajes, en tu ERP al momento
Cada entrada y cada salida llega sola a tu sistema. Y desde tu ERP das de alta a los trabajadores y sus horarios, y apruebas sus vacaciones, sin abrir el panel.
- fichaje.entrada_1
- POST /locales/{id}/employees
- POST …/empleados/{empId}/horarios
- POST …/vacaciones/aprobar
-
04
Tablets, terminales y apps propias
Ficha desde tu propio aparato
Tu terminal de la entrada o tu app de empresa fichan con una llamada. Newaccess comprueba al trabajador, guarda el registro legal y no duplica si la red repite la petición.
- POST /integracion/locales/{id}/fichajes/eventos
- Idempotency-Key
-
05
Intranets y programas de gestión
Newaccess dentro de tu programa
Abre el portal del trabajador o el panel de Newaccess desde tu software, con la persona ya identificada: sin otra contraseña que recordar.
- POST …/usuarios/{id}/portal-token
- POST …/usuarios/{id}/panel-sso
-
06
Tiendas y CRMs
Facturas desde tu sistema
Emite facturas con tus series, registra los cobros y envíalas a VeriFacTu desde tu propio programa, con la contabilidad del negocio en un solo sitio.
- POST /locales/{id}/facturacion/invoices
- POST …/invoices/{id}/payments
- …/verifactu/records
-
07
Cualquiera, sin programar
Avisos en tu móvil en diez minutos
Un acceso denegado, a tu Telegram. Los fichajes del día, a Slack o a una hoja de Google. Con plantillas de n8n listas para importar.
- actuator.qr_access_denied
- fichaje.*
- n8n
- 180 operaciones en la API para reservas, accesos, fichajes, facturas y más
- 24 avisos en tiempo real webhooks firmados con tu clave
- 2.275 puertas abiertas en los últimos 30 días
- 1.001 fichajes en los últimos 30 días
- 164 facturas emitidas en los últimos 30 días
06 Tu primera integración
Tres llamadas
y tu web abre puertas.
- Da de alta a la persona en tu local con la clave de integración.
- Dale acceso con las fechas y las entradas de su reserva.
- Recibe el aviso de cada entrada y comprueba la firma.
La clave de integración del local te la damos nosotros al activar la integración. Todo lo demás está en la guía y en la referencia, con cada operación para probarla en el navegador.
# 1 · Da de alta a la persona en tu local (con la clave del local)
curl -X POST https://api.newaccess.tech/v1/integracion/locales/4/usuarios \
-H "X-Local-Api-Key: $NA_LOCAL_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"marta@example.com","nombre":"Marta","apellidos":"Ruiz"}'
# → {"success":true,"data":{"id_usuario":812,"created":true,…}}
# 2 · Dale acceso para el día de su reserva, con una entrada
curl -X POST https://api.newaccess.tech/v1/locales/4/subscriptions \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"user_id":812,"start_date":"2026-11-14",
"end_date":"2026-11-14","total_sessions":1}'
# 3 · Cuando entre te llega un aviso firmado. Comprueba que es nuestro:
echo -n "$CUERPO" | openssl dgst -sha256 -hmac "$WEBHOOK_SECRET"
# tiene que dar lo mismo que la cabecera X-NewAccess-Signature: sha256=…
import crypto from "node:crypto";
const API = "https://api.newaccess.tech/v1";
// 1 · Da de alta a la persona en tu local (con la clave del local)
const alta = await fetch(`${API}/integracion/locales/4/usuarios`, {
method: "POST",
headers: { "X-Local-Api-Key": process.env.NA_LOCAL_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ email: "marta@example.com", nombre: "Marta", apellidos: "Ruiz" }),
}).then((r) => r.json());
// 2 · Dale acceso para el día de su reserva, con una entrada
await fetch(`${API}/locales/4/subscriptions`, {
method: "POST",
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
body: JSON.stringify({
user_id: alta.data.id_usuario,
start_date: "2026-11-14", end_date: "2026-11-14", total_sessions: 1,
}),
});
// 3 · Cuando entre te llega un aviso firmado. Comprueba que es nuestro (Express):
app.post("/newaccess", express.raw({ type: "application/json" }), (req, res) => {
const firma = "sha256=" + crypto.createHmac("sha256", SECRET).update(req.body).digest("hex");
const llega = req.get("X-NewAccess-Signature") ?? "";
if (firma.length !== llega.length || !crypto.timingSafeEqual(Buffer.from(firma), Buffer.from(llega))) {
return res.sendStatus(401);
}
const aviso = JSON.parse(req.body); // actuator.qr_access_granted, fichaje.entrada_1…
res.sendStatus(200);
});
import hashlib, hmac, requests
from flask import abort, request
API = "https://api.newaccess.tech/v1"
# 1 · Da de alta a la persona en tu local (con la clave del local)
alta = requests.post(f"{API}/integracion/locales/4/usuarios",
headers={"X-Local-Api-Key": NA_LOCAL_KEY},
json={"email": "marta@example.com", "nombre": "Marta", "apellidos": "Ruiz"}).json()
# 2 · Dale acceso para el día de su reserva, con una entrada
requests.post(f"{API}/locales/4/subscriptions",
headers={"Authorization": f"Bearer {token}"},
json={"user_id": alta["data"]["id_usuario"],
"start_date": "2026-11-14", "end_date": "2026-11-14", "total_sessions": 1})
# 3 · Cuando entre te llega un aviso firmado. Comprueba que es nuestro (Flask):
@app.post("/newaccess")
def aviso():
firma = "sha256=" + hmac.new(SECRET.encode(), request.get_data(), hashlib.sha256).hexdigest()
if not hmac.compare_digest(firma, request.headers.get("X-NewAccess-Signature", "")):
abort(401)
aviso = request.get_json() # actuator.qr_access_granted, fichaje.entrada_1…
return "", 200
<?php
function naPost(string $url, array $cabeceras, array $datos): array {
$ch = curl_init($url);
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [...$cabeceras, 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($datos)]);
return json_decode(curl_exec($ch), true);
}
$api = 'https://api.newaccess.tech/v1';
// 1 · Da de alta a la persona en tu local (con la clave del local)
$alta = naPost("$api/integracion/locales/4/usuarios", ['X-Local-Api-Key: ' . NA_LOCAL_KEY],
['email' => 'marta@example.com', 'nombre' => 'Marta', 'apellidos' => 'Ruiz']);
// 2 · Dale acceso para el día de su reserva, con una entrada
naPost("$api/locales/4/subscriptions", ["Authorization: Bearer $token"], [
'user_id' => $alta['data']['id_usuario'],
'start_date' => '2026-11-14', 'end_date' => '2026-11-14', 'total_sessions' => 1,
]);
// 3 · Cuando entre te llega un aviso firmado. Comprueba que es nuestro:
$cuerpo = file_get_contents('php://input');
$firma = 'sha256=' . hash_hmac('sha256', $cuerpo, WEBHOOK_SECRET);
if (!hash_equals($firma, $_SERVER['HTTP_X_NEWACCESS_SIGNATURE'] ?? '')) {
http_response_code(401);
exit;
}
$aviso = json_decode($cuerpo, true); // actuator.qr_access_granted, fichaje.entrada_1…
07 De qué somos capaces
Del cuadro eléctrico
a tu código.
El actuador S3 va en el carril DIN del cuadro, con nuestro firmware: WiFi y Bluetooth, un relé de 10 A para la cerradura y un bus RS485 para el lector. La app y la nube también son nuestras. Por eso la API llega hasta la puerta: abre con QR, con tarjeta NFC, con la app o con cerraduras TTLock, y cada apertura vuelve a tu sistema.
¿Lo que necesitas no está en la API? Lo desarrollamos.
08 Hablemos
Cuéntanos qué
quieres conectar.
Tu sistema de reservas, tu ERP, tu app o tu web. Te activamos la integración, te damos la clave y te ayudamos con las primeras llamadas.