Referencia
Autenticación y convenciones
Todo lo que se aplica a cada endpoint: cómo autenticarse, los límites y cómo se estructuran las respuestas.
Autenticación
Cada solicitud incluye una cabecera Authorization: Bearer con una clave que generas en tu panel. Las claves tienen el aspecto de oac_live_…, están limitadas a tu empresa y se muestran una sola vez al crearlas — guárdalas de forma segura. Una clave ausente, mal formada o revocada devuelve un 401.
Authorization: Bearer oac_live_3f9a…c1e7
Cada lectura se limita automáticamente a los restaurantes de tu empresa — nunca podrás ver los datos de otro inquilino, ni siquiera adivinando un id. Genera o revoca claves en Claves de API.
Límites de frecuencia
60 solicitudes por minuto por clave de API. Cada respuesta indica el presupuesto actual; las solicitudes que superan el límite reciben un 429 con una cabecera Retry-After (en segundos).
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 41 X-RateLimit-Reset: 1734556800 Retry-After: 17 # only on 429
¿Necesitas un límite más alto para una sincronización masiva? Habla con nosotros.
Errores
Los errores utilizan códigos de estado HTTP estándar y un cuerpo JSON con un campo error legible por personas.
{ "error": "Restaurant not found" }| Estado | Significado |
|---|---|
| 200 / 201 | Éxito. Las solicitudes POST que crean un recurso devuelven 201. |
| 400 | Solicitud mal formada — JSON incorrecto o campos inválidos/ausentes. |
| 401 | Clave de API ausente, mal formada o revocada. |
| 404 | Recurso no encontrado o que no pertenece a tu empresa. |
| 409 | Conflicto — reservas desactivadas o franja completa. |
| 429 | Límite de frecuencia superado. Espera según Retry-After. |
| 5xx | Error transitorio del servidor — reintenta con espera progresiva. |
Paginación
Los endpoints de lista usan paginación por cursor. Pasa limit (por defecto 50, máx. 100) y sigue nextCursor hasta que sea null. Nunca te bases en desplazamientos.
let cursor = null;
do {
const url = new URL("https://openalacarte.com/api/v1/bookings");
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const { data, nextCursor } = await (await fetch(url, {
headers: { Authorization: `Bearer ${process.env.OAC_API_KEY}` },
})).json();
handle(data);
cursor = nextCursor;
} while (cursor);Versionado y estabilidad
- La API se versiona en la URL (
/api/v1/…). Los cambios incompatibles se publican comov2junto a lav1. - La
v1permanece disponible durante al menos 12 meses tras cualquier aviso de obsolescencia. - Los cambios aditivos (nuevos campos, endpoints, eventos de webhook) no son incompatibles — tolera los campos desconocidos.
- Todas las marcas de tiempo están en ISO-8601 en UTC.
Genera un SDK tipado o impórtalo en Postman desde la especificación OpenAPI 3.0.