VÝVOJÁŘI · Referenční dokumentace Integration API

Referenční dokumentace Fabrixa Integration API

30 min čtení Poslední aktualizace: 06-11-2026 119 zobrazení

Integration API vám pomáhá vytvářet a spravovat objednávky Fabrixa, spouštět Fabrixa Studio a zůstat prostřednictvím webhooků v souladu se stavem výroby a plnění. API se řídí konvencemi REST a pro všechna těla požadavků i odpovědí používá JSON.

ZÁKLADNÍ URL

https://api.fabrixa.com/v2/integration

Všechny požadavky posílejte na tuto základní URL, za kterou následuje cesta konkrétního endpointu. Základní URL je výchozím bodem pro práci s Fabrixa API - získávání, vytváření, aktualizaci nebo mazání zdrojů.

PŘED PRVNÍM POŽADAVKEM

Autentizace

Pro přístup k Integration API autentizujte své požadavky pomocí přístupového tokenu aplikace a klíče aplikace:

Hlavička Authorization
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Hlavička s klíčem aplikace
X-Application-Key: APPLICATION_KEY
Ukázkový příkaz cURL
curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/ping' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Nahraďte APPLICATION_ACCESS_TOKEN svým skutečným přístupovým tokenem a APPLICATION_KEY svým skutečným klíčem aplikace.

JAK JSOU ODPOVĚDI STRUKTUROVÁNY

Endpointy a požadavky

Endpointy Integration API jsou organizovány podle typu zdroje a dodržují architektonický styl REST. Každý endpoint představuje zdroj a akce nad těmito zdroji se provádějí standardními metodami HTTP.

Všechny požadavky a odpovědi Integration API jsou ve formátu JSON, což poskytuje konzistentní a snadno použitelné rozhraní pro práci s API.

Úplné podrobnosti o všech endpointech včetně ukázek požadavků a odpovědí najdete v naší dokumentaci Swagger.

Formát odpovědi

Všechny endpointy vracejí data ve standardizovaném formátu s těmito objekty:

{
  "links": {
    "self": "https://api.fabrixa.com/v2/integration/products",
    "first_page": "https://api.fabrixa.com/v2/integration/products?page=1",
    "last_page": "https://api.fabrixa.com/v2/integration/products?page=2",
    "next_page": "https://api.fabrixa.com/v2/integration/products?page=2",
    "prev_page": null
  },
  "meta": {
    "total": 2,
    "current_page": 1,
    "per_page": 10
  },
  "data": [
    {
      "id": 1,
      "name": "Product 1",
      "description": "Description of Product 1"
    },
    {
      "id": 2,
      "name": "Product 2",
      "description": "Description of Product 2"
    }
  ]
}

Popis objektů odpovědi

links

Obsahuje odkazy pro stránkování, kterými se lze pohybovat mezi výsledky.

  • self — URL aktuální stránky.
  • first_page — URL první stránky výsledků.
  • last_page — URL poslední stránky výsledků.
  • next_page — URL následující stránky. null, pokud další stránka neexistuje.
  • prev_page — URL předchozí stránky. null, pokud předchozí stránka neexistuje.

meta

Obsahuje metadata o odpovědi, například informace o stránkování.

  • total — celkový počet položek dostupných na všech stránkách.
  • current_page — číslo aktuální stránky výsledků.
  • per_page — počet položek na stránku.

data

Hlavní obsah odpovědi. data se liší podle endpointu - může jít o jeden objekt, například jeden produkt, nebo o pole objektů, například seznam produktů.

KDYŽ SE NĚCO POKAZÍ

Chyby a stavové kódy

Všechny požadavky na API vracejí stavové kódy HTTP, které poskytují informaci o odpovědi.

400 Bad Request

Server nemůže požadavek zpracovat kvůli chybám validace - chybějícím nebo neplatným parametrům.

401 Unauthorized

Klient neposkytl platné autentizační údaje. Vrací se také tehdy, když byl přístupový token zneplatněn.

403 Forbidden

Server požadavek zamítl kvůli nedostatečným oprávněním, obvykle způsobeným nesprávnými nebo chybějícími přístupovými právy.

404 Not Found

Požadovaný zdroj nebyl na serveru nalezen.

412 Precondition Failed

Požadavek nelze provést v aktuálním stavu zdroje, například u objednávky, kterou již nelze zrušit.

429 Too Many Requests

Klient překročil povolený počet požadavků v daném časovém úseku. Viz Limity požadavků.

5xx Errors

Došlo k interní chybě serveru. Kontaktujte prosím podporu Fabrixa s podrobnostmi o neúspěšném požadavku.

Tělo chybové odpovědi

Ukázka těla chybové odpovědi:

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/ping"
    },
    "meta": [],
    "errors": {
        "messages": [
            "Application Key is not specified."
        ]
    }
}

errors obsahuje podrobnosti o tom, co selhalo. Pole messages uvádí popisy chyb. U chyby Bad Request obdržíte názvy polí, která neprošla validací.

ZNEJTE SVÉ LIMITY POŽADAVKŮ

Limity požadavků

Integration API podporuje limit 30 požadavků na aplikaci za minutu.

Pokud tento limit překročíte, obdržíte odpověď 429 Too Many Requests.

Všechny odpovědi Integration API obsahují hlavičku X-RateLimit-Remaining, tedy kolik požadavků může klient ještě provést, a hlavičku X-RateLimit-Limit, tedy celkový povolený počet za minutu.

VYZKOUŠEJTE PŘED SPUŠTĚNÍM

Režim sandbox

Režim sandbox vám umožňuje otestovat integraci od začátku do konce dříve, než se jakákoli skutečná objednávka vyrobí nebo zaúčtuje. Platí pro celý váš účet: objednávky ze všech prodejních kanálů, včetně Integration API a připojených obchodů Shopify a WooCommerce, se nevyrábějí a neúčtují na váš zůstatek. Váš účet je v režimu sandbox, dokud má stav čeká na aktivaci.

V režimu sandbox můžete:

Chcete-li otestovat objednávky, přidejte produkty z katalogu Fabrixa: otevřete produkt, klikněte na Prodávat a vyberte varianty a návrhy. Poté se zobrazí v části Moje produkty.

Chcete-li přepnout účet do režimu sandbox, otevřete Platform, přejděte na Nastavení → Firma → Režim sandbox a klikněte na Přepnout do režimu sandbox. Můžete jej zapnout také při přidání nového prodejního kanálu, včetně kanálu Integration API, nebo napsat na support@fabrixa.com a my váš účet přepneme za vás. Režim sandbox je dostupný pouze pro aktivní účty.

Až budete připraveni, aktivujte účet sami v Platformě v části Nastavení → Firma → Režim sandbox. Můžete také napsat na support@fabrixa.com a my jej aktivujeme za vás. Připojené obchody a přístupové údaje k API dál fungují, takže není třeba nic znovu nastavovat.

Po aktivaci jdou všechny nové objednávky do výroby a účtují se na váš zůstatek. Objednávky vytvořené před aktivací zůstávají testovací: nikdy se nevyrábějí ani neúčtují, ani po aktivaci.

NAJDĚTE, CO PRODÁVAT

Produkty

Katalog je vše, co Fabrixa vyrábí. Vaše produkty jsou produkty z katalogu, které jste přidali do svého účtu Fabrixa, s vlastními názvy, popisy, obrázky a SKU. Řádek objednávky odkazuje na variantu produktu - jednu velikost nebo provedení produktu - pomocí jejího sku nebo variant_id: na variantu jednoho z vašich produktů, nebo na variantu z katalogu objednanou přímo.

CO FABRIXA VYRÁBÍ

Procházení katalogu

Seznam produktů, které Fabrixa vyrábí, získáte požadavkem GET na https://api.fabrixa.com/v2/integration/catalog/products se svými přihlašovacími údaji. Obsahuje aktivní produkty, které mají variantu aktuálně vyráběnou tiskovým partnerem, a pouze tyto varianty - každou s jejím SKU, prodejní cenou, rozměry a hodnotami voleb.

Parametry dotazu

  • page a limit (až 100) - rozdělí seznam na stránky. Bez nich se celý katalog vrátí v jedné odpovědi.
  • search - produkty, jejichž název obsahuje text nebo jejichž slug či SKU varianty jím začíná.
  • category_id - produkty v kategorii; parent_category_id - produkty v libovolné podkategorii kategorie nejvyšší úrovně. Viz Kategorie katalogu.
  • group_id - produkty ve skupině katalogu.
  • sort_by - name, created, updated, type, popular nebo sold, v pořadí sort_order asc nebo desc. Ve výchozím nastavení jsou první nejnovější produkty.

Ukázkový požadavek

curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/catalog/products?category_id=19&limit=10' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/catalog/products",
        "first_page": "https://api.fabrixa.com/v2/integration/catalog/products?page=1",
        "last_page": "https://api.fabrixa.com/v2/integration/catalog/products?page=1",
        "next_page": null,
        "prev_page": null
    },
    "meta": {
        "total": 1,
        "current_page": 1,
        "per_page": 10
    },
    "data": [
        {
            "id": 1305,
            "name": "Duvet Cover",
            "subtitle": "Duvet Cover with a pillow",
            "description": "

Soft personalized duvet cover.

", "slug": "duvet-cover", "code": "DUVET-001", "HS_code": "63023100", "created_at": "2024-08-16T09:32:07.000000Z", "updated_at": "2024-08-16T09:38:50.000000Z", "is_sellable": true, "variants_min_selling_price": "29.95", "variants_max_selling_price": "49.95", "type": { "id": 5, "name": "Duvet cover" }, "status": { "id": 2, "name": "Active" }, "categories": [ { "id": 19, "name": "Duvet covers", "description": "Personalized duvet covers", "parent_category": { "id": 8, "name": "Bedroom", "description": "Bedroom products" } } ], "images": [ { "id": 5566, "url": "https://storage.googleapis.com/example/catalog/duvet-cover.jpg", "is_main": true, "created_at": "2024-08-16T09:32:07.000000Z", "screen_type_size": "large", "sort_number": 1 } ], "variants": [ { "id": 2705, "name": "Duvet Cover", "subtitle": "140x200", "description": null, "SKU": "COT864311", "selling_price": "29.95", "width": "140.00", "height": "200.00", "length": "2.00", "weight": "1.20", "created_at": "2024-08-06T11:23:44.000000Z", "updated_at": "2024-08-16T09:36:37.000000Z", "options": [ { "id": 151, "name": "Duvet Size", "values": [ { "id": 471, "value": "140x200" } ] } ] }, { "id": 2708, "name": "Duvet Cover", "subtitle": "200x220", "description": null, "SKU": "COT864314", "selling_price": "49.95", "width": "200.00", "height": "220.00", "length": "2.00", "weight": "1.80", "created_at": "2024-08-06T11:23:44.000000Z", "updated_at": "2024-08-16T09:37:11.000000Z", "options": [ { "id": 151, "name": "Duvet Size", "values": [ { "id": 474, "value": "200x220" } ] } ] } ] } ] }

Pole odpovědi

  • id, name, subtitle, description (HTML), slug, code a HS_code - kód celního sazebníku.
  • is_sellable - zda je produkt otevřený k prodeji. Uzavřený produkt je v seznamu stále, ale objednávka některé z jeho variant je odmítnuta.
  • variants_min_selling_price a variants_max_selling_price - cenové rozpětí uvedených variant.
  • type - typ produktu, který určuje tiskové vrstvy a pořadí stránek PDF; status - v katalogu vždy Active.
  • categories - kategorie, do kterých produkt patří, každá se svou parent_category.
  • images - obrázky produktu s url, is_main, screen_type_size a sort_number.
  • variants - provedení produktu, která lze objednat: id, name, subtitle, SKU, selling_price, rozměry width, height, length a weight a options - hodnoty voleb, které tuto variantu určují, například její velikost.
ZORIENTUJTE SE V KATALOGU

Kategorie katalogu

Seznam kategorií, do kterých je katalog uspořádán, získáte požadavkem GET na https://api.fabrixa.com/v2/integration/catalog/categories se svými přihlašovacími údaji. Odpověď obsahuje kategorie nejvyšší úrovně, každou s podkategoriemi vnořenými v sub_categories a počtem produktů katalogu v ní v products_count. Při procházení katalogu předejte id kategorie jako category_id, nebo id kategorie nejvyšší úrovně jako parent_category_id, abyste získali produkty všech jejích podkategorií najednou.

Parametry dotazu

  • page a limit (až 100) - rozdělí seznam na stránky. Bez nich se vrátí všechny kategorie.
  • search - kategorie, jejichž název obsahuje text.
  • with_products_only - true vynechá kategorie, které neobsahují žádný produkt katalogu ani přímo, ani v podkategorii.
  • sort_by - category_name nebo category_created, v pořadí sort_order asc nebo desc. Ve výchozím nastavení jsou kategorie v pořadí katalogu.

Ukázkový požadavek

curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/catalog/categories?with_products_only=true' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/catalog/categories"
    },
    "meta": {
        "total": 1
    },
    "data": [
        {
            "id": 8,
            "name": "Bedroom",
            "description": "Bedroom products",
            "sort_number": 1,
            "slug": "bedroom",
            "products_count": 12,
            "sub_categories": [
                {
                    "id": 19,
                    "name": "Duvet covers",
                    "description": "Personalized duvet covers",
                    "sort_number": 1,
                    "slug": "duvet-covers",
                    "products_count": 7,
                    "images": [],
                    "sub_categories": []
                },
                {
                    "id": 20,
                    "name": "Pillows",
                    "description": "Personalized pillows and pillowcases",
                    "sort_number": 2,
                    "slug": "pillows",
                    "products_count": 4,
                    "images": [],
                    "sub_categories": []
                }
            ],
            "parent_category": null,
            "images": [
                {
                    "id": 781,
                    "url": "https://storage.googleapis.com/example/catalog/bedroom.jpg",
                    "is_main": true,
                    "created_at": "2024-08-16T09:32:07.000000Z",
                    "screen_type_size": "large",
                    "sort_number": 1
                }
            ]
        }
    ]
}
VÁŠ ÚČET

Vaše produkty

Seznam produktů ve svém účtu získáte požadavkem GET na https://api.fabrixa.com/v2/integration/products se svými přihlašovacími údaji. Vaše produkty jsou produkty z katalogu, které jste přidali do svého účtu Fabrixa: nesou názvy, popisy a obrázky, které jste jim tam dali, a jejich varianty hodnoty SKU, které jste zvolili. V seznamu jsou pouze aktivní produkty, deset na stránku, pokud nepředáte limit.

Parametry dotazu

  • page a limit (až 100) - která stránka se má vrátit a její velikost; ve výchozím nastavení první stránka s deseti produkty.
  • search - produkty, jejichž název obsahuje text nebo jejichž slug či SKU varianty jím začíná.

Ukázkový požadavek

curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/products?search=duvet' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/products",
        "first_page": "https://api.fabrixa.com/v2/integration/products?page=1",
        "last_page": "https://api.fabrixa.com/v2/integration/products?page=1",
        "next_page": null,
        "prev_page": null
    },
    "meta": {
        "total": 1,
        "current_page": 1,
        "per_page": 10
    },
    "data": [
        {
            "id": 5321,
            "name": "Dreamy Duvet Cover",
            "subtitle": "Duvet cover with a matching pillowcase",
            "description": "

Our personalized duvet cover, printed on soft cotton sateen.

", "slug": "dreamy-duvet-cover", "width": "50.00", "height": "50.00", "length": "20.00", "weight": "100.00", "created_at": "2025-03-04T10:12:40.000000Z", "updated_at": "2025-03-04T10:15:02.000000Z", "type": { "id": 5, "name": "Duvet cover", "description": "Duvet cover with pillow" }, "available_options": [ { "id": 151, "name": "Duvet Size", "values": [ { "id": 471, "value": "140x200" }, { "id": 474, "value": "200x220" } ] } ], "categories": [ { "id": 912, "name": "Bedding" } ], "collections": [ { "id": 77, "name": "Spring 2025" } ], "images": [ { "id": 48120, "is_main": true, "image_size": "1200x1200", "url": "https://storage.googleapis.com/example/shop/dreamy-duvet-cover.jpg", "screen_type_size": "large", "sort_number": 1 } ], "variants": [ { "id": 32323, "name": "Dreamy Duvet Cover", "subtitle": "140x200", "description": null, "SKU": "DDC-140200", "created_at": "2025-03-04T10:12:41.000000Z", "updated_at": "2025-03-04T10:12:41.000000Z", "options": [ { "id": 151, "name": "Duvet Size", "values": [ { "id": 471, "value": "140x200" } ] } ], "images": [], "available_source_types": ["duvet", "pillow", "pillow-back"], "required_source_types": ["duvet", "pillow"] }, { "id": 32326, "name": "Dreamy Duvet Cover", "subtitle": "200x220", "description": null, "SKU": "DDC-200220", "created_at": "2025-03-04T10:12:41.000000Z", "updated_at": "2025-03-04T10:12:41.000000Z", "options": [ { "id": 151, "name": "Duvet Size", "values": [ { "id": 474, "value": "200x220" } ] } ], "images": [], "available_source_types": ["duvet", "pillow", "pillow-back"], "required_source_types": ["duvet", "pillow"] } ] } ] }

Jeden produkt přečtete požadavkem GET na https://api.fabrixa.com/v2/integration/products/{product_id}, kde {product_id} je jeho id. Odpověď obsahuje stejná pole jako seznam. Produkt, který není ve vašem účtu, ani produkt z katalogu, odpoví 404 Not Found se zprávou Product not found.

Pole odpovědi

  • id, name, subtitle, description (HTML), slug, width, height, length a weight.
  • type - typ produktu, který určuje tiskové vrstvy a pořadí stránek PDF.
  • available_options - každá volba produktu se všemi jejími hodnotami, například každá velikost, ve které se vyrábí; každá varianta má jednu hodnotu na volbu.
  • categories a collections - kategorie a kolekce, do kterých jste produkt ve svém účtu zařadili.
  • images - obrázky produktu s url, is_main, image_size, screen_type_size a sort_number.
  • variants - provedení produktu, která lze objednat, viz Varianty produktů: id, name, subtitle, SKU, options, images a tiskové vrstvy v available_source_types a required_source_types.
NA CO ODKAZUJE ŘÁDEK OBJEDNÁVKY

Varianty produktů

Varianta je jedno provedení produktu, které lze objednat - jedna velikost, jedna barva - a právě na ni odkazuje řádek objednávky pomocí sku nebo variant_id. Variantu jednoho ze svých produktů přečtete požadavkem GET na https://api.fabrixa.com/v2/integration/variants/{variant_id}, kde {variant_id} je její id. Varianta produktu, který není ve vašem účtu, odpoví 404 Not Found se zprávou Variant not found.

Ukázkový požadavek

curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/variants/32323' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/variants/32323"
    },
    "meta": [],
    "data": {
        "id": 32323,
        "name": "Dreamy Duvet Cover",
        "subtitle": "140x200",
        "description": null,
        "SKU": "DDC-140200",
        "created_at": "2025-03-04T10:12:41.000000Z",
        "updated_at": "2025-03-04T10:12:41.000000Z",
        "width": "140.00",
        "height": "200.00",
        "length": "2.00",
        "weight": "1.20",
        "options": [
            {
                "id": 151,
                "name": "Duvet Size",
                "values": [
                    {
                        "id": 471,
                        "value": "140x200"
                    }
                ]
            }
        ],
        "images": [],
        "product": {
            "id": 5321,
            "name": "Dreamy Duvet Cover",
            "subtitle": "Duvet cover with a matching pillowcase",
            "description": "

Our personalized duvet cover, printed on soft cotton sateen.

", "description2": null, "slug": "dreamy-duvet-cover", "created_at": "2025-03-04T10:12:40.000000Z", "updated_at": "2025-03-04T10:15:02.000000Z" }, "available_source_types": ["duvet", "pillow", "pillow-back"], "required_source_types": ["duvet", "pillow"] } }

Pole odpovědi

  • id, name, subtitle, description, SKU, width, height, length, weight, options, images a product - produkt, ke kterému varianta patří.
  • available_source_types - tiskové vrstvy varianty pojmenované tak, jak je zná její výrobní proces. Kromě "file", které každá varianta přijímá pro PDF, jsou to hodnoty, které může mít type zdrojového souboru; produkt s jedinou tiskovou vrstvou uvádí "print".
  • required_source_types - vrstvy, které musí tiskový soubor pokrýt. PDF odeslané jako "file" je pokryje svými stránkami v pořadí stránek daného typu produktu. Jinak řádek potřebuje soubor JPEG, PNG nebo TIFF pro každou z nich s názvem vrstvy jako type; řádek, ve kterém některá chybí, je odmítnut s 400 Bad Request a názvy chybějících vrstev.

Řádek objednávky pro tuto variantu s PDF, jehož stránky jsou její vrstvy:

"rows": [
    {
        "sku": "DDC-140200",
        "quantity": 1,
        "sources": [
            {
                "type": "file",
                "url": "https://samples-files.com/samples/duvet-cover.pdf"
            }
        ]
    }
]

Které varianty lze objednat

  • Řádek objednávky může odkazovat na variantu produktu z vašeho účtu nebo přímo na variantu z katalogu, nikdy na produkt jiného klienta. Varianta se vyhledá podle variant_id nebo podle sku bez ohledu na velikost písmen.
  • Varianta musí být aktivní a její produkt aktivní a otevřený k prodeji. U vaší kopie produktu z katalogu musí být aktivní i produkt z katalogu a varianta z katalogu zapnutá.
  • Jinak je objednávka odmítnuta s 400 Bad Request a důvodem pro daný řádek: The variant not found., The product is not active., The catalog product is not active., The product is not open for sales., The variant is not active. nebo The catalog variant is not active.
VYTVÁŘENÍ A SLEDOVÁNÍ OBJEDNÁVEK

Objednávky

Vytvářejte objednávky ve Fabrixe ze svého vlastního obchodu nebo platformy, přiložte potřebné tiskové soubory a sledujte každou položku, jak postupuje plněním.

PŘIPRAVTE SI DATA OBJEDNÁVKY

Vytvoření objednávky

Chcete-li vytvořit objednávku přes Fabrixa Integration API, odešlete požadavek POST na https://api.fabrixa.com/v2/integration/orders. Tělo požadavku musí obsahovat:

Struktura těla požadavku

  • number (nepovinné) - číslo objednávky. Pokud není uvedeno, vygeneruje se unikátní číslo.
  • comments (nepovinné) - jakékoli další komentáře nebo poznámky k objednávce.
  • purchased_at - datum a čas nákupu objednávky ve formátu YYYY-MM-DD HH:MM:SS.
  • client_ip (nepovinné) - IP adresa zákazníka.
  • client_user_agent (nepovinné) - řetězec user-agent zákazníka.
  • rows - pole položek objednávky, každá obsahuje:
    • sku - SKU varianty produktu. Podrobnosti viz Swagger.
    • quantity - objednané množství varianty produktu.
    • client_barcode (nepovinné) - unikátní identifikátor na straně klienta pro každou položku objednávky ve formátu Code 128.
    • cart_item_key (povinné bez sources) - unikátní identifikátor z platformy, která vkládá Fabrixa Studio, používaný ke spojení uložených personalizací s objednávkou.
    • sources (povinné bez cart_item_key) - pole zdrojových souborů spojených s produktem, každý obsahuje:
      • type - "file" pro PDF nebo "print" pro soubor JPEG, PNG či TIFF.
      • url - URL zdrojového souboru.
  • customer - údaje o zákazníkovi:
    • first_name, last_name, email, phone.
  • shipping_address - údaje o doručení:
    • address, address2 (nepovinné), address3 (nepovinné).
    • city, country_code (ISO 3166-2), country, postal_code, state (nepovinné).
    • first_name, last_name, phone (nepovinné), company (nepovinné).
  • shipping_label (nepovinné) - údaje o etiketě:
    • method_name - např. "Post NL".
    • tracking_number, tracking_url, label_pdf_url.
    • date_created - ve formátu YYYY-MM-DD HH:MM:SS.

Ukázkový požadavek

{
  "number": "NL2024010201",
  "comments": "Customer agrees with a low resolution file.",
  "purchased_at": "2024-06-26 21:12:22",
  "client_ip": "127.0.0.1",
  "client_user_agent": "Mozilla",
  "rows": [
    {
      "variant_id": 2705,
      "quantity": 1,
      "client_barcode": "1234567890",
      "sources": [
        {
          "type": "file",
          "url": "https://samples-files.com/samples/sample.pdf"
        }
      ]
    }
  ],
  "customer": {
    "first_name": "John",
    "last_name": "Doe",
    "email": "3VJtP@example.com",
    "phone": "0612345678"
  },
  "shipping_address": {
    "address": "Voorbeeldstraat",
    "address2": "17",
    "city": "Amsterdam",
    "country_code": "NL",
    "country": "Netherlands",
    "postal_code": "1012 AB",
    "state": "North Holland",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "0612345678"
  },
  "shipping_label": {
    "method_name": "Post NL",
    "tracking_number": "3SABCD1234567",
    "tracking_url": "https://postnl.nl/tracktrace/3SABCD1234567",
    "label_pdf_url": "https://api.fabrixa.com/storage/8966630826422f36d822f91680012141.pdf",
    "date_created": "2024-01-01 00:00:00"
  }
}

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/orders"
    },
    "meta": [],
    "data": {
        "id": 20338,
        "number": "NL2024010201",
        "comments": "Customer agrees with a low resolution file.",
        "is_archived": false,
        "status": "imported",
        "fulfillment_status": "unfulfilled",
        "purchased_at": "2024-06-26T21:12:22.000000Z",
        "created_at": "2024-06-26T21:15:03.000000Z",
        "updated_at": "2024-06-26T21:15:04.000000Z",
        "rows": [
            {
                "id": 41600,
                "quantity": 1,
                "client_barcode": "1234567890",
                "fulfillment_status": "unfulfilled",
                "variant": {
                    "id": 2705,
                    "name": "Duvet Cover",
                    "subtitle": "140x200",
                    "SKU": "COT864311",
                    "product": {
                        "id": 1305,
                        "name": "Duvet Cover",
                        "subtitle": "Duvet Cover with a pillow"
                    }
                },
                "sources": [
                    {
                        "type": "file",
                        "url": "https://samples-files.com/samples/sample.pdf",
                        "properties": null
                    }
                ]
            }
        ],
        "shipments": [],
        "customer": {
            "email": "3VJtP@example.com",
            "first_name": "John",
            "last_name": "Doe",
            "phone": "0612345678"
        },
        "shipping_address": {
            "address": "Voorbeeldstraat",
            "address2": "17",
            "address3": null,
            "city": "Amsterdam",
            "country": "Netherlands",
            "country_code": "NL",
            "company": null,
            "first_name": "John",
            "last_name": "Doe",
            "phone": "0612345678",
            "state": "North Holland",
            "postal_code": "1012 AB"
        }
    }
}
ZMĚŇTE ÚDAJE OBJEDNÁVKY

Úprava objednávky

Chcete-li upravit objednávku, odešlete požadavek PATCH na https://api.fabrixa.com/v2/integration/orders/{order_id}, kde {order_id} je ID objednávky ve Fabrixa. Změní se jen pole, která odešlete, a stav objednávky zůstane stejný. Odpověď obsahuje upravenou objednávku. Můžete změnit:

  • number, comments, purchased_at, client_ip, client_user_agent.
  • customer - first_name, last_name, email, phone.
  • shipping_address - stejná pole jako při vytváření objednávky.

Ukázkový požadavek

{
  "comments": "Deliver to the neighbours if nobody is home.",
  "shipping_address": {
    "address": "Voorbeeldstraat",
    "address2": "19",
    "city": "Amsterdam",
    "country_code": "NL",
    "country": "Netherlands",
    "postal_code": "1012 AB",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "0612345678"
  }
}

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/orders/20338"
    },
    "meta": [],
    "data": {
        "id": 20338,
        "number": "NL2024010201",
        "comments": "Deliver to the neighbours if nobody is home.",
        "is_archived": false,
        "status": "imported",
        "fulfillment_status": "unfulfilled",
        "purchased_at": "2024-06-26T21:12:22.000000Z",
        "created_at": "2024-06-26T21:15:03.000000Z",
        "updated_at": "2024-06-27T09:41:18.000000Z",
        "rows": [
            {
                "id": 41600,
                "quantity": 1,
                "client_barcode": "1234567890",
                "fulfillment_status": "unfulfilled",
                "variant": {
                    "id": 2705,
                    "name": "Duvet Cover",
                    "subtitle": "140x200",
                    "SKU": "COT864311",
                    "product": {
                        "id": 1305,
                        "name": "Duvet Cover",
                        "subtitle": "Duvet Cover with a pillow"
                    }
                },
                "sources": [
                    {
                        "type": "file",
                        "url": "https://samples-files.com/samples/sample.pdf",
                        "properties": null
                    }
                ]
            }
        ],
        "shipments": [],
        "customer": {
            "email": "3VJtP@example.com",
            "first_name": "John",
            "last_name": "Doe",
            "phone": "0612345678"
        },
        "shipping_address": {
            "address": "Voorbeeldstraat",
            "address2": "19",
            "address3": null,
            "city": "Amsterdam",
            "country": "Netherlands",
            "country_code": "NL",
            "company": null,
            "first_name": "John",
            "last_name": "Doe",
            "phone": "0612345678",
            "state": "North Holland",
            "postal_code": "1012 AB"
        }
    }
}
  • Položky objednávky nelze měnit: požadavek s rows je odmítnut s 400 Bad Request. Chcete-li změnit položky, zrušte objednávku a vytvořte novou.
  • Objednávku ve stavu on hold nelze upravit; API odpoví 412 Precondition Failed.
{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/orders/20338"
    },
    "meta": [],
    "errors": {
        "rows": [
            "Order rows cannot be changed. Cancel the order and create a new one."
        ]
    }
}
ZASTAVTE OBJEDNÁVKU

Zrušení objednávky

Chcete-li zrušit objednávku, odešlete požadavek POST bez těla na https://api.fabrixa.com/v2/integration/orders/{order_id}/cancel, kde {order_id} je ID objednávky ve Fabrixa (číselné pole id objednávky), nikoli vaše číslo objednávky. Odpověď obsahuje objednávku se stavem canceled a odešle se webhook order.updated.

  • Objednávku lze zrušit, dokud má stav created, imported, accepted nebo on hold a její fulfillment_status je stále unfulfilled. Jakmile se změní na scheduled, výroba začala a objednávku již nelze zrušit.
  • Poplatky za zrušenou objednávku se vrátí na váš zůstatek.
  • Zrušení již zrušené objednávky ji vrátí beze změny, takže požadavek lze bezpečně zopakovat.

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/orders/20338/cancel"
    },
    "meta": [],
    "data": {
        "id": 20338,
        "number": "NL2024010201",
        "comments": "Customer agrees with a low resolution file.",
        "is_archived": false,
        "status": "canceled",
        "fulfillment_status": "unfulfilled",
        "purchased_at": "2024-06-26T21:12:22.000000Z",
        "created_at": "2024-06-26T21:15:03.000000Z",
        "updated_at": "2024-06-27T10:02:45.000000Z",
        "rows": [
            {
                "id": 41600,
                "quantity": 1,
                "client_barcode": "1234567890",
                "fulfillment_status": "unfulfilled",
                "variant": {
                    "id": 2705,
                    "name": "Duvet Cover",
                    "subtitle": "140x200",
                    "SKU": "COT864311",
                    "product": {
                        "id": 1305,
                        "name": "Duvet Cover",
                        "subtitle": "Duvet Cover with a pillow"
                    }
                },
                "sources": [
                    {
                        "type": "file",
                        "url": "https://samples-files.com/samples/sample.pdf",
                        "properties": null
                    }
                ]
            }
        ],
        "shipments": [],
        "customer": {
            "email": "3VJtP@example.com",
            "first_name": "John",
            "last_name": "Doe",
            "phone": "0612345678"
        },
        "shipping_address": {
            "address": "Voorbeeldstraat",
            "address2": "17",
            "address3": null,
            "city": "Amsterdam",
            "country": "Netherlands",
            "country_code": "NL",
            "company": null,
            "first_name": "John",
            "last_name": "Doe",
            "phone": "0612345678",
            "state": "North Holland",
            "postal_code": "1012 AB"
        }
    }
}

Pokud objednávku nelze zrušit, API odpoví 412 Precondition Failed a zprávou s důvodem: její aktuální stav to nedovoluje (stav je uveden ve zprávě), nebo výroba již začala.

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/orders/20338/cancel"
    },
    "meta": [],
    "errors": {
        "messages": [
            "This order cannot be canceled in its current status (ready for shipping)."
        ]
    }
}
OD IMPORTU PO DORUČENÍ

Životní cyklus objednávky

Objednávka se sleduje pomocí tří stavů: pole status objednávky, jejího výrobního stavu fulfillment_status a pole status každé zásilky v shipments. Každá změna se odesílá ve webhooku order.updated a vrací ji GET /orders/{order_id}.

Stavy objednávky

Hodnoty pole status objednávky v pořadí, v jakém nastávají:

Stavy plnění

Hodnoty pole fulfillment_status objednávky a každé její položky v pořadí, v jakém nastávají. Stav se mění pouze dopředu, nikdy zpět:

Objednávka jako celek není nikdy zamítnuta. Jednotlivá položka může být zamítnuta při kontrole kvality během výroby. Poté se vytiskne znovu: vrátí se do stavu unfulfilled a projde výrobou ještě jednou, zatímco objednávka si ponechá svůj stav a pokračuje, jakmile je položka hotová.

Stavy zásilky

Hodnoty pole status každé zásilky v shipments v pořadí, v jakém nastávají:

Výjimky:

SLEDUJTE POLOŽKY OBJEDNÁVKY

Sledování plnění

Chcete-li získat stav plnění konkrétní objednávky, odešlete požadavek GET na https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. Odpověď obsahuje seznam plnění spojených s objednávkou včetně stavu každé položky, podrobností o produktu a průběhu výrobních kroků.

Ukázková odpověď

{
    "data": [
        {
            "id": 1499,
            "barcode": "1200004169200",
            "status": "unfulfilled",
            "created_at": "2024-08-19T12:38:59.000000Z",
            "updated_at": "2024-08-19T12:39:00.000000Z",
            "variant": {
                "id": 32327,
                "name": "Test iAPI blanket product",
                "subtitle": "100 x 150 cm",
                "SKU": "COF099191"
            },
            "product": {
                "id": 1306,
                "name": "Test iAPI blanket product",
                "subtitle": "Test iAPI blanket product"
            },
            "production_steps": [
                {
                    "id": 5,
                    "name": "Print duvet",
                    "description": "Printing the duvet according to the specified design and dimensions.",
                    "status": {
                        "value": "pending",
                        "notes": null,
                        "updated_at": null
                    }
                },
                {
                    "id": 6,
                    "name": "Print pillow",
                    "description": "Printing the pillow cover with the assigned design.",
                    "status": {
                        "value": "pending",
                        "notes": null,
                        "updated_at": null
                    }
                }
            ]
        }
    ]
}

Odpověď obsahuje seznam plnění, každé z nich poskytuje:

  • id - unikátní identifikátor plnění.
  • barcode - čárový kód pro interní sledování a identifikaci; může být vytištěn i na produktu.
  • status - aktuální stav plnění: unfulfilled nebo fulfilled.
  • created_at a updated_at - časové značky vytvoření plnění a jeho poslední aktualizace.
  • variant - podrobné informace o variantě produktu: název, podtitul, SKU.
  • product - údaje o produktu: název, podtitul.
  • production_steps - pole výrobních kroků. Seznam kroků závisí na typu produktu. Pro každý krok:
    • id - unikátní identifikátor výrobního kroku.
    • name - např. "Tisk přikrývky".
    • description - co výrobní krok obnáší.
    • status - aktuální stav:
      • pending - dosud nezahájen.
      • in progress - právě probíhá.
      • rejected - u kroku nastal problém a nebyl úspěšně dokončen.
      • done - krok byl dokončen.
    • notes - jakékoli další poznámky ke kroku.
    • updated_at - kdy byl stav kroku naposledy aktualizován.

Každý záznam plnění odpovídá konkrétnímu produktu nebo jeho variantě v objednávce a každý kus produktu v objednávce má svůj vlastní záznam plnění - každá položka je během výroby sledována samostatně.

Pokud pro objednávku nejsou vrácena žádná plnění, objednávka dosud nevstoupila do fáze zpracování.

JAK POSKYTNOUT TISKOVÉ SOUBORY

Požadavky na zdrojové soubory

Pokud k objednávce přikládáte zdrojové soubory, ujistěte se, že splňují následující požadavky:

type

Upřednostňovaným formátem zdroje je PDF. U produktu s jednou tiskovou vrstvou, například deky nebo ručníku, lze použít i soubor JPEG, PNG nebo TIFF. U produktu s více vrstvami dodejte soubor PDF, ve kterém je každá vrstva samostatnou stránkou: při zpracování se každá stránka považuje za samostatnou vrstvu, takže vícevrstvý design odešlete jako jediný soubor. Viz požadavky na PDF a pořadí stránek.

Pole type nastavte podle formátu souboru. U PDF použijte "file": každá stránka se tiskne na jednu vrstvu produktu v pořadí stránek uvedeném pro daný produkt. U souboru JPEG, PNG nebo TIFF, vhodného pro produkt s jednou tiskovou vrstvou, použijte "print".

"sources": [
    {
        "type": "file",
        "url": "https://samples-files.com/samples/source.pdf"
    }
]

Další podrobnosti najdete v dokumentaci Swagger.

url

Pole url musí obsahovat přímý odkaz na zdrojový soubor. Ujistěte se, že je URL dostupná a že soubor lze stáhnout bez autentizace. Odkaz musí zůstat dostupný po celou dobu výrobního procesu.

Jak soubor stahujeme

Soubor z vašeho serveru stahujeme dvakrát: požadavkem s Range: 0-0 při ověřování objednávky a poté celý. Oba požadavky posílají User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#sources; print file fetch); pokud váš web filtruje automatický provoz, povolte jej. URL musí používat HTTPS na portu 443 a vracet soubor přímo, bez přesměrování, se skutečným Content-Type souboru, např. application/pdf. Každý požadavek vyprší po 60 sekundách.

Formát souboru

Dodejte soubor PDF, nebo u produktu s jednou vrstvou soubor JPEG, PNG či TIFF, poskytovaný se skutečným Content-Type. Průhledné oblasti PNG se tisknou bíle. Zajistěte, aby obrázky byly kvalitní a vhodné pro tisk.

Rozměry obrázku

Maximální rozměry jsou 15 000 pixelů na každé straně. Obrázky, které tento limit překročí, mohou být zmenšeny nebo odmítnuty. Rozlišení obrázku by mělo odpovídat rozměrům produktu; jinak mohou být obrázky zmenšeny nebo obříznuty, aby se přizpůsobily.

Rozlišení

Žádný konkrétní požadavek na rozlišení - jen se ujistěte, že kvalita obrázku je pro tisk dostatečná.

Barevný prostor

Obrázky by měly být v barevném prostoru RGB, aby byly barvy reprodukovány správně. Jiné barevné prostory budou při zpracování převedeny, což může vést k nesprávným barvám.

Velikost souboru

Každý zdrojový soubor může mít nejvýše 200 MB. Větší soubor je odmítnut: při vytvoření objednávky, pokud váš server posílá Content-Length, jinak při stahování souboru.

Požadavky na PDF a pořadí stránek

Pořadí stránek v PDF je důležité. Stránky se k produktovým vrstvám přiřazují podle pozice a očekávané pořadí stránek závisí na typu produktu. Ujistěte se, že stránky ve vašem PDF odpovídají správné posloupnosti vrstev pro produkt, který odesíláte.

ProduktPořadí stránek PDF
Duvet Cover
  1. Duvet cover
  2. Pillow front
  3. Pillow back
Curtains
  1. Left curtain
  2. Right curtain
T-shirt
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Tanktop
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Sweater
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Collar
  8. Waistband
Hoodie
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Hood inside left
  8. Hood inside right
  9. Hood outside left
  10. Hood outside right
  11. Waistband
  12. Pocket lower left
  13. Pocket lower right
  14. Pocket upper right
  15. Pocket upper left
Sweatpants
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Left cuff
  6. Right cuff
  7. Waistband
  8. Right pocket
  9. Left pocket
  10. Back pocket
  11. Back pocket interfacing
Sweatshorts
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Waistband
  6. Right pocket
  7. Left pocket

Důležité: každá stránka PDF musí odpovídat požadovaným rozměrům pro svou produktovou vrstvu a mít správnou orientaci. Umístěte grafiku tak, aby horní část designu byla zarovnána s horním okrajem stránky. Nesprávná velikost nebo orientace stránky může ve výrobě způsobit problémy se škálováním, otočením nebo zarovnáním.

NAPLÁNUJTE DORUČENÍ

Doprava

Zjistěte, kolik bude stát doprava objednávky a jak dlouho bude na cestě, ještě než ji vytvoříte, a to podle stejných pravidel, podle kterých Fabrixa počítá samotnou objednávku.

KAM SE DORUČUJE

Země doručení

Do kterých zemí lze variantu produktu doručit, zjistíte požadavkem GET na https://api.fabrixa.com/v2/integration/shipping/countries se svými přihlašovacími údaji. Seznam obsahuje země seřazené podle názvu, do kterých má místo, kde se varianta vyrábí, přepravní sazbu pro přepravní balík, do kterého lze variantu zabalit. Země, která v seznamu není, pro variantu žádnou přepravní sazbu nemá.

Parametry dotazu

  • variant_id nebo sku - varianta, určená stejně jako v řádku objednávky, tak jako u odhadu.

Ukázkový požadavek

curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/shipping/countries?sku=DDC-140200' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/shipping/countries"
    },
    "meta": {
        "total": 2
    },
    "data": [
        {
            "code": "BE",
            "name": "Belgium",
            "min_shipping_price": "7.75",
            "max_shipping_price": "9.85",
            "currency": "EUR",
            "min_eta_days": 1,
            "max_eta_days": 2
        },
        {
            "code": "NL",
            "name": "Netherlands",
            "min_shipping_price": "6.70",
            "max_shipping_price": "8.40",
            "currency": "EUR",
            "min_eta_days": 1,
            "max_eta_days": 1
        }
    ]
}

Pole odpovědi

  • code a name - země s kódem ISO 3166-1 alpha-2, který předáte jako country_code do odhadu.
  • min_shipping_price a max_shipping_price - rozpětí ceny dopravy jednoho přepravního balíku do dané země, bez DPH, v měně currency, napříč balíky, do kterých lze variantu zabalit. Objednávka několika kusů může potřebovat několik balíků, proto si pro cenu daného množství vyžádejte odhad.
  • min_eta_days a max_eta_days - rozpětí počtu dní, po které je balík na cestě od předání dopravci, bez doby výroby; null, pokud sazby neobsahují odhad doručení.
NEŽ OBJEDNÁTE

Odhad dopravy

Kolik by stála doprava varianty produktu a jak dlouho by zásilka byla na cestě, zjistíte požadavkem GET na https://api.fabrixa.com/v2/integration/shipping/estimate se svými přihlašovacími údaji. Odhad se řídí pravidly, podle kterých se počítá cena objednávky: kusy se zabalí do přepravních balíků místa, kde se varianta vyrábí, a cena každého balíku se určí podle trasy z tohoto místa do cílové země. Nic se neobjednává ani nerezervuje a cena objednávky se počítá až při jejím zadání, takže cena její dopravy se může lišit, pokud se mezitím změní sazby.

Parametry dotazu

  • variant_id nebo sku - varianta, určená stejně jako v řádku objednávky: varianta jednoho z vašich produktů, nebo varianta z katalogu. Musí to být varianta, kterou můžete objednat.
  • country_code - kód ISO 3166-1 alpha-2 země, do které se objednávka doručuje, například NL.
  • quantity - počet kusů, od 1 do 1000.

Ukázkový požadavek

curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/shipping/estimate?sku=DDC-140200&country_code=NL&quantity=2' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Ukázková odpověď

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/shipping/estimate"
    },
    "meta": [],
    "data": {
        "variant_id": 32323,
        "sku": "DDC-140200",
        "quantity": 2,
        "country_code": "NL",
        "origin_country": {
            "code": "PT",
            "name": "Portugal"
        },
        "packages_count": 1,
        "packages": [
            {
                "package_type": "Small Box",
                "length": 30,
                "width": 20,
                "height": 10,
                "quantity": 1,
                "price": "7.45",
                "eta_days": 3
            }
        ],
        "shipping_price": "7.45",
        "currency": "EUR",
        "eta_days": 3
    }
}

Pole odpovědi

  • variant_id, sku, quantity a country_code - varianta, množství a cíl, pro které odhad platí.
  • origin_country - země, ze které se varianta odesílá, s hodnotami code a name.
  • packages_count - počet přepravních balíků, do kterých se kusy zabalí.
  • packages - jednotlivé balíky, jedna položka na typ balíku: package_type, jeho length, width a height v cm, quantity takových balíků, price za dopravu jednoho z nich a jeho eta_days. Ceny vynásobené počty dávají dohromady shipping_price.
  • shipping_price - cena dopravy všech balíků dohromady, bez DPH, v měně currency. Na trase bez přepravní sazby je doprava zdarma, stejně jako u objednávky, a její cena je 0.00.
  • eta_days - počet dní, po které je nejpomalejší balík na cestě od předání dopravci, bez doby výroby; null, pokud pro trasu není k dispozici odhad doručení.

Na požadavek, který neprojde validací, přijde odpověď 400 Bad Request s důvodem u každého pole a se stejnými zprávami jako u řádku objednávky, například The variant not found. Pokud kusy nepojme žádný přepravní balík, odpovědí je 400 Bad Request se zprávou No shipping package can carry the variant.

PERSONALIZACE PRODUKTU

Fabrixa Studio

Fabrixa Studio je nástroj, který uživatelům umožňuje plynule personalizovat produkty v reálném čase díky intuitivnímu rozhraní, ve kterém mohou vytvářet nebo nahrávat vlastní designy.

Fabrixa Studio je ideální pro firmy nabízející produkty na míru - zákazníci si mohou svůj design zobrazit ještě před dokončením objednávky.

PŘIDEJTE STUDIO DO SVÉHO OBCHODU

Vložení Fabrixa Studia

Fabrixa Studio můžete vložit do svého webu pomocí iframe. To vašim zákazníkům umožní personalizovat produkty přímo na vašem webu během nákupu.

Ukázka iframe pro vložení Fabrixa Studia:

<iframe id="fabrixa-studio"
    src="https://studio.fabrixa.com?application_key={application_key}&sku={product_sku}&cart_item_key={cart_item_key}"
    name="FabrixaStudio"
    scrolling="no"
    frameborder="1"
    width="100%"
    height="100%"
    allowfullscreen="">
</iframe>

Nahraďte hodnoty product_sku, cart_item_key a application_key svými dynamickými hodnotami.

Záhlaví Studia zobrazuje název produktu tak, jak je ve vašem obchodě - stejný název, jaký vidí vaši zákazníci - a pod ním možnosti zvolené varianty. Jde o vlastní kopii produktu ve vašem obchodě, takže název, který upravíte ve Fabrixa, se zobrazí i ve Studiu; locale ho nepřekládá.

Požadavek na vytvoření objednávky s cart_item_key

{
  "number": "NL2024010201",
  "purchased_at": "2024-06-26 21:12:22",
  "client_ip": "127.0.0.1",
  "client_user_agent": "Mozilla",
  "rows": [
    {
      "sku": "SB796162",
      "quantity": 1,
      "cart_item_key": "0cb76770-de2d-4524-aa48-47b6e5f0d8a5"
    }
  ],
  "customer": {
    "...": "..."
  },
  "shipping_address": {
    "...": "..."
  },
  "shipping_label": {
    "...": "..."
  }
}
NASLOUCHEJTE AKCÍM ZÁKAZNÍKA

Zpracování událostí Studia

Když se uvnitř iframe klikne na tlačítko Přidat do košíku, provede se následující příkaz:

window.parent.postMessage('customizationFinished', '*');

Obdobně při kliknutí na tlačítko Zpět:

window.parent.postMessage('closeButtonClicked', '*');

Metoda postMessage umožňuje komunikaci mezi iframe a jeho nadřazeným oknem přes různé domény, takže může nadřazené okno informovat o konkrétních akcích uživatele.

Prvním argumentem postMessage jsou data, která chcete odeslat. Řetězec 'customizationFinished' znamená, že uživatel dokončil personalizaci a přidává produkt do košíku. 'closeButtonClicked' znamená, že se uživatel rozhodl vrátit zpět.

V nadřazeném okně tyto zprávy odchytávejte pomocí posluchače události message:

window.addEventListener('message', function(event) {
    if (event.origin === 'https://studio.fabrixa.com') {
        if (event.data === 'customizationFinished') {
            // Handle the Add to Cart event
            console.log('Customization finished and item can be added to cart.');
        } else if (event.data === 'closeButtonClicked') {
            // Handle the Back button event
            console.log('Back button clicked.');
        }
    }
});

Vždy kontrolujte origin příchozích zpráv, abyste se ujistili, že přicházejí z důvěryhodného zdroje. Podle přijaté zprávy provádějte potřebné akce - aktualizaci uživatelského rozhraní, zpracování košíku a podobně. Validace origin je pro bezpečnost klíčová - zabraňuje neoprávněným skriptům v interakci s vaší aplikací.

ZOBRAZTE HOTOVÝ DESIGN

Náhled personalizace

Po dokončení personalizace zobrazte finální design pomocí níže uvedené URL náhledu. Tato URL vrací obrázek personalizovaného produktu vhodný jako hodnota src ve značce <img>. Je ideální pro zobrazení personalizovaného produktu v košíku, v souhrnu objednávky nebo kdekoli v rozhraní vašeho obchodu.

https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}

Nahraďte {CART_ITEM_KEY} skutečným klíčem položky košíku a {APPLICATION_KEY} svým platným klíčem aplikace.

Ukázka použití ve značce obrázku:

<img
    src="https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}"
    alt="Customized Product Preview"
    style="max-width: 100%; height: auto;" />
VYZKOUŠEJTE S VLASTNÍMI HODNOTAMI

Živé demo

Náhled personalizace se zde zobrazí po dokončení designu.

Customization preview
PŘIJÍMEJTE AKTUALIZACE UDÁLOSTÍ

Webhooky

Fabrixa používá webhooky k tomu, aby váš systém informovala o událostech v reálném čase - aktualizacích nebo vytvoření objednávek. Když událost nastane, Fabrixa odešle na váš server webhook s příslušnými informacemi. Váš server musí vystavit veřejný POST endpoint, který příchozí webhooky zpracuje.

PROJDĚTE PŘÍCHOZÍ HLAVIČKY

Hlavičky požadavku webhooku

Požadavek webhooku obsahuje následující hlavičky, které vám pomohou příchozí požadavek identifikovat a ověřit:

{
  "content-type": "application/json",
  "user-agent": "Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook)",
  "x-webhook-signature": "YmEwNjBhMGMyMzE3ZWQ5NGQ5NDYwOGVhNzNhMjQ4M2MyODZkZmI3NTQ1YzYxYjdkMzNhZjgzYzBmMTkxYTAxMw==",
  "x-webhook-topic": "order.updated"
}
Rozpis hlaviček

Webhooky se odesílají s User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook); pokud váš endpoint filtruje automatický provoz, povolte jej. Abyste měli jistotu, že požadavek pochází od Fabrixa, ověřte x-webhook-signature.

VYBERTE SI TÉMATA UDÁLOSTÍ

Události webhooků

Webhooky Fabrixa informují váš systém o změnách stavu objednávky nebo o aktivitě. Každý webhook je spuštěn konkrétní hodnotou x-webhook-topic. Aktuálně podporovaná témata:

TémaPopis
order.created Spuštěno, když je ve Fabrixe zadána nová objednávka, ať už požadavkem na API, nebo přímo v platformě.
order.updated Spuštěno, když se aktualizují údaje objednávky, například stav objednávky nebo stav plnění.
PROZKOUMEJTE PAYLOAD UDÁLOSTI

Ukázka payloadu webhooku

Ukázka payloadu odesílaného s webhookem. Tento payload představuje aktualizaci objednávky:

{
  "id": 23069,
  "number": "1250211835",
  "comments": null,
  "is_archived": false,
  "status": "accepted",
  "fulfillment_status": "fulfilled",
  "purchased_at": "2025-04-17T16:17:21.000000Z",
  "created_at": "2025-04-17T16:17:23.000000Z",
  "updated_at": "2025-04-18T07:43:52.000000Z",
  "rows": [
    {
      "id": 27954,
      "quantity": 1,
      "client_barcode": "1250211835",
      "fulfillment_status": "fulfilled",
      "variant": {
        "id": 293457,
        "name": "Sherpa fleece deken",
        "subtitle": "100x150",
        "SKU": "SFD787231",
        "product": {
          "id": 5319,
          "name": "Sherpa fleece deken",
          "subtitle": "Sherpa fleece deken"
        }
      },
      "sources": [
        {
          "type": "print",
          "url": "https://storage.googleapis.com/fabrixa-api/storage/99b10aaa-df4d-47e4-9bc9-b1d6a785df4c/orders/merchandise-sources/120002795400.pdf",
          "properties": {
            "fill_style": "contain"
          }
        }
      ]
    }
  ],
  "shipments": [
    {
      "id": 4182,
      "carrier": "PostNL",
      "method": "Standard",
      "status": "registered",
      "tracking_number": "3SABCD1234567",
      "tracking_url": "https://jouw.postnl.nl/track-and-trace/3SABCD1234567-NL-1012AB",
      "packages": [
        {
          "tracking_number": "3SABCD1234567",
          "tracking_url": "https://jouw.postnl.nl/track-and-trace/3SABCD1234567-NL-1012AB"
        }
      ],
      "expected_delivery_date": "2025-04-22",
      "created_at": "2025-04-18T07:43:50.000000Z"
    }
  ]
}

Jakmile je objednávka odeslána, shipments obsahuje každou zásilku s jejím dopravcem (carrier), způsobem dopravy (method), stavem (status: pending, registered, collected, in transit, delivered, failed, returned nebo canceled) a sledováním: tracking_number a tracking_url, a totéž pro každý balík v packages, pokud má zásilka balíků více. Při každé změně stavu nebo sledování zásilky se odešle webhook order.updated a stejné pole vrací i GET /orders/{order_id}.

OVĚŘTE ZDROJ WEBHOOKU

Ověření podpisů webhooků

Chcete-li se ujistit, že je požadavek webhooku pravý a nezměněný, ověřte hlavičku x-webhook-signature. Znamená to znovu vypočítat podpis HMAC-SHA256 z nezpracovaného payloadu požadavku a vašeho tajného klíče a poté jej porovnat s přijatým podpisem.

Ukázka v čistém PHP

$payload = file_get_contents('php://input');
$yourSecret = 'your-secret-key';
$expectedSignature = base64_encode(hash_hmac('sha256', $payload, $yourSecret, true));
$receivedSignature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

if (!hash_equals($expectedSignature, $receivedSignature)) {
    http_response_code(403);
    exit('Invalid signature');
}

Ukázka v Laravelu

public function handle(Request $request)
{
    $yourSecret = 'your-secret-key';
    $payload = $request->getContent();
    $expectedSignature = base64_encode(hash_hmac('sha256', $payload, $yourSecret, true));
    $receivedSignature = $request->header('x-webhook-signature');

    if (!hash_equals($expectedSignature, $receivedSignature)) {
        abort(403, 'Invalid signature');
    }

    // Continue processing...
}

Nahraďte $yourSecret svým společným tajným klíčem. Pro porovnávání podpisů vždy používejte hash_equals, abyste omezili časovací útoky.

CO KDYŽ DORUČENÍ SELŽE?

Opakované pokusy webhooků

Webhooky se ve výchozím nastavení deaktivují po 10 neúspěšných pokusech o doručení. Pokud váš endpoint vrátí neúspěšný stav, například 404 nebo jakoukoli chybu 5xx, webhook se pokusí doručit celkem 10krát. Pokud bude i dále vracet jiný kód než 2xx nebo 3xx, bude deaktivován. Za úspěšné odpovědi se považují:

VRAŤTE JEDNOZNAČNOU ODPOVĚĎ

Odpověď na webhook

Důrazně doporučujeme, aby váš endpoint vracel stavový kód 200 OK co nejdříve a potvrdil tak úspěšné přijetí webhooku. Za úspěšnou se sice považuje jakákoli odpověď 2xx nebo 3xx, ale 200 je nejběžnější a nejspolehlivější.

Abyste se vyhnuli vypršení časového limitu doručení nebo opakovaným pokusům, vraťte okamžitě 200 OK a payload webhooku zpracujte asynchronně, například na pozadí ve frontě nebo úloze. Pokud vašemu endpointu odpověď trvá příliš dlouho, může být pokus vyhodnocen jako neúspěšný, i když je odpověď nakonec úspěšná.

Odpovědi se stavovými kódy v rozsahu 4xx nebo 5xx a vypršení časového limitu spustí opakované pokusy podle mechanismu opakování.