Fabrixa Integration API dokumentacija
29 min. skaitymo Paskutinį kartą atnaujinta: 06-11-2026 119 peržiūrų
Integration API leidžia kurti ir valdyti Fabrixa užsakymus, paleisti Fabrixa Studio ir per webhook pranešimus sekti gamybos bei vykdymo būseną. API laikosi REST principų, o visų užklausų ir atsakymų turinys perduodamas JSON formatu.
BAZINIS URL
https://api.fabrixa.com/v2/integration
Visas užklausas siųskite šiuo baziniu URL, po kurio nurodomas konkretaus galinio taško kelias. Bazinis URL – tai pagrindas darbui su Fabrixa API: išteklių gavimui, kūrimui, atnaujinimui ar šalinimui.
Autentifikavimas
Norėdami naudotis Integration API, autentifikuokite savo užklausas naudodami ir programos prieigos žetoną (Application Access Token), ir programos raktą (Application Key):
Authorization antraštė
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Programos rakto antraštė
X-Application-Key: APPLICATION_KEY
cURL komandos pavyzdys
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'
Pakeiskite APPLICATION_ACCESS_TOKEN savo tikruoju prieigos žetonu, o APPLICATION_KEY – savo tikruoju programos raktu.
Galiniai taškai ir užklausos
Integration API galiniai taškai suskirstyti pagal išteklių tipą ir atitinka REST architektūros stilių. Kiekvienas galinis taškas atitinka tam tikrą išteklių, o veiksmai su šiais ištekliais atliekami standartiniais HTTP metodais.
Visos Integration API užklausos ir atsakymai pateikiami JSON formatu, todėl sąsaja darbui su API yra nuosekli ir paprasta naudoti.
Išsamią informaciją apie kiekvieną galinį tašką, įskaitant užklausų ir atsakymų pavyzdžius, rasite mūsų Swagger dokumentacijoje.
Atsakymo formatas
Visi galiniai taškai grąžina duomenis standartizuotu formatu su šiais objektais:
{
"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"
}
]
}
Atsakymo objektų aprašymas
links
Pateikia puslapiavimo nuorodas, kuriomis galima naršyti po rezultatus.
self— dabartinio puslapio URL.first_page— pirmojo rezultatų puslapio URL.last_page— paskutinio rezultatų puslapio URL.next_page— kito puslapio URL.null, jei kito puslapio nėra.prev_page— ankstesnio puslapio URL.null, jei ankstesnio puslapio nėra.
meta
Pateikia atsakymo metaduomenis, pavyzdžiui, puslapiavimo informaciją.
total— bendras visuose puslapiuose esančių elementų skaičius.current_page— dabartinio rezultatų puslapio numeris.per_page— elementų skaičius viename puslapyje.
data
Pagrindinis atsakymo turinys. data priklauso nuo galinio taško – tai gali būti vienas objektas, pavyzdžiui, vienas produktas, arba objektų masyvas, pavyzdžiui, produktų sąrašas.
Klaidos ir būsenos kodai
Visos API užklausos grąžina HTTP būsenos kodus, iš kurių galima suprasti, kaip buvo apdorota užklausa.
400 Bad Request
Serveris negali apdoroti užklausos dėl validavimo klaidų – trūksta parametrų arba jie neteisingi.
401 Unauthorized
Klientas nepateikė galiojančių autentifikavimo duomenų. Šis kodas grąžinamas ir tada, kai prieigos žetonas buvo atšauktas.
403 Forbidden
Serveris atmetė užklausą dėl nepakankamų prieigos teisių – dažniausiai dėl to, kad teisės nustatytos neteisingai arba jų nėra.
404 Not Found
Prašomas išteklius serveryje nerastas.
412 Precondition Failed
Užklausos negalima įvykdyti esant dabartinei ištekliaus būsenai, pavyzdžiui, kai užsakymo nebegalima atšaukti.
429 Too Many Requests
Klientas viršijo leistiną užklausų skaičių per nustatytą laiką. Žr. Užklausų limitai.
5xx Errors
Įvyko vidinė serverio klaida. Susisiekite su Fabrixa pagalbos tarnyba ir pateikite nepavykusios užklausos informaciją.
Klaidos atsakymo turinys
Klaidos atsakymo turinio pavyzdys:
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/ping"
},
"meta": [],
"errors": {
"messages": [
"Application Key is not specified."
]
}
}
errors pateikia informaciją apie tai, kas nepavyko. Masyve messages išvardyti klaidų aprašymai. Bad Request atveju gausite laukų, kurie neatitiko validavimo taisyklių, pavadinimus.
Užklausų limitai
Integration API taikomas 30 užklausų per minutę vienai programai limitas.
Viršiję šį limitą, gausite atsakymą 429 Too Many Requests.
Kiekviename Integration API atsakyme yra antraštė X-RateLimit-Remaining, nurodanti, kiek užklausų klientas dar gali atlikti, ir antraštė X-RateLimit-Limit, nurodanti bendrą per minutę leidžiamų užklausų skaičių.
Smėlio dėžės režimas
Smėlio dėžės režimas leidžia išbandyti integraciją nuo pradžios iki galo, kol nė vienas tikras užsakymas negaminamas ir neapmokestinamas. Jis taikomas visai jūsų paskyrai: užsakymai iš visų pardavimo kanalų, įskaitant Integration API ir prijungtas Shopify bei WooCommerce parduotuves, negaminami ir nenurašomi nuo jūsų likučio. Jūsų paskyra veikia smėlio dėžės režimu, kol jos būsena yra laukiama aktyvinimo.
Smėlio dėžės režimu galite:
- prijungti savo Shopify ar WooCommerce parduotuvę arba sukurti Integration API kanalą;
- pridėti produktų ir patikrinti kainas bei pristatymo įkainius;
- importuoti, kurti, atnaujinti ir atšaukti užsakymus;
- įsitikinti, kad nė vienas iš šių užsakymų negaminamas ir nenurašomas nuo jūsų likučio;
- patikrinti webhook pristatymą ir parašus.
Norėdami išbandyti užsakymus, pridėkite produktų iš Fabrixa katalogo: atidarykite produktą, spustelėkite Parduoti ir pasirinkite variantus bei dizainus. Tada jie atsiranda skiltyje Mano produktai.
Norėdami perjungti paskyrą į smėlio dėžės režimą, atidarykite Platform, eikite į Nustatymai → Įmonė → Smėlio dėžės režimas ir spustelėkite Perjungti į smėlio dėžės režimą. Jį galima įjungti ir pridedant naują pardavimo kanalą, įskaitant Integration API kanalą, arba parašyti adresu support@fabrixa.com, ir mes perjungsime jūsų paskyrą už jus. Smėlio dėžės režimas pasiekiamas tik aktyvioms paskyroms.
Kai būsite pasirengę, patys aktyvinkite paskyrą Platform skiltyje Nustatymai → Įmonė → Smėlio dėžės režimas. Taip pat galite parašyti adresu support@fabrixa.com, ir mes ją aktyvinsime už jus. Prijungtos parduotuvės ir API prisijungimo duomenys toliau veikia, todėl nieko iš naujo konfigūruoti nereikia.
Po aktyvinimo visi nauji užsakymai keliauja į gamybą ir nurašomi nuo jūsų likučio. Prieš aktyvinimą sukurti užsakymai lieka bandomaisiais: jie niekada negaminami ir neapmokestinami, net ir po aktyvinimo.
Produktai
Katalogas – tai viskas, ką gamina „Fabrixa“. Jūsų produktai – tai katalogo produktai, kuriuos pridėjote į savo „Fabrixa“ paskyrą, su savo pavadinimais, aprašymais, nuotraukomis ir SKU. Užsakymo eilutė nurodo produkto variantą – vieną produkto dydį ar versiją – pagal jo sku arba variant_id: vieno iš jūsų produktų variantą arba tiesiogiai užsakomą katalogo variantą.
Katalogo naršymas
Norėdami gauti produktų, kuriuos gamina „Fabrixa“, sąrašą, siųskite GET užklausą į https://api.fabrixa.com/v2/integration/catalog/products su savo prisijungimo duomenimis. Jame pateikiami aktyvūs produktai, turintys variantą, kurį šiuo metu gamina spaudos partneris, ir tik tie variantai – kiekvienas su savo SKU, pardavimo kaina, matmenimis ir parinkčių reikšmėmis.
Užklausos parametrai
pageirlimit(iki 100) – suskirsto sąrašą į puslapius. Be jų visas katalogas grąžinamas vienu atsakymu.search– produktai, kurių pavadinime yra tekstas arba kurių slug ar variantoSKUjuo prasideda.category_id– kategorijos produktai;parent_category_id– bet kurios aukščiausio lygio kategorijos subkategorijos produktai. Žr. Katalogo kategorijos.group_id– katalogo grupės produktai.sort_by–name,created,updated,type,populararbasold,sort_ordertvarkaascarbadesc. Pagal numatytuosius nustatymus naujausi produktai pateikiami pirmi.
Užklausos pavyzdys
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'
Atsakymo pavyzdys
{
"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"
}
]
}
]
}
]
}
]
}
Atsakymo laukai
id,name,subtitle,description(HTML),slug,codeirHS_code– muitų tarifo kodas.is_sellable– ar produktas atviras pardavimui. Uždarytas produktas vis dar yra sąraše, bet užsakymas bet kuriam jo variantui atmetamas.variants_min_selling_priceirvariants_max_selling_price– pateiktų variantų kainų intervalas.type– produkto tipas, nustatantis spaudos sluoksnius ir PDF puslapių tvarką;status– kataloge visadaActive.categories– kategorijos, kurioms priklauso produktas, kiekviena su savoparent_category.images– produkto nuotraukos suurl,is_main,screen_type_sizeirsort_number.variants– užsakomos produkto versijos:id,name,subtitle,SKU,selling_price, matmenyswidth,height,lengthirweightbeioptions– parinkčių reikšmės, apibrėžiančios šį variantą, pavyzdžiui, jo dydis.
Katalogo kategorijos
Norėdami gauti kategorijų, pagal kurias sutvarkytas katalogas, sąrašą, siųskite GET užklausą į https://api.fabrixa.com/v2/integration/catalog/categories su savo prisijungimo duomenimis. Atsakyme pateikiamos aukščiausio lygio kategorijos, kiekviena su subkategorijomis, įdėtomis į sub_categories, ir katalogo produktų skaičiumi joje products_count lauke. Naršydami katalogą perduokite kategorijos id kaip category_id arba aukščiausio lygio kategorijos id kaip parent_category_id, kad iš karto gautumėte visų jos subkategorijų produktus.
Užklausos parametrai
pageirlimit(iki 100) – suskirsto sąrašą į puslapius. Be jų grąžinamos visos kategorijos.search– kategorijos, kurių pavadinime yra tekstas.with_products_only–truepraleidžia kategorijas, kuriose nėra nė vieno katalogo produkto nei tiesiogiai, nei subkategorijoje.sort_by–category_namearbacategory_created,sort_ordertvarkaascarbadesc. Pagal numatytuosius nustatymus kategorijos pateikiamos katalogo tvarka.
Užklausos pavyzdys
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'
Atsakymo pavyzdys
{
"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
}
]
}
]
}
Jūsų produktai
Norėdami gauti savo paskyros produktų sąrašą, siųskite GET užklausą į https://api.fabrixa.com/v2/integration/products su savo prisijungimo duomenimis. Jūsų produktai – tai katalogo produktai, kuriuos pridėjote į savo „Fabrixa“ paskyrą: jie turi pavadinimus, aprašymus ir nuotraukas, kuriuos jiems ten suteikėte, o jų variantai – jūsų pasirinktas SKU reikšmes. Sąraše tik aktyvūs produktai, po dešimt puslapyje, nebent perduosite limit.
Užklausos parametrai
pageirlimit(iki 100) – kurį puslapį grąžinti ir jo dydis; pagal numatytuosius nustatymus pirmas puslapis su dešimčia produktų.search– produktai, kurių pavadinime yra tekstas arba kurių slug ar variantoSKUjuo prasideda.
Užklausos pavyzdys
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'
Atsakymo pavyzdys
{
"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"]
}
]
}
]
}
Norėdami perskaityti vieną produktą, siųskite GET užklausą į https://api.fabrixa.com/v2/integration/products/{product_id}, kur {product_id} – jo id. Atsakyme tie patys laukai kaip ir sąraše. Produktas, kurio nėra jūsų paskyroje, net ir katalogo produktas, atsako 404 Not Found su pranešimu Product not found.
Atsakymo laukai
id,name,subtitle,description(HTML),slug,width,height,lengthirweight.type– produkto tipas, nustatantis spaudos sluoksnius ir PDF puslapių tvarką.available_options– kiekviena produkto parinktis su visomis jos reikšmėmis, pavyzdžiui, kiekvienas dydis, kuriuo jis gaminamas; kiekvienas variantas ima po vieną reikšmę parinkčiai.categoriesircollections– kategorijos ir kolekcijos, į kurias priskyrėte produktą savo paskyroje.images– produkto nuotraukos suurl,is_main,image_size,screen_type_sizeirsort_number.variants– užsakomos produkto versijos, žr. Produktų variantai:id,name,subtitle,SKU,options,imagesir spaudos sluoksniaiavailable_source_typesbeirequired_source_typeslaukuose.
Produktų variantai
Variantas – tai viena užsakoma produkto versija – vienas dydis, viena spalva – ir būtent jį nurodo užsakymo eilutė pagal sku arba variant_id. Norėdami perskaityti vieno iš savo produktų variantą, siųskite GET užklausą į https://api.fabrixa.com/v2/integration/variants/{variant_id}, kur {variant_id} – jo id. Produkto, kurio nėra jūsų paskyroje, variantas atsako 404 Not Found su pranešimu Variant not found.
Užklausos pavyzdys
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'
Atsakymo pavyzdys
{
"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"]
}
}
Atsakymo laukai
id,name,subtitle,description,SKU,width,height,length,weight,options,imagesirproduct– produktas, kuriam priklauso variantas.available_source_types– varianto spaudos sluoksniai, pavadinti taip, kaip juos žino jo gamybos procesas. Be"file", kurį kiekvienas variantas priima PDF failui, tai reikšmės, kurias gali turėti šaltinio failotype; produktas su vienu spaudos sluoksniu nurodo"print".required_source_types– sluoksniai, kuriuos turi padengti spaudos failas. PDF, išsiųstas kaip"file", padengia juos savo puslapiais produkto tipo puslapių tvarka. Kitu atveju eilutei reikia JPEG, PNG arba TIFF failo kiekvienam iš jų, su sluoksnio pavadinimu kaiptype; eilutė, kurioje kurio nors trūksta, atmetama su400 Bad Requestir trūkstamų sluoksnių pavadinimais.
Užsakymo eilutė šiam variantui su PDF, kurio puslapiai yra jo sluoksniai:
"rows": [
{
"sku": "DDC-140200",
"quantity": 1,
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/duvet-cover.pdf"
}
]
}
]
Kuriuos variantus galima užsakyti
- Užsakymo eilutė gali nurodyti jūsų paskyros produkto variantą arba tiesiogiai katalogo variantą, bet niekada – kito kliento produktą. Variantas randamas pagal
variant_idarba pagalsku, nepriklausomai nuo raidžių registro. - Variantas turi būti aktyvus, o jo produktas – aktyvus ir atviras pardavimui. Jūsų katalogo produkto kopijai katalogo produktas taip pat turi būti aktyvus, o katalogo variantas – įjungtas.
- Kitu atveju užsakymas atmetamas su
400 Bad Requestir atitinkamos eilutės priežastimi: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.arbaThe catalog variant is not active.
Užsakymai
Kurkite Fabrixa užsakymus tiesiai iš savo internetinės parduotuvės ar platformos, pridėkite reikiamus spaudos failus ir sekite kiekvieną prekę visame vykdymo procese.
Užsakymo sukūrimas
Norėdami sukurti užsakymą per Fabrixa Integration API, išsiųskite POST užklausą adresu https://api.fabrixa.com/v2/integration/orders. Užklausos turinyje turi būti:
Užklausos turinio struktūra
number(neprivalomas) – užsakymo numeris. Jei nenurodytas, sugeneruojamas unikalus numeris.comments(neprivalomas) – papildomi su užsakymu susiję komentarai ar pastabos.purchased_at– užsakymo pirkimo data ir laikas formatuYYYY-MM-DD HH:MM:SS.client_ip(neprivalomas) – kliento IP adresas.client_user_agent(neprivalomas) – kliento user-agent eilutė.rows– užsakymo prekių masyvas; kiekviename elemente yra:sku– produkto varianto SKU. Išsamiau žr. Swagger.quantity– užsakyto produkto varianto kiekis.client_barcode(neprivalomas) – unikalus kliento pusės kiekvienos užsakymo eilutės identifikatoriusCode 128formatu.cart_item_key(privalomas, jei nėrasources) – unikalus identifikatorius iš platformos, į kurią įterptas Fabrixa Studio; naudojamas išsaugotiems personalizavimo duomenims susieti su užsakymu.sources(privalomas, jei nėracart_item_key) – su produktu susijusių šaltinio failų masyvas; kiekviename elemente yra:type–"file"PDF failui arba"print"JPEG, PNG ar TIFF failui.url– šaltinio failo URL.
customer– kliento duomenys:first_name,last_name,email,phone.
shipping_address– pristatymo duomenys:address,address2(neprivalomas),address3(neprivalomas).city,country_code(ISO 3166-2),country,postal_code,state(neprivalomas).first_name,last_name,phone(neprivalomas),company(neprivalomas).
shipping_label(neprivalomas) – siuntos etiketės duomenys:method_name– pvz., „Post NL“.tracking_number,tracking_url,label_pdf_url.date_created– formatuYYYY-MM-DD HH:MM:SS.
Užklausos pavyzdys
{
"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"
}
}
Atsakymo pavyzdys
{
"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"
}
}
}
Užsakymo atnaujinimas
Norėdami atnaujinti užsakymą, išsiųskite PATCH užklausą adresu https://api.fabrixa.com/v2/integration/orders/{order_id}, kur {order_id} – Fabrixa užsakymo ID. Keičiami tik tie laukai, kuriuos išsiunčiate, o užsakymo būsena lieka nepakitusi. Atsakyme pateikiamas atnaujintas užsakymas. Galite keisti:
number,comments,purchased_at,client_ip,client_user_agent.customer–first_name,last_name,email,phone.shipping_address– tuos pačius laukus kaip ir kuriant užsakymą.
Užklausos pavyzdys
{
"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"
}
}
Atsakymo pavyzdys
{
"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"
}
}
}
- Užsakymo eilučių keisti negalima: užklausa su
rowsatmetama ir grąžinamas400 Bad Request. Norėdami pakeisti prekes, atšaukite užsakymą ir sukurkite naują. - Užsakymo, kurio būsena yra
on hold, atnaujinti negalima; API grąžina412 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."
]
}
}
Užsakymo atšaukimas
Norėdami atšaukti užsakymą, išsiųskite POST užklausą be turinio adresu https://api.fabrixa.com/v2/integration/orders/{order_id}/cancel, kur {order_id} – Fabrixa užsakymo ID (skaitinis užsakymo laukas id), o ne Jūsų užsakymo numeris. Atsakyme pateikiamas užsakymas su būsena canceled, ir išsiunčiamas order.updated webhook pranešimas.
- Užsakymą galima atšaukti, kol jo būsena yra
created,imported,acceptedarbaon hold, o jofulfillment_statusvis dar yraunfulfilled. Kai ji tampascheduled, gamyba jau pradėta ir užsakymo nebegalima atšaukti. - Už atšauktą užsakymą nuskaičiuotos sumos grąžinamos į Jūsų balansą.
- Atšaukiant jau atšauktą užsakymą, jis grąžinamas nepakitęs, todėl užklausą galima saugiai kartoti.
Atsakymo pavyzdys
{
"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"
}
}
}
Jei užsakymo atšaukti negalima, API grąžina 412 Precondition Failed ir pranešimą su priežastimi: to neleidžia dabartinė užsakymo būsena (ji nurodoma pranešime) arba gamyba jau prasidėjo.
{
"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)."
]
}
}
Užsakymo gyvavimo ciklas
Užsakymas sekamas pagal tris būsenas: užsakymo lauką status, jo gamybos būseną fulfillment_status ir kiekvienos siuntos lauką status sąraše shipments. Kiekvienas pakeitimas siunčiamas webhook pranešime order.updated ir grąžinamas per GET /orders/{order_id}.
Užsakymo būsenos
Užsakymo lauko status reikšmės ta tvarka, kuria jos pasiekiamos:
imported- užsakymas gautas per API. Kiekvienas užsakymas prasideda čia.on hold- likutis nepadengia užsakymo kainos. Kai jis papildomas, užsakymas grįžta įimportedir tęsiamas.accepted- užsakymas priimtas ir perduodamas gamybai.completed(galutinė) - visi gaminiai pagaminti.canceled(galutinė) - užsakymas atšauktas. Tai įmanoma, kol jo būsena yraimported,acceptedarbaon holdir gamyba dar neprasidėjo.
Vykdymo būsenos
Užsakymo ir kiekvienos užsakymo eilutės lauko fulfillment_status reikšmės ta tvarka, kuria jos pasiekiamos. Būsena keičiasi tik į priekį, niekada atgal:
unfulfilled- gamyba dar neprasidėjo.scheduled- užsakymas suplanuotas gamybos partijoje. Nuo šiol jo nebegalima atšaukti.processing- vyksta gamyba.partially fulfilled- dalis gaminių paruošta, likusieji dar gaminami.fulfilled(galutinė) - visi gaminiai paruošti. Tada užsakymostatustampacompleted.
Užsakymas kaip visuma niekada neatmetamas. Atskiras gaminys gali būti atmestas atliekant kokybės kontrolę gamybos metu. Tada jis spausdinamas iš naujo: grįžta į unfulfilled ir dar kartą pereina gamybą, o užsakymas išlaiko savo būseną ir tęsiamas, kai tik gaminys paruoštas.
Siuntos būsenos
Kiekvienos siuntos lauko status reikšmės sąraše shipments ta tvarka, kuria jos pasiekiamos:
pending- siunta ruošiama.registered- etiketė sukurta vežėjo sistemoje.collected- vežėjas paėmė siuntinį.in transit- siuntinys pakeliui.delivered(galutinė) - siuntinys pristatytas.
Išimtys:
failed- vežėjas pranešė apie problemą.returned(galutinė) - siuntinys grąžintas mums.canceled(galutinė) - siunta atšaukta.
Vykdymo sekimas
Norėdami gauti konkretaus užsakymo vykdymo būseną, išsiųskite GET užklausą adresu https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. Atsakyme pateikiamas su užsakymu susijusių vykdymo įrašų sąrašas, įskaitant kiekvienos prekės būseną, produkto informaciją ir gamybos etapų eigą.
Atsakymo pavyzdys
{
"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
}
}
]
}
]
}
Atsakyme pateikiamas vykdymo įrašų sąrašas; kiekviename įraše nurodoma:
id– unikalus vykdymo įrašo identifikatorius.barcode– brūkšninis kodas vidiniam sekimui ir identifikavimui; jį taip pat galima išspausdinti ant produkto.status– dabartinė vykdymo būsena: unfulfilled arba fulfilled.created_atirupdated_at– vykdymo įrašo sukūrimo ir paskutinio atnaujinimo laiko žymos.variant– išsami informacija apie produkto variantą: pavadinimas, paantraštė, SKU.product– produkto informacija: pavadinimas, paantraštė.production_steps– gamybos etapų masyvas. Etapų sąrašas priklauso nuo produkto tipo. Kiekvienam etapui pateikiama:id– unikalus gamybos etapo identifikatorius.name– pvz., „Antklodės užvalkalo spausdinimas“.description– ką apima gamybos etapas.status– dabartinė būsena:- pending – dar nepradėtas.
- in progress – šiuo metu vykdomas.
- rejected – etape iškilo problema, ir jis nebuvo sėkmingai užbaigtas.
- done – etapas užbaigtas.
notes– papildomos su etapu susijusios pastabos.updated_at– kada etapo būsena buvo atnaujinta paskutinį kartą.
Kiekvienas vykdymo įrašas atitinka konkretų užsakymo produktą ar produkto variantą, o kiekvienas užsakyto produkto vienetas turi atskirą vykdymo įrašą – kiekviena prekė gamybos metu sekama atskirai.
Jei užsakymui negrąžinamas nė vienas vykdymo įrašas, vadinasi, užsakymas dar nepateko į apdorojimo etapą.
Reikalavimai šaltinio failams
Pridėdami prie užsakymo šaltinio failus, įsitikinkite, kad jie atitinka šiuos reikalavimus:
type
Pageidaujamas šaltinio formatas yra PDF. Gaminiui su vienu spaudos sluoksniu, pavyzdžiui, antklodei ar rankšluosčiui, tinka ir JPEG, PNG arba TIFF failas. Gaminiui su keliais sluoksniais pateikite PDF failą, kuriame kiekvienas sluoksnis yra atskiras puslapis: apdorojant kiekvienas puslapis laikomas atskiru sluoksniu, todėl kelių sluoksnių dizainas pateikiamas vienu failu. Žr. PDF reikalavimus ir puslapių tvarką.
Nustatykite type pagal failo formatą. PDF atveju naudokite "file": kiekvienas puslapis spausdinamas ant vieno gaminio sluoksnio pagal tam gaminiui nurodytą puslapių tvarką. JPEG, PNG arba TIFF failui, tinkamam gaminiui su vienu spaudos sluoksniu, naudokite "print".
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/source.pdf"
}
]
Išsamesnės informacijos rasite Swagger dokumentacijoje.
url
Lauke url turi būti tiesioginė nuoroda į šaltinio failą. Įsitikinkite, kad URL pasiekiamas ir failą galima atsisiųsti be autentifikavimo. Nuoroda turi likti pasiekiama per visą gamybos procesą.
Kaip atsisiunčiame failą
Failą iš Jūsų serverio atsisiunčiame du kartus: tikrindami užsakymą siunčiame užklausą su Range: 0-0, o vėliau atsisiunčiame visą failą. Abiejose užklausose siunčiamas User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#sources; print file fetch); jei Jūsų svetainė filtruoja automatizuotą srautą, leiskite jį. URL turi naudoti HTTPS per 443 prievadą ir grąžinti failą tiesiogiai, be peradresavimų, su tikruoju failo Content-Type, pvz., application/pdf. Kiekvienai užklausai skiriama 60 sekundžių, po to ji nutraukiama.
Failo formatas
Pateikite PDF failą arba, gaminiui su vienu sluoksniu, JPEG, PNG ar TIFF failą, pateikiamą su tikruoju Content-Type. Permatomos PNG sritys spausdinamos baltai. Įsitikinkite, kad vaizdai yra aukštos kokybės ir tinkami spausdinti.
Vaizdo matmenys
Didžiausi leistini matmenys – 15 000 pikselių bet kurioje kraštinėje. Šį limitą viršijantys vaizdai gali būti sumažinti arba atmesti. Vaizdo raiška turėtų atitikti produkto matmenis; priešingu atveju vaizdų dydis gali būti pakeistas arba jie gali būti apkarpyti, kad tilptų.
Raiška
Konkretaus raiškos reikalavimo nėra – svarbu tik, kad vaizdo kokybė būtų pakankama spaudai.
Spalvų erdvė
Kad spalvos būtų atkurtos tiksliai, vaizdai turėtų būti RGB spalvų erdvėje. Kitos spalvų erdvės apdorojimo metu konvertuojamos, todėl spalvos gali būti atkurtos netiksliai.
Failo dydis
Kiekvienas šaltinio failas gali būti iki 200 MB. Didesnis failas atmetamas: kuriant užsakymą, jei Jūsų serveris siunčia Content-Length, o kitu atveju – atsisiunčiant failą.
PDF reikalavimai ir puslapių tvarka
Puslapių tvarka PDF faile yra svarbi. Puslapiai priskiriami produkto sluoksniams pagal jų vietą, o reikiama puslapių tvarka priklauso nuo produkto tipo. Įsitikinkite, kad Jūsų PDF puslapiai išdėstyti tokia sluoksnių seka, kokios reikia pateikiamam produktui.
| Produktas | PDF puslapių tvarka |
|---|---|
| Duvet Cover |
|
| Curtains |
|
| T-shirt |
|
| Tanktop |
|
| Sweater |
|
| Hoodie |
|
| Sweatpants |
|
| Sweatshorts |
|
Svarbu: kiekvienas PDF puslapis turi atitikti jo produkto sluoksniui nustatytus matmenis ir būti tinkamai orientuotas. Išdėstykite dizainą taip, kad jo viršus sutaptų su puslapio viršumi. Dėl netinkamo puslapio dydžio ar orientacijos gamyboje gali kilti mastelio, pasukimo ar lygiavimo problemų.
Pristatymas
Sužinokite, kiek kainuos užsakymo pristatymas ir kiek laiko jis keliaus, dar prieš pateikdami užsakymą, pagal tas pačias taisykles, kuriomis Fabrixa apskaičiuoja paties užsakymo kainą.
Pristatymo šalys
Norėdami sužinoti, į kurias šalis galima pristatyti produkto variantą, siųskite GET užklausą į https://api.fabrixa.com/v2/integration/shipping/countries su savo prisijungimo duomenimis. Sąraše, surikiuotame pagal pavadinimą, pateikiamos šalys, į kurias vieta, kurioje gaminamas variantas, turi pristatymo tarifą kuriai nors siuntimo pakuotei, į kurią galima supakuoti variantą. Jei šalies sąraše nėra, šiam variantui pristatymo tarifo į ją nėra.
Užklausos parametrai
variant_idarbasku– variantas, nurodomas taip pat kaip užsakymo eilutėje, kaip ir gaunant įvertinimą.
Užklausos pavyzdys
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'
Atsakymo pavyzdys
{
"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
}
]
}
Atsakymo laukai
codeirname– šalis su ISO 3166-1 alpha-2 kodu, kurį reikia nurodyti kaipcountry_code, norint gauti įvertinimą.min_shipping_priceirmax_shipping_price– intervalas, nurodantis, kiek kainuoja vieno siuntinio pristatymas į šalį be PVM, laukecurrencynurodyta valiuta, atsižvelgiant į visas siuntimo pakuotes, į kurias galima supakuoti variantą. Kelių vienetų užsakymui gali prireikti kelių siuntinių, todėl konkretaus kiekio kainą sužinosite paprašę įvertinimo.min_eta_daysirmax_eta_days– intervalas, nurodantis, kiek dienų siuntinys keliauja po to, kai perduodamas vežėjui, neįskaitant gamybos laiko;null, kai tarifuose nėra pristatymo trukmės įvertinimo.
Pristatymo kainos įvertinimas
Norėdami sužinoti, kiek kainuotų produkto varianto pristatymas ir kiek laiko siunta būtų kelyje, siųskite GET užklausą į https://api.fabrixa.com/v2/integration/shipping/estimate su savo prisijungimo duomenimis. Įvertinimas atliekamas pagal tas pačias taisykles, pagal kurias apskaičiuojama užsakymo kaina: vienetai supakuojami į vietos, kurioje gaminamas variantas, siuntimo pakuotes, o kiekvieno siuntinio kaina apskaičiuojama pagal maršrutą iš tos vietos į paskirties šalį. Nieko neužsakoma ir nerezervuojama, o užsakymo kaina apskaičiuojama jį pateikiant, todėl jo pristatymo kaina gali skirtis, jei iki to laiko pasikeistų tarifai.
Užklausos parametrai
variant_idarbasku– variantas, nurodomas taip pat kaip užsakymo eilutėje: vieno iš jūsų produktų variantas arba katalogo variantas. Tai turi būti variantas, kurį galite užsakyti.country_code– šalies, į kurią siunčiamas užsakymas, ISO 3166-1 alpha-2 kodas, pavyzdžiui,NL.quantity– vienetų skaičius, nuo 1 iki 1000.
Užklausos pavyzdys
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'
Atsakymo pavyzdys
{
"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
}
}
Atsakymo laukai
variant_id,sku,quantityircountry_code– variantas, kiekis ir paskirties vieta, kuriems taikomas įvertinimas.origin_country– šalis, iš kurios siunčiamas variantas, su joscodeirname.packages_count– siuntinių, į kuriuos supakuojami vienetai, skaičius.packages– patys siuntiniai, po vieną įrašą kiekvienam siuntinio tipui:package_type, jolength,widthirheightcentimetrais, tokių siuntiniųquantity, vieno jų pristatymopriceir joeta_days. Kainų ir kiekių sandaugų suma lygishipping_price.shipping_price– visų siuntinių bendra pristatymo kaina be PVM, laukecurrencynurodyta valiuta. Maršrutu, kuriam nenustatytas pristatymo tarifas, siunčiama nemokamai, kaip ir užsakymo atveju, o kaina yra0.00.eta_days– kiek dienų lėčiausias siuntinys keliauja po to, kai perduodamas vežėjui, neįskaitant gamybos laiko;null, kai maršrutui nėra pristatymo trukmės įvertinimo.
Į užklausą, kuri nepraeina validavimo, atsakoma 400 Bad Request su kiekvieno lauko priežastimi ir tais pačiais pranešimais kaip užsakymo eilutei, pavyzdžiui, The variant not found. Kai nė viena siuntimo pakuotė negali sutalpinti vienetų, atsakymas yra 400 Bad Request su pranešimu No shipping package can carry the variant.
Fabrixa Studio
Fabrixa Studio – tai įrankis, leidžiantis naudotojams realiuoju laiku sklandžiai pritaikyti ir personalizuoti produktus intuityvioje sąsajoje, kurioje jie gali sukurti arba įkelti savo dizainą.
Fabrixa Studio puikiai tinka įmonėms, siūlančioms personalizuojamus produktus – klientai gali pamatyti savo dizainą dar prieš pateikdami užsakymą.
Fabrixa Studio įterpimas
Fabrixa Studio galite įterpti į savo svetainę naudodami iframe. Taip Jūsų klientai galės personalizuoti produktus tiesiai Jūsų svetainėje pirkimo metu.
Fabrixa Studio įterpimo iframe pavyzdys:
<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>
Pakeiskite product_sku, cart_item_key ir application_key reikšmes savo dinaminėmis reikšmėmis.
application_key– unikalus raktas, skirtas autentifikuotis Integration API.product_sku– produkto varianto SKU, gautas iš Integration API.cart_item_key– unikali įterpiančiosios platformos reikšmė, identifikuojanti su produktu susijusią krepšelio prekę. Ji naudojama naudotojo personalizavimo duomenims išsaugoti; kuriant užsakymą pagal ją randami išsaugoti personalizavimo duomenys ir priskiriami užsakymui. Žr. pavyzdį toliau.locale(neprivaloma) – Studio sąsajos ir jos klaidų pranešimų kalba, pvz.,de_DEarbade. Be jo Studio atsidaro pirkėjo naršyklės kalba, jei ji palaikoma, kitaip - anglų kalba.
Studio antraštėje rodomas produkto pavadinimas toks, koks jis yra jūsų parduotuvėje - tas pats pavadinimas, kurį mato jūsų klientai, - o po juo pasirinkto varianto parinktys. Tai jūsų parduotuvės produkto kopija, todėl Fabrixa pakeistas pavadinimas rodomas ir Studio; locale jo neverčia.
Užsakymo sukūrimo užklausa su 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": {
"...": "..."
}
}
Studio įvykių apdorojimas
Iframe viduje paspaudus mygtuką Pridėti į krepšelį, vykdoma ši komanda:
window.parent.postMessage('customizationFinished', '*');
Panašiai, paspaudus mygtuką Atgal:
window.parent.postMessage('closeButtonClicked', '*');
Metodas postMessage leidžia keistis duomenimis tarp skirtingų kilmių (cross-origin) iframe ir jo tėvinio lango, todėl iframe gali pranešti tėviniam langui apie konkrečius naudotojo veiksmus.
Pirmasis postMessage argumentas – duomenys, kuriuos norite išsiųsti. Eilutė 'customizationFinished' rodo, kad naudotojas baigė personalizavimą ir deda produktą į krepšelį. 'closeButtonClicked' rodo, kad naudotojas nusprendė grįžti atgal.
Tėviniame lange šių pranešimų klausykitės naudodami message įvykio klausytoją:
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.');
}
}
});
Visada tikrinkite gaunamų pranešimų origin, kad įsitikintumėte, jog jie gauti iš patikimo šaltinio. Priklausomai nuo gauto pranešimo, atlikite reikiamus veiksmus – atnaujinkite naudotojo sąsają, apdorokite krepšelį ir pan. origin tikrinimas yra labai svarbus saugumui – jis neleidžia neautorizuotiems scenarijams sąveikauti su Jūsų programa.
Personalizavimo peržiūra
Baigus personalizavimą, galutinį dizainą parodykite naudodami toliau pateiktą peržiūros URL. Šis URL grąžina personalizuoto produkto vaizdą, kurį galima naudoti kaip src reikšmę žymėje <img>. Tai puikiai tinka personalizuotam produktui rodyti krepšelyje, užsakymo suvestinėje ar bet kur kitur Jūsų parduotuvės sąsajoje.
https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}
Pakeiskite {CART_ITEM_KEY} tikruoju krepšelio prekės raktu, o {APPLICATION_KEY} – savo galiojančiu programos raktu.
Naudojimo vaizdo žymėje pavyzdys:
<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;" />
Interaktyvi demonstracija
Užbaigus dizainą, čia bus rodoma personalizavimo peržiūra.
Webhook pranešimai
Fabrixa naudoja webhook pranešimus, kad realiuoju laiku informuotų Jūsų sistemą apie įvykius – užsakymų sukūrimą ar atnaujinimą. Kai nutinka toks įvykis, Fabrixa į Jūsų serverį išsiunčia webhook pranešimą su atitinkama informacija. Gaunamiems webhook pranešimams apdoroti Jūsų serveris turi turėti viešą POST galinį tašką.
Webhook užklausos antraštės
Webhook užklausoje pateikiamos šios antraštės, padedančios atpažinti ir patikrinti gaunamą užklausą:
{
"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"
}
Antraščių paaiškinimas
content-type– webhook pranešimams visadaapplication/json.x-webhook-signature– HMAC-SHA256 parašas užklausai patikrinti.x-webhook-topic– webhook pranešimo įvykio tipas arba tema. Pavyzdžiui:order.created– siunčiamas, kai sukuriamas naujas užsakymas.order.updated– siunčiamas, kai atnaujinamas esamas užsakymas.
Webhook pranešimai siunčiami su User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook); jei Jūsų galinis taškas filtruoja automatizuotą srautą, leiskite jį. Norėdami įsitikinti, kad užklausa gauta iš Fabrixa, patikrinkite x-webhook-signature.
Webhook įvykiai
Fabrixa webhook pranešimai informuoja Jūsų sistemą apie užsakymo būsenos ar veiklos pokyčius. Kiekvieną webhook pranešimą inicijuoja konkreti x-webhook-topic reikšmė. Šiuo metu palaikomos temos:
| Tema | Aprašymas |
|---|---|
order.created |
Siunčiamas, kai Fabrixa sistemoje pateikiamas naujas užsakymas – per API užklausą arba tiesiogiai platformoje. |
order.updated |
Siunčiamas, kai atnaujinama užsakymo informacija, pavyzdžiui, užsakymo būsena ar vykdymo būsena. |
Webhook duomenų pavyzdys
Su webhook pranešimu siunčiamų duomenų pavyzdys. Šie duomenys atspindi užsakymo atnaujinimą:
{
"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"
}
]
}
Išsiuntus užsakymą, shipments pateikia kiekvieną siuntą su jos vežėju (carrier), pristatymo būdu (method), būsena (status: pending, registered, collected, in transit, delivered, failed, returned arba canceled) ir sekimo duomenimis: tracking_number ir tracking_url, o jei siuntą sudaro keli siuntiniai – tuos pačius duomenis kiekvienam siuntiniui lauke packages. order.updated webhook pranešimas siunčiamas kaskart, kai pasikeičia siuntos būsena ar sekimo duomenys, o GET /orders/{order_id} grąžina tą patį lauką.
Webhook parašų tikrinimas
Norėdami įsitikinti, kad webhook užklausa yra autentiška ir nepakeista, patikrinkite antraštę x-webhook-signature. Tam reikia iš naujo apskaičiuoti HMAC-SHA256 parašą naudojant neapdorotą užklausos turinį ir savo slaptąjį raktą, o tada palyginti jį su gautu parašu.
Gryno PHP pavyzdys
$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');
}
Laravel pavyzdys
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...
}
Pakeiskite $yourSecret savo bendruoju slaptuoju raktu. Parašams palyginti visada naudokite hash_equals – taip sumažinsite laiko analizės (timing) atakų riziką.
Pakartotinis webhook siuntimas
Pagal numatytuosius nustatymus webhook pranešimai išjungiami po 10 nesėkmingų pristatymo bandymų. Jei Jūsų galinis taškas grąžina nesėkmės būseną, pavyzdžiui, 404 ar bet kurią 5xx klaidą, webhook pranešimas bus siunčiamas iš viso 10 kartų. Jei atsakymo kodas ir toliau nebus 2xx ar 3xx, webhook pranešimų siuntimas bus išjungtas. Sėkmingais laikomi šie atsakymai:
2xx– reiškia sėkmingą apdorojimą, pvz.,200 OK.301ir302– peradresavimo atsakymai, rodantys, kad webhook pranešimas sėkmingai apdorotas arba persiųstas.
Atsakymas į webhook pranešimą
Primygtinai rekomenduojame, kad Jūsų galinis taškas kuo greičiau grąžintų būsenos kodą 200 OK ir taip patvirtintų sėkmingą webhook pranešimo gavimą. Nors sėkmingu laikomas bet koks 2xx ar 3xx atsakymas, 200 yra dažniausiai naudojamas ir patikimiausias.
Kad išvengtumėte pristatymo laiko viršijimo ar pakartotinių bandymų, iš karto grąžinkite 200 OK, o webhook duomenis apdorokite asinchroniškai, pavyzdžiui, foninėje užduotyje ar eilėje. Jei Jūsų galinis taškas atsako per ilgai, pristatymas gali būti laikomas nesėkmingu, net jei galiausiai atsakymas yra sėkmingas.
Atsakymai su 4xx ar 5xx diapazono būsenos kodais, taip pat viršytas laukimo laikas inicijuoja pakartotinius bandymus pagal pakartotinio siuntimo mechanizmą.