Referenčná dokumentácia Fabrixa Integration API
30 min čítania Posledná aktualizácia: 06-11-2026 119 zobrazení
Integration API vám pomáha vytvárať a spravovať objednávky vo Fabrixe, spúšťať Fabrixa Studio a prostredníctvom webhookov priebežne sledovať stav výroby a vybavenia objednávok. API dodržiava konvencie REST a pre všetky telá požiadaviek aj odpovedí používa JSON.
ZÁKLADNÁ URL
https://api.fabrixa.com/v2/integration
Všetky požiadavky posielajte na túto základnú URL, za ktorou nasleduje cesta ku konkrétnemu endpointu. Základná URL je východiskom pre prácu s Fabrixa API - načítanie, vytváranie, aktualizáciu alebo mazanie zdrojov.
Autentifikácia
Na prístup k Integration API overujte svoje požiadavky pomocou prístupového tokenu aplikácie a zároveň kľúča aplikácie:
Hlavička Authorization
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Hlavička s kľúčom aplikácie
X-Application-Key: APPLICATION_KEY
Ukážkový prí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 svojím skutočným prístupovým tokenom a APPLICATION_KEY svojím skutočným kľúčom aplikácie.
Endpointy a požiadavky
Endpointy Integration API sú usporiadané podľa typu zdroja a dodržiavajú architektonický štýl REST. Každý endpoint predstavuje zdroj a akcie s týmito zdrojmi sa vykonávajú štandardnými metódami HTTP.
Všetky požiadavky a odpovede Integration API sú vo formáte JSON, čo poskytuje konzistentné a jednoducho použiteľné rozhranie na prácu s API.
Úplné podrobnosti o každom endpointe vrátane ukážok požiadaviek a odpovedí nájdete v našej dokumentácii Swagger.
Formát odpovede
Všetky endpointy vracajú údaje v štandardizovanom formáte s týmito objektmi:
{
"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 objektov odpovede
links
Obsahuje stránkovacie odkazy na prechádzanie výsledkami.
self— URL aktuálnej stránky.first_page— URL prvej stránky výsledkov.last_page— URL poslednej stránky výsledkov.next_page— URL nasledujúcej stránky.null, ak ďalšia stránka neexistuje.prev_page— URL predchádzajúcej stránky.null, ak predchádzajúca stránka neexistuje.
meta
Obsahuje metaúdaje o odpovedi, napríklad informácie o stránkovaní.
total— celkový počet položiek dostupných na všetkých stránkach.current_page— číslo aktuálnej stránky výsledkov.per_page— počet položiek na stránku.
data
Hlavný obsah odpovede. data sa líši podľa endpointu - môže to byť jeden objekt, napríklad jeden produkt, alebo pole objektov, napríklad zoznam produktov.
Chyby a stavové kódy
Všetky požiadavky na API vracajú stavové kódy HTTP, ktoré informujú o výsledku požiadavky.
400 Bad Request
Server nemôže požiadavku spracovať pre chyby validácie - chýbajúce alebo neplatné parametre.
401 Unauthorized
Klient neposkytol platné autentifikačné údaje. Vracia sa aj vtedy, keď bol prístupový token zrušený.
403 Forbidden
Server požiadavku zamietol pre nedostatočné prístupové práva, zvyčajne v dôsledku nesprávnych alebo chýbajúcich oprávnení.
404 Not Found
Požadovaný zdroj sa na serveri nenašiel.
412 Precondition Failed
Požiadavku nemožno uplatniť na zdroj v jeho aktuálnom stave, napríklad na objednávku, ktorú už nemožno zrušiť.
429 Too Many Requests
Klient prekročil povolený počet požiadaviek v danom časovom intervale. Pozrite si Limity požiadaviek.
5xx Errors
Vyskytla sa interná chyba servera. Kontaktujte podporu Fabrixa a uveďte podrobnosti o neúspešnej požiadavke.
Telo chybovej odpovede
Ukážka tela chybovej odpovede:
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/ping"
},
"meta": [],
"errors": {
"messages": [
"Application Key is not specified."
]
}
}
errors obsahuje podrobnosti o tom, čo zlyhalo. Pole messages obsahuje popisy chýb. Pri chybe Bad Request dostanete názvy polí, ktoré neprešli validáciou.
Limity požiadaviek
Integration API umožňuje najviac 30 požiadaviek na aplikáciu za minútu.
Ak tento limit prekročíte, dostanete odpoveď 429 Too Many Requests.
Všetky odpovede Integration API obsahujú hlavičku X-RateLimit-Remaining, ktorá udáva, koľko požiadaviek môže klient ešte odoslať, a hlavičku X-RateLimit-Limit s celkovým povoleným počtom za minútu.
Režim sandbox
Režim sandbox vám umožňuje otestovať integráciu od začiatku do konca skôr, ako sa akákoľvek skutočná objednávka vyrobí alebo spoplatní. Platí pre celý váš účet: objednávky zo všetkých predajných kanálov vrátane Integration API a pripojených obchodov Shopify a WooCommerce sa nevyrábajú a neúčtujú na váš zostatok. Váš účet je v režime sandbox, kým má stav čaká na aktiváciu.
V režime sandbox môžete:
- pripojiť obchod Shopify alebo WooCommerce, alebo vytvoriť kanál Integration API;
- pridávať produkty a kontrolovať ceny a odhady dopravy;
- importovať, vytvárať, upravovať a rušiť objednávky;
- overiť, že žiadna z týchto objednávok sa nevyrába ani neúčtuje na váš zostatok;
- overiť doručovanie webhookov a podpisy.
Ak chcete otestovať objednávky, pridajte produkty z katalógu Fabrixa: otvorte produkt, kliknite na Predávať a vyberte varianty a dizajny. Potom sa zobrazia v časti Moje produkty.
Ak chcete prepnúť účet do režimu sandbox, otvorte Platform, prejdite na Nastavenia → Firma → Režim sandbox a kliknite na Prepnúť do režimu sandbox. Môžete ho zapnúť aj pri pridaní nového predajného kanála vrátane kanála Integration API, alebo napísať na support@fabrixa.com a my váš účet prepneme za vás. Režim sandbox je dostupný len pre aktívne účty.
Keď budete pripravení, aktivujte účet sami v Platforme v časti Nastavenia → Firma → Režim sandbox. Môžete tiež napísať na support@fabrixa.com a my ho aktivujeme za vás. Pripojené obchody a prístupové údaje k API naďalej fungujú, takže nie je potrebné nič znova nastavovať.
Po aktivácii idú všetky nové objednávky do výroby a účtujú sa na váš zostatok. Objednávky vytvorené pred aktiváciou zostávajú testovacie: nikdy sa nevyrábajú ani neúčtujú, ani po aktivácii.
Produkty
Katalóg je všetko, čo Fabrixa vyrába. Vaše produkty sú produkty z katalógu, ktoré ste pridali do svojho účtu Fabrixa, s vlastnými názvami, popismi, obrázkami a SKU. Riadok objednávky odkazuje na variant produktu - jednu veľkosť alebo vyhotovenie produktu - pomocou jeho sku alebo variant_id: na variant jedného z vašich produktov, alebo na variant z katalógu objednaný priamo.
Prehliadanie katalógu
Zoznam produktov, ktoré Fabrixa vyrába, získate požiadavkou GET na https://api.fabrixa.com/v2/integration/catalog/products so svojimi prihlasovacími údajmi. Obsahuje aktívne produkty, ktoré majú variant aktuálne vyrábaný tlačovým partnerom, a len tieto varianty - každý so svojím SKU, predajnou cenou, rozmermi a hodnotami možností.
Parametre dopytu
pagealimit(až 100) - rozdelia zoznam na stránky. Bez nich sa celý katalóg vráti v jednej odpovedi.search- produkty, ktorých názov obsahuje text alebo ktorých slug čiSKUvariantu ním začína.category_id- produkty v kategórii;parent_category_id- produkty v ľubovoľnej podkategórii kategórie najvyššej úrovne. Pozri Kategórie katalógu.group_id- produkty v skupine katalógu.sort_by-name,created,updated,type,popularalebosold, v poradísort_orderascalebodesc. Predvolene sú prvé najnovšie produkty.
Ukážková požiadavka
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ážková odpoveď
{
"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"
}
]
}
]
}
]
}
]
}
Polia odpovede
id,name,subtitle,description(HTML),slug,codeaHS_code- kód colného sadzobníka.is_sellable- či je produkt otvorený na predaj. Uzavretý produkt je v zozname stále, ale objednávka niektorého z jeho variantov je odmietnutá.variants_min_selling_priceavariants_max_selling_price- cenové rozpätie uvedených variantov.type- typ produktu, ktorý určuje tlačové vrstvy a poradie strán PDF;status- v katalógu vždyActive.categories- kategórie, do ktorých produkt patrí, každá so svojouparent_category.images- obrázky produktu surl,is_main,screen_type_sizeasort_number.variants- vyhotovenia produktu, ktoré možno objednať:id,name,subtitle,SKU,selling_price, rozmerywidth,height,lengthaweightaoptions- hodnoty možností, ktoré tento variant určujú, napríklad jeho veľkosť.
Kategórie katalógu
Zoznam kategórií, do ktorých je katalóg usporiadaný, získate požiadavkou GET na https://api.fabrixa.com/v2/integration/catalog/categories so svojimi prihlasovacími údajmi. Odpoveď obsahuje kategórie najvyššej úrovne, každú s podkategóriami vnorenými v sub_categories a počtom produktov katalógu v nej v products_count. Pri prehliadaní katalógu odovzdajte id kategórie ako category_id, alebo id kategórie najvyššej úrovne ako parent_category_id, aby ste získali produkty všetkých jej podkategórií naraz.
Parametre dopytu
pagealimit(až 100) - rozdelia zoznam na stránky. Bez nich sa vrátia všetky kategórie.search- kategórie, ktorých názov obsahuje text.with_products_only-truevynechá kategórie, ktoré neobsahujú žiadny produkt katalógu ani priamo, ani v podkategórii.sort_by-category_namealebocategory_created, v poradísort_orderascalebodesc. Predvolene sú kategórie v poradí katalógu.
Ukážková požiadavka
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ážková odpoveď
{
"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
}
]
}
]
}
Vaše produkty
Zoznam produktov vo svojom účte získate požiadavkou GET na https://api.fabrixa.com/v2/integration/products so svojimi prihlasovacími údajmi. Vaše produkty sú produkty z katalógu, ktoré ste pridali do svojho účtu Fabrixa: nesú názvy, popisy a obrázky, ktoré ste im tam dali, a ich varianty hodnoty SKU, ktoré ste zvolili. V zozname sú len aktívne produkty, desať na stránku, ak neodovzdáte limit.
Parametre dopytu
pagealimit(až 100) - ktorá stránka sa má vrátiť a jej veľkosť; predvolene prvá stránka s desiatimi produktmi.search- produkty, ktorých názov obsahuje text alebo ktorých slug čiSKUvariantu ním začína.
Ukážková požiadavka
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ážková odpoveď
{
"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 prečítate požiadavkou GET na https://api.fabrixa.com/v2/integration/products/{product_id}, kde {product_id} je jeho id. Odpoveď obsahuje rovnaké polia ako zoznam. Produkt, ktorý nie je vo vašom účte, ani produkt z katalógu, odpovie 404 Not Found so správou Product not found.
Polia odpovede
id,name,subtitle,description(HTML),slug,width,height,lengthaweight.type- typ produktu, ktorý určuje tlačové vrstvy a poradie strán PDF.available_options- každá možnosť produktu so všetkými jej hodnotami, napríklad každá veľkosť, v ktorej sa vyrába; každý variant má jednu hodnotu na možnosť.categoriesacollections- kategórie a kolekcie, do ktorých ste produkt vo svojom účte zaradili.images- obrázky produktu surl,is_main,image_size,screen_type_sizeasort_number.variants- vyhotovenia produktu, ktoré možno objednať, pozri Varianty produktov:id,name,subtitle,SKU,options,imagesa tlačové vrstvy vavailable_source_typesarequired_source_types.
Varianty produktov
Variant je jedno vyhotovenie produktu, ktoré možno objednať - jedna veľkosť, jedna farba - a práve naň odkazuje riadok objednávky pomocou sku alebo variant_id. Variant jedného zo svojich produktov prečítate požiadavkou GET na https://api.fabrixa.com/v2/integration/variants/{variant_id}, kde {variant_id} je jeho id. Variant produktu, ktorý nie je vo vašom účte, odpovie 404 Not Found so správou Variant not found.
Ukážková požiadavka
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ážková odpoveď
{
"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"]
}
}
Polia odpovede
id,name,subtitle,description,SKU,width,height,length,weight,options,imagesaproduct- produkt, ku ktorému variant patrí.available_source_types- tlačové vrstvy variantu pomenované tak, ako ich pozná jeho výrobný proces. Okrem"file", ktoré každý variant prijíma pre PDF, sú to hodnoty, ktoré môže maťtypezdrojového súboru; produkt s jedinou tlačovou vrstvou uvádza"print".required_source_types- vrstvy, ktoré musí tlačový súbor pokryť. PDF odoslané ako"file"ich pokryje svojimi stranami v poradí strán daného typu produktu. Inak riadok potrebuje súbor JPEG, PNG alebo TIFF pre každú z nich s názvom vrstvy akotype; riadok, v ktorom niektorá chýba, je odmietnutý s400 Bad Requesta názvami chýbajúcich vrstiev.
Riadok objednávky pre tento variant s PDF, ktorého strany sú jeho vrstvy:
"rows": [
{
"sku": "DDC-140200",
"quantity": 1,
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/duvet-cover.pdf"
}
]
}
]
Ktoré varianty možno objednať
- Riadok objednávky môže odkazovať na variant produktu z vášho účtu alebo priamo na variant z katalógu, nikdy na produkt iného klienta. Variant sa vyhľadá podľa
variant_idalebo podľaskubez ohľadu na veľkosť písmen. - Variant musí byť aktívny a jeho produkt aktívny a otvorený na predaj. Pri vašej kópii produktu z katalógu musí byť aktívny aj produkt z katalógu a variant z katalógu zapnutý.
- Inak je objednávka odmietnutá s
400 Bad Requesta dôvodom pre daný riadok: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.aleboThe catalog variant is not active.
Objednávky
Vytvárajte objednávky vo Fabrixe z vlastného e-shopu alebo platformy, pripojte potrebné tlačové súbory a sledujte, ako jednotlivé položky postupujú procesom vybavenia.
Vytvorenie objednávky
Ak chcete vytvoriť objednávku cez Fabrixa Integration API, odošlite požiadavku POST na https://api.fabrixa.com/v2/integration/orders. Telo požiadavky musí obsahovať:
Štruktúra tela požiadavky
number(nepovinné) - číslo objednávky. Ak ho neuvediete, vygeneruje sa jedinečné číslo.comments(nepovinné) - ďalšie komentáre alebo poznámky k objednávke.purchased_at- dátum a čas nákupu objednávky vo formáteYYYY-MM-DD HH:MM:SS.client_ip(nepovinné) - IP adresa zákazníka.client_user_agent(nepovinné) - reťazec user-agent zákazníka.rows- pole položiek objednávky, pričom každá obsahuje:sku- SKU variantu produktu. Podrobnosti nájdete v dokumentácii Swagger.quantity- objednané množstvo variantu produktu.client_barcode(nepovinné) - jedinečný identifikátor na strane klienta pre každý riadok objednávky vo formáteCode 128.cart_item_key(povinné, ak chýbasources) - jedinečný identifikátor z platformy, do ktorej je vložené Fabrixa Studio; slúži na priradenie uložených personalizácií k objednávke.sources(povinné, ak chýbacart_item_key) - pole zdrojových súborov priradených k produktu, pričom každý obsahuje:type-"file"pre PDF alebo"print"pre súbor JPEG, PNG či TIFF.url- URL zdrojového súboru.
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 prepravnom štítku:method_name- napr. „Post NL“.tracking_number,tracking_url,label_pdf_url.date_created- vo formáteYYYY-MM-DD HH:MM:SS.
Ukážková požiadavka
{
"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ážková odpoveď
{
"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"
}
}
}
Úprava objednávky
Ak chcete upraviť objednávku, odošlite požiadavku PATCH na https://api.fabrixa.com/v2/integration/orders/{order_id}, kde {order_id} je ID objednávky vo Fabrixe. Zmenia sa iba polia, ktoré odošlete, a stav objednávky zostane nezmenený. Odpoveď obsahuje upravenú objednávku. Zmeniť môžete:
number,comments,purchased_at,client_ip,client_user_agent.customer-first_name,last_name,email,phone.shipping_address- rovnaké polia ako pri vytváraní objednávky.
Ukážková požiadavka
{
"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ážková odpoveď
{
"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"
}
}
}
- Riadky objednávky nemožno meniť: požiadavka s
rowssa zamietne s odpoveďou400 Bad Request. Ak chcete zmeniť položky, zrušte objednávku a vytvorte novú. - Objednávku v stave
on holdnemožno upraviť; API odpovie412 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."
]
}
}
Zrušenie objednávky
Ak chcete objednávku zrušiť, odošlite požiadavku POST bez tela na https://api.fabrixa.com/v2/integration/orders/{order_id}/cancel, kde {order_id} je ID objednávky vo Fabrixe (číselné pole id objednávky), nie vaše číslo objednávky. Odpoveď obsahuje objednávku so stavom canceled a odošle sa webhook order.updated.
- Objednávku je možné zrušiť, kým má stav
created,imported,acceptedaleboon holda jejfulfillment_statusje stáleunfulfilled. Keď sa zmení nascheduled, výroba sa začala a objednávku už nie je možné zrušiť. - Poplatky za zrušenú objednávku sa vrátia na váš zostatok.
- Zrušenie už zrušenej objednávky ju vráti bez zmeny, takže požiadavku môžete bezpečne zopakovať.
Ukážková odpoveď
{
"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"
}
}
}
Ak objednávku nemožno zrušiť, API odpovie 412 Precondition Failed so správou, ktorá vysvetľuje dôvod: jej aktuálny stav to neumožňuje (stav je uvedený v správe) alebo sa už začala výroba.
{
"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)."
]
}
}
Životný cyklus objednávky
Objednávka sa sleduje pomocou troch stavov: poľa status objednávky, jej výrobného stavu fulfillment_status a poľa status každej zásielky v shipments. Každá zmena sa odosiela vo webhooku order.updated a vracia ju GET /orders/{order_id}.
Stavy objednávky
Hodnoty poľa status objednávky v poradí, v akom nastávajú:
imported- objednávka bola prijatá cez API. Každá objednávka začína tu.on hold- zostatok nepokrýva cenu objednávky. Po jeho dobití sa objednávka vráti do stavuimporteda pokračuje.accepted- objednávka bola prijatá na spracovanie a ide do výroby.completed(konečný) - všetky položky boli vyrobené.canceled(konečný) - objednávka bola zrušená. Je to možné, kým je v staveimported,acceptedaleboon holda výroba sa ešte nezačala.
Stavy vybavenia
Hodnoty poľa fulfillment_status objednávky a každej jej položky v poradí, v akom nastávajú. Stav sa mení iba dopredu, nikdy späť:
unfulfilled- výroba sa ešte nezačala.scheduled- objednávka je naplánovaná vo výrobnej dávke. Od tejto chvíle ju už nemožno zrušiť.processing- výroba prebieha.partially fulfilled- niektoré položky sú hotové, ostatné sú ešte vo výrobe.fulfilled(konečný) - všetky položky sú hotové. Polestatusobjednávky sa potom zmení nacompleted.
Objednávka ako celok nie je nikdy zamietnutá. Jednotlivá položka môže byť zamietnutá pri kontrole kvality počas výroby. Potom sa vytlačí znova: vráti sa do stavu unfulfilled a prejde výrobou ešte raz, pričom objednávka si ponechá svoj stav a pokračuje, keď je položka hotová.
Stavy zásielky
Hodnoty poľa status každej zásielky v shipments v poradí, v akom nastávajú:
pending- zásielka sa pripravuje.registered- štítok bol vytvorený u prepravcu.collected- prepravca zásielku vyzdvihol.in transit- zásielka je na ceste.delivered(konečný) - zásielka bola doručená.
Výnimky:
failed- prepravca nahlásil problém.returned(konečný) - zásielka nám bola vrátená.canceled(konečný) - zásielka bola zrušená.
Sledovanie vybavenia
Ak chcete zistiť stav vybavenia konkrétnej objednávky, odošlite požiadavku GET na https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. Odpoveď obsahuje zoznam záznamov o vybavení priradených k objednávke vrátane stavu každej položky, podrobností o produkte a priebehu výrobných krokov.
Ukážková odpoveď
{
"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
}
}
]
}
]
}
Odpoveď obsahuje zoznam záznamov o vybavení, pričom každý z nich obsahuje:
id- jedinečný identifikátor záznamu o vybavení.barcode- čiarový kód na interné sledovanie a identifikáciu; môže byť vytlačený aj na produkte.status- aktuálny stav vybavenia: unfulfilled alebo fulfilled.created_ataupdated_at- časové pečiatky vytvorenia a poslednej aktualizácie záznamu o vybavení.variant- podrobné informácie o variante produktu: názov, podnadpis, SKU.product- údaje o produkte: názov, podnadpis.production_steps- pole výrobných krokov. Zoznam krokov závisí od typu produktu. Pre každý krok:id- jedinečný identifikátor výrobného kroku.name- napr. „Potlač periny“.description- čo výrobný krok zahŕňa.status- aktuálny stav:- pending - ešte sa nezačal.
- in progress - práve prebieha.
- rejected - pri kroku nastal problém a nebol úspešne dokončený.
- done - krok je dokončený.
notes- ďalšie poznámky ku kroku.updated_at- čas poslednej aktualizácie stavu kroku.
Každý záznam o vybavení zodpovedá konkrétnemu produktu alebo variantu produktu v objednávke a každý kus produktu v objednávke má vlastný záznam o vybavení - každá položka sa počas výroby sleduje samostatne.
Ak sa pre objednávku nevrátia žiadne záznamy o vybavení, objednávka ešte nevstúpila do fázy spracovania.
Požiadavky na zdrojové súbory
Ak k objednávke prikladáte zdrojové súbory, uistite sa, že spĺňajú nasledujúce požiadavky:
type
Uprednostňovaným formátom zdroja je PDF. Pri produkte s jednou tlačovou vrstvou, napríklad deke alebo uteráku, možno použiť aj súbor JPEG, PNG alebo TIFF. Pri produkte s viacerými vrstvami dodajte súbor PDF, v ktorom je každá vrstva samostatnou stranou: pri spracovaní sa každá strana považuje za samostatnú vrstvu, takže viacvrstvový dizajn odošlete ako jeden súbor. Pozrite si požiadavky na PDF a poradie strán.
Pole type nastavte podľa formátu súboru. Pri PDF použite "file": každá strana sa tlačí na jednu vrstvu produktu v poradí strán uvedenom pre daný produkt. Pri súbore JPEG, PNG alebo TIFF, vhodnom pre produkt s jednou tlačovou vrstvou, použite "print".
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/source.pdf"
}
]
Ďalšie podrobnosti nájdete v dokumentácii Swagger.
url
Pole url musí obsahovať priamy odkaz na zdrojový súbor. Uistite sa, že URL je dostupná a súbor sa dá stiahnuť bez autentifikácie. Odkaz musí zostať dostupný počas celého výrobného procesu.
Ako súbor sťahujeme
Súbor z vášho servera sťahujeme dvakrát: najprv požiadavkou s Range: 0-0 počas overovania objednávky a potom celý. Obe požiadavky posielajú User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#sources; print file fetch); ak váš web filtruje automatizovanú prevádzku, povoľte ho. URL musí používať HTTPS na porte 443 a vracať súbor priamo, bez presmerovaní, so skutočným Content-Type súboru, napr. application/pdf. Časový limit každej požiadavky je 60 sekúnd.
Formát súboru
Dodajte súbor PDF alebo pri produkte s jednou vrstvou súbor JPEG, PNG či TIFF, poskytovaný so skutočným Content-Type. Priehľadné oblasti PNG sa tlačia nabielo. Uistite sa, že obrázky sú kvalitné a vhodné na tlač.
Rozmery obrázka
Maximálne rozmery sú 15 000 pixelov na každej strane. Obrázky, ktoré tento limit prekročia, môžu byť zmenšené alebo zamietnuté. Rozlíšenie obrázka by malo zodpovedať rozmerom produktu; inak môžu byť obrázky zmenšené alebo orezané, aby sa prispôsobili.
Rozlíšenie
Konkrétne rozlíšenie sa nevyžaduje - stačí, aby kvalita obrázka bola na tlač dostatočná.
Farebný priestor
Obrázky by mali byť vo farebnom priestore RGB, aby sa farby zobrazili presne. Iné farebné priestory sa pri spracovaní skonvertujú, čo môže viesť k nesprávnym farbám.
Veľkosť súboru
Každý zdrojový súbor môže mať najviac 200 MB. Väčší súbor sa zamietne: pri vytváraní objednávky, ak váš server posiela Content-Length, inak pri sťahovaní súboru.
Požiadavky na PDF a poradie strán
Poradie strán v PDF je dôležité. Strany sa priraďujú k vrstvám produktu podľa pozície a očakávané poradie strán závisí od typu produktu. Uistite sa, že strany vo vašom PDF dodržiavajú správne poradie vrstiev pre produkt, ktorý odosielate.
| Produkt | Poradie strán PDF |
|---|---|
| Duvet Cover |
|
| Curtains |
|
| T-shirt |
|
| Tanktop |
|
| Sweater |
|
| Hoodie |
|
| Sweatpants |
|
| Sweatshorts |
|
Dôležité: každá strana PDF musí zodpovedať požadovaným rozmerom pre svoju vrstvu produktu a mať správnu orientáciu. Umiestnite grafiku tak, aby bol horný okraj dizajnu zarovnaný s horným okrajom strany. Nesprávna veľkosť alebo orientácia strany môže vo výrobe spôsobiť problémy so škálovaním, otočením alebo zarovnaním.
Doprava
Zistite, koľko bude stáť doprava objednávky a ako dlho bude na ceste, ešte predtým, ako ju vytvoríte, podľa rovnakých pravidiel, podľa ktorých Fabrixa počíta samotnú objednávku.
Krajiny doručenia
Ak chcete zistiť, do ktorých krajín možno variant produktu doručiť, odošlite požiadavku GET na https://api.fabrixa.com/v2/integration/shipping/countries so svojimi prihlasovacími údajmi. Zoznam obsahuje krajiny zoradené podľa názvu, do ktorých má miesto, kde sa variant vyrába, prepravnú sadzbu pre niektorý prepravný balík, do ktorého sa dá variant zabaliť. Krajina, ktorá v zozname nie je, nemá pre variant žiadnu prepravnú sadzbu.
Parametre dopytu
variant_idalebosku- variant, uvedený rovnako ako v riadku objednávky, ako pri odhade.
Ukážková požiadavka
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ážková odpoveď
{
"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
}
]
}
Polia odpovede
codeaname- krajina s kódom ISO 3166-1 alpha-2, ktorý zadáte akocountry_codepri odhade.min_shipping_priceamax_shipping_price- rozpätie ceny dopravy jedného prepravného balíka do danej krajiny bez DPH v mene uvedenej vcurrency, pre rôzne prepravné balíky, do ktorých sa dá variant zabaliť. Objednávka viacerých kusov môže vyžadovať viac balíkov, preto si na cenu konkrétneho množstva vyžiadajte odhad.min_eta_daysamax_eta_days- rozpätie počtu dní, počas ktorých je balík na ceste po odovzdaní dopravcovi, bez času výroby;null, ak sadzby neobsahujú odhad doby doručenia.
Odhad dopravy
Ak chcete zistiť, koľko by stála doprava variantu produktu a ako dlho by trvala, odošlite požiadavku GET na https://api.fabrixa.com/v2/integration/shipping/estimate so svojimi prihlasovacími údajmi. Odhad sa riadi pravidlami, podľa ktorých sa počíta cena objednávky: kusy sa zabalia do prepravných balíkov miesta, kde sa variant vyrába, a cena každého balíka sa určí podľa trasy z tohto miesta do cieľovej krajiny. Nič sa neobjednáva ani nerezervuje a cena objednávky sa počíta až pri jej zadaní, takže doprava môže stáť inak, ak sa sadzby medzitým zmenia.
Parametre dopytu
variant_idalebosku- variant, uvedený rovnako ako v riadku objednávky: variant jedného z vašich produktov alebo variant z katalógu. Musí to byť variant, ktorý môžete objednať.country_code- kód ISO 3166-1 alpha-2 krajiny, do ktorej sa objednávka doručuje, napríkladNL.quantity- počet kusov, od 1 do 1000.
Ukážková požiadavka
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ážková odpoveď
{
"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
}
}
Polia odpovede
variant_id,sku,quantityacountry_code- variant, množstvo a cieľová krajina, pre ktoré odhad platí.origin_country- krajina, z ktorej sa variant odosiela, s jejcodeaname.packages_count- počet prepravných balíkov, do ktorých sa kusy zabalia.packages- samotné balíky, jedna položka na typ balíka:package_type, jeholength,widthaheightv cm,quantitytakých balíkov,priceza dopravu jedného z nich a jehoeta_days. Ceny vynásobené počtami dávajú spolushipping_price.shipping_price- cena dopravy všetkých balíkov spolu bez DPH v mene uvedenej vcurrency. Na trase bez prepravnej sadzby je doprava zadarmo, rovnako ako pri objednávke, a jej cena je0.00.eta_days- počet dní, počas ktorých je najpomalší balík na ceste po odovzdaní dopravcovi, bez času výroby;null, ak trasa nemá odhad doby doručenia.
Požiadavka, ktorá neprejde validáciou, je odmietnutá s 400 Bad Request a dôvodom pre každé pole, s rovnakými správami ako pri riadku objednávky, napríklad The variant not found. Ak kusy nedokáže pojať žiadny prepravný balík, odpoveďou je 400 Bad Request so správou No shipping package can carry the variant.
Fabrixa Studio
Fabrixa Studio je nástroj, ktorý používateľom umožňuje plynulo prispôsobovať a personalizovať produkty v reálnom čase v intuitívnom rozhraní, v ktorom môžu vytvárať alebo nahrávať vlastné dizajny.
Fabrixa Studio je ideálne pre firmy, ktoré ponúkajú produkty na mieru - zákazníci si môžu svoj dizajn pozrieť ešte pred dokončením objednávky.
Vloženie Fabrixa Studia
Fabrixa Studio môžete vložiť na svoj web pomocou iframe. Vaši zákazníci tak môžu personalizovať produkty priamo na vašom webe počas nákupu.
Ukážka iframe na vloženie 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 svojimi dynamickými hodnotami.
application_key- jedinečný kľúč na autentifikáciu voči Integration API.product_sku- SKU variantu produktu získané z Integration API.cart_item_key- jedinečná hodnota z platformy, do ktorej je Studio vložené, ktorá identifikuje položku košíka priradenú k produktu. Slúži na uloženie personalizácií používateľa; pri vytváraní objednávky podľa nej systém nájde uložené personalizácie a priradí ich k objednávke. Pozrite si ukážku nižšie.locale(voliteľné) - jazyk rozhrania Studia a jeho chybových hlásení, napr.de_DEalebode. Bez neho sa Studio otvorí v jazyku prehliadača zákazníka, ak je podporovaný, inak v angličtine.
Hlavička Studia zobrazuje názov produktu tak, ako je vo vašom obchode - rovnaký názov, aký vidia vaši zákazníci - a pod ním možnosti zvolenej varianty. Ide o vlastnú kópiu produktu vo vašom obchode, takže názov, ktorý upravíte vo Fabrixa, sa zobrazí aj v Studiu; locale ho neprekladá.
Požiadavka na vytvorenie 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": {
"...": "..."
}
}
Spracovanie udalostí zo Studia
Keď sa v iframe klikne na tlačidlo Pridať do košíka, vykoná sa tento príkaz:
window.parent.postMessage('customizationFinished', '*');
Podobne pri kliknutí na tlačidlo Späť:
window.parent.postMessage('closeButtonClicked', '*');
Metóda postMessage umožňuje komunikáciu medzi iframe a jeho nadradeným oknom aj naprieč rôznymi pôvodmi (cross-origin), takže iframe môže nadradené okno upozorniť na konkrétne akcie používateľa.
Prvým argumentom postMessage sú údaje, ktoré chcete odoslať. Reťazec 'customizationFinished' znamená, že používateľ dokončil personalizáciu a pridáva produkt do košíka. 'closeButtonClicked' znamená, že sa používateľ rozhodol vrátiť späť.
V nadradenom okne tieto správy zachytávajte pomocou poslucháča udalosti 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 prichádzajúcich správ, aby ste mali istotu, že pochádzajú z dôveryhodného zdroja. Podľa prijatej správy vykonajte potrebné akcie - aktualizujte používateľské rozhranie, spracujte košík a podobne. Overovanie origin je pre bezpečnosť kľúčové - zabraňuje neoprávneným skriptom v interakcii s vašou aplikáciou.
Náhľad personalizácie
Po dokončení personalizácie zobrazte výsledný dizajn pomocou URL náhľadu uvedenej nižšie. Táto URL vracia obrázok personalizovaného produktu, ktorý môžete použiť ako hodnotu src v značke <img>. Hodí sa na zobrazenie personalizovaného produktu v košíku, v súhrne objednávky alebo kdekoľvek v rozhraní vášho obchodu.
https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}
Nahraďte {CART_ITEM_KEY} skutočným kľúčom položky košíka a {APPLICATION_KEY} svojím platným kľúčom aplikácie.
Ukážka použitia v značke obrázka:
<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;" />
Živá ukážka
Náhľad personalizácie sa tu zobrazí po dokončení dizajnu.
Webhooky
Fabrixa pomocou webhookov informuje váš systém o udalostiach v reálnom čase - o vytvorení alebo aktualizácii objednávok. Keď nastane udalosť, Fabrixa odošle na váš server webhook s príslušnými informáciami. Váš server musí sprístupniť verejný POST endpoint, ktorý bude prichádzajúce webhooky spracúvať.
Hlavičky požiadavky webhooku
Požiadavka webhooku obsahuje nasledujúce hlavičky, ktoré vám pomôžu prichádzajúcu požiadavku identifikovať a overiť:
{
"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"
}
Prehľad hlavičiek
content-type- pri webhookoch vždy nastavená naapplication/json.x-webhook-signature- podpis HMAC-SHA256 na overenie požiadavky.x-webhook-topic- typ udalosti alebo téma webhooku. Napríklad:order.created- spustí sa pri vytvorení novej objednávky.order.updated- spustí sa pri aktualizácii existujúcej objednávky.
Webhooky sa odosielajú s hlavičkou User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook); ak váš endpoint filtruje automatizovanú prevádzku, povoľte ho. Ak chcete mať istotu, že požiadavku odoslala Fabrixa, overte x-webhook-signature.
Udalosti webhookov
Webhooky Fabrixa informujú váš systém o zmenách stavu objednávky alebo o aktivite. Každý webhook sa spúšťa konkrétnou hodnotou x-webhook-topic. Momentálne podporované témy:
| Téma | Popis |
|---|---|
order.created |
Spustí sa, keď je vo Fabrixe zadaná nová objednávka, či už požiadavkou cez API, alebo priamo v platforme. |
order.updated |
Spustí sa, keď sa aktualizujú údaje objednávky, napríklad stav objednávky alebo stav vybavenia. |
Ukážka payloadu webhooku
Ukážka payloadu odosielaného s webhookom. Tento payload predstavuje aktualizáciu 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"
}
]
}
Keď je objednávka odoslaná, shipments obsahuje zoznam všetkých zásielok s ich dopravcom (carrier), spôsobom dopravy (method), stavom (status - pending, registered, collected, in transit, delivered, failed, returned alebo canceled) a sledovacími údajmi: tracking_number a tracking_url, a rovnako pre každý balík v packages, ak má zásielka viac balíkov. Webhook order.updated sa odošle vždy, keď sa zmení stav alebo sledovacie údaje zásielky, a GET /orders/{order_id} vracia rovnaké pole.
Overenie podpisov webhookov
Aby ste mali istotu, že požiadavka webhooku je pravá a nikto ju nezmenil, overte hlavičku x-webhook-signature. Znamená to znova vypočítať podpis HMAC-SHA256 z nespracovaného payloadu požiadavky a vášho tajného kľúča a potom ho porovnať s prijatým podpisom.
Ukážka v čistom 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ážka v Laraveli
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 svojím zdieľaným tajným kľúčom. Na porovnávanie podpisov vždy používajte hash_equals, aby ste sa chránili pred časovacími útokmi.
Opakované pokusy webhookov
Webhooky sa predvolene deaktivujú po 10 neúspešných pokusoch o doručenie. Ak váš endpoint vráti neúspešný stav, napríklad 404 alebo akúkoľvek chybu 5xx, webhook sa pokúsi o doručenie celkovo 10-krát. Ak bude endpoint naďalej vracať iný kód ako 2xx alebo 3xx, webhook sa deaktivuje. Za úspešné odpovede sa považujú:
2xx- znamená úspešné spracovanie, napr.200 OK.301a302- odpovede s presmerovaním, ktoré znamenajú, že webhook bol úspešne spracovaný alebo presmerovaný ďalej.
Odpoveď na webhook
Dôrazne odporúčame, aby váš endpoint čo najskôr vrátil stavový kód 200 OK a potvrdil tak úspešné prijatie webhooku. Hoci sa za úspešnú považuje akákoľvek odpoveď 2xx alebo 3xx, 200 je najbežnejšia a najspoľahlivejšia.
Aby ste predišli vypršaniu časového limitu doručenia alebo opakovaným pokusom, vráťte okamžite 200 OK a payload webhooku spracujte asynchrónne, napríklad pomocou úlohy na pozadí alebo frontu. Ak odpoveď vášho endpointu trvá príliš dlho, pokus sa môže považovať za neúspešný, aj keď je odpoveď nakoniec úspešná.
Odpovede so stavovými kódmi v rozsahu 4xx alebo 5xx, ako aj vypršanie časového limitu, spustia opakované pokusy podľa mechanizmu opakovania.