Saltar al contenido
OpenALaCarte

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" }
EstadoSignificado
200 / 201Éxito. Las solicitudes POST que crean un recurso devuelven 201.
400Solicitud mal formada — JSON incorrecto o campos inválidos/ausentes.
401Clave de API ausente, mal formada o revocada.
404Recurso no encontrado o que no pertenece a tu empresa.
409Conflicto — reservas desactivadas o franja completa.
429Límite de frecuencia superado. Espera según Retry-After.
5xxError 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.

Recorrer todas las reservas
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 como v2 junto a la v1.
  • La v1 permanece 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.