API - Přehled

API - Viewer, Configurator a Customizer

Načítejte produkty, propojujte je s nástroji a vytvářejte bezpečné relace pro vložení nástrojů Viewer, Configurator a Customizer.

Přehled koncových bodů

MetodaKoncový bodPopisPřístup
GET/public-api/v1/productsVrací produkty/návrhy obchodu s dostupností vložení a URL médií.products:read
GET/public-api/v1/products/:idVrací jeden produkt/návrh obchodu.products:read
POST/public-api/v1/embed/sessionVydává krátkodobý JWT pro vložené nástroje, včetně generátoru modelů.embed:session:create
GET/public-api/v1/runtime/bootstrapZjišťuje kontext běhového prostředí z JWT vloženého nástroje.token vloženého nástroje Bearer
POST/public-api/v1/runtime-bindings/sync-from-wordpressVytváří nebo aktualizuje vazby běhového prostředí podle propojení produktů WordPressu.libovolné ověřené přístupové údaje
PATCH/public-api/v1/runtime-bindings/:idAktualizuje vazbu běhového prostředí.libovolné ověřené přístupové údaje
POST/public-api/v1/runtime-bindings/:id/activateAktivuje vazbu běhového prostředí.libovolné ověřené přístupové údaje
POST/public-api/v1/runtime-bindings/:id/deactivateDeaktivuje vazbu běhového prostředí.libovolné ověřené přístupové údaje

Produkty obchodu

Koncové body produktů vracejí návrhy obchodu, které lze vložit jako Viewer, Configurator nebo Customizer.

ParametrPovinnéPodrobnosti
nameneVyhledává podle názvu produktu/návrhu.
customizernetrue nebo false.
offsetneVýchozí hodnota 0. Musí být >= 0.
limitneVýchozí hodnota 9, maximum 50.
order_byneid, name nebo created_at.
directionneASC nebo DESC.

Příklad požadavku (fetch)

const params = new URLSearchParams({
  limit: '20',
  offset: '0',
  name: 't-shirt',
  customizer: 'true',
  order_by: 'created_at',
  direction: 'DESC'
});

const products = await alterFetch(`/products?${params.toString()}`);
const product = await alterFetch('/products/381');

Příklad odpovědi

{
  "products": {
    "items": [
      {
        "id": 381,
        "name": "Men's T-Shirt",
        "createdAt": "2026-01-03T23:55:05.000Z",
        "productId": 4,
        "media": {
          "img": {
            "big": "https://alterproduct.com/public-api/v1/file/public/products/4/big.png",
            "medium": "https://alterproduct.com/public-api/v1/file/public/products/4/medium.png",
            "small": "https://alterproduct.com/public-api/v1/file/public/products/4/small.png"
          },
          "mockups": []
        },
        "storefrontProduct": {
          "id": 89,
          "idUserDesign": 381,
          "shareAccess": "public",
          "isCustomizer": 1
        },
        "runtimeBindings": [
          {
            "id": 42,
            "runtimeType": "customizer",
            "status": "active",
            "externalProductId": "wc_123"
          }
        ],
        "embeddable": {
          "viewer": true,
          "configurator": true,
          "customizer": true
        }
      }
    ],
    "total": 1
  }
}

Vazby běhového prostředí

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ů.

ParametrPovinnéPodrobnosti
designIdneID návrhu Alter Product patřícího obchodu.
externalProductIdano pro syncID externího produktu, například ID produktu WooCommerce.
runtimeTypeano pro syncviewer, configurator nebo customizer.
statusnedraft, active, inactive, archived nebo legacy_active.
legacyStorefrontProductIdneVolitelné ID staršího propojení.
legacyBindingMetaneVolitelná metadata JSON, například manifestHash.

Příklad požadavku (fetch)

await alterFetch('/runtime-bindings/sync-from-wordpress', {
  method: 'POST',
  body: JSON.stringify({
    bindings: [
      {
        externalProductId: 'wc_123',
        runtimeType: 'customizer',
        status: 'active',
        designId: 381,
        legacyBindingMeta: {
          manifestHash: 'a3b1...'
        }
      }
    ]
  })
});

await alterFetch('/runtime-bindings/42', {
  method: 'PATCH',
  body: JSON.stringify({
    status: 'inactive'
  })
});

await alterFetch('/runtime-bindings/42/activate', { method: 'POST' });
await alterFetch('/runtime-bindings/42/deactivate', { method: 'POST' });

wordpress_local

await alterFetch('/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'
          }
        }
      }
    ]
  })
});

Příklad odpovědi

{
  "message": "runtimeBinding.syncCompleted",
  "runtimeBindings": [
    {
      "id": 42,
      "designId": 381,
      "externalProductId": "wc_123",
      "runtimeType": "customizer",
      "status": "active"
    }
  ]
}

Relace vložených nástrojů a inicializace běhového prostředí

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.

ParametrPovinnéPodrobnosti
runtimeBindingIddoporučenéPreferovaný identifikátor aktivních vazeb běhového prostředí.
toolpovinné bez runtimeBindingIddesigner | viewer | configurator | customizer | model-generator
toolIdtool: model-generatorKladné číselné ID místního projektu generátoru, nikoli jeho UUID ani ID produktu WooCommerce.
originanoOrigin, na kterém se vložený nástroj vykresluje, například https://yourstore.com.
designIdjeden identifikátorID návrhu Alter Product. Nekombinujte s orderId.
orderIdjeden identifikátorID objednávky Customizeru. Platí pouze pro customizer.
cartKey + cartModeneKontext košíku pouze pro Customizer. cartMode je view nebo edit.

Příklad požadavku (fetch)

const session = await alterFetch('/embed/session', {
  method: 'POST',
  headers: {
    'x-alter-client-fingerprint': '9f1b7a5e4b3c2d1f9f1b7a5e4b3c2d1f'
  },
  body: JSON.stringify({
    runtimeBindingId: 42,
    origin: 'https://yourstore.com'
  })
});

const bootstrapResponse = await fetch('https://alterproduct.com/public-api/v1/runtime/bootstrap', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${session.token}`
  }
});

const bootstrap = await bootstrapResponse.json();
console.log({ session, bootstrap });

Poznámky

await alterFetch('/embed/session', {
  method: 'POST',
  body: JSON.stringify({
    tool: 'customizer',
    origin: 'https://yourstore.com',
    orderId: 123
  })
});

await alterFetch('/embed/session', {
  method: 'POST',
  body: JSON.stringify({
    tool: 'viewer',
    origin: 'https://yourstore.com',
    designId: 381
  })
});

Příklad odpovědi

{
  "token": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjEifQ...",
  "expiresIn": 900,
  "kid": "1",
  "mode": "design",
  "runtimeBindingId": 42,
  "runtimeType": "customizer"
}

Runtime bootstrap

{
  "runtimeBindingId": 42,
  "designId": 381,
  "productId": "wc_123",
  "runtimeType": "customizer",
  "storageMode": "wordpress_local",
  "manifestUrl": "https://yourstore.com/wp-content/uploads/alter/381/manifest.json",
  "assetBaseUrl": "https://yourstore.com/wp-content/uploads/alter/381/",
  "manifestHash": "a3b1...",
  "planCapabilities": {
    "viewer": true,
    "configurator": true,
    "customizer": true
  },
  "cartKey": null,
  "cartMode": null,
  "orderId": null
}