Skapa API-uppgifter i panelen för e-handelsinställningar. Access Token visas bara en gång, så spara den omedelbart i din backends lagring för hemligheter.
Behåll Access Key och Access Token på din server. Autentiserade ändpunkter avvisar webbläsaranrop med Origin- eller Referer-huvuden.
Uppgifter kan ha begränsade behörighetsomfång. Använd GET /auth/check för att kontrollera aktiv butik, planfunktioner och behörighetsomfång för uppgifterna.
Hjälpfunktionen nedan används i de återstående exemplen. Den använder vanlig fetch och kan köras i Node.js 18+ eller annan servermiljö med stöd för fetch.
Tabellen nedan återger de offentliga rutterna i backend-public-api/app.js. Sökvägar visas med det offentliga proxyprefix som används av externa integrationer.
Metod
Ändpunkt
Beskrivning
Åtkomst
GET
/public-api/healthz
Hälsokontroll av tjänsten.
offentlig
GET
/public-api/v1/auth/check
Validerar uppgifter och returnerar butik, behörighetsomfång och planfunktioner.
valfria autentiserade uppgifter
GET
/public-api/v1/customer-orders
Returnerar en sidindelad och filtrerbar lista över kundbeställningar.
orders:read
GET
/public-api/v1/customer-orders/:id
Returnerar en kundbeställning med konfigurerade produktartiklar.
Kundorderändpunkterna låter en extern butik läsa konfigurerade orderrader, uppdatera antal, flytta beställningar mellan behandlingsstatusar och ta bort övergivna beställningar.
Parameter
Obligatoriskt
Detaljer
name
nej
Söker efter designnamn och numeriskt order-ID.
category_id
nej
Filtrerar efter produktkategori-ID.
order_status
nej
En av de tillåtna orderstatusarna.
offset
nej
Standard 0. Måste vara >= 0.
limit
nej
Standard 9 för denna controller, högst 50.
order_by
nej
id, created_at eller design_name.
direction
nej
ASC eller DESC.
Exempel på begäran (fetch)
const params =newURLSearchParams({limit:'20',offset:'0',order_status:'shopping_cart',order_by:'created_at',direction:'DESC'});const orders =awaitalterFetch(`/customer-orders?${params.toString()}`);const order =awaitalterFetch('/customer-orders/123');const batch =awaitalterFetch('/customer-orders/batch',{method:'POST',body:JSON.stringify({customerOrderIds:[123,124,125]})});
Tillåtna värden
Status
Beskrivning
shopping_cart
Kundvagnsflöde; kunden kan fortfarande redigera konfigurationen.
editable
Beställningen kan fortfarande redigeras av kunden.
Skapa en kortlivad inbäddningstoken på servern, skicka den till iframen/runtimemiljön och låt sedan runtimemiljön anropa bootstrap med en Bearer-token.
Parameter
Obligatoriskt
Detaljer
runtimeBindingId
rekommenderas
Föredragen identifierare för aktiva runtimekopplingar.
Generatorns importendpoints är skrivskyddade anrop mellan servrar. De kräver standardhuvuden för API:t, behörighetsomfånget embed:session:create och en aktiv prenumeration. Importbehörigheten utfärdar ingen redigeringssession och förbrukar inte dess månadskvot. När redigeraren öppnas används samma räknare, monthlyEmbedTokenLimit, som för de andra inbäddade verktygen.
Hitta och importera generatormodeller
Använd /model-generator/models för att lista tillgängliga modeller med generatorer. Beskrivningen generator låser projectId, revision, configurationId, templateRevision, productId och productModel3dId till bestämda värden. Följ dess importPath för att hämta exakt den källrevisionen. Manifest för produktresurser innehåller även generators och varje modells generator-beskrivning. Mallar kan importeras separat per konfiguration och revision.
Katalogfilter
Ändpunkt
Detaljer
/model-generator/models
Modellista: name (eller q), categoryId, scope (all, own, global), limit (1–50) och offset.
/model-generator/catalog
Mallkatalog: generatorType, productId, audience, q, templateKey, configurationId, limit och offset.
/model-generator/projects
Projektlista: configurationId, q, scope (all, own, global), limit och offset. Den publika proxyn använder all som standardvärde för scope.
/model-generator/image-libraries/:kind/assets
Textur-/bakgrundsbibliotek: kind är texture eller background; q, category och mapType filtrerar de tillgängliga resurserna.
En projektimport innehåller document, revision, template och ett files-manifest. Varje fil anger en path under /v1/model-generator/; lägg till /public-api framför sökvägen när filen laddas ned från Alter Product. Kopiera nödvändiga filer till din egen lagring och ersätt källreferenser med lokala referenser. Importera mannequiner och texturbibliotek via deras katalogendpoints; public-files är begränsad till tillåtna resurssökvägar, och mallar måste klara åtkomstkontrollerna för respektive konfiguration och revision.
Exempel på begäran (fetch)
// Server-side: uses the alterFetch helper and authHeaders defined above.const catalog =awaitalterFetch('/model-generator/models?'+newURLSearchParams({scope:'all',limit:'24',offset:'0'}));const selected = catalog.items[0];if(!selected?.generator)thrownewError('Select an available generator model');const importPath = selected.generator.importPath;if(!importPath.startsWith('/v1/model-generator/projects/')){thrownewError('Invalid generator import path');}const bundle =awaitalterFetch(importPath.slice('/v1'.length));for(const file of bundle.files){if(!file.path.startsWith('/v1/model-generator/')){thrownewError('Invalid generator file path');}const response =awaitfetch('https://alterproduct.com/public-api'+ file.path,{headers: authHeaders,redirect:'error'});if(!response.ok)thrownewError(`File download failed: ${response.status}`);const bytes =newUint8Array(await response.arrayBuffer());// Persist bytes in your local storage; record the mapping from// file.sourceHref / file.href to the resulting local file reference.}// Persist bundle.document, bundle.template and revision metadata locally.// Import the related product asset and its textures/mockups as needed:const product =awaitalterFetch('/assets/products/'+ selected.generator.productId);const mannequins =awaitalterFetch('/model-generator/mannequins');console.log({ product, mannequins });
Redigeringssession och lokal lagring
Skapa redigeringssessionen med tool: model-generator, ett positivt numeriskt toolId som identifierar det lokala generatorprojektet (inte dess UUID eller WooCommerce-produktens ID) och butikens tillåtna origin. Skicka inte designId, orderId, runtimeBindingId eller varukorgsfält för detta verktyg. Generatorprojektets UUID är en separat identifierare. Skicka den returnerade token via iframe-handskakningen; initieringen av körmiljön returnerar generatorkontexten med storageMode: wordpress_local.
// Server-side, after authorizing the merchant's access to this local project.const localProjectId =42;// Local generator project ID, not its UUID or WC product ID.const session =awaitalterFetch('/embed/session',{method:'POST',body:JSON.stringify({tool:'model-generator',toolId: localProjectId,origin:'https://yourstore.com'})});// The iframe receives session.token through ALTER_CUSTOMIZER_SESSION_READY.// Do not put API credentials or the token in the iframe URL.const bootstrapResponse =awaitfetch('https://alterproduct.com/public-api/v1/runtime/bootstrap',{headers:{Authorization:`Bearer ${session.token}`}});if(!bootstrapResponse.ok)thrownewError('Generator bootstrap failed');const context =await bootstrapResponse.json();console.log(context);
// Host page: WordPress returns a numeric toolId and a UUID in id.const url =newURL('https://alterproduct.com/app/model-generator');url.search=newURLSearchParams({embedded:'1',lng:'en',parentOrigin:window.location.origin,toolId:String(localProject.toolId),serverProjectId: localProject.id}).toString();// Optional: serverProjectRevision pins an existing saved revision.iframe.src= url.toString();// Install the authenticated handshake and storage bridge described below.// Setting iframe.src alone does not authorize the editor or provide storage.
Iframe-meddelanden som används av WordPress-bryggan
WordPress-tillägget tillhandahåller lagringsbryggan och kontrollerar administratörs- eller WooCommerce-butiksansvarigbehörigheter. Det validerar iframe-fönstrets origin, källfönstret, nonce, anrops-ID och tillåtna projektsökvägar. Bryggan skickar lokala läsningar och skrivningar till /wp-json/alter-wc/v1/model-generator. API-autentiseringsuppgifterna stannar på servern. En egen integration måste implementera motsvarande autentiserad lagringshantering; generatorns publika API sparar inte projekt hos Alter Product.
Typ
Beskrivning
ALTER_CHILD_HELLO / ALTER_PARENT_ACK
Barnfönstret inleder handskakningen med en nonce; föräldrafönstret bekräftar samma nonce.
Barnfönstret begär en redigeringssession för model-generator; föräldrafönstret returnerar en auktoriserad token.
ALTER_MODEL_GENERATOR_REQUEST
Barnfönstret skickar requestId, nonce och request med method, path, data och responseType.
ALTER_MODEL_GENERATOR_RESPONSE
Föräldrafönstret svarar med samma requestId och nonce samt status, data, headers och eventuella error.
// Messages after ALTER_CHILD_HELLO / ALTER_PARENT_ACK agree on the nonce.// Iframe -> parent:const sessionRequest ={type:'ALTER_CUSTOMIZER_INIT_SESSION',nonce: handshakeNonce,payload:{tool:'model-generator',alterProductId: localProject.toolId,mode:'edit'}};// Parent -> iframe, after the server authorizes the merchant and issues a token:const sessionReady ={type:'ALTER_CUSTOMIZER_SESSION_READY',nonce: handshakeNonce,token: session.token,tool:'model-generator',cartKey:`model-generator:${localProject.id}`,mode:'edit',localSession:false,adminSession:true};// Send only to the validated iframe's exact origin and source window.// An authorized token and successful bootstrap are still required.
Vid sparande skickas expectedRevision, templateRevision, document och referenser till resultatfiler. En oföränderlig revision skapas; ett inaktuellt expectedRevision ger HTTP 409. WordPress lagrar metadata i databasen och filer i katalogen uploads. JSON kompakteras och komprimeras med gzip när komprimeringen minskar storleken.
// Example message from the iframe; savedSnapshot and artifact IDs come// from the generator. The host checks origin/source/nonce/project permissions.const message ={type:'ALTER_MODEL_GENERATOR_REQUEST',requestId: crypto.randomUUID(),nonce: handshakeNonce,request:{method:'POST',path:`/pattern-generator/projects/${projectUuid}/revisions`,data:{expectedRevision: loadedRevision,name: projectName, templateRevision,document: savedSnapshot,references:{artifactIds: savedArtifactIds }},responseType:'json'}};
Använd sparad modell i design publicerar en fullständig sparad revision i en länkad design. Kunderna ser den sedan genom befintliga Customizer, Configurator eller Viewer med de vanliga produktkopplingarna och prenumerationskontrollerna. Generatorns redigerare förblir ett verktyg för handlaren. Orderkopplingar behåller det sparade projektet och dess revision, så att senare redigeringar inte ändrar tidigare beställningar utan att det märks.
Designimport ger åtkomst till designer och deras filer som lagras hos Alter för extern produktion eller migrering. API:et kontrollerar behörighet till Business-planen.
Offentliga förhandsvisningsfiler kan användas i webbläsaren. Skyddade filer kräver en signerad URL eller API-uppgifter med files:read. Typsnitt och valutor har offentliga läsändpunkter.
Runtimekopplingar kopplar externa e-handelsprodukter till Alter Product-designer och runtimetyper. De används främst av WordPress/WooCommerce-integrationer och avancerade butiksbackender.
Parameter
Obligatoriskt
Detaljer
designId
nej
Alter Product-design-ID som ägs av butiken.
externalProductId
ja för synkronisering
Externt produkt-ID, till exempel ett WooCommerce-produkt-ID.
runtimeType
ja för synkronisering
viewer, configurator eller customizer.
status
nej
draft, active, inactive, archived eller legacy_active.
awaitalterFetch('/runtime-bindings/sync-from-wordpress',{method:'POST',body:JSON.stringify({bindings:[{externalProductId:'wc_123',runtimeType:'viewer',status:'active',externalDesign:{externalDesignKey:'wp-design-381',productId:4,title:'WooCommerce local design',manifestUrl:'https://yourstore.com/wp-content/uploads/alter/381/manifest.json',assetBaseUrl:'https://yourstore.com/wp-content/uploads/alter/381/',manifestHash:'a3b1...',sourceMeta:{pluginVersion:'1.2.0'}}}]})});
Ändpunkten för WordPress-anslutningsutbyte förbrukar en engångskod och returnerar API-uppgifter till tillägget. Det är inte en allmän ändpunkt för att skapa uppgifter.