Estándar abierto OAC
Una especificación JSON neutral para datos de establecimientos — tanto restaurantes como tiendas. Un solo punto de acceso devuelve todo lo que necesitas para mostrar, enrutar o reservar.
Ejemplo rápido
curl https://www.openalacarte.com/api/standard/v1/restaurants/<slug>
Sin autenticación. En caché en el borde durante 5 minutos. CORS abierto — llámalo desde un navegador.
Qué incluye la respuesta
restaurant.*
Identidad, contacto, moneda, dirección con lat/lng, horario de apertura por día, lo que aceptan (reservas / entrega / recogida).
menu.sections[].items[]
El menú activo principal del local (`sortOrder` más bajo) — nombre, descripción, precio, moneda, alérgenos, imagen — agrupado por secciones. Un local con varios menús publica uno; las respuestas con varios menús se contemplan para la v2.
spec + fetched
Sobre versionado (`openalacarte.standard/v1`) + marca de tiempo ISO para que las cachés posteriores sepan lo que tienen.
IDs estables
El `slug` del local es el identificador canónico. Los slugs se asignan al crearlo y nunca se reescriben, así que un slug que guardes seguirá siendo válido.
restaurant.venueType
O bien `restaurant`, o bien `shop`, en todas las respuestas. Ramifica por este campo — no por qué otros campos resultan estar vacíos.
Restaurantes y tiendas
Las panaderías, carnicerías, charcuterías, fruterías y vinotecas son una clase de establecimiento distinta en OpenALaCarte, y este punto de acceso también las sirve:
- Ambas clases responden en la misma ruta
/v1/restaurants/y llegan bajo la misma clave de primer nivelrestaurant. Ambas están congeladas — v1 promete que el código escrito contra él sigue funcionando, y mover las tiendas rompería exactamente eso. restaurant.venueTypees el discriminante. Está presente en todas las respuestas, así que puedes leerlo sin valor de reserva.- Una tienda siempre informa
acceptsReservations: false. Las tiendas no aceptan reservas en ningún plan, así que es un hecho sobre la clase de establecimiento — nunca un restaurante que haya desactivado las reservas. - El campo
cuisinede una tienda lleva su categoría comercial (panadería, carnicería, frutería), y sumenues su catálogo de productos, con la misma forma de secciones y artículos. - Una tienda que vende en puestos de mercado en lugar de en una dirección fija publica
address: nully un arrayhoursvacío. Su fila de dirección es un almacén y su horario de venta pertenece a una ruta, así que ninguno describe una puerta a la que un cliente pueda presentarse.
Versionado
SemVer a nivel de URL. Las adiciones v1.* son retrocompatibles (nuevos campos, nunca eliminados/renombrados). Los cambios incompatibles pasan a /v2/ con un solapamiento de 12 meses.
Las deprecaciones se anuncian en el registro de cambios para desarrolladores de esta página + a través del encabezado de respuesta Deprecation.
Dónde aparecen también estos datos
Los mismos datos de los locales se publican en varias formas. Para ser precisos, son representaciones paralelas y no consumidores de este endpoint:
- Nuestro JSON-LD para Google Maps Reserve y Apple Business Connect — los mismos datos, generados desde la base de datos en lugar de obtenerse de este feed.
- Los widgets integrados (/restaurants/[slug]) — la misma carga útil, renderizada como HTML.
- (Futuro) integradores externos — DoorDash, Uber Eats, Tock — cuando quieran datos canónicos de OAC
¿Construyendo sobre esto? Escribe a devs@openalacarte.com y te incluiremos aquí.
¿Por qué estándar «abierto»?
Porque la especificación está documentada + versionada + estable. Nos comprometemos a no romperla. Si escribes código contra /v1/, ese código sigue funcionando — incluso si OAC cambia de rumbo, incluso si nos adquieren.