Public API; mağazalar, e-ticaret backend’leri, WordPress/WooCommerce eklentileri ve dış üretim iş akışlarıyla sunucular arası entegrasyon için tasarlanmıştır.
E-ticaret ayarları panelinde API kimlik bilgileri oluşturun. Access Token yalnızca bir kez gösterilir; hemen backend’inizin gizli bilgi deposuna kaydedin.
Access Key ve Access Token değerlerini sunucunuzda saklayın. Kimlik doğrulanan uç noktalar, Origin veya Referer başlıkları içeren tarayıcı kaynaklı çağrıları reddeder.
Kimlik bilgilerinin izinleri sınırlandırılabilir. Etkin mağazayı, plan özelliklerini ve kimlik bilgisi için döndürülen izinleri doğrulamak amacıyla GET /auth/check kullanın.
Aşağıdaki yardımcı işlev diğer örneklerde de kullanılır. Düz fetch kullanır; Node.js 18+ veya fetch sağlayan herhangi bir sunucu çalışma zamanında çalışabilir.
Aşağıdaki tablo, backend-public-api/app.js içinde bağlı herkese açık rotaları yansıtır. Yollar, dış entegrasyonların kullandığı genel proxy önekiyle gösterilir.
Yöntem
Uç nokta
Açıklama
Erişim
GET
/public-api/healthz
Hizmet durum kontrolü.
herkese açık
GET
/public-api/v1/auth/check
Kimlik bilgilerini doğrular; mağazayı, izinleri ve plan özelliklerini döndürür.
kimliği doğrulanmış herhangi bir kimlik bilgisi
GET
/public-api/v1/customer-orders
Sayfalanmış ve filtrelenebilir müşteri sipariş listesini döndürür.
orders:read
GET
/public-api/v1/customer-orders/:id
Yapılandırılmış ürün öğeleriyle tek müşteri siparişini döndürür.
Müşteri siparişi uç noktaları, dış mağazanın yapılandırılmış satırları okumasını, miktarları güncellemesini, siparişi karşılama durumları arasında ilerletmesini ve terk edilmiş siparişleri kaldırmasını sağlar.
Parametre
Gerekli
Ayrıntılar
name
hayır
Tasarım adı ve sayısal sipariş kimliğinde arama yapar.
category_id
hayır
Ürün kategorisi kimliğine göre filtreler.
order_status
hayır
İzin verilen sipariş durumlarından biri.
offset
hayır
Varsayılan 0. >= 0 olmalıdır.
limit
hayır
Bu denetleyici için varsayılan 9, en fazla 50.
order_by
hayır
id, created_at veya design_name.
direction
hayır
ASC veya DESC.
Örnek istek (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]})});
İzin verilen değerler
Durum
Açıklama
shopping_cart
Sepet akışı; müşteri yapılandırmayı hâlâ düzenleyebilir.
editable
Sipariş müşteri tarafından düzenlenebilir durumda kalır.
Sunucunuzda kısa ömürlü yerleştirme belirteci oluşturup iframe/çalışma zamanına iletin; ardından çalışma zamanı bootstrap çağrısını Bearer belirteciyle yapsın.
Parametre
Gerekli
Ayrıntılar
runtimeBindingId
önerilir
Etkin çalışma zamanı bağları için tercih edilen tanımlayıcı.
Oluşturucunun içe aktarma uç noktaları, sunucular arasında yalnızca okuma isteklerini destekler. Standart API üstbilgilerini, embed:session:create yetkisini ve etkin bir planı gerektirir. İçe aktarma yetkilendirmesi bir düzenleyici oturumu oluşturmaz ve bu oturumun aylık kotasını tüketmez. Düzenleyiciyi açmak, diğer gömülü araçlarla aynı monthlyEmbedTokenLimit sayacını kullanır.
Oluşturucu içeren modelleri bulma ve içe aktarma
Oluşturucu içeren kullanılabilir modelleri listelemek için /model-generator/models kullanın. generator tanımlayıcısı, belirli projectId, revision, configurationId, templateRevision, productId ve productModel3dId değerlerini sabitler. Tam olarak bu kaynak revizyonunu almak için importPath yolunu izleyin. Ürün varlık bildirimleri ayrıca generators alanını ve her modelin generator tanımlayıcısını sunar. Şablonlar, yapılandırma ve revizyon temelinde ayrı olarak içe aktarılabilir.
Katalog filtreleri
Uç nokta
Ayrıntılar
/model-generator/models
Model listesi: name (veya q), categoryId, scope (all, own, global), limit (1–50) ve offset.
/model-generator/catalog
Şablon kataloğu: generatorType, productId, audience, q, templateKey, configurationId, limit ve offset.
/model-generator/projects
Proje listesi: configurationId, q, scope (all, own, global), limit ve offset. Herkese açık proxy, varsayılan scope değeri olarak all kullanır.
/model-generator/image-libraries/:kind/assets
Doku/arka plan kitaplıkları: kind, texture veya background değerini alır; q, category ve mapType kullanılabilir varlıkları filtreler.
Bir proje içe aktarımı document, revision, template ve bir files bildirimi içerir. Her dosya, /v1/model-generator/ altında bir path sunar; Alter Product'tan indirirken başına /public-api ekleyin. Gerekli dosyaları kendi depolama alanınıza kopyalayın ve kaynak referanslarını yerel referanslarla değiştirin. Mankenleri ve doku kitaplıklarını kendi katalog uç noktaları üzerinden içe aktarın; public-files yalnızca izin verilen kaynak yollarıyla sınırlıdır ve şablonlar yapılandırma/revizyon erişim kontrollerinden geçmelidir.
Örnek istek (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 });
Düzenleyici oturumu ve yerel depolama
Düzenleyici oturumunu tool: model-generator, yerel oluşturucu projesini tanımlayan pozitif sayısal bir toolId (projenin UUID'si veya WooCommerce ürün ID'si değil) ve mağazanın izin verilen origin değeriyle oluşturun. Bu araç için designId, orderId, runtimeBindingId veya sepet alanlarını iletmeyin. Oluşturucu projesinin UUID'si ayrı bir tanımlayıcıdır. Döndürülen tokenı iframe el sıkışması üzerinden iletin; runtime bootstrap, storageMode: wordpress_local içeren oluşturucu bağlamını döndürür.
// 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.
WordPress köprüsünün kullandığı iframe mesajları
WordPress eklentisi, depolama köprüsünü barındırır ve yönetici veya WooCommerce mağaza yöneticisi izinlerini kontrol eder. iframe origin değerini, kaynak pencereyi, nonce değerini, istek kimliğini ve izin verilen proje yollarını doğrular. Köprü, yerel okuma ve yazma işlemlerini /wp-json/alter-wc/v1/model-generator adresine gönderir. API kimlik bilgileri sunucuda kalır. Özel bir entegrasyon, kimlik doğrulamalı eşdeğer bir depolama işleyişi uygulamalıdır; oluşturucunun herkese açık API'si projeleri Alter Product'a kaydetmez.
Tür
Açıklama
ALTER_CHILD_HELLO / ALTER_PARENT_ACK
Alt iframe, nonce ile el sıkışmayı başlatır; üst sayfa aynı nonce değerini onaylar.
Alt iframe, model-generator düzenleme oturumu ister; üst sayfa yetkilendirilmiş tokenı döndürür.
ALTER_MODEL_GENERATOR_REQUEST
Alt iframe, requestId, nonce ve method, path, data ile responseType içeren request gönderir.
ALTER_MODEL_GENERATOR_RESPONSE
Üst sayfa aynı requestId ve nonce ile birlikte status, data, headers ve varsa error alanlarını döndürür.
// 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.
Kaydetme işlemi expectedRevision, templateRevision, document ve çıktı dosyalarına referansları iletir. Değiştirilemez bir revizyon oluşturur; güncel olmayan expectedRevision, HTTP 409 döndürür. WordPress, meta verileri kendi veritabanında ve dosyaları uploads dizininde saklar. JSON küçültülür ve sıkıştırma boyutunu azaltıyorsa gzip ile sıkıştırılır.
// 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'}};
Kaydedilmiş modeli tasarımda kullan eylemi, kaydedilmiş tam bir revizyonu bağlı bir tasarıma yayımlar. Müşteriler daha sonra bu revizyonu, mevcut Customizer, Configurator veya Viewer üzerinden, olağan ürün bağları ve abonelik kontrolleriyle görür. Oluşturucu düzenleyicisi satıcının kullandığı bir araç olarak kalır. Sipariş bağlantıları, kaydedilen proje ve revizyonu korur; böylece sonraki düzenlemeler geçmiş siparişleri otomatik olarak değiştirmez.
Varlık kataloğu ürün kaynak varlıklarını, arka planları, ortamları, grafik kütüphanesi öğelerini, tasarım şablonlarını ve maket varlıklarını sunar. Liste uç noktaları hafif tanımlayıcılar, ayrıntı uç noktaları ise dosya manifestleri döndürür.
Tür
Açıklama
products
Temel ürün varlıkları, önizlemeler, 3D modeller, malzeme ve doku tanımlayıcıları.
backgrounds
Sabit Viewer arka planları.
environments
Ortam haritaları ve önizleme görselleri.
image_library
Mağazaya özel grafikler dahil grafik kütüphanesi varlıkları.
design_templates
Tasarım şablonu önizlemeleri ve katman dosyası referansları. product_id filtresini destekler.
mockups
Maket oluşturucu varlıkları, arka planları ve kaplama haritaları. product_id filtresini destekler.
Tasarım içe aktarımları, dış üretim veya taşıma akışları için Alter’da barındırılan tasarımları ve dosyalarını sunar. API, Business planı uygunluğunu kontrol eder.
Herkese açık önizleme dosyaları tarayıcıda kullanıma uygundur. Korumalı dosyalar imzalı URL veya files:read iznine sahip API kimlik bilgisi gerektirir. Yazı tipleri ve para birimleri herkese açık okuma uç noktalarıdır.
Çalışma zamanı bağları, dış e-ticaret ürünlerini Alter Product tasarımlarıyla ve çalışma zamanı türleriyle ilişkilendirir. Başlıca WordPress/WooCommerce entegrasyonlarında ve gelişmiş mağaza backend’lerinde kullanılır.
Parametre
Gerekli
Ayrıntılar
designId
hayır
Mağazaya ait Alter Product tasarım kimliği.
externalProductId
eşitleme için evet
Dış ürün kimliği; örneğin WooCommerce ürün kimliği.
runtimeType
eşitleme için evet
viewer, configurator veya customizer.
status
hayır
draft, active, inactive, archived veya legacy_active.
legacyStorefrontProductId
hayır
İsteğe bağlı eski eşleştirme kimliği.
legacyBindingMeta
hayır
İsteğe bağlı JSON meta verisi; örneğin 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 bağlantı değişimi uç noktası, tek kullanımlık aktarım kodunu tüketir ve eklentiye API kimlik bilgilerini döndürür. Genel amaçlı kimlik bilgisi oluşturma uç noktası değildir.
Denetleyici hatalarının çoğu code yanıtına normalleştirilir. Kimlik doğrulama ara katmanı ve hız sınırlayıcılar bunun yerine error yanıtı döndürebilir.
// Controller error{"code":"assetCatalog.invalidType"}// Auth middleware or rate limit{"error":"Unauthorized"}{"error":"Too Many Requests"}
Tür
Sınır
Zaman aralığı
Genel
600 istek
60 saniye
GET /auth/check
60 istek
60 saniye
Sipariş/ürün okuma
300 istek
60 saniye
Sipariş yazma/yerleştirme oturumları/çalışma zamanı bağları