Configura le chiavi API, verifica la connessione e scopri come gestire gli errori e i limiti delle richieste.
https://alterproduct.com/public-api/v1
Crea le credenziali API nel pannello Impostazioni e-commerce. L'Access Token viene mostrato una sola volta: salvalo subito nell'archivio dei segreti del backend.
Conserva Access Key e Access Token sul server. Gli endpoint autenticati rifiutano le chiamate provenienti dal browser che includono gli header Origin o Referer.
Le credenziali possono avere ambiti limitati. Usa GET /auth/check per verificare il negozio attivo, le funzionalità del piano e gli ambiti restituiti per la credenziale.
x-alter-access-key: YOUR_API_KEY
x-alter-access-token: YOUR_API_TOKEN
| Parametro | Obbligatorio | Dettagli |
|---|
x-alter-access-key | sì | Identificatore pubblico della credenziale. |
x-alter-access-token | sì | Token segreto associato alla chiave di accesso. |
x-alter-client-fingerprint | no | Impronta stabile facoltativa per limitare le richieste di sessioni di incorporamento. |
Authorization | solo runtime | Token Bearer restituito da POST /embed/session, usato da /runtime/bootstrap. |
Usa l'endpoint di verifica dell'autenticazione prima di attivare sincronizzazione o incorporamento in un'integrazione in produzione.
GET https://alterproduct.com/public-api/v1/auth/check
Esempio di richiesta (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);
Esempio di risposta
{
"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
}
}
}
La funzione ausiliaria seguente è usata negli altri esempi. Usa fetch semplice e può essere eseguita in Node.js 18+ o in qualsiasi runtime server che offra 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 maggior parte degli errori dei controller viene normalizzata in una risposta code. Il middleware di autenticazione e i limitatori di richieste possono invece restituire una risposta error.
// Controller error
{
"code": "assetCatalog.invalidType"
}
// Auth middleware or rate limit
{
"error": "Unauthorized"
}
{
"error": "Too Many Requests"
}
| Tipo | Limite | Finestra |
|---|
Globale | 600 richieste | 60 secondi |
GET /auth/check | 60 richieste | 60 secondi |
Lettura di ordini/prodotti | 300 richieste | 60 secondi |
Scrittura di ordini/sessioni di incorporamento/associazioni runtime | 120 richieste | 60 secondi |
Lettura di risorse/importazioni di design | 180 richieste | 60 secondi |
Font | 300 richieste | 60 secondi |
Scambio di connessione WP | 30 richieste | 60 secondi |
GET /model-generator/* | 600 richieste | 60 secondi |