API - Översikt

API - 3D-modellgenerator

Importera modeller och mallar, starta generatorn och hantera kommunikation och lagring av projekt.

Ändpunktsöversikt

MetodÄndpunktBeskrivningÅtkomst
GET/public-api/v1/model-generator/catalogListar synliga generatorprodukter, konfigurationer och mallrevisioner.embed:session:create
GET/public-api/v1/model-generator/modelsListar modeller med låsta beskrivningar av generatorkällan för import.embed:session:create
GET/public-api/v1/model-generator/designer-catalogReturnerar katalogen med generatormodeller som används av Designer.embed:session:create
GET/public-api/v1/model-generator/projectsListar ägarens och globalt tillgängliga generatorprojekt.embed:session:create
GET/public-api/v1/model-generator/projects/:projectIdReturnerar den senaste eller valda projektrevisionen, mallen och filmanifestet.embed:session:create
GET/public-api/v1/model-generator/projects/:projectId/revisions/:revisionReturnerar den senaste eller valda projektrevisionen, mallen och filmanifestet.embed:session:create
GET/public-api/v1/model-generator/projects/:projectId/artifacts/:artifactIdLaddar ned en resultatfil efter kontroll av åtkomsten till dess projekt.embed:session:create
GET/public-api/v1/model-generator/configurations/:configurationId/revisions/:revision/templateReturnerar ett tillgängligt malldokument för den valda konfigurationsrevisionen.embed:session:create
GET/public-api/v1/model-generator/configurations/:configurationId/revisions/:revision/importReturnerar mallens importpaket med beroendefiler.embed:session:create
GET/public-api/v1/model-generator/mannequinsReturnerar båda mannequinerna och deras resursbeskrivningar.embed:session:create
GET/public-api/v1/model-generator/image-libraries/:kind/assetsListar resurser från textur- eller bakgrundsbiblioteket med filer som kan importeras.embed:session:create
GET/public-api/v1/model-generator/image-libraries/:kind/assets/:assetIdReturnerar en textur- eller bakgrundsresurs med dess importerbara filer.embed:session:create
GET/public-api/v1/model-generator/public-files/:keyLaddar ned en tillåten beroendefil för generatorn.embed:session:create

3D-modellgenerator

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

ÄndpunktDetaljer
/model-generator/modelsModellista: name (eller q), categoryId, scope (all, own, global), limit (1-50) och offset.
/model-generator/catalogMallkatalog: generatorType, productId, audience, q, templateKey, configurationId, limit och offset.
/model-generator/projectsProjektlista: 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/assetsTextur-/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 alterFetch and authHeaders from the API connection guide.
const catalog = await alterFetch('/model-generator/models?' + new URLSearchParams({
  scope: 'all', limit: '24', offset: '0'
}));

const selected = catalog.items[0];
if (!selected?.generator) throw new Error('Select an available generator model');

const importPath = selected.generator.importPath;
if (!importPath.startsWith('/v1/model-generator/projects/')) {
  throw new Error('Invalid generator import path');
}
const bundle = await alterFetch(importPath.slice('/v1'.length));

for (const file of bundle.files) {
  if (!file.path.startsWith('/v1/model-generator/')) {
    throw new Error('Invalid generator file path');
  }
  const response = await fetch('https://alterproduct.com/public-api' + file.path, {
    headers: authHeaders,
    redirect: 'error'
  });
  if (!response.ok) throw new Error(`File download failed: ${response.status}`);
  const bytes = new Uint8Array(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 = await alterFetch('/assets/products/' + selected.generator.productId);
const mannequins = await alterFetch('/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 = await alterFetch('/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 = await fetch('https://alterproduct.com/public-api/v1/runtime/bootstrap', {
  headers: { Authorization: `Bearer ${session.token}` }
});
if (!bootstrapResponse.ok) throw new Error('Generator bootstrap failed');
const context = await bootstrapResponse.json();
console.log(context);

Exempel på svar

{
  "runtimeBindingId": null,
  "designId": null,
  "productId": 42,
  "toolId": 42,
  "runtimeType": "model-generator",
  "storageMode": "wordpress_local",
  "parentOrigin": "https://yourstore.com"
}
// Host page: WordPress returns a numeric toolId and a UUID in id.
const url = new URL('https://alterproduct.com/app/model-generator');
url.search = new URLSearchParams({
  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.

TypBeskrivning
ALTER_CHILD_HELLO / ALTER_PARENT_ACKBarnfönstret inleder handskakningen med en nonce; föräldrafönstret bekräftar samma nonce.
ALTER_CUSTOMIZER_INIT_SESSION / ALTER_CUSTOMIZER_SESSION_READYBarnfönstret begär en redigeringssession för model-generator; föräldrafönstret returnerar en auktoriserad token.
ALTER_MODEL_GENERATOR_REQUESTBarnfönstret skickar requestId, nonce och request med method, path, data och responseType.
ALTER_MODEL_GENERATOR_RESPONSEFö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.