API Key
La API Key autentica las llamadas server-to-server contra la External Integrations API (/api/integrations/v1/*). Sirve para gestionar la tienda, sincronizar el catálogo, registrar conversiones, verificar el dominio y consultar analytics.
Cabecera
Authorization: Bearer <api-key>
Características
- Permanente hasta rotación: no caduca por tiempo.
- Vinculada a una tienda: el backend resuelve el
shopIdautomáticamente a partir de la key. No necesitas incluirlo en la URL. - Server-to-server: debe enviarse desde tu backend. No funciona desde navegadores.
Obtención
Desde el Dashboard de Neuroon:
- Ve a la configuración de tu tienda.
- Copia la API Key que aparece en la sección de integración.
- Guárdala en tu secret manager.
Rotación
Para rotar la API Key:
- Ve al Dashboard → shop settings.
- Genera una nueva key — la anterior queda invalidada al instante.
- Actualiza tus variables de entorno y despliega.
Almacenamiento
Sitios donde sí debes guardarla:
- .NET: User Secrets en desarrollo, Azure Key Vault o
appsettings.{Environment}.jsonmontado como secret en producción. Nunca enweb.configplano ni hardcodeada. - WordPress: define en
wp-config.php(que está fuera del docroot) o enwp_optionscifrado. - Generales: AWS Secrets Manager, Azure Key Vault, HashiCorp Vault, GitHub Actions Secrets, Doppler, etc.
Sitios donde nunca debes guardarla:
- Repositorios Git (público o privado).
- Logs, traces exportadas, mensajes de error visibles al usuario.
- Atributos del HTML (
data-api-key="..."). - Variables JavaScript del navegador.
Ejemplos por stack
cURL
curl -X POST "https://api.neuroon.ai/api/integrations/v1/products/sync" \
-H "Authorization: Bearer $NEUROON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"syncType": "INCREMENTAL",
"products": [{
"externalId": "demo-001",
"name": "Camiseta Premium",
"price": 29.99,
"currency": "EUR",
"url": "https://mitienda.com/p/demo-001"
}]
}'
Node.js / TypeScript
const res = await fetch(
`${process.env.NEUROON_API_URL}/api/integrations/v1/products/sync`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.NEUROON_API_KEY!}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
},
);
.NET / C#
var apiKey = builder.Configuration["Neuroon:ApiKey"]
?? throw new InvalidOperationException("Missing Neuroon:ApiKey");
var apiBase = builder.Configuration["Neuroon:ApiBaseUrl"]
?? "https://api.neuroon.ai";
using var client = new HttpClient { BaseAddress = new Uri(apiBase) };
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", apiKey);
var response = await client.PostAsJsonAsync(
"/api/integrations/v1/products/sync", payload);
response.EnsureSuccessStatusCode();
Python
import os, requests
response = requests.post(
f"{os.environ['NEUROON_API_URL']}/api/integrations/v1/products/sync",
headers={
"Authorization": f"Bearer {os.environ['NEUROON_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=30,
)
response.raise_for_status()
Errores
| Código | Mensaje típico | Causa |
|---|---|---|
401 | authenticationRequired | Falta Authorization: Bearer <key> o el formato no es válido |
404 | shopNotFound | Shop no encontrada para esta API key |
402 | quotaExceeded | Límite de productos o búsquedas excedido — upgrade your plan |
422 | unprocessableEntity | searchLogId no encontrado o expirado (conversiones) |
429 | rate_limit_exceeded | Rate limit excedido |
Próximas lecturas
- Widget Token — autenticación frontend.
- Rate Limits — cuotas y backoff.
- Errores — estructura completa.