Saltar al contenido principal

CORS y validación de origen

Neuroon valida el Origin de cada request de forma distinta según el endpoint y el tipo de credencial. Esta página es la fuente única de verdad: si una página de docs dice algo distinto, gana esta tabla.

Matriz canónica (Plugin API)

EndpointAuthAcepta Origin ausente (server-to-server)Origin debe coincidir conCómo añadir un dominio
POST /api/plugin/shops/{shopId}/products/syncX-Shop-API-Key✅ Sín/a — sólo se valida que la API Key pertenezca al shop.n/a
GET /api/plugin/shops/{shopId}/productsX-Shop-API-Key✅ Sín/an/a
POST /api/plugin/shops/{shopId}/track/conversionX-Shop-API-Key✅ Sín/an/a
POST /api/plugin/shops/{shopId}/verifyX-Shop-API-Key✅ SíEl domain del body se compara con shop.url.Editar shop.url en el dashboard.
GET /api/plugin/shops/{shopId}/verification-dataX-Shop-API-Key✅ Sín/an/a

Cuando llega Origin, el backend lo compara contra la lista de dominios "trusted" (neuroon.ai y subdominios, localhost, 127.0.0.1) o contra el shop.url registrado en el dashboard. Si no llega Origin (curl, server-to-server), se permite. Esto hace los endpoints compatibles tanto con navegador como con curl.

El widget embebido en el navegador habla con un backend interno usando el Widget Token. Tú no llamas a esos endpoints — el bundle del CDN los consume directamente.

Lista de orígenes "trusted"

Por defecto:

  • localhost y 127.0.0.1 (suffix-match: cualquier subdominio o puerto vale).
  • neuroon.ai (suffix-match: incluye *.neuroon.ai).
  • El shop.url registrado en el dashboard.

Añadir un dominio nuevo

  1. Si es tu dominio principal: edítalo desde el dashboard → tu tienda → Settings → Storefront URL. El cambio aplica al siguiente request servido.
  2. Si necesitas dominios extra (staging, ramas, dominios de marketing que comparten widget): abre un ticket en soporte indicando shopId y los dominios.

Errores típicos

SíntomaCausaSolución
Browser bloquea XHR con CORS error y consola muestra 403El widget está corriendo en un dominio que no está en orígenes "trusted" ni coincide con shop.url.Verifica shop.url o pide que añadan el dominio.
403 DOMAIN_MISMATCH al llamar /verifyEl domain del body no coincide con shop.url.Edita shop.url en el dashboard y reintenta. (Body field: {"domain": "..."}, no url.)
401 al servir el widget desde el navegadorToken expirado, no presente en el HTML, o mezcla de entorno (token DEV vs api.neuroon.ai).Vuelve a firmar el token (HMAC) en tu servidor y comprueba la URL base.

Próximas lecturas