Public API er laget for server-til-server-integrasjoner med butikker, netthandelsbackender, WordPress/WooCommerce-utvidelser og eksterne produksjonsarbeidsflyter.
Opprett API-legitimasjon i nettbutikkinnstillingene. Access Token vises bare én gang, så lagre det umiddelbart i backendens sikre lagring for hemmeligheter.
Oppbevar Access Key og Access Token på serveren din. Autentiserte endepunkter avviser nettleserforespørsler som inneholder Origin- eller Referer-headere.
Legitimasjon kan ha begrenset tilgangsomfang. Bruk GET /auth/check for å kontrollere aktiv butikk, abonnementsfunksjoner og tilgangsomfanget som returneres for legitimasjonen.
Tabellen nedenfor gjenspeiler de offentlige rutene i backend-public-api/app.js. Stiene vises med det offentlige proxyprefikset som brukes av eksterne integrasjoner.
Metode
Endepunkt
Beskrivelse
Tilgang
GET
/public-api/healthz
Helsekontroll av tjenesten.
offentlig
GET
/public-api/v1/auth/check
Validerer legitimasjon og returnerer butikk, tilgangsomfang og abonnementsfunksjoner.
enhver autentisert legitimasjon
GET
/public-api/v1/customer-orders
Returnerer en paginert og filtrerbar liste med kundebestillinger.
orders:read
GET
/public-api/v1/customer-orders/:id
Returnerer én kundebestilling med konfigurerte produktlinjer.
orders:read
POST
/public-api/v1/customer-orders/batch
Returnerer opptil 100 bestillinger etter ID.
orders:read
PATCH
/public-api/v1/customer-orders/:id/status
Oppdaterer bestillingsstatusen.
orders:write
PATCH
/public-api/v1/customer-orders/:orderId/quantity
Oppdaterer antallet for valgte bestillingsdetaljer.
Endepunkter for kundebestillinger lar en ekstern butikk lese konfigurerte bestillingslinjer, oppdatere antall, endre behandlingsstatus og fjerne forlatte bestillinger.
Parameter
Påkrevd
Detaljer
name
nei
Søker i designnavn og numerisk bestillings-ID.
category_id
nei
Filtrerer etter produktkategori-ID.
order_status
nei
En av de tillatte bestillingsstatusene.
offset
nei
Standard 0. Må være >= 0.
limit
nei
Standard 9 for denne kontrolleren, maksimalt 50.
order_by
nei
id, created_at eller design_name.
direction
nei
ASC eller DESC.
Eksempelforespørsel (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]})});
Tillatte verdier
Status
Beskrivelse
shopping_cart
Handlekurvfase; kunden kan fortsatt redigere konfigurasjonen.
Importendepunktene for generatoren støtter bare leseforespørsler mellom servere. De krever standard API-headere, tillatelsen embed:session:create og en aktiv plan. Importautorisasjon oppretter ingen redigeringsøkt og bruker ikke av den månedlige kvoten for slike økter. Når redigeringsverktøyet åpnes, brukes den samme monthlyEmbedTokenLimit-telleren som for de andre innebygde verktøyene.
Finn og importer modeller med generator
Bruk /model-generator/models for å vise tilgjengelige modeller med generatorer. Deskriptoren generator fastsetter konkrete verdier for projectId, revision, configurationId, templateRevision, productId og productModel3dId. Følg importPath for å hente akkurat denne kilderevisjonen. Manifestene for produktressurser viser også generators og hver modells generator-deskriptor. Maler kan importeres separat etter konfigurasjon og revisjon.
Katalogfiltre
Endepunkt
Detaljer
/model-generator/models
Modelliste: name (eller q), categoryId, scope (all, own, global), limit (1–50) og offset.
/model-generator/catalog
Malkatalog: generatorType, productId, audience, q, templateKey, configurationId, limit og offset.
/model-generator/projects
Prosjektliste: configurationId, q, scope (all, own, global), limit og offset. Den offentlige proxyen bruker scope all som standard.
/model-generator/image-libraries/:kind/assets
Tekstur- og bakgrunnsbiblioteker: kind er texture eller background; q, category og mapType filtrerer de tilgjengelige ressursene.
En prosjektimport inneholder document, revision, template og et files-manifest. Hver fil oppgir en path under /v1/model-generator/; legg til /public-api foran denne når du laster ned fra Alter Product. Kopier nødvendige filer til ditt eget lager, og erstatt kildereferansene med lokale referanser. Importer mannekenger og teksturbiblioteker gjennom katalogendepunktene deres; public-files er begrenset til tillatte ressursbaner, og maler må bestå tilgangskontrollene for konfigurasjon og revisjon.
Eksempelforespørsel (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 });
Redigeringsøkt og lokal lagring
Opprett redigeringsøkten med tool: model-generator, en positiv numerisk toolId som identifiserer det lokale generatorprosjektet (ikke prosjektets UUID eller en WooCommerce-produkt-ID), og butikkens tillatte origin. Ikke send designId, orderId, runtimeBindingId eller handlekurvfelter for dette verktøyet. Generatorprosjektets UUID er en separat identifikator. Send tokenet som returneres, gjennom iframe-håndtrykket; runtime bootstrap 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-meldinger som brukes av WordPress-broen
WordPress-utvidelsen håndterer lagringsbroen og kontrollerer rettigheter som administrator eller butikkansvarlig i WooCommerce. Den validerer iframe-ens origin, kildevindu, nonce, forespørsels-ID og tillatte prosjektbaner. Broen sender lokale lese- og skriveoperasjoner til /wp-json/alter-wc/v1/model-generator. API-legitimasjonen forblir på serveren. En egen integrasjon må implementere tilsvarende autentisert lagringshåndtering; generatorens offentlige API lagrer ikke prosjekter i Alter Product.
Type
Beskrivelse
ALTER_CHILD_HELLO / ALTER_PARENT_ACK
Den underordnede iframe-en starter håndtrykket med en nonce; foreldresiden bekrefter samme nonce.
Den underordnede iframe-en ber om en redigeringsøkt for model-generator; foreldresiden returnerer det autoriserte tokenet.
ALTER_MODEL_GENERATOR_REQUEST
Den underordnede iframe-en sender requestId, nonce og request som inneholder method, path, data og responseType.
ALTER_MODEL_GENERATOR_RESPONSE
Foreldresiden svarer med samme requestId og nonce, i tillegg til status, data, headers og eventuell 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.
En lagring sender expectedRevision, templateRevision, document og referanser til artefakter. Den oppretter en uforanderlig revisjon; en utdatert expectedRevision returnerer HTTP 409. WordPress lagrer metadata i sin database og filer i uploads-mappen. JSON minifiseres og komprimeres med gzip når komprimeringen reduserer 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'}};
Handlingen Bruk lagret modell i design publiserer en fullstendig lagret revisjon til et tilknyttet design. Kundene ser den deretter i eksisterende Customizer, Configurator eller Viewer med de vanlige produktkoblingene og abonnementskontrollene. Generatorens redigeringsverktøy er fortsatt et verktøy for forhandleren. Ordrelenker beholder det lagrede prosjektet og revisjonen, slik at senere redigeringer ikke automatisk endrer tidligere ordrer.
Ressurskatalogen gir tilgang til produktkilder, bakgrunner, miljøer, grafikkbibliotek, designmaler og mockupressurser. Listeendepunkter returnerer lette beskrivelser; detaljendepunkter inneholder filmanifester.
Type
Beskrivelse
products
Grunnleggende produktressurser, forhåndsvisninger, 3D-modeller og beskrivelser av materialer og teksturer.
Designimport gir tilgang til Alter-lagrede design og filer for eksterne produksjons- eller migreringsflyter. API-et kontrollerer om Business-abonnementet gir tilgang.
Offentlige forhåndsvisningsfiler kan brukes i nettleseren. Beskyttede filer krever en signert URL eller API-legitimasjon med files:read. Skrifter og valutaer er offentlige leseendepunkter.
Runtimekoblinger knytter eksterne butikkprodukter til Alter Product-design og runtimetyper. De brukes hovedsakelig i WordPress/WooCommerce-integrasjoner og avanserte butikkbackender.
Parameter
Påkrevd
Detaljer
designId
nei
ID for Alter Product-design som eies av butikken.
externalProductId
ja, ved synkronisering
Ekstern produkt-ID, for eksempel en WooCommerce-produkt-ID.
runtimeType
ja, ved synkronisering
viewer, configurator eller customizer.
status
nei
draft, active, inactive, archived eller legacy_active.
legacyStorefrontProductId
nei
Valgfri eldre koblings-ID.
legacyBindingMeta
nei
Valgfrie JSON-metadata, for eksempel manifestHash.
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'}}}]})});
WordPress-endepunktet for tilkoblingsutveksling bruker en engangskode og returnerer API-legitimasjon til utvidelsen. Det er ikke et generelt endepunkt for å opprette legitimasjon.