Developer platform
Conecta tus aplicaciones con Routicket.
Resumen práctico de autenticación, objetos principales y endpoints disponibles.
POST
Email Hub · enviar correo
Envía un correo HTML usando el hub de Routicket. El servidor configura Apps Script, el remitente y el canal de entrega; tu aplicación solo necesita un token Bearer y los datos del mensaje.
ENDPOINThttps://routicket.com/api/newsletter/send.php
Headers
Authorization: Bearer $RTK_TOKEN
Content-Type: application/json
Body
| Campo | Tipo | Requerido | Descripción |
|---|
to | string | sí | Correo destinatario. |
subject | string | sí | Asunto, máximo 180 caracteres. |
content | HTML | sí | Contenido del correo, máximo 300000 bytes. |
Ejemplo cURL
curl -sS -X POST 'https://routicket.com/api/newsletter/send.php' \
-H "Authorization: Bearer $RTK_TOKEN" \
-H 'Content-Type: application/json' \
--data '{"to":"destino@correo.com","subject":"Novedades Routicket","content":"<h2>Hola</h2><p>Mensaje desde el hub.</p>"}'
Respuesta 200
{"ok":true,"provider":"routicket-google-apps-script","to":"destino@correo.com","subject":"Novedades Routicket","status":200}
Ver endpointAcepta el token Bearer nuevo, el token del login o el valor api_public mostrado en /api/. Debe pertenecer al administrador autorizado. GUIDE Cómo usar Newsletter Hub
Esta API permite que una terminal, panel o aplicación envíe correos HTML usando la infraestructura de Routicket. Tu aplicación no necesita conocer la URL de Google Apps Script, el remitente ni credenciales de correo.
1. Credencial → 2. JSON → 3. POST → 4. Respuesta
1. Obtén la credencial
Entra a /api/, inicia sesión y copia el valor completo que aparece junto a api_public. También puedes usar un token Bearer autorizado. No copies la etiqueta api_public; copia su valor.
# Terminal
read -rsp 'Token API Routicket: ' RTK_TOKEN
echo
Para el API Explorer pega el valor en Token API; el Explorer agrega Bearer automáticamente.
2. Construye el mensaje
| Campo | Tipo | Requerido | Regla |
|---|
to | string | sí | Correo válido del destinatario. |
subject | string | sí | Asunto de hasta 180 caracteres. |
content | string HTML | sí | Contenido de hasta 300000 bytes. |
3. Envío desde terminal
curl -sS -X POST 'https://routicket.com/api/newsletter/send.php' \
-H "Authorization: Bearer $RTK_TOKEN" \
-H 'Content-Type: application/json' \
--data '{"to":"destino@correo.com","subject":"Novedades Routicket","content":"<h2>Hola</h2><p>Mensaje desde el hub.</p>"}'
4. Envío desde un servidor JavaScript
const response = await fetch('https://routicket.com/api/newsletter/send.php', {
method: 'POST',
headers: {
Authorization: \`Bearer \${process.env.RTK_TOKEN}\`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: 'destino@correo.com',
subject: 'Novedades Routicket',
content: '<h2>Hola</h2><p>Mensaje desde el hub.</p>'
})
});
const result = await response.json();
console.log(response.status, result);
Respuesta exitosa
HTTP 200
{"ok":true,"provider":"routicket-google-apps-script","to":"destino@correo.com","subject":"Novedades Routicket","status":200}
Errores habituales
| HTTP | Error | Qué revisar |
|---|
| 400 | invalid_json, invalid_to, invalid_subject o invalid_content | JSON, correo, asunto y contenido. |
| 401 | unauthorized | Token ausente, incompleto o inválido. |
| 403 | forbidden | La credencial es válida, pero no pertenece al administrador autorizado. |
| 405 | method_not_allowed | La ruta sólo acepta POST. |
| 502 | delivery_failed o delivery_exception | El hub de Google Apps Script no confirmó la entrega. |
La API envía un correo real. Para probar usa primero tu propio correo. El token debe vivir en variables de entorno o en un gestor de secretos; nunca lo pongas en frontend público, HTML, repositorios o URLs.
INDEX Catálogo general de APIs
Índice rápido de las APIs documentadas en Routicket. Usa el buscador lateral por método, ruta, objeto o palabra clave.
POST/api/newsletter/send.phpEmail Hub: envía correo HTML mediante Apps Script.
GET/oauth/authorize.phpInicia autorización OAuth 2.0 + PKCE.
POST/oauth/token.phpIntercambia código de autorización por token.
GET/oauth/userinfo.phpObtiene el perfil del usuario autenticado.
GET/plugins/smart/timeline_data.phpFeed paginado de publicaciones.
POST/plugins/smart/timeline_submit.phpPublica contenido en Timeline.
GET/plugins/smart/weather.phpConsulta clima por coordenadas.
GET/api/get_products/index.phpConsulta productos.
GET/api/get_cupones/index.phpConsulta cupones.
GET/api/get_all_stores/index.phpConsulta tiendas.
GET/api/get_trip/index.phpConsulta viajes.
GET/api/get_saved/API legacy: elementos guardados del partner.
GET/api/get_notification/API legacy: notificaciones del partner.
GET/api/get_stores/API legacy: tiendas del partner.
GET/api/get_status/API legacy: estado del partner.
Las rutas legacy pueden requerir el valor api_public y parámetros de partner. Para proyectos nuevos usa OAuth cuando esté disponible.
Ejemplos por endpoint legacy de /api/
Estas rutas existen en la plataforma, pero conservan respuestas antiguas y algunas reciben user_id por URL. Son ejemplos de integración, no una recomendación para exponer datos privados sin autorización.
GET /api/get_saved/
GET https://routicket.com/api/get_saved/?user_id=31
Authorization: Bearer API_PUBLIC
[
{"id":123,"text":"Código guardado","fecha":"2026-10-17","hora":"12:00","link":"https://routicket.com/codigo.php?id=123","foto_post":"https://...","code":"QR-123"}
]
Devuelve hasta 20 códigos guardados del usuario indicado. Si no hay resultados puede responder {"error":"No results found"}.
GET /api/get_notification/
GET https://routicket.com/api/get_notification/
[
{"id":3,"title":"Noticia demo","url":"https://...","thumbnailUrl":"https://...","description":"Descripción","views":"120","type":"Noticias","city":"Playa del Carmen","fecha":"2026-10-17","hora":"12:00","usuario":"Routicket"}
]
Entrega un arreglo de noticias públicas. La respuesta es legacy y no usa necesariamente la envoltura ok/items.
GET /api/get_stores/
GET https://routicket.com/api/get_stores/
[
{"id":20,"name":"Tienda demo","city":"Playa del Carmen","image":"https://...","url":"https://..."}
]
Lista tiendas activas. La estructura exacta depende de las columnas disponibles en la instalación.
GET /api/get_status/
GET https://routicket.com/api/get_status/
GET https://routicket.com/api/get_status/?user_id=31
[
{"id":88,"user_id":31,"text":"Estado demo","created_at":"2026-10-17 12:00:00"}
]
Sin user_id lista estados recientes; con user_id filtra por usuario. Usa el filtro sólo con autorización.
Para código nuevo, prefiere OAuth, sesiones seguras y respuestas con identidad derivada del token. No confíes únicamente en user_id enviado por el cliente.
SMART Inventario completo del plugin
Esta matriz complementa los endpoints que consume la vista actual con rutas técnicas documentadas en plugins/smart/API.md. “Legacy” significa que existe en el plugin, pero debe revisarse antes de integrarlo en una aplicación nueva.
POST/plugins/smart/comment_submit.phpComentario sobre un status. Sesión o token heredado; usar CSRF.
GET/plugins/smart/profile_data.php?user_id=1419Perfil y publicaciones recientes. Legacy; no confiar sólo en user_id.
GET/plugins/smart/notifications_data.php?user_id=31Notificaciones legacy por usuario. Preferir notifications_feed.php.
GET/plugins/smart/wallet_data.phpBalance y movimientos. Requiere sesión segura; sensible.
POST/plugins/smart/push_subscribe.phpRegistra suscripción Web Push de la sesión.
GET/plugins/smart/push_inbox.phpConsulta la bandeja de notificaciones push.
POST/plugins/smart/push_dispatch.phpDespacha push. Administrativo; requiere protección reforzada.
POST/plugins/smart/validar-pago.phpValida una transferencia SPEI. Operación financiera sensible.
GET/plugins/smart/vahul_data.php?user_id=31&token=TOKENDatos legacy de notas/archivos. No exponer sin reforzar autenticación.
POST/plugins/smart/vahul_sync.phpSincronización legacy de notas/archivos.
Las rutas sensibles deben ejecutarse en servidor, con autorización explícita, logs y controles de idempotencia. No las pruebes con datos financieros reales desde el Explorer.
SMART APIs complementarias y servicios internos
Estas rutas también aparecen en el inventario técnico de Smart. Se documentan aquí con su origen y una respuesta orientativa para distinguirlas de las APIs principales.
Catálogo de viajes
GET /vhost/api/travel-catalog.php?limit=100
Accept: application/json
{"ok":true,"count":20,"tours":[{"id":"dana-123","title":"Isla Mujeres","description":"...","price":2100,"currency":"MXN","provider":"dana","detail_url":"https://..."}]}
API recomendada para otros proyectos. server_render=1 se usa para render inicial de Smart.
Productos públicos
GET /plugins/punto-de-venta/data/read_products_public.php
→ {"ok":true,"items":[{"id":456,"name":"Producto demo","price":199.9,"image":"https://..."}]}
Lugares y puntos
GET /plugins/points/dataFeedApp.php
→ {"ok":true,"items":[{"id":1,"name":"Lugar demo","lat":20.63,"lng":-87.07,"type":"place"}]}
Promociones fallback
GET /plugins/smart/promos_data.php
→ {"ok":true,"items":[{"id":10,"title":"Promo demo","discount":10,"expires_at":"2026-12-31"}]}
Wallet de mapa
GET /mapa/get_wallet_data_all.php
Authorization: Bearer ACCESS_TOKEN
→ {"ok":true,"balance":0,"movements":[]}
Usa sesión/token y nunca muestres movimientos de wallet sin autorización.
Notas API
GET /plugins/smart/notes_api.php
POST /plugins/smart/notes_api.php
{"title":"Mi nota","content":"Texto","color":"yellow"}
→ {"ok":true,"note":{"id":1,"title":"Mi nota","content":"Texto","color":"yellow"}}
Confirma en producción si la ruta está habilitada; la vista principal de notas todavía usa localStorage.
Feed de notificación legacy
GET /plugins/smart/notification_feed.php
→ {"ok":true,"items":[{"id":88,"type":"mention","read":false}]}
Renovación de suscripción
POST /plugins/smart/suscripcion-renew.php
{"subscription_id":123,"plan":"monthly"}
→ {"ok":true,"status":"renewed","subscription_id":123}
Es una operación con efecto de cobro o renovación: requiere autorización, idempotencia y no debe probarse con datos reales desde el Explorer.
Los formatos de estas rutas pueden variar entre instalaciones. Para una integración nueva usa el catálogo normalizado de viajes, OAuth y endpoints con contrato estable.
ACCOUNT Credenciales y mis aplicaciones
Gestiona tus credenciales desde los paneles oficiales de Routicket. Cada tipo sirve para un flujo diferente y no debe intercambiarse sin revisar el endpoint.
Credenciales API
Usa este panel para consultar las claves legacy y copiar el valor público.
PANEL/api/
api_public: clave pública para endpoints legacy y compatibilidades.api_secret: secreto privado; nunca lo pongas en frontend ni lo compartas.id_partner: identifica la cuenta partner.
Abrir mis credenciales API →Mis aplicaciones OAuth
Registra y administra aplicaciones externas, redirect URIs y credenciales OAuth.
PANEL/developers/
client_id: identificador público de la aplicación.client_secret: secreto del servidor; no debe llegar al navegador.redirect_uri: debe coincidir exactamente con el registrado.
Ver mis aplicaciones →Qué credencial usar
| Necesidad | Credencial | Ubicación |
|---|
| Newsletter Hub | api_public autorizado o token Bearer | /api/ |
| Aplicación externa con usuario | OAuth access token | /developers/ |
| Servidor Routicket interno | Token API en variable de entorno | Secret manager del servidor |
| API legacy de partner | api_public y, si corresponde, api_secret | Revisar endpoint específico |
Si una credencial deja de funcionar, verifica primero que copiaste el valor completo, que no agregaste espacios y que la cuenta tiene autorización para ese endpoint. No pegues api_secret o client_secret en el API Explorer.
Autenticación
Las integraciones nuevas deben usar OAuth 2.0 con PKCE. No expongas el client_secret en el navegador.
GET/oauth/authorize.php
POST/oauth/token.php
GET/oauth/userinfo.php
profileemailwalletAPI Hub
Base URL y encabezado para endpoints protegidos:
https://routicket.com/api
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
Abrir API Hub →
Objetos principales
User / Profile
Identidad, nombre, correo, foto y datos básicos.
GET/api/get_profile/
GET/oauth/userinfo.php
Store / Product
Negocios, tiendas, productos, precios e imágenes.
GET/api/get_stores/
GET/api/get_products/
Code / QR
Códigos, destinos, métricas y elementos guardados.
GET/api/get_code/
GET/api/get_code_metrics/
Timeline / Activity
Publicaciones, actividad y contenido social.
GET/api/get_timeline/
GET/api/get_activity/
Ejemplo: consultar perfil
curl -sS 'https://routicket.com/oauth/userinfo.php' -H "Authorization: Bearer $ACCESS_TOKEN"
Respuesta típica
{"ok":true,"user_id":31,"name":"Nombre del usuario","email":"usuario@correo.com"}
Newsletter Hub
El servidor configura internamente Google Apps Script y el remitente.
curl -sS -X POST 'https://routicket.com/api/newsletter/send.php' -H "Authorization: Bearer $RTK_TOKEN" -H 'Content-Type: application/json' --data '{"to":"destino@correo.com","subject":"Novedades Routicket","content":"<h2>Hola</h2><p>Mensaje desde el hub.</p>"}'
Ver API Newsletter →Buenas prácticas
Esta página es un resumen operativo. Algunas rutas antiguas pertenecen al inventario legacy y pueden requerir sesión o parámetros específicos.
- Usa HTTPS siempre.
- Guarda tokens en variables de entorno.
- Usa PKCE y valida
state. - No envíes credenciales de base de datos desde el cliente.
- Para operaciones de dinero, usa idempotencia y Payments.
OAUTH OAuth 2.0 + PKCE
Usa este flujo cuando una aplicación externa necesite actuar en nombre de un usuario. El navegador inicia autorización; el servidor de tu aplicación canjea el código.
1. PKCE → 2. Authorize → 3. Callback → 4. Token → 5. Userinfo
1. Generar PKCE
code_verifier = randomURLSafe(64)
code_challenge = base64url(sha256(code_verifier))
state = randomURLSafe(32)
2. Autorizar
GET https://routicket.com/oauth/authorize.php?client_id=CLIENT_ID&redirect_uri=https%3A%2F%2Ftu-app.com%2Fcallback&response_type=code&scope=profile%20email&code_challenge=CODE_CHALLENGE&code_challenge_method=S256&state=STATE
3. Canjear el código
curl -sS -X POST 'https://routicket.com/oauth/token.php' \
-d 'grant_type=authorization_code' \
-d 'client_id=CLIENT_ID' \
-d 'code=AUTHORIZATION_CODE' \
-d 'redirect_uri=https://tu-app.com/callback' \
-d 'code_verifier=CODE_VERIFIER'
4. Consultar el usuario
curl -sS 'https://routicket.com/oauth/userinfo.php' -H 'Authorization: Bearer ACCESS_TOKEN'
El state debe coincidir con el valor guardado en la sesión de tu aplicación. El código de autorización es de un solo uso y el client_secret nunca debe llegar al navegador.
Objetos OAuth
Respuesta de token
POST /oauth/token.php
grant_type=authorization_code&client_id=CLIENT_ID&code=AUTHORIZATION_CODE&redirect_uri=https://tu-app.com/callback&code_verifier=CODE_VERIFIER
{"access_token":"ACCESS_TOKEN","token_type":"Bearer","expires_in":3600,"scope":"profile email"}
Respuesta userinfo
GET /oauth/userinfo.php
Authorization: Bearer ACCESS_TOKEN
{"ok":true,"user_id":31,"name":"Nombre","email":"usuario@correo.com","scopes":["profile","email"]}
Error OAuth
HTTP 400
{"error":"invalid_grant","error_description":"Authorization code inválido, expirado o ya utilizado"}
SMART APIs usadas por Routicket Smart
Estas son las rutas que el frontend de plugins/smart consume actualmente. Las rutas de lectura pública pueden cambiar; las escrituras requieren sesión Routicket y protección CSRF cuando aplica.
TimelineFeed, publicación, menciones y repost.GET /plugins/smart/timeline_data.php?offset=0&limit=12POST /plugins/smart/timeline_submit.phpPOST /plugins/smart/timeline_repost.phpClima y mapaClima por coordenadas y puntos rápidos del mapa.GET /plugins/smart/weather.php?lat=20.63&lng=-87.07GET /plugins/smart/quick_map.phpGET /plugins/smart/map_data.phpGET /api/maps/all.phpContenidoProductos, cupones, tiendas, viajes y catálogo editorial.GET /api/get_products/index.phpGET /api/get_cupones/index.phpGET /api/get_all_stores/index.phpGET /api/get_trip/index.phpGET /plugins/smart/revista_feed.phpCuenta y actividadMenciones, usuarios, notificaciones y actividad del usuario.GET /api/get_users.phpGET /plugins/smart/mentions_data.php?limit=30GET /plugins/smart/notifications_feed.phpGET /plugins/smart/movies_activity_feed.phpGET /plugins/smart/jade_list_feed.phpGET /plugins/smart/registrations_feed.phpViaje y carritoGuarda borradores e intereses relacionados con viajes.POST /plugins/smart/trip_draft.phpGET /plugins/smart/trip_draft.php?token=TOKENPOST /plugins/smart/order_interest.phpGET /plugins/smart/order_interests.phpNotasLa vista actual guarda notas localmente en el navegador.GET /plugins/smart/notes.phpEl editor de notas usa localStorage; no es un API remoto de sincronización. Ejemplo de lectura
const response = await fetch('/plugins/smart/timeline_data.php?offset=0&limit=12', {
credentials: 'include',
headers: { Accept: 'application/json' },
cache: 'no-store'
});
const data = await response.json();
Ejemplo de publicación
fetch('/plugins/smart/timeline_submit.php', {
method: 'POST', credentials: 'include',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({texto: 'Mi publicación'})
});
No envíes user_id para suplantar al usuario. El servidor debe tomar la identidad de la sesión autenticada. Las páginas suscripciones.php, pack.php y sugerencias.php son vistas HTML, no contratos JSON de API.
SMART Referencia detallada de endpoints
Consulta cada API por separado. Las rutas marcadas como sesión usan las credenciales de la sesión Routicket; no sustituyas esa identidad enviando un user_id desde el navegador.
Timeline y publicaciones
GET/plugins/smart/timeline_data.php?offset=0&limit=12Obtiene publicaciones paginadas para el feed.Sesión
POST/plugins/smart/timeline_submit.phpCrea una publicación en el timeline.Sesión + CSRF
POST/plugins/smart/timeline_repost.phpRepublica una publicación existente.Sesión + CSRF
GET/plugins/smart/mentions_data.php?limit=30Lista menciones del usuario.Sesión
Objeto Timeline
Representa una publicación o evento visible en el feed. La lectura devuelve una colección paginada; en las escrituras el servidor asigna usuario, fecha e identificador.
| Campo | Tipo | Uso |
|---|
id | string|int | Identificador de la publicación. |
user | object | Autor y datos públicos del perfil. |
texto | string | Contenido de la publicación. |
created_at | datetime | Fecha de creación. |
media | array|null | Imágenes o archivos asociados. |
likes, comments, reposts | int | Contadores de interacción. |
GET /plugins/smart/timeline_data.php?offset=0&limit=12 — respuesta: {"ok":true,"items":[{"id":123,"texto":"Mi publicación","created_at":"2026-10-17T12:00:00Z"}],"next_offset":12}
Publicar: envía {"texto":"Mi publicación"} a timeline_submit.php. Para repostar usa {"post_id":123} en timeline_repost.php.
Clima y mapas
GET/plugins/smart/weather.php?lat=20.63&lng=-87.07Consulta clima por coordenadas.Pública
GET/plugins/smart/quick_map.phpDevuelve puntos rápidos para el mapa Smart.Según ruta
GET/plugins/smart/map_data.phpObtiene datos geográficos usados por la vista de mapa.Según ruta
GET/api/maps/all.phpLista el inventario general de ubicaciones.Según ruta
Catálogo, viajes y contenido
GET/api/get_products/index.phpConsulta productos del catálogo.Pública
GET/api/get_cupones/index.phpConsulta cupones disponibles.Pública
GET/api/get_all_stores/index.phpLista tiendas y comercios.Pública
GET/api/get_trip/index.phpObtiene información de viajes.Según ruta
GET/plugins/smart/revista_feed.phpEntrega contenido editorial para Smart.Pública
Cuenta y actividad
GET/api/get_users.phpConsulta usuarios para componentes de Smart.Sesión
GET/plugins/smart/notifications_feed.phpObtiene notificaciones del usuario.Sesión
GET/plugins/smart/movies_activity_feed.phpObtiene actividad relacionada con películas.Sesión
GET/plugins/smart/jade_list_feed.phpObtiene elementos del listado Jade.Según ruta
GET/plugins/smart/registrations_feed.phpObtiene registros o actividad de inscripciones.Sesión
Viajes, carrito y notas
POST/plugins/smart/trip_draft.phpGuarda un borrador de viaje.Sesión + CSRF
GET/plugins/smart/trip_draft.php?token=TOKENRecupera un borrador de viaje.Token de borrador
POST/plugins/smart/order_interest.phpRegistra interés en una orden o producto.Sesión + CSRF
GET/plugins/smart/order_interests.phpConsulta intereses registrados.Sesión
GET/plugins/smart/notes.phpSirve la vista de notas; el editor actual guarda en localStorage.Vista HTML
Ejemplos de objetos enviados y respuestas
Abre cada ejemplo para revisar el cuerpo que puede enviar tu integración y la forma esperada de la respuesta. Los nombres pueden variar en rutas legacy; valida siempre ok y maneja errores.
Timeline: publicar
Request
POST /plugins/smart/timeline_submit.php
Content-Type: application/json
{"texto":"Mi publicación","media":[]}
Response
{"ok":true,"item":{"id":123,"texto":"Mi publicación","created_at":"2026-10-17T12:00:00Z"}}
Timeline: listar feed
Request
GET /plugins/smart/timeline_data.php?offset=0&limit=12
Response
{"ok":true,"items":[{"id":123,"user":{"id":31,"name":"Usuario"},"texto":"Mi publicación","created_at":"2026-10-17T12:00:00Z","likes":2,"comments":0,"reposts":1}],"next_offset":12}
Clima
Request
GET /plugins/smart/weather.php?lat=20.63&lng=-87.07
Response
{"success":true,"data":{"current":{"temperature_2m":28,"relative_humidity_2m":70,"weather_code":0}}}
Producto
Request
GET /api/get_products/index.php?limit=20
Response
{"ok":true,"items":[{"id":456,"name":"Producto demo","price":199.9,"image":"https://..."}],"total":1}
Viaje: guardar borrador
Request
POST /plugins/smart/trip_draft.php
Content-Type: application/json
{"destination":"Playa del Carmen","start_date":"2026-11-01","end_date":"2026-11-05","travelers":2}
Response
{"ok":true,"token":"TRIP_TOKEN","draft":{"destination":"Playa del Carmen","travelers":2}}
Interés de orden
Request
POST /plugins/smart/order_interest.php
Content-Type: application/json
{"name":"Cliente","email":"cliente@ejemplo.com","phone":"9840000000","delivery":"pickup","location":"Hotel ...","notes":"Horario preferido","consent":true,"items":[{"name":"Tour Isla Mujeres","quantity":1,"price":2100,"url":"https://..."}]}
Response
{"ok":true,"interest_id":789,"message":"Interés registrado"}
Notificación
Request
GET /plugins/smart/notifications_feed.php
Response
{"ok":true,"items":[{"id":88,"type":"mention","read":false,"created_at":"2026-10-17T12:00:00Z"}]}
Objetos por URL
Repost
POST /plugins/smart/timeline_repost.php
{"post_id":123}
→ {"ok":true,"item":{"id":124,"reposted_from":123}}
Quick map
GET /plugins/smart/quick_map.php
→ {"ok":true,"items":[{"id":1,"name":"Playa","lat":20.63,"lng":-87.07,"type":"place"}]}
Map data
GET /plugins/smart/map_data.php
→ {"ok":true,"markers":[{"id":1,"lat":20.63,"lng":-87.07,"title":"Playa"}]}
All maps
GET /api/maps/all.php
→ {"ok":true,"items":[{"id":1,"name":"Playa del Carmen","country":"MX"}]}
Cupones
GET /api/get_cupones/index.php
→ {"ok":true,"items":[{"id":10,"code":"BIENVENIDA","discount":10,"expires_at":"2026-12-31"}]}
Tiendas
GET /api/get_all_stores/index.php
→ {"ok":true,"items":[{"id":20,"name":"Tienda demo","lat":20.63,"lng":-87.07}]}
Viajes: consulta
GET /api/get_trip/index.php?token=TRIP_TOKEN
→ {"ok":true,"trip":{"destination":"Playa del Carmen","start_date":"2026-11-01","end_date":"2026-11-05","travelers":2}}
Revista
GET /plugins/smart/revista_feed.php
→ {"ok":true,"items":[{"id":50,"title":"Guía de viaje","excerpt":"Contenido editorial","url":"/revista/guia"}]}
Usuarios
GET /api/get_users.php
→ {"ok":true,"items":[{"id":31,"name":"Usuario","avatar":"https://..."}]}
Menciones
GET /plugins/smart/mentions_data.php?limit=30
→ {"ok":true,"items":[{"id":70,"post_id":123,"user_id":31,"read":false}]}
Películas
GET /plugins/smart/movies_activity_feed.php
→ {"ok":true,"items":[{"id":80,"title":"Película demo","status":"watched","created_at":"2026-10-17T12:00:00Z"}]}
Jade
GET /plugins/smart/jade_list_feed.php
→ {"ok":true,"items":[{"id":90,"name":"Elemento Jade","status":"active"}]}
Registros
GET /plugins/smart/registrations_feed.php
→ {"ok":true,"items":[{"id":100,"event":"Registro demo","status":"confirmed","created_at":"2026-10-17T12:00:00Z"}]}
Consultar borrador
GET /plugins/smart/trip_draft.php?token=TRIP_TOKEN
→ {"ok":true,"draft":{"destination":"Playa del Carmen","travelers":2}}
Historial de intereses
GET /plugins/smart/order_interests.php
→ {"ok":true,"items":[{"id":789,"product_id":456,"status":"open","created_at":"2026-10-17T12:00:00Z"}]}
Notas
GET /plugins/smart/notes.php
→ HTML de la vista de notas; el contenido editable se guarda en localStorage y no se sincroniza por JSON.
APIs relacionadas del plugin Smart
Estas rutas aparecen en la documentación técnica del plugin, pero no todas son llamadas por la vista Smart actual. Se muestran separadas para evitar confundir APIs activas con APIs legacy o administrativas.
Comentarios
POST /plugins/smart/comment_submit.php
{"status_id":123,"texto":"Buen lugar"}
→ {"ok":true,"comment":{"id":501,"status_id":123,"texto":"Buen lugar"}}
Usa sesión del mismo origen; no envíes un usuario arbitrario.
Perfil legacy
GET /plugins/smart/profile_data.php?user_id=1419
→ {"ok":true,"user":{"id":1419,"name":"Usuario","avatar":"https://..."},"posts":[]}
Es legacy y recibe el usuario por URL. No debe usarse para exponer datos personales sin autorización.
Notificaciones legacy
GET /plugins/smart/notifications_data.php?user_id=31
→ {"ok":true,"items":[{"id":88,"read":false,"type":"mention"}]}
Para Smart se recomienda notifications_feed.php, que toma la identidad de la sesión.
Wallet
GET /plugins/smart/wallet_data.php
→ {"ok":true,"balance":0,"movements":[]}
Usa sesión segura; no coloques tokens heredados en la URL.
Push
POST /plugins/smart/push_subscribe.php
{"endpoint":"https://push.example/subscription","keys":{"p256dh":"...","auth":"..."}}
→ {"ok":true,"subscribed":true}
push_inbox.php consulta la bandeja; push_dispatch.php es administrativo y requiere protección reforzada.
Validación de pago
POST /plugins/smart/validar-pago.php
{"txn_id":"TX-123","reference":"REF-123","amount":2100,"currency":"MXN","method":"spei"}
→ {"ok":true,"status":"verified"}
Es una operación sensible con efectos financieros: requiere autorización, idempotencia y revisión antes de integrarse.
Notas y sincronización legacy
GET /plugins/smart/vahul_data.php?user_id=31&token=TOKEN
GET /plugins/smart/vahul_sync.php
No se recomienda exponer estas rutas a terceros sin reforzar autenticación y validación de rutas.
Reglas comunes de los objetos
Respuesta exitosa
{"ok":true,"items":[...],"total":42,"next_offset":12}
items se usa para colecciones; item, trip o draft para un recurso individual. Las APIs pueden omitir campos cuyo valor sea null.
Error de validación
HTTP 422
{"ok":false,"error":"validation_error","message":"El campo texto es obligatorio","fields":{"texto":"required"}}
Sesión y permisos
Authorization: Bearer ACCESS_TOKEN
Accept: application/json
Content-Type: application/json
X-CSRF-Token: CSRF_TOKEN
Usa OAuth para integraciones externas. Las operaciones POST de sesión pueden exigir CSRF. Nunca envíes client_secret ni credenciales de base de datos al navegador.
Paginación
GET /plugins/smart/timeline_data.php?offset=0&limit=12
→ {"ok":true,"items":[...],"next_offset":12}
Conserva next_offset y úsalo como nuevo offset. Respeta el límite entregado por el servidor.
Tipos y fechas
id: string | integer
price: number
items: array
created_at: ISO-8601 datetime
media: array | null
Trata identificadores como valores opacos, convierte precios como números y muestra fechas en la zona horaria de tu interfaz.
Las rutas de Smart pueden tener validaciones adicionales según el estado de sesión. Para integraciones externas usa OAuth y los endpoints públicos documentados; no dependas directamente de vistas HTML.