API - PrzeglądAPI - Połączenie i autoryzacja Skonfiguruj klucze API, sprawdź połączenie i poznaj obsługę błędów oraz limity zapytań.
Spis treści https://alterproduct.com/public-api/v1
Dane dostępowe API wygenerujesz w ustawieniach e-commerce. Access Token jest pokazywany tylko raz, więc od razu zapisz go w backendowym storage sekretów.
Access Key i Access Token trzymaj wyłącznie po stronie serwera. Uwierzytelnione endpointy odrzucają wywołania przeglądarkowe z nagłówkami Origin lub Referer.
Dane dostępowe mogą mieć scope’y. Użyj GET /auth/check, żeby sprawdzić aktywny storefront, możliwości planu i scope’y przypisane do credentiala.
x-alter-access-key: YOUR_API_KEY
x-alter-access-token: YOUR_API_TOKENParametr Wymagany Szczegóły x-alter-access-keytak Publiczny identyfikator credentiala. x-alter-access-tokentak Sekretny token sparowany z access key. x-alter-client-fingerprintnie Opcjonalny stabilny fingerprint używany przy limitach sesji embed. Authorizationtylko runtime Token Bearer zwrócony przez POST /embed/session, używany przez /runtime/bootstrap.
Użyj endpointu auth check przed włączeniem synchronizacji lub funkcji embed w produkcyjnej integracji.
GET https://alterproduct.com/public-api/v1/auth/check Przykładowe zapytanie (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 ) ; Przykładowa odpowiedź
{
"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
}
}
} Poniższy helper jest używany w pozostałych przykładach. To zwykły fetch i działa w Node.js 18+ lub dowolnym runtime serwerowym z 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 ;
} Większość błędów kontrolerów jest normalizowana do odpowiedzi z code. Middleware uwierzytelniania i limitery mogą zwrócić odpowiedź z error.
// Controller error
{
"code" : "assetCatalog.invalidType"
}
// Auth middleware or rate limit
{
"error" : "Unauthorized"
}
{
"error" : "Too Many Requests"
} Typ Limit Okno Globalnie600 zapytań 60 sekund GET /auth/check60 zapytań 60 sekund Orders read/products read300 zapytań 60 sekund Orders write/embed sessions/runtime bindings120 zapytań 60 sekund Assets/design imports read180 zapytań 60 sekund Fonts300 zapytań 60 sekund WP connect exchange30 zapytań 60 sekund GET /model-generator/*600 zapytań 60 sekund
API - PrzeglądAPI - Viewer, Configurator i Customizer