Opret API-legitimationsoplysninger i panelet med e-handelsindstillinger. Access Token vises kun én gang, så gem det straks i din backends lager til hemmeligheder.
Opbevar Access Key og Access Token på din server. Godkendte endpoints afviser browserkald med Origin- eller Referer-headere.
Legitimationsoplysninger kan have begrænset adgangsomfang. Brug GET /auth/check til at kontrollere den aktive butik, planfunktioner og det adgangsomfang, der returneres for oplysningerne.
Tabellen nedenfor afspejler de offentlige ruter i backend-public-api/app.js. Stierne vises med det offentlige proxyprefix, som eksterne integrationer bruger.
Metode
Endpoint
Beskrivelse
Adgang
GET
/public-api/healthz
Sundhedskontrol af tjenesten.
offentlig
GET
/public-api/v1/auth/check
Validerer legitimationsoplysninger og returnerer butik, adgangsomfang og planfunktioner.
vilkårlige godkendte legitimationsoplysninger
GET
/public-api/v1/customer-orders
Returnerer en sideinddelt og filtrerbar liste over kundeordrer.
orders:read
GET
/public-api/v1/customer-orders/:id
Returnerer en kundeordre med konfigurerede produktlinjer.
Kundeordreendpoints lader en ekstern butik læse konfigurerede ordrelinjer, opdatere antal, føre en ordre gennem behandlingsstatusser og fjerne opgivne ordrer.
Parameter
Påkrævet
Detaljer
name
nej
Søger efter designnavn og numerisk ordre-ID.
category_id
nej
Filtrerer efter produktkategori-ID.
order_status
nej
En af de tilladte ordrestatusser.
offset
nej
Standard 0. Skal være >= 0.
limit
nej
Standard 9 for denne controller, højst 50.
order_by
nej
id, created_at eller design_name.
direction
nej
ASC eller DESC.
Eksempel på anmodning (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]})});
Tilladte værdier
Status
Beskrivelse
shopping_cart
Kurveforløb; kunden kan stadig redigere konfigurationen.
Generatorens importendpoints er skrivebeskyttede server-til-server-anmodninger. De kræver de almindelige API-headere, rettighedsomfanget embed:session:create og et aktivt abonnement. Importtilladelsen udsteder ikke en redigeringssession og bruger ikke af dens månedlige kvote. Når editoren åbnes, bruges den samme monthlyEmbedTokenLimit-tæller som til de øvrige indlejrede værktøjer.
Find og importér generatormodeller
Brug /model-generator/models til at vise tilgængelige modeller med generatorer. Beskrivelsen generator fastlåser projectId, revision, configurationId, templateRevision, productId og productModel3dId til bestemte værdier. Følg dens importPath for at hente præcis den pågældende kilderevision. Manifester for produktressourcer indeholder også generators og hver models generator-beskrivelse. Skabeloner kan importeres separat efter konfiguration og revision.
Katalogfiltre
Endpoint
Detaljer
/model-generator/models
Modelliste: name (eller q), categoryId, scope (all, own, global), limit (1–50) og offset.
/model-generator/catalog
Skabelonkatalog: generatorType, productId, audience, q, templateKey, configurationId, limit og offset.
/model-generator/projects
Projektliste: configurationId, q, scope (all, own, global), limit og offset. Den offentlige proxy bruger all som standardværdi for scope.
/model-generator/image-libraries/:kind/assets
Tekstur-/baggrundsbiblioteker: kind er texture eller background; q, category og mapType filtrerer de tilgængelige ressourcer.
En projektimport indeholder document, revision, template og et files-manifest. Hver fil angiver en path under /v1/model-generator/; sæt /public-api foran stien, når filen hentes fra Alter Product. Kopiér de nødvendige filer til dit eget lager, og erstat kildereferencer med lokale referencer. Importér mannequiner og teksturbiblioteker via deres katalogendpoints; public-files er begrænset til tilladte ressourcestier, og skabeloner skal bestå adgangskontrollen for deres konfiguration og revision.
Eksempel på anmodning (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 og lokal lagring
Opret redigeringssessionen med tool: model-generator, et positivt numerisk toolId, der identificerer det lokale generatorprojekt (ikke dets UUID eller WooCommerce-produkt-ID), samt den tilladte origin for butikken. Send ikke designId, orderId, runtimeBindingId eller kurvfelter til dette værktøj. Generatorprojektets UUID er en separat identifikator. Send det returnerede token via iframe-håndtrykket; initialiseringen af kørselsmiljøet returnerer generatorkonteksten 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-beskeder, som WordPress-broen bruger
WordPress-pluginet stiller lagringsbroen til rådighed og kontrollerer administrator- eller WooCommerce-butiksadministratorrettigheder. Det validerer iframe-vinduets origin, kildevinduet, nonce, anmodnings-ID og tilladte projektstier. Broen sender lokale læsninger og skrivninger til /wp-json/alter-wc/v1/model-generator. API-legitimationsoplysninger bliver på serveren. En tilpasset integration skal implementere tilsvarende godkendt lagringshåndtering; generatorens offentlige API gemmer ikke projekter hos Alter Product.
Type
Beskrivelse
ALTER_CHILD_HELLO / ALTER_PARENT_ACK
Undervinduet starter håndtrykket med en nonce; forældrevinduet bekræfter den samme nonce.
Undervinduet anmoder om en redigeringssession til model-generator; forældrevinduet returnerer det autoriserede token.
ALTER_MODEL_GENERATOR_REQUEST
Undervinduet sender requestId, nonce og request, der indeholder method, path, data og responseType.
ALTER_MODEL_GENERATOR_RESPONSE
Forældrevinduet svarer med samme requestId og nonce samt status, data, headers og eventuelle 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.
Ved lagring sendes expectedRevision, templateRevision, document og referencer til resultatfiler. Der oprettes en uforanderlig revision; en forældet expectedRevision returnerer HTTP 409. WordPress gemmer metadata i databasen og filer i mappen uploads. JSON kompakteres og komprimeres med gzip, når komprimeringen reducerer størrelsen.
// 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'}};
Brug gemt model i design udgiver en fuldstændig gemt revision til et tilknyttet design. Kunderne ser den derefter gennem den eksisterende Customizer, Configurator eller Viewer med de sædvanlige produkttilknytninger og abonnementskontroller. Generatoreditoren forbliver et værktøj til forhandleren. Ordretilknytninger bevarer det gemte projekt og dets revision, så senere redigeringer ikke ændrer tidligere ordrer ubemærket.
Ressourcekataloget giver adgang til produkters kilderessourcer, baggrunde, miljøer, grafikbiblioteksobjekter, designskabeloner og mockupressourcer. Listeendpoints returnerer kompakte beskrivelser; detaljeendpoints indeholder filmanifester.
Type
Beskrivelse
products
Basisproduktressourcer, forhåndsvisninger, 3D-modeller samt materiale- og teksturbeskrivelser.
backgrounds
Statiske Viewer-baggrunde.
environments
Miljøkort og forhåndsvisningsbilleder.
image_library
Grafikbiblioteksressourcer, herunder butiksspecifik grafik.
design_templates
Forhåndsvisninger af designskabeloner og referencer til lagfiler. Understøtter product_id-filter.
mockups
Mockupgeneratorens ressourcer, baggrunde og overlejringskort. Understøtter product_id-filter.
Designimport giver adgang til designs og filer, der er hostet hos Alter, til ekstern produktion eller migrering. API'et kontrollerer adgangen til Business-planen.
Offentlige forhåndsvisningsfiler kan bruges i browsere. Beskyttede filer kræver en signeret URL eller API-legitimationsoplysninger med files:read. Skrifttyper og valutaer har offentlige læseendpoints.
Runtimebindinger forbinder eksterne e-handelsprodukter med Alter Product-designs og runtimetyper. De bruges primært af WordPress/WooCommerce-integrationer og avancerede butiksbackends.
Parameter
Påkrævet
Detaljer
designId
nej
Alter Product-design-ID, der tilhører butikken.
externalProductId
ja til synkronisering
Eksternt produkt-ID, f.eks. et WooCommerce-produkt-ID.
runtimeType
ja til 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'}}}]})});
Endpointet til WordPress-forbindelsesudveksling bruger en engangskode og returnerer API-legitimationsoplysninger til pluginet. Det er ikke et generelt endpoint til oprettelse af legitimationsoplysninger.