Configura las claves API, comprueba la conexión y aprende a gestionar los errores y los límites de solicitudes.
https://alterproduct.com/public-api/v1
Crea las credenciales API en el panel de ajustes de comercio electrónico. Access Token se muestra una sola vez, así que guárdalo inmediatamente en el almacén de secretos de tu backend.
Guarda Access Key y Access Token en tu servidor. Los endpoints autenticados rechazan llamadas desde el navegador que incluyan cabeceras Origin o Referer.
Las credenciales pueden tener ámbitos limitados. Usa GET /auth/check para verificar la tienda activa, las funciones del plan y los ámbitos devueltos para la credencial.
x-alter-access-key: YOUR_API_KEY
x-alter-access-token: YOUR_API_TOKEN
| Parámetro | Obligatorio | Detalles |
|---|
x-alter-access-key | sí | Identificador público de la credencial. |
x-alter-access-token | sí | Token secreto asociado a la clave de acceso. |
x-alter-client-fingerprint | no | Identificador estable opcional para limitar las solicitudes de sesiones de integración. |
Authorization | solo en ejecución | Token Bearer devuelto por POST /embed/session y utilizado por /runtime/bootstrap. |
Usa el endpoint de comprobación de autenticación antes de activar la sincronización o las funciones de integración en producción.
GET https://alterproduct.com/public-api/v1/auth/check
Ejemplo de solicitud (fetch)
const response = await fetch('https://alterproduct.com/public-api/v1/auth/check', {
method: 'GET',
headers: {
'x-alter-access-key': process.env.ALTER_ACCESS_KEY,
'x-alter-access-token': process.env.ALTER_ACCESS_TOKEN
}
});
const payload = await response.json();
if (!response.ok) {
throw new Error(payload?.code || payload?.error || `Alter API ${response.status}`);
}
console.log(payload);
Ejemplo de respuesta
{
"ok": true,
"message": "success",
"storefrontId": 12,
"userOwnerId": 34,
"credentialId": 56,
"scopes": ["orders:read", "orders:write", "products:read"],
"plan": {
"requiredPlan": "Business",
"currentPlanName": "Business",
"eligible": true,
"runtimeFlags": {
"viewer": true,
"configurator": true,
"customizer": true
},
"limits": {
"activeRuntimeBindingsLimit": 100,
"monthlyReassignmentLimit": 1000,
"monthlyEmbedTokenLimit": 50000
}
}
}
Los demás ejemplos utilizan la función auxiliar siguiente. Usa fetch estándar y puede ejecutarse en Node.js 18+ o en cualquier entorno de servidor que proporcione fetch.
const ALTER_API_BASE = 'https://alterproduct.com/public-api/v1';
const authHeaders = {
'x-alter-access-key': process.env.ALTER_ACCESS_KEY,
'x-alter-access-token': process.env.ALTER_ACCESS_TOKEN
};
async function alterFetch(path, options = {}) {
const response = await fetch(`${ALTER_API_BASE}${path}`, {
...options,
headers: {
...authHeaders,
...(options.body ? { 'Content-Type': 'application/json' } : {}),
...options.headers
}
});
const payload = await response.json().catch(() => null);
if (!response.ok) {
throw new Error(payload?.code || payload?.error || `Alter API ${response.status}`);
}
return payload;
}
La mayoría de los errores de controladores se normalizan como una respuesta code. El middleware de autenticación y los limitadores de solicitudes pueden devolver una respuesta error en su lugar.
// Controller error
{
"code": "assetCatalog.invalidType"
}
// Auth middleware or rate limit
{
"error": "Unauthorized"
}
{
"error": "Too Many Requests"
}
| Tipo | Límite | Intervalo |
|---|
Global | 600 solicitudes | 60 segundos |
GET /auth/check | 60 solicitudes | 60 segundos |
Lectura de pedidos/productos | 300 solicitudes | 60 segundos |
Escritura de pedidos/sesiones de integración/vinculaciones de herramientas | 120 solicitudes | 60 segundos |
Lectura de recursos/importaciones de diseños | 180 solicitudes | 60 segundos |
Fuentes | 300 solicitudes | 60 segundos |
Intercambio de conexión de WP | 30 solicitudes | 60 segundos |
GET /model-generator/* | 600 solicitudes | 60 segundos |