Documentación · Documentación técnica
Endpoints de la REST API
Este documento describe las rutas de la REST API registradas por el
plugin ADP Car Market Hub bajo el espacio de nombres as24ci/v1, incluyendo
sus métodos, parámetros, modelo de autenticación y uso previsto.
Cuándo usar este documento
Lea este documento si necesita:
- Construir una integración personalizada que consuma datos de vehículos desde el plugin a través de HTTP.
- Activar importaciones desde un programador externo en lugar de WP-Cron.
- Entender qué endpoints son públicos, cuáles están protegidos por un conmutador controlado por el administrador y cuáles requieren un token.
- Diagnosticar respuestas 403 / 404 inesperadas de las rutas REST del plugin.
Para la interfaz AJAX (admin-ajax.php), consulte Acciones AJAX. Para llamadas HTTP salientes a sistemas externos, consulte Webhooks.
Descripción general
Todas las rutas registradas por el plugin utilizan la REST API de WordPress y
comparten el espacio de nombres as24ci/v1. Los endpoints se dividen en cuatro grupos:
- Datos públicos de vehículos — endpoints de lectura de listados y detalles. Desactivados por defecto; deben ser activados por un administrador.
- Ayudante de favoritos — utilizado por la página de favoritos del frontend para obtener datos de vehículos para los ID que el visitante ha almacenado localmente.
- Píxel de seguimiento de Analytics — acepta notificaciones de eventos ligeras desde el script del frontend.
- Activador de importación por Cron — endpoint protegido por token que ejecuta la rutina de importación compartida bajo demanda.
- Señal de actualización de licencia — endpoint solo de señal que la plataforma de la API de ADP Car Market Hub llama para que el plugin vuelva a obtener su estado autorizado de licencia / derechos de características.
La URL base completa de cualquier endpoint es la raíz REST de WordPress seguida
de la ruta. En un sitio típico, esto es
https://example.com/wp-json/as24ci/v1/....
Requisitos o requisitos previos
- WordPress con la REST API habilitada (el valor por defecto de WordPress).
- Enlaces permanentes bonitos para URLs REST de tipo ruta. Con enlaces permanentes simples,
los endpoints siguen siendo accesibles a través de
?rest_route=. - Para los endpoints públicos de vehículos: la opción
as24ci_rest_api_enableddebe estar establecida en1. Hasta entonces, las rutas no se registran y cualquier solicitud devuelve un404de WordPress. - Para el endpoint de importación por cron: se debe generar un token de cron en la pestaña de administración Import & Limits.
Referencia de endpoints
GET /as24ci/v1/vehicles
Devuelve una lista paginada y filtrable de vehículos importados cuyo estado de
entrada del CPT es publish.
- Autenticación: ninguna (público). La ruta solo se registra cuando
as24ci_rest_api_enabledes igual a1. - Parámetros de consulta:
page— entero ≥ 1. Por defecto1.per_page— entero entre 1 y 100. Por defecto10.make,model— coincidencia exacta con las claves meta correspondientes.fuel_type— coincidenciaLIKEcon la clave meta del tipo de combustible mapeado.year_min,year_max— rango numérico contra_as24ci_year.price_min,price_max— rango numérico contra_as24ci_price.orderby— uno dedate,price,mileage,title. Por defectodate.order—ascodesc(insensible a mayúsculas/minúsculas). Por defectodesc.- Estructura de la respuesta:
``
json { "vehicles": [ { "id": 123, "title": "...", "url": "...", "image": "...", "make": "...", "model": "...", "year": 0, "price": 0, "currency": "EUR", "mileage": 0, "condition": "...", "fuel_type": "...", "transmission": "...", "body_type": "...", "color": "...", "doors": 0, "horse_power": 0, "vin": "...", "listing_id": "..." } ], "total": 0, "pages": 0, "page": 1, "per_page": 10 }`` - Notas: El campo
imagees el tamaño mediano-grande de WordPress de la imagen destacada (cadena vacía cuando no existe miniatura). El campocurrencyrecurre al valor de la opciónas24ci_default_currencycuando no hay ninguna moneda almacenada por vehículo.
GET /as24ci/v1/vehicles/<id>
Devuelve los detalles completos de un solo vehículo.
- Autenticación: ninguna (público). Mismo control de acceso que el endpoint de la lista.
- Parámetro de ruta:
id— entero positivo. Validado y convertido aabsint. - Respuesta: Todos los campos de la respuesta de la lista más:
description— utiliza el extracto de WordPress cuando está presente, de lo contrario el contenido recortado de la entrada (≈55 palabras).images— array de URLs de archivos adjuntos en el tamañolarge, combinando imágenes de la galería manual (_as24ci_manual_image_ids) e imágenes importadas (_as24ci_image_ids); recurre a la imagen destacada cuando ambos están vacíos.equipment_standard,equipment_optional— arrays de cadenas.seller— nombre visible del concesionario.- Errores:
404(as24ci_vehicle_not_found) cuando la entrada no existe, no es el CPTas24ci_caro no está publicada.
POST /as24ci/v1/favorites
Utilizado por la página de favoritos del frontend para obtener datos de resumen de vehículos para los ID que el visitante ha almacenado en el almacenamiento local del navegador.
- Autenticación: ninguna (público). Siempre registrado.
- Cuerpo: Objeto JSON con
ids, un array de ID de entradas. Validado para ser un array; saneado a una lista única de enteros positivos. Se procesan hasta 50 ID por llamada. - Respuesta:
{ "vehicles": [ ... ] }. - Notas: El endpoint lee solo vehículos publicados. Las entradas a las que el visitante ya no tiene acceso (eliminadas, borrador, tipo de entrada incorrecto) se omiten silenciosamente.
POST /as24ci/v1/analytics/track
Recibe eventos de visualización, visualización de archivo, visualización de comparación, visualización de favoritos, búsqueda de filtros, apertura de contacto y envío de leads desde el píxel de seguimiento de analytics.
- Autenticación: ninguna (público). Siempre registrado.
- Parámetros del cuerpo:
post_id— entero ≥ 0. Por defecto0.event_type— debe ser uno de los nombres de eventos permitidos:view,view_archive,view_compare,view_favorites,filter_search,contact_open,lead_sent.extra_data— cadena opcional saneada. Parafilter_search, la cadena debe ser un objeto JSON que contenga los pares clave/valor del filtro activo; el servidor aplica la misma lógica de minimización utilizada por el seguimiento directo de PHP antes de almacenar.- Respuesta:
{ "tracked": true }en caso de éxito,{ "tracked": false }con HTTP400cuando el evento requiere una entrada de vehículo que no existe o no está publicada. - Notas: Este endpoint es intencionadamente permisivo para que los visitantes anónimos puedan enviar eventos de analytics. No confíe en él para datos comerciales autoritativos; consulte Analytics Tracking para notas sobre retención y privacidad.
GET /as24ci/v1/cron-import
Endpoint protegido por token que ejecuta la rutina de importación compartida. Delega
en el mismo método Scheduler::run_import() utilizado por el
hook de WP-Cron y el botón de administración Trigger now.
- Autenticación: token portador (bearer token). Proporcione el token a través de la
cabecera HTTP
Authorization: Bearer <token>(preferido — mantiene el token fuera de los registros de acceso) o el parámetro de consulta?token=<token>. - Almacenamiento del token: persistido en la opción
as24ci_cron_token. Genérelo o rótelo desde Import & Limits en la administración del plugin. - Respuestas:
403cuando no hay ningún token configurado o el token proporcionado no coincide.200con{ "success": true, "message": "...", "counts": { ... } }en una ejecución exitosa.429consuccess: falsecuando ya hay otra importación en curso y el ejecutor rechazó iniciar una segunda.500cuando el ejecutor lanzó una excepción.- Efecto secundario: una autenticación exitosa actualiza la
opción
as24ci_last_external_cron_run, que la pestaña System & Help utiliza para confirmar que el cron externo está llegando al sitio.
POST /as24ci/v1/license-refresh-signal
Endpoint solo de señal que la plataforma de la API de ADP Car Market Hub llama
después de un cambio de licencia o de derechos de características para que el plugin vuelva a obtener su
estado autorizado de inmediato. Propiedad de
AS24CI\License_Refresh_Signal y registrado incondicionalmente
(como /cron-import), independientemente de as24ci_rest_api_enabled.
- Autenticación: gestionada dentro de la función de devolución de llamada (callback) utilizando un modelo de confianza
solo de señal. No se confía en nada del cuerpo de la solicitud como datos; la
solicitud solo activa
License_Manager::refresh(). El controlador aplica, en orden:POST+ tipo de contenido JSON; unproduct_keycoincidente (contraLicense_Client::PRODUCT_KEY); uninstallation_uidcoincidente cuando ambas partes tienen uno; una licencia local configurada; un secreto de señal de actualización aprovisionado por instalación; una cabecera de marca de tiempo reciente y un nonce no utilizado (protección contra reproducción, ventana de 5 minutos); y una firma HMAC-SHA256 sobre la marca de tiempo + el cuerpo sin procesar. - Límite de frecuencia: las señales repetidas dentro de una ventana de 30 segundos son
aceptadas pero no actualizadas, y se responden con
429para que una ráfaga nunca sature la plataforma de la API. - Respuestas:
200en una actualización activada;4xx/503para los fallos de validación anteriores (403discrepancia de producto/instalación,409sin licencia / nonce reproducido,401marca de tiempo/firma incorrecta,503cuando no hay ningún secreto de señal aprovisionado).
Notas operativas
- Los endpoints públicos de vehículos ejecutan llamadas estándar de
WP_Queryy respetan el almacenamiento en caché de objetos normal de WordPress. Las solicitudes idénticas repetidas se benefician de las cachés de entradas y meta de entradas. - Los filtros numéricos (
year_min/year_max,price_min/price_max) se añaden a unameta_query. En catálogos grandes, asegúrese de que las claves meta subyacentes estén indexadas a nivel de base de datos si espera un tráfico pesado. Verifique la estrategia de indexación exacta en la versión actual del plugin antes de publicar. - El endpoint de la lista aplica
update_postmeta_cache()para las entradas devueltas para mantener los tiempos de respuesta predecibles. - El endpoint de favoritos limita estrictamente cada solicitud a 50 ID para evitar abusos y mantener los datos de respuesta en un tamaño razonable.
- El endpoint de importación por cron establece
nocache_headers()para que los proxies de caché no interfieran con las ejecuciones programadas. - La comparación de tokens utiliza
hash_equals()para mitigar los ataques de tiempo. Aun así, prefiera la cabeceraAuthorization: Bearerpara evitar la filtración del token a través de cabeceras de referencia, el historial del navegador o los registros de acceso del servidor web.
Referencia de configuración
| Clave de opción | Propósito |
|---|---|
as24ci_rest_api_enabled | Cuando es '1', registra /vehicles y /vehicles/<id>. Por defecto '0'. |
as24ci_default_currency | Código de moneda devuelto por los endpoints públicos cuando no hay ninguna moneda almacenada por vehículo. |
as24ci_cron_token | Token portador esperado por /cron-import. Si está vacío, se desactiva el endpoint. |
as24ci_last_external_cron_run | Marca de tiempo de la última llamada exitosa de cron externo. Actualizada automáticamente. |
Para obtener la lista completa de opciones del plugin, consulte Options And Settings Storage.
Resolución de problemas
/vehiclesdevuelve404— la API pública está desactivada. Establezcaas24ci_rest_api_enableden'1'en Import & Limits (o a través de WP-CLI /update_option)./cron-importdevuelve403— o bien no se ha configurado ningún token todavía, o el valor proporcionado no coincide. Genere un nuevo token desde la administración y vuelva a intentarlo./cron-importdevuelve429— ya se está ejecutando otra importación y un bloqueo impide una segunda ejecución concurrente. Espere a que termine la ejecución actual; consulte Cron Events And Scheduler para ver el TTL del bloqueo.- Array
vehiclesvacío en el endpoint de la lista sin filtros — no hay vehículos publicados, o el catálogo aún no se ha importado. Compruebe Import & Limits y los registros de importación. - HTTP
400inesperado en/analytics/track— el evento requiere una entrada de vehículo publicada, peropost_idhace referencia a un borrador, una entrada eliminada o que no es de vehículo.