Routicket DocumentationAPIs, objetos y ejemplos de integración
● Producción
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

CampoTipoRequeridoDescripción
tostringsíCorreo destinatario.
subjectstringsíAsunto, máximo 180 caracteres.
contentHTMLsí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.

API Explorer

Prueba endpoints desde esta página. El token sólo vive en tu navegador mientras haces la solicitud; no se guarda en Routicket ni en localStorage.

Email Hub ejecuta el envío real. Usa primero un correo de prueba y confirma el destinatario antes de pulsar “Enviar solicitud”.
Resultado
Aún no se ha ejecutado ninguna solicitud.

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

CampoTipoRequeridoRegla
tostringsíCorreo válido del destinatario.
subjectstringsíAsunto de hasta 180 caracteres.
contentstring HTMLsí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

HTTPErrorQué revisar
400invalid_json, invalid_to, invalid_subject o invalid_contentJSON, correo, asunto y contenido.
401unauthorizedToken ausente, incompleto o inválido.
403forbiddenLa credencial es válida, pero no pertenece al administrador autorizado.
405method_not_allowedLa ruta sólo acepta POST.
502delivery_failed o delivery_exceptionEl 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.

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.

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.

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.

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

NecesidadCredencialUbicación
Newsletter Hubapi_public autorizado o token Bearer/api/
Aplicación externa con usuarioOAuth access token/developers/
Servidor Routicket internoToken API en variable de entornoSecret manager del servidor
API legacy de partnerapi_public y, si corresponde, api_secretRevisar 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
profileemailwallet

API 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 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"}

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.php
Clima 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.php
ContenidoProductos, 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.php
Cuenta 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.php
Viaje 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.php
NotasLa 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.

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.

CampoTipoUso
idstring|intIdentificador de la publicación.
userobjectAutor y datos públicos del perfil.
textostringContenido de la publicación.
created_atdatetimeFecha de creación.
mediaarray|nullImágenes o archivos asociados.
likes, comments, repostsintContadores 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.