API - Oversikt

API - 3D-modellgenerator

Importer modeller og maler, start generatoren og håndter kommunikasjon og lagring av prosjekter.

Endepunktoversikt

MetodeEndepunktBeskrivelseTilgang
GET/public-api/v1/model-generator/catalogViser synlige generatorprodukter, konfigurasjoner og malrevisjoner.embed:session:create
GET/public-api/v1/model-generator/modelsViser modeller med deskriptorer som fastsetter bestemte kilderevisjoner av generatoren for import.embed:session:create
GET/public-api/v1/model-generator/designer-catalogReturnerer generatorens modellkatalog som brukes av Designer.embed:session:create
GET/public-api/v1/model-generator/projectsViser eierens og globalt tilgjengelige generatorprosjekter.embed:session:create
GET/public-api/v1/model-generator/projects/:projectIdReturnerer den nyeste eller valgte prosjektrevisjonen, malen og filmanifestet.embed:session:create
GET/public-api/v1/model-generator/projects/:projectId/revisions/:revisionReturnerer den nyeste eller valgte prosjektrevisjonen, malen og filmanifestet.embed:session:create
GET/public-api/v1/model-generator/projects/:projectId/artifacts/:artifactIdLaster ned en artefakt etter å ha kontrollert tilgang til prosjektet den tilhører.embed:session:create
GET/public-api/v1/model-generator/configurations/:configurationId/revisions/:revision/templateReturnerer et tilgjengelig maldokument for den valgte konfigurasjonsrevisjonen.embed:session:create
GET/public-api/v1/model-generator/configurations/:configurationId/revisions/:revision/importReturnerer importpakken for malen med tilhørende avhengighetsfiler.embed:session:create
GET/public-api/v1/model-generator/mannequinsReturnerer begge mannekengene og ressursdeskriptorene deres.embed:session:create
GET/public-api/v1/model-generator/image-libraries/:kind/assetsViser ressurser fra tekstur- eller bakgrunnsbiblioteket med filer som kan importeres.embed:session:create
GET/public-api/v1/model-generator/image-libraries/:kind/assets/:assetIdReturnerer én tekstur- eller bakgrunnsressurs med tilhørende filer som kan importeres.embed:session:create
GET/public-api/v1/model-generator/public-files/:keyLaster ned en tillatt avhengighetsfil for generatoren.embed:session:create

3D-modellgenerator

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

EndepunktDetaljer
/model-generator/modelsModelliste: name (eller q), categoryId, scope (all, own, global), limit (1-50) og offset.
/model-generator/catalogMalkatalog: generatorType, productId, audience, q, templateKey, configurationId, limit og offset.
/model-generator/projectsProsjektliste: configurationId, q, scope (all, own, global), limit og offset. Den offentlige proxyen bruker scope all som standard.
/model-generator/image-libraries/:kind/assetsTekstur- 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 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 });

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 = 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);

Eksempelsvar

{
  "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-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.

TypeBeskrivelse
ALTER_CHILD_HELLO / ALTER_PARENT_ACKDen underordnede iframe-en starter håndtrykket med en nonce; foreldresiden bekrefter samme nonce.
ALTER_CUSTOMIZER_INIT_SESSION / ALTER_CUSTOMIZER_SESSION_READYDen underordnede iframe-en ber om en redigeringsøkt for model-generator; foreldresiden returnerer det autoriserte tokenet.
ALTER_MODEL_GENERATOR_REQUESTDen underordnede iframe-en sender requestId, nonce og request som inneholder method, path, data og responseType.
ALTER_MODEL_GENERATOR_RESPONSEForeldresiden 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.