Přístupové údaje API vytvořte v panelu nastavení e-shopu. Access Token se zobrazí pouze jednou, proto jej ihned uložte do úložiště tajných údajů na backendu.
Uchovávejte Access Key a Access Token na svém serveru. Koncové body vyžadující ověření odmítají volání z prohlížeče obsahující hlavičky Origin nebo Referer.
Přístupové údaje mohou mít omezené rozsahy oprávnění. Pomocí GET /auth/check ověřte aktivní obchod, možnosti tarifu a rozsahy vrácené pro dané přístupové údaje.
Níže uvedenou pomocnou funkci používají i zbývající příklady. Jde o běžný fetch a může běžet v Node.js 18+ nebo v libovolném serverovém prostředí s podporou fetch.
Následující tabulka odpovídá veřejným trasám připojeným v backend-public-api/app.js. Cesty obsahují veřejný prefix proxy používaný externími integracemi.
Metoda
Koncový bod
Popis
Přístup
GET
/public-api/healthz
Kontrola dostupnosti služby.
veřejný
GET
/public-api/v1/auth/check
Ověřuje přístupové údaje a vrací obchod, rozsahy oprávnění a možnosti tarifu.
libovolné ověřené přístupové údaje
GET
/public-api/v1/customer-orders
Vrací stránkovaný a filtrovatelný seznam objednávek zákazníků.
orders:read
GET
/public-api/v1/customer-orders/:id
Vrací jednu objednávku zákazníka s nakonfigurovanými položkami produktů.
orders:read
POST
/public-api/v1/customer-orders/batch
Vrací až 100 objednávek podle ID.
orders:read
PATCH
/public-api/v1/customer-orders/:id/status
Aktualizuje stav objednávky.
orders:write
PATCH
/public-api/v1/customer-orders/:orderId/quantity
Aktualizuje množství vybraných položek objednávky.
Koncové body objednávek umožňují externímu obchodu číst nakonfigurované položky, měnit množství, posouvat objednávku mezi stavy vyřízení a odstraňovat opuštěné objednávky.
Parametr
Povinné
Podrobnosti
name
ne
Vyhledává podle názvu návrhu a číselného ID objednávky.
category_id
ne
Filtruje podle ID kategorie produktu.
order_status
ne
Jeden z povolených stavů objednávky.
offset
ne
Výchozí hodnota 0. Musí být >= 0.
limit
ne
Výchozí hodnota tohoto řadiče je 9, maximum 50.
order_by
ne
id, created_at nebo design_name.
direction
ne
ASC nebo DESC.
Příklad požadavku (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]})});
Povolené hodnoty
Stav
Popis
shopping_cart
Fáze košíku; zákazník může konfiguraci nadále upravovat.
Vytvořte na svém serveru krátkodobý token vloženého nástroje, předejte jej do iframe/běhového prostředí a poté nechte prostředí zavolat bootstrap s tokenem Bearer.
Parametr
Povinné
Podrobnosti
runtimeBindingId
doporučené
Preferovaný identifikátor aktivních vazeb běhového prostředí.
Endpointy pro import generátoru slouží pouze ke čtení při komunikaci mezi servery. Vyžadují standardní hlavičky API, oprávnění embed:session:create a aktivní plán. Autorizace importu nevytváří relaci editoru a nečerpá její měsíční limit. Otevření editoru používá stejný čítač monthlyEmbedTokenLimit jako ostatní vložené nástroje.
Vyhledávání a import modelů s generátorem
Pomocí /model-generator/models zobrazíte dostupné modely s generátory. Deskriptor generator určuje konkrétní projectId, revision, configurationId, templateRevision, productId a productModel3dId. Prostřednictvím jeho importPath načtěte přesně tuto zdrojovou revizi. Manifesty produktových podkladů zpřístupňují také generators a deskriptor generator jednotlivých modelů. Šablony lze importovat samostatně podle konfigurace a revize.
Filtry katalogů
Koncový bod
Podrobnosti
/model-generator/models
Seznam modelů: name (nebo q), categoryId, scope (all, own, global), limit (1–50) a offset.
/model-generator/catalog
Katalog šablon: generatorType, productId, audience, q, templateKey, configurationId, limit a offset.
/model-generator/projects
Seznam projektů: configurationId, q, scope (all, own, global), limit a offset. Veřejná proxy ve výchozím nastavení používá scope all.
/model-generator/image-libraries/:kind/assets
Knihovny textur a pozadí: kind je texture nebo background; q, category a mapType filtrují dostupné podklady.
Import projektu obsahuje document, revision, template a manifest files. Každý soubor uvádí path v prostoru /v1/model-generator/; při stahování z Alter Product před něj přidejte /public-api. Zkopírujte požadované soubory do vlastního úložiště a nahraďte zdrojové odkazy místními. Figuríny a knihovny textur importujte přes jejich katalogové endpointy; public-files povoluje pouze schválené cesty ke zdrojům a šablony podléhají kontrole přístupu ke konfiguraci a revizi.
Příklad požadavku (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 });
Relace editoru a místní ukládání
Vytvořte relaci editoru s tool: model-generator, kladným číselným toolId místního projektu generátoru (nikoli jeho UUID ani ID produktu WooCommerce) a povoleným origin obchodu. Pro tento nástroj nepředávejte designId, orderId, runtimeBindingId ani pole košíku. UUID projektu generátoru je samostatný identifikátor. Předejte získaný token prostřednictvím handshake iframe; runtime bootstrap vrátí kontext generátoru se 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.
Zprávy iframe používané propojením ve WordPressu
Plugin WordPress zajišťuje propojení s místním úložištěm a kontroluje oprávnění správce nebo manažera WooCommerce. Ověřuje origin iframe, zdrojové okno, nonce, identifikátor požadavku a povolené cesty projektu. Místní čtení a zápisy směruje na /wp-json/alter-wc/v1/model-generator. Přístupové údaje API zůstávají na serveru. Vlastní integrace musí zajistit rovnocennou autentizovanou obsluhu úložiště; veřejné API generátoru neukládá projekty do Alter Product.
Typ
Popis
ALTER_CHILD_HELLO / ALTER_PARENT_ACK
Vložený iframe zahájí handshake s nonce; nadřazená stránka potvrdí stejný nonce.
Vložený iframe odešle requestId, nonce a request obsahující method, path, data a responseType.
ALTER_MODEL_GENERATOR_RESPONSE
Nadřazená stránka odpoví stejným requestId a nonce spolu s poli status, data, headers a případným 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.
Uložení předává expectedRevision, templateRevision, document a odkazy na artefakty. Vytvoří neměnnou revizi; neaktuální expectedRevision vrátí HTTP 409. WordPress ukládá metadata do své databáze a soubory do adresáře uploads. JSON se minifikuje a komprimuje pomocí gzip, pokud komprese zmenší jeho velikost.
// 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'}};
Akce Použít uložený model v návrhu publikuje kompletní uloženou revizi do propojeného návrhu produktu. Zákazníci ji pak vidí ve stávajícím Customizeru, Configuratoru nebo Vieweru se zachováním běžných vazeb produktu a kontrol předplatného. Editor generátoru zůstává nástrojem obchodníka. Odkazy v objednávkách zachovávají uložený projekt a revizi, takže pozdější úpravy automaticky nezmění dřívější objednávky.
Importy návrhů zpřístupňují návrhy hostované v Alter Product a jejich soubory pro externí výrobu nebo migraci. API ověřuje dostupnost v tarifu Business.
Veřejné soubory náhledů lze snadno používat v prohlížeči. Chráněné soubory vyžadují podepsané URL nebo přístupové údaje API s files:read. Písma a měny mají veřejné koncové body pro čtení.
Vazby běhového prostředí propojují externí produkty e-shopu s návrhy Alter Product a typy běhového prostředí. Používají je především integrace WordPress/WooCommerce a pokročilé backendy obchodů.
Parametr
Povinné
Podrobnosti
designId
ne
ID návrhu Alter Product patřícího obchodu.
externalProductId
ano pro sync
ID externího produktu, například ID produktu WooCommerce.
runtimeType
ano pro sync
viewer, configurator nebo customizer.
status
ne
draft, active, inactive, archived nebo 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'}}}]})});
Koncový bod výměny údajů pro připojení WordPressu spotřebuje jednorázový předávací kód a vrátí pluginu přístupové údaje API. Neslouží k obecnému vytváření přístupových údajů.