KŪRĖJAMS · Integration API dokumentacija

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.

PRIEŠ PIRMĄJĄ UŽKLAUSĄ

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.

KAIP SUDARYTI ATSAKYMAI

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.

KAI KAS NORS NEPAVYKSTA

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.

SUŽINOKITE UŽKLAUSŲ LIMITUS

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

IŠBANDYKITE PRIEŠ PALEIDŽIANT

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:

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.

RASKITE, KĄ PARDUOTI

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

KĄ GAMINA FABRIXA

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

  • page ir limit (iki 100) – suskirsto sąrašą į puslapius. Be jų visas katalogas grąžinamas vienu atsakymu.
  • search – produktai, kurių pavadinime yra tekstas arba kurių slug ar varianto SKU juo 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, popular arba sold, sort_order tvarka asc arba desc. 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, code ir HS_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_price ir variants_max_selling_price – pateiktų variantų kainų intervalas.
  • type – produkto tipas, nustatantis spaudos sluoksnius ir PDF puslapių tvarką; status – kataloge visada Active.
  • categories – kategorijos, kurioms priklauso produktas, kiekviena su savo parent_category.
  • images – produkto nuotraukos su url, is_main, screen_type_size ir sort_number.
  • variants – užsakomos produkto versijos: id, name, subtitle, SKU, selling_price, matmenys width, height, length ir weight bei options – parinkčių reikšmės, apibrėžiančios šį variantą, pavyzdžiui, jo dydis.
SUSIORIENTUOKITE KATALOGE

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

  • page ir limit (iki 100) – suskirsto sąrašą į puslapius. Be jų grąžinamos visos kategorijos.
  • search – kategorijos, kurių pavadinime yra tekstas.
  • with_products_only – true praleidžia kategorijas, kuriose nėra nė vieno katalogo produkto nei tiesiogiai, nei subkategorijoje.
  • sort_by – category_name arba category_created, sort_order tvarka asc arba desc. 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Ų PASKYRA

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

  • page ir limit (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 varianto SKU juo 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, length ir weight.
  • 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.
  • categories ir collections – kategorijos ir kolekcijos, į kurias priskyrėte produktą savo paskyroje.
  • images – produkto nuotraukos su url, is_main, image_size, screen_type_size ir sort_number.
  • variants – užsakomos produkto versijos, žr. Produktų variantai: id, name, subtitle, SKU, options, images ir spaudos sluoksniai available_source_types bei required_source_types laukuose.
KĄ NURODO UŽSAKYMO EILUTĖ

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, images ir product – 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 failo type; 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 kaip type; eilutė, kurioje kurio nors trūksta, atmetama su 400 Bad Request ir 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_id arba pagal sku, 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 Request ir 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. arba The catalog variant is not active.
KURKITE IR SEKITE UŽSAKYMUS

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.

PARENKITE UŽSAKYMO DUOMENIS

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 formatu YYYY-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 identifikatorius Code 128 formatu.
    • cart_item_key (privalomas, jei nėra sources) – unikalus identifikatorius iš platformos, į kurią įterptas Fabrixa Studio; naudojamas išsaugotiems personalizavimo duomenims susieti su užsakymu.
    • sources (privalomas, jei nėra cart_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 – formatu YYYY-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"
        }
    }
}
PAKEISKITE UŽSAKYMO DUOMENIS

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 rows atmetama ir grąžinamas 400 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ąžina 412 Precondition Failed.
{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/orders/20338"
    },
    "meta": [],
    "errors": {
        "rows": [
            "Order rows cannot be changed. Cancel the order and create a new one."
        ]
    }
}
SUSTABDYKITE UŽSAKYMĄ

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, accepted arba on hold, o jo fulfillment_status vis dar yra unfulfilled. Kai ji tampa scheduled, 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)."
        ]
    }
}
NUO IMPORTO IKI PRISTATYMO

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:

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:

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:

Išimtys:

SEKITE UŽSAKYMO PREKES

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_at ir updated_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ą.

KAIP PATEIKTI SPAUDOS FAILUS

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.

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

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

SUPLANUOKITE PRISTATYMĄ

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

KUR GALIMA PRISTATYTI

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_id arba sku – 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

  • code ir name – šalis su ISO 3166-1 alpha-2 kodu, kurį reikia nurodyti kaip country_code, norint gauti įvertinimą.
  • min_shipping_price ir max_shipping_price – intervalas, nurodantis, kiek kainuoja vieno siuntinio pristatymas į šalį be PVM, lauke currency nurodyta 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_days ir max_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.
PRIEŠ UŽSAKYDAMI

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_id arba sku – 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, quantity ir country_code – variantas, kiekis ir paskirties vieta, kuriems taikomas įvertinimas.
  • origin_country – šalis, iš kurios siunčiamas variantas, su jos code ir name.
  • packages_count – siuntinių, į kuriuos supakuojami vienetai, skaičius.
  • packages – patys siuntiniai, po vieną įrašą kiekvienam siuntinio tipui: package_type, jo length, width ir height centimetrais, tokių siuntinių quantity, vieno jų pristatymo price ir jo eta_days. Kainų ir kiekių sandaugų suma lygi shipping_price.
  • shipping_price – visų siuntinių bendra pristatymo kaina be PVM, lauke currency nurodyta valiuta. Maršrutu, kuriam nenustatytas pristatymo tarifas, siunčiama nemokamai, kaip ir užsakymo atveju, o kaina yra 0.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.

PRODUKTŲ PERSONALIZAVIMAS

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

PRIDĖKITE STUDIO Į SAVO PARDUOTUVĘ

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.

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": {
    "...": "..."
  }
}
STEBĖKITE KLIENTŲ VEIKSMUS

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.

PARODYKITE GALUTINĮ DIZAINĄ

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;" />
IŠBANDYKITE SU SAVO REIKŠMĖMIS

Interaktyvi demonstracija

Užbaigus dizainą, čia bus rodoma personalizavimo peržiūra.

Customization preview
GAUKITE PRANEŠIMUS APIE ĮVYKIUS

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

PERŽIŪRĖKITE GAUNAMAS ANTRAŠTES

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

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.

PASIRINKITE ĮVYKIŲ TEMAS

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:

TemaApraš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.
IŠNAGRINĖKITE ĮVYKIO DUOMENIS

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

PATIKRINKITE WEBHOOK ŠALTINĮ

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

O JEI PRISTATYTI NEPAVYKSTA?

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:

GRĄŽINKITE AIŠKŲ ATSAKYMĄ

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