UDVIKLER · Integration API-reference

Fabrixa Integration API-reference

31 min læst Sidst opdateret:06-11-2026 119 visninger

Integrations-API'en hjælper dig med at oprette og administrere Fabrixa-ordrer, starte Fabrixa Studio og forblive synkroniseret med produktions- og opfyldelsesstatus via webhooks. API'en følger REST-konventioner og bruger JSON til alle anmodnings- og svarinstanser.

BASE URL

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

Send alle anmodninger til denne basis-URL efterfulgt af den specifikke slutpunktsti. Basis-URL'en er grundlaget for interaktion med Fabrixa API - hentning, oprettelse, opdatering eller sletning af ressourcer.

FØR DIN FØRSTE FORESPØRGSEL

Autentificering

For at få adgang til Integration API skal du godkende dine anmodninger ved hjælp af både et Application Access Token og en Application Key:

Autorisationshoved
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Applikationsnøglehoved
X-Application-Key: APPLICATION_KEY
Eksempel på cURL-kommando
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'

Erstat APPLICATION_ACCESS_TOKEN med dit faktiske adgangstoken og APPLICATION_KEY med din faktiske applikationsnøgle.

HVORDAN SVAR ER STRUKTURERET

Slutpunkter og anmodninger

Integration API-endepunkterne er organiseret efter ressourcetype og følger den RESTful-arkitektoniske stil. Hvert slutpunkt repræsenterer en ressource, og handlinger på disse ressourcer udføres ved hjælp af standard HTTP-metoder.

Alle Integration API-anmodninger og -svar er i JSON-format, hvilket giver en ensartet og brugervenlig grænseflade til interaktion med API'en.

For fulde detaljer om hvert endpoint, inklusive eksempler på requests og responses, se vores Swagger-dokumentation.

Svarformat

Alle endepunkter returnerer data i et standardiseret format med disse objekter:

{
  "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"
    }
  ]
}

Beskrivelse af svarobjekter

links

Indeholder sideinddelingslinks til at navigere gennem resultaterne.

  • self — URL'en på den aktuelle side.
  • first_page — URL'en på den første side med resultater.
  • last_page — URL'en på den sidste side med resultater.
  • next_page — URL'en på den næste side. null hvis der ikke er nogen næste side.
  • prev_page — URL'en på den forrige side. null hvis der ikke er nogen tidligere side.

meta

Indeholder metadata om svaret, såsom pagineringsoplysninger.

  • total — det samlede antal tilgængelige varer på alle sider.
  • current_page — det aktuelle sidenummer for resultaterne.
  • per_page — antallet af varer pr. side.

data

Hovedindholdet i svaret. data varierer efter slutpunkt - det kan være et enkelt objekt, for eksempel et produkt, eller en række objekter, for eksempel en liste over produkter.

NÅR NOGET GÅR GALT

Fejl og statuskoder

Alle API-anmodninger returnerer HTTP-statuskoder, der giver indsigt i svaret.

400 Bad Request

Serveren kan ikke behandle anmodningen på grund af valideringsfejl - manglende eller ugyldige parametre.

401 Unauthorized

Klienten har ikke angivet gyldige godkendelsesoplysninger. Returneres også, når adgangstokenet er blevet tilbagekaldt.

403 Forbidden

Serveren afviste anmodningen på grund af utilstrækkelige adgangsrettigheder, typisk forårsaget af forkerte eller manglende adgangstilladelser.

404 Not Found

Den anmodede ressource kunne ikke findes på serveren.

412 Precondition Failed

Anmodningen kan ikke udføres i ressourcens nuværende tilstand, for eksempel en ordre, der ikke længere kan annulleres.

429 Too Many Requests

Klienten har overskredet det tilladte antal anmodninger i en given tidsramme. Se Rate Limits.

5xx Errors

Der opstod en intern serverfejl. Kontakt venligst Fabrixas support med detaljer om den mislykkede anmodning.

Error Response Body

Et eksempel på en fejlsvartekst:

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

errors indeholder detaljer om, hvad der fejlede. messages-arrayet viser fejlbeskrivelser. For en dårlig anmodning vil du modtage navnene på de felter, der mislykkedes ved validering.

KEND DINE FORESPØRGGSGRÆNSER

Satsgrænser

Integrations-API'en understøtter en grænse på 30 anmodninger pr. applikation pr. minut.

Hvis du overskrider denne grænse, vil du modtage et 429 Too Many Requests svar.

Alle Integration API-svar inkluderer X-RateLimit-Remaining-headeren, hvor mange anmodninger klienten stadig kan lave, og X-RateLimit-Limit-headeren, det samlede tilladte antal pr. minut.

TEST, FØR DU GÅR LIVE

Sandkassetilstand

Sandkassetilstand lader dig teste din integration fra start til slut, før en rigtig ordre produceres eller debiteres. Den gælder hele din konto: ordrer fra alle salgskanaler, inklusive Integration API og tilsluttede Shopify- og WooCommerce-butikker, produceres ikke og trækkes ikke fra din saldo. Din konto er i sandkassetilstand, så længe dens status er afventer aktivering.

I sandkassetilstand kan du:

For at teste ordrer skal du tilføje produkter fra Fabrixa-kataloget: åbn et produkt, klik på Sælg dette og vælg varianter og designs. De vises derefter under Mine produkter.

Sådan skifter du din konto til sandkassetilstand: Åbn Platform, gå til Indstillinger → Virksomhed → Sandkassetilstand, og klik på Skift til sandkassetilstand. Du kan også aktivere den, når du tilføjer en ny salgskanal, inklusive en Integration API-kanal, eller skrive til support@fabrixa.com, så skifter vi din konto for dig. Sandkassetilstand er kun tilgængelig for aktive konti.

Når du er klar, kan du selv aktivere din konto i Platform under Indstillinger → Virksomhed → Sandkassetilstand. Du kan også skrive til support@fabrixa.com, så aktiverer vi den for dig. Dine tilsluttede butikker og API-legitimationsoplysninger fortsætter med at virke, så intet skal konfigureres igen.

Efter aktivering går alle nye ordrer i produktion og trækkes fra din saldo. Ordrer oprettet før aktivering forbliver testordrer: de produceres eller debiteres aldrig, heller ikke efter aktivering.

FIND DET, DU VIL SÆLGE

Produkter

Kataloget er alt, hvad Fabrixa producerer. Dine produkter er de katalogprodukter, du har føjet til din Fabrixa-konto, med dine egne navne, beskrivelser, billeder og SKU'er. En ordrelinje angiver en produktvariant - én størrelse eller udgave af et produkt - via dens sku eller variant_id: en variant af et af dine produkter eller en katalogvariant, der bestilles direkte.

HVAD FABRIXA PRODUCERER

Gennemse kataloget

For at hente de produkter, Fabrixa producerer, sender du en GET-forespørgsel til https://api.fabrixa.com/v2/integration/catalog/products med dine loginoplysninger. Det viser de aktive produkter, der har en variant, som en trykpartner i øjeblikket producerer, og kun de varianter, hver med sin SKU, salgspris, mål og optionsværdier.

Forespørgselsparametre

  • page og limit (op til 100) - deler listen op i sider. Uden dem returneres hele kataloget i ét svar.
  • search - de produkter, hvis navn indeholder teksten, eller hvis slug eller variant-SKU begynder med den.
  • category_id - produkterne i en kategori; parent_category_id - produkterne i alle underkategorier til en topkategori. Se Katalogkategorier.
  • group_id - produkterne i en kataloggruppe.
  • sort_by - name, created, updated, type, popular eller sold, i sort_order asc eller desc. Som standard kommer de nyeste produkter først.

Eksempel på anmodning

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'

Eksempel svar

{
    "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" } ] } ] } ] } ] }

Felter i svaret

  • id, name, subtitle, description (HTML), slug, code og HS_code, toldtarifkoden.
  • is_sellable - om produktet er åbent for salg. Et lukket produkt vises stadig, men en ordre på en af dets varianter afvises.
  • variants_min_selling_price og variants_max_selling_price - prisintervallet på tværs af de viste varianter.
  • type - produkttypen, som fastlægger tryklagene og PDF-siderækkefølgen; status - altid Active i kataloget.
  • categories - de kategorier, produktet ligger i, hver med sin parent_category.
  • images - produktbillederne med url, is_main, screen_type_size og sort_number.
  • variants - de udgaver af produktet, der kan bestilles: id, name, subtitle, SKU, selling_price, målene width, height, length og weight samt options, de optionsværdier, der udgør varianten, for eksempel dens størrelse.
FIND RUNDT I KATALOGET

Katalogkategorier

For at hente de kategorier, kataloget er inddelt i, sender du en GET-forespørgsel til https://api.fabrixa.com/v2/integration/catalog/categories med dine loginoplysninger. Svaret indeholder topkategorierne, hver med sine underkategorier indlejret i sub_categories og antallet af katalogprodukter i den i products_count. Send en kategoris id som category_id, når du gennemser kataloget, eller en topkategoris id som parent_category_id for at få produkterne fra alle dens underkategorier på én gang.

Forespørgselsparametre

  • page og limit (op til 100) - deler listen op i sider. Uden dem returneres alle kategorier.
  • search - de kategorier, hvis navn indeholder teksten.
  • with_products_only - true udelader de kategorier, der ikke indeholder noget katalogprodukt, hverken direkte eller i en underkategori.
  • sort_by - category_name eller category_created, i sort_order asc eller desc. Som standard kommer kategorierne i deres katalogrækkefølge.

Eksempel på anmodning

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'

Eksempel svar

{
    "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
                }
            ]
        }
    ]
}
DIN KONTO

Dine produkter

For at hente produkterne på din konto sender du en GET-forespørgsel til https://api.fabrixa.com/v2/integration/products med dine loginoplysninger. Dine produkter er de katalogprodukter, du har føjet til din Fabrixa-konto: de bærer de navne, beskrivelser og billeder, du gav dem der, og deres varianter de SKU-værdier, du valgte. Kun aktive produkter vises, ti pr. side, medmindre du sender limit.

Forespørgselsparametre

  • page og limit (op til 100) - den side, der skal returneres, og dens størrelse; som standard den første side med ti.
  • search - de produkter, hvis navn indeholder teksten, eller hvis slug eller variant-SKU begynder med den.

Eksempel på anmodning

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'

Eksempel svar

{
    "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"] } ] } ] }

For at læse ét produkt sender du en GET-forespørgsel til https://api.fabrixa.com/v2/integration/products/{product_id}, hvor {product_id} er dets id. Svaret indeholder de samme felter som listen. Et produkt, der ikke er på din konto, også et katalogprodukt, svarer 404 Not Found med beskeden Product not found.

Felter i svaret

  • id, name, subtitle, description (HTML), slug, width, height, length og weight.
  • type - produkttypen, som fastlægger tryklagene og PDF-siderækkefølgen.
  • available_options - hver option for produktet med alle dens værdier, for eksempel hver størrelse, det findes i; hver variant tager én værdi pr. option.
  • categories og collections - de kategorier og kollektioner, du har sorteret produktet i i din konto.
  • images - produktbillederne med url, is_main, image_size, screen_type_size og sort_number.
  • variants - de udgaver af produktet, der kan bestilles, se Produktvarianter: id, name, subtitle, SKU, options, images og tryklagene i available_source_types og required_source_types.
HVAD EN ORDRELINJE ANGIVER

Produktvarianter

En variant er én udgave af et produkt, der kan bestilles - én størrelse, én farve - og det, en ordrelinje angiver, via sku eller variant_id. For at læse en variant af et af dine produkter sender du en GET-forespørgsel til https://api.fabrixa.com/v2/integration/variants/{variant_id}, hvor {variant_id} er dens id. En variant af et produkt, der ikke er på din konto, svarer 404 Not Found med beskeden Variant not found.

Eksempel på anmodning

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'

Eksempel svar

{
    "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"] } }

Felter i svaret

  • id, name, subtitle, description, SKU, width, height, length, weight, options, images og det product, varianten hører til.
  • available_source_types - variantens tryklag, navngivet som dens produktionsproces kender dem. Ud over "file", som enhver variant tager imod for en PDF, er det de værdier, en kildefils type må have; et produkt med et enkelt tryklag viser "print".
  • required_source_types - de lag, en trykfil skal dække. En PDF sendt som "file" dækker dem med sine sider, i produkttypens siderækkefølge. Ellers har linjen brug for en JPEG-, PNG- eller TIFF-fil til hvert af dem med lagets navn som type; en linje, hvor et mangler, afvises med 400 Bad Request og navnene på de manglende lag.

En ordrelinje for denne variant, med en PDF, hvis sider er dens lag:

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

Hvilke varianter kan bestilles

  • En ordrelinje må angive en variant af et produkt på din konto eller en katalogvariant direkte, aldrig et produkt, der tilhører en anden kunde. Varianten findes via sit variant_id eller via sin sku uanset store og små bogstaver.
  • Varianten skal være aktiv, og dens produkt aktivt og åbent for salg. For din kopi af et katalogprodukt skal katalogproduktet også være aktivt og katalogvarianten slået til.
  • Ellers afvises ordren med 400 Bad Request og årsagen for den pågældende linje: 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. eller The catalog variant is not active.
OPRET OG SPOR ORDRER

Ordrer

Opret ordrer i Fabrixa fra din egen butiksfacade eller platform, vedhæft de påkrævede printfiler, og følg hver vare, mens den bevæger sig gennem opfyldelsen.

FORBERED DINE ORDREDATA

Opret en ordre

For at oprette en ordre via Fabrixa Integration API skal du sende en POST anmodning til https://api.fabrixa.com/v2/integration/orders. Anmodningsorganet skal omfatte:

Anmod om kropsstruktur

  • number (valgfrit) - ordrenummeret. Hvis det ikke angives, genereres et unikt nummer.
  • comments (valgfrit) - yderligere kommentarer eller noter til ordren.
  • purchased_at - dato og klokkeslæt for købet, formateret som YYYY-MM-DD HH:MM:SS.
  • client_ip (valgfrit) - kundens IP-adresse.
  • client_user_agent (valgfrit) - kundens user-agent-streng.
  • rows - array med ordrelinjer, hver med:
    • sku - produktvariantens SKU. Se Swagger for detaljer.
    • quantity - antal bestilte produktvarianter.
    • client_barcode (valgfrit) - unik klient-side-identifikator pr. ordrelinje, formateret som Code 128.
    • cart_item_key (påkrævet uden sources) - unik identifikator fra platformen, der indlejrer Fabrixa Studio, brugt til at knytte gemte tilpasninger til ordren.
    • sources (påkrævet uden cart_item_key) - array med kildefiler til produktet, hver med:
      • type - "file" for en PDF eller "print" for en JPEG-, PNG- eller TIFF-fil.
      • url - URL til kildefilen.
  • customer - kundeoplysninger:
    • first_name, last_name, email, phone.
  • shipping_address - leveringsoplysninger:
    • address, address2 (valgfrit), address3 (valgfrit).
    • city, country_code (ISO 3166-2), country, postal_code, state (valgfrit).
    • first_name, last_name, phone (valgfrit), company (valgfrit).
  • shipping_label (valgfrit) - labeloplysninger:
    • method_name - f.eks. "Post NL".
    • tracking_number, tracking_url, label_pdf_url.
    • date_created - formateret som YYYY-MM-DD HH:MM:SS.

Eksempel på anmodning

{
  "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"
  }
}

Eksempel svar

{
    "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"
        }
    }
}
ÆNDR ORDREOPLYSNINGER

Opdater en ordre

For at opdatere en ordre skal du sende en PATCH anmodning til https://api.fabrixa.com/v2/integration/orders/{order_id}, hvor {order_id} er Fabrixa-ordre-id’et. Kun de felter, du sender, ændres, og ordrens status forbliver den samme. Svaret indeholder den opdaterede ordre. Du kan ændre:

  • number, comments, purchased_at, client_ip, client_user_agent.
  • customer - first_name, last_name, email, phone.
  • shipping_address - de samme felter som ved oprettelse af en ordre.

Eksempel på anmodning

{
  "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"
  }
}

Eksempel svar

{
    "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"
        }
    }
}
  • Ordrelinjer kan ikke ændres: en anmodning med rows afvises med 400 Bad Request. For at ændre varerne skal du annullere ordren og oprette en ny.
  • En ordre med status on hold kan ikke opdateres; API’et svarer med 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."
        ]
    }
}
STOP EN ORDRE

Annuller en ordre

For at annullere en ordre skal du sende en POST anmodning uden body til https://api.fabrixa.com/v2/integration/orders/{order_id}/cancel, hvor {order_id} er Fabrixa-ordre-id’et (ordrens numeriske id-felt), ikke dit ordrenummer. Svaret indeholder ordren med status canceled, og der sendes en order.updated webhook.

  • En ordre kan annulleres, så længe dens status er created, imported, accepted eller on hold, og dens fulfillment_status stadig er unfulfilled. Når den skifter til scheduled, er produktionen startet, og ordren kan ikke længere annulleres.
  • Gebyrerne for en annulleret ordre refunderes til din saldo.
  • Annullering af en ordre, der allerede er annulleret, returnerer den uændret, så anmodningen trygt kan gentages.

Eksempel svar

{
    "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"
        }
    }
}

Hvis ordren ikke kan annulleres, svarer API’et med 412 Precondition Failed og en besked med årsagen: ordrens nuværende status tillader det ikke (status står i beskeden), eller produktionen er allerede startet.

{
    "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)."
        ]
    }
}
FRA IMPORT TIL LEVERING

Ordrens livscyklus

En ordre følges med tre statusser: ordrens status, dens produktionsstatus fulfillment_status og status for hver forsendelse i shipments. Hver ændring sendes i webhooken order.updated og returneres af GET /orders/{order_id}.

Ordrestatusser

Værdierne i feltet status for en ordre, i den rækkefølge de nås:

Opfyldelsesstatusser

Værdierne i feltet fulfillment_status for en ordre og for hver ordrelinje, i den rækkefølge de nås. Den bevæger sig kun fremad, aldrig tilbage:

En ordre som helhed afvises aldrig. En enkelt vare kan blive afvist ved kvalitetskontrollen under produktionen. Den bliver så trykt igen: den vender tilbage til unfulfilled og går gennem produktionen en gang til, mens ordren beholder sin status og fortsætter, når varen er færdig.

Forsendelsesstatusser

Værdierne i feltet status for hver forsendelse i shipments, i den rækkefølge de nås:

Undtagelser:

SPOR DINE ORDREVARER

Sporopfyldelse

For at få opfyldelsesstatus for en specifik ordre skal du sende en GET anmodning til https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. Svaret giver en liste over opfyldelser forbundet med ordren, herunder hver varestatus, produktdetaljer og produktionstrinsfremskridt.

Eksempel svar

{
    "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
                    }
                }
            ]
        }
    ]
}

Svaret inkluderer en liste over opfyldelser, der hver giver:

  • id - unik identifikator for fulfilment.
  • barcode - stregkode til intern sporing og identifikation; kan også printes på produktet.
  • status - den aktuelle fulfilment-status: unfulfilled eller fulfilled.
  • created_at og updated_at - tidsstempler for oprettelse og seneste opdatering.
  • variant - detaljerede oplysninger om produktvarianten: navn, undertitel, SKU.
  • product - produktoplysninger: navn, undertitel.
  • production_steps - array med produktionstrin. Listen afhænger af produkttypen. For hvert trin:
    • id - unik identifikator for produktionstrinnet.
    • name - f.eks. "Print duvet".
    • description - hvad produktionstrinnet omfatter.
    • status - den aktuelle status:
      • pending - endnu ikke startet.
      • in progress - er i gang.
      • rejected - trinnet havde et problem og blev ikke fuldført.
      • done - trinnet er fuldført.
    • notes - eventuelle yderligere noter til trinnet.
    • updated_at - seneste tidspunkt hvor trinstatus blev opdateret.

Hver opfyldelsespost svarer til et specifikt produkt eller produktvariant i ordren, og hver kopi af produktet i ordren har sin egen opfyldelsespost - hver vare spores individuelt gennem hele produktionen.

Hvis der ikke returneres nogen opfyldelse af en ordre, er ordren endnu ikke gået ind i behandlingsfasen.

SÅDAN LEVERER DU UDSKRIFTSFILER

Krav til kildefil

Når du inkluderer kildefiler i din ordre, skal du sikre dig, at de opfylder følgende krav:

type

PDF er det foretrukne kildeformat. Til et produkt med ét trykt lag, f.eks. et tæppe eller et håndklæde, kan en JPEG-, PNG- eller TIFF-fil også bruges. Til et produkt med flere lag skal du levere en PDF-fil med hvert lag som en separat side: under behandlingen behandles hver side som et selvstændigt lag, så et design med flere lag indsendes som én kildefil. Se PDF-krav og siderækkefølge.

Angiv type efter filformatet. Til en PDF skal du bruge "file": hver side trykkes på ét lag af produktet i den siderækkefølge, der er angivet for produktet. Til en JPEG-, PNG- eller TIFF-fil, som passer til et produkt med ét trykt lag, skal du bruge "print".

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

For yderligere detaljer, se Swagger-dokumentationen.

url

Feltet url skal indeholde et direkte link til kildefilen. Sørg for, at URL'en er tilgængelig, og at filen kan downloades uden godkendelse. Linket skal forblive tilgængeligt gennem hele produktionsprocessen.

Sådan henter vi filen

Vi henter filen fra din server to gange: en anmodning med Range: 0-0, mens ordren valideres, og derefter hele filen. Begge anmodninger sender User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#sources; print file fetch); hvis dit site filtrerer automatiseret trafik, så tillad den. URL’en skal bruge HTTPS på port 443 og returnere filen direkte, uden omdirigeringer, med filens rigtige Content-Type, f.eks. application/pdf. Hver anmodning udløber efter 60 sekunder.

Filformat

Lever en PDF-fil eller, til et produkt med ét lag, en JPEG-, PNG- eller TIFF-fil, leveret med dens rigtige Content-Type. Gennemsigtige områder i en PNG trykkes hvide. Sørg for, at billederne er af høj kvalitet og egnede til tryk.

Billeddimensioner

Maksimale dimensioner er 15,000 pixels på hver side. Billeder, der overskrider denne grænse, kan ændres eller afvises. Billedopløsningen skal matche produktdimensioner; Ellers kan billederne blive ændret eller beskåret, så de passer.

Opløsning

Intet specifikt krav til opløsning - bare sørg for, at billedkvaliteten er tilstrækkelig til udskrivning.

Farverum

Billeder skal være i RGB farverum for nøjagtig farvegengivelse. Andre farverum vil blive konverteret under behandlingen, hvilket kan resultere i forkerte farver.

Filstørrelse

Hver kildefil må højst være 200 MB. En større fil afvises: når ordren oprettes, hvis din server sender Content-Length, ellers når filen downloades.

PDF-krav og siderækkefølge

Rækkefølgen af ​​sider i PDF'en er vigtig. Sider matches til produktlag efter position, og den forventede siderækkefølge afhænger af produkttypen. Sørg for, at siderne i din PDF følger den korrekte lagsekvens for det produkt, du indsender.

ProduktPDF-siderækkefølge
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

Vigtigt: hver PDF-side skal matche de påkrævede dimensioner for sit produktlag og være orienteret korrekt. Placer kunstværket, så toppen af ​​designet flugter med toppen af ​​siden. Forkert sidestørrelse eller -retning kan forårsage problemer med skalering, rotation eller justering i produktionen.

PLANLÆG LEVERINGEN

Fragt

Se, hvad fragten på en ordre vil koste, og hvor længe den vil være undervejs, før du opretter den, beregnet efter de samme regler, som Fabrixa bruger til selve ordren.

HVOR DEN SENDES TIL

Leveringslande

For at finde ud af, hvilke lande en produktvariant kan sendes til, sender du en GET-forespørgsel til https://api.fabrixa.com/v2/integration/shipping/countries med dine loginoplysninger. Listen er sorteret efter navn og indeholder de lande, som det sted, der producerer varianten, har en fragttakst til for en forsendelsespakke, som varianten kan pakkes i. Et land, der ikke er på listen, har ingen fragttakst for varianten.

Forespørgselsparametre

  • variant_id eller sku - varianten, angivet som i en ordrelinje, ligesom for et overslag.

Eksempel på anmodning

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'

Eksempel svar

{
    "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
        }
    ]
}

Felter i svaret

  • code og name - landet med ISO 3166-1 alpha-2-koden, som du angiver som country_code i overslaget.
  • min_shipping_price og max_shipping_price - intervallet for, hvad én forsendelsespakke koster at sende til landet, ekskl. moms, i valutaen i currency, på tværs af de pakker, som varianten kan pakkes i. En ordre på flere enheder kan kræve flere pakker, så bed om et overslag for at få prisen for et bestemt antal.
  • min_eta_days og max_eta_days - intervallet for antallet af dage, en pakke er undervejs, efter at den er overdraget til fragtfirmaet, produktionstid ikke medregnet; null, når taksterne ikke har et leveringsestimat.
FØR DU BESTILLER

Anslå fragten

For at finde ud af, hvad fragten for en produktvariant ville koste, og hvor længe forsendelsen ville være undervejs, sender du en GET-forespørgsel til https://api.fabrixa.com/v2/integration/shipping/estimate med dine loginoplysninger. Overslaget følger de regler, som prisen på en ordre beregnes efter: enhederne pakkes i forsendelsespakkerne på det sted, der producerer varianten, og prisen for hver pakke beregnes ud fra ruten fra det sted til destinationslandet. Intet bliver bestilt eller reserveret, og prisen på en ordre beregnes, når den afgives, så dens fragt kan afvige, hvis taksterne ændres i mellemtiden.

Forespørgselsparametre

  • variant_id eller sku - varianten, angivet som i en ordrelinje: en variant af et af dine produkter eller en katalogvariant. Det skal være en variant, du kan bestille.
  • country_code - ISO 3166-1 alpha-2-koden for det land, ordren sendes til, for eksempel NL.
  • quantity - antallet af enheder, fra 1 til 1000.

Eksempel på anmodning

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'

Eksempel svar

{
    "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
    }
}

Felter i svaret

  • variant_id, sku, quantity og country_code - den variant, det antal og den destination, som overslaget gælder for.
  • origin_country - det land, varianten sendes fra, med dets code og name.
  • packages_count - antallet af forsendelsespakker, som enhederne pakkes i.
  • packages - selve pakkerne, én post pr. pakketype: package_type, dens length, width og height i cm, quantity af sådanne pakker, price for at sende én af dem og dens eta_days. Priserne gange antallene giver tilsammen shipping_price.
  • shipping_price - fragtprisen for alle pakkerne tilsammen, ekskl. moms, i valutaen i currency. På en rute uden fragttakst er forsendelsen gratis, ligesom for en ordre, og prisen er 0.00.
  • eta_days - antallet af dage, den langsomste pakke er undervejs, efter at den er overdraget til fragtfirmaet, produktionstid ikke medregnet; null, når ruten ikke har et leveringsestimat.

En forespørgsel, der ikke består valideringen, besvares med 400 Bad Request og årsagen for hvert felt, med de samme beskeder som for en ordrelinje, for eksempel The variant not found. Når ingen forsendelsespakke kan rumme enhederne, er svaret 400 Bad Request med beskeden No shipping package can carry the variant.

PRODUKT TILPASNING

Fabrixa Studio

Fabrixa Studio er et værktøj, der lader brugere problemfrit tilpasse og personliggøre produkter i realtid med en intuitiv grænseflade, hvor brugerne kan oprette eller uploade deres egne designs.

Fabrixa Studio er ideel til virksomheder, der tilbyder brugerdefinerede produkter - hvilket gør det muligt for kunderne at visualisere deres design, før de afslutter ordrer.

TILFØJ STUDIO TIL DIN BUTIK

Integrer Fabrixa Studio

Du kan integrere Fabrixa Studio på dit websted ved hjælp af en iframe. Dette gør det muligt for dine kunder at tilpasse produkter direkte på dit websted under kassen.

Eksempel iframe til indlejring af Fabrixa Studio:

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

Erstat værdierne for product_sku, cart_item_key og application_key med dine dynamiske værdier.

Studios overskrift viser produktets navn, som det står i din butik - den samme titel, som dine kunder ser - med den valgte variants muligheder nedenunder. Det er din butiks egen kopi af produktet, så et navn, du retter i Fabrixa, vises også i Studio; locale oversætter det ikke.

Anmodning om at oprette en ordre med 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": {
    "...": "..."
  }
}
LYT EFTER KUNDENS HANDLINGER

Håndter studiebegivenheder

Når knappen Tilføj til kurv klikkes inde i iframen, udføres følgende kommando:

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

På samme måde, når der klikkes på knappen Tilbage:

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

postMessage-metoden letter kommunikation på tværs mellem iframen og dens overordnede vindue, så den kan underrette forælderen om specifikke brugerhandlinger.

Det første argument for postMessage er de data, du vil sende. Strengen 'customizationFinished' angiver, at brugeren har afsluttet tilpasningen og tilføjer produktet til indkøbskurven. 'closeButtonClicked' angiver, at brugeren har valgt at gå tilbage.

I det overordnede vindue skal du lytte efter disse beskeder ved hjælp af message begivenhedslytteren:

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.');
        }
    }
});

Kontroller altid origin for indgående meddelelser for at sikre, at de kommer fra en pålidelig kilde. Afhængigt af den modtagne besked, udfør de nødvendige handlinger - opdater brugergrænsefladen, bearbejd vognen osv. Validering af origin er afgørende for sikkerheden - det forhindrer uautoriserede scripts i at interagere med din applikation.

VIS DET FÆRDIGE DESIGN

Forhåndsvisning af tilpasning

Når tilpasningen er fuldført, skal du vise det endelige design ved hjælp af forhåndsvisnings-URL'en nedenfor. Denne URL returnerer et billede af det tilpassede produkt, egnet som src værdien i et <img> tag. Ideel til at vise det tilpassede produkt i din indkøbskurv, ordreoversigt eller hvor som helst i din butiksgrænseflade.

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

Erstat {CART_ITEM_KEY} med den aktuelle nøgle til indkøbskurven og {APPLICATION_KEY} med din gyldige programnøgle.

Eksempel på brug i et billedtag:

<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;" />
PRØV DET MED DINE VÆRDIER

Live demo

Tilpasningseksemplet vises her, når designet er færdigt.

Customization preview
MODTAG BEGIVENHEDSOPDATERINGER

Webhooks

Webhooks bruges af Fabrixa til at underrette dit system om hændelser i realtid - bestil opdateringer eller kreationer. Når en hændelse opstår, sender Fabrixa en webhook til din server, der indeholder de relevante oplysninger. Din server skal eksponere et offentligt POST-slutpunkt for at håndtere indgående webhooks.

GENNEMGÅ DINE INDGÅENDE HEADERE

Webhook-anmodningsoverskrifter

Webhook-anmodningen indeholder følgende overskrifter for at hjælpe dig med at identificere og validere den indgående anmodning:

{
  "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"
}
Overskriftsoversigt

Webhooks sendes med User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook); hvis dit endpoint filtrerer automatiseret trafik, så tillad den. For at være sikker på, at en anmodning kommer fra Fabrixa, skal du verificere x-webhook-signature.

VÆLG DINE BEGIVENHEDSEMNER

Webhook-begivenheder

Fabrixa webhooks giver dit system besked om ændringer i ordrestatus eller aktivitet. Hver webhook udløses af en specifik x-webhook-topic værdi. Aktuelt understøttede emner:

EmneBeskrivelse
order.created Udløses når en ny ordre afgives i Fabrixa, enten via API-anmodning eller direkte i platformen.
order.updated Udløses, når ordredetaljer såsom ordrestatus eller opfyldelsesstatus opdateres.
KONTROLLER DIN BEGIVENHEDSNYTTE

Webhook Payload Eksempel

Et eksempel på nyttelasten sendt med webhook. Denne nyttelast repræsenterer en ordreopdatering:

{
  "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"
    }
  ]
}

Når ordren er afsendt, viser shipments hver forsendelse med dens fragtfirma (carrier), forsendelsesmetode (method), status (status: pending, registered, collected, in transit, delivered, failed, returned eller canceled) og sporing: tracking_number og tracking_url, og det samme for hver pakke i packages, når en forsendelse har flere. Der sendes en order.updated webhook, hver gang en forsendelses status eller sporing ændres, og GET /orders/{order_id} returnerer det samme felt.

VERIFICER DIN WEBHOOK-KILDE

Bekræft Webhook-signaturer

For at sikre, at webhook-anmodningen er autentisk og umanipuleret, skal du kontrollere x-webhook-signature-headeren. Dette involverer genberegning af HMAC-SHA256-signaturen ved hjælp af den rå anmodningsnyttelast og din hemmelige nøgle, og derefter sammenligne den med den modtagne signatur.

Eksempel på rå PHP

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

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

Laravel eksempel

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

Erstat $yourSecret med din delte hemmelige nøgle. Brug altid hash_equals til at sammenligne signaturer for at afbøde timingangreb.

HVAD HVIS LEVERING SLIPSER?

Webhook forsøger igen

Webhooks er som standard deaktiveret efter 10 mislykkede leveringsforsøg. Hvis dit slutpunkt returnerer en mislykket status såsom 404 eller en 5xx fejl, vil webhook forsøge igen i alt 10 gange. Hvis den fortsætter med at returnere en ikke-2xx eller ikke-3xx svarkode, vil den blive deaktiveret. Vellykkede svar omfatter:

RETURNER ET KLART SVAR

Webhook-svar

Vi anbefaler på det kraftigste, at dit slutpunkt returnerer en 200 OK statuskode så hurtigt som muligt for at bekræfte vellykket modtagelse af webhook. Selvom ethvert 2xx- eller 3xx-svar anses for at være vellykket, er 200 det mest almindeligt anvendte og pålidelige.

For at undgå leveringstimeouts eller genforsøg skal du returnere 200 OK med det samme og håndtere webhook-nyttelastbehandling asynkront, for eksempel via et baggrundsjob eller kø. Hvis dit endepunkt tager for lang tid at reagere, kan det blive betragtet som en fejl, selvom svaret i sidste ende lykkes.

Svar med statuskoder i området 4xx eller 5xx, eller timeouts, vil udløse genforsøg i henhold til genforsøgsmekanismen.