UTVIKLER · Integration API-referanse

Fabrixa Integration API-referanse

31 min lest Sist oppdatert:06-11-2026 119 visninger

Integration API hjelper deg med å opprette og administrere Fabrixa-ordrer, starte Fabrixa Studio og holde deg synkronisert med produksjons- og oppfyllelsesstatus via webhooks. API-en følger REST-konvensjonene og bruker JSON for alle forespørsels- og svarinstanser.

BASE URL

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

Send alle forespørsler til denne basis-URLen etterfulgt av den spesifikke endepunktbanen. Basis-URLen er grunnlaget for samhandling med Fabrixa API - hente, opprette, oppdatere eller slette ressurser.

FØR DIN FØRSTE FORESPØRSEL

Autentisering

For å få tilgang til Integration API, autentiser forespørslene dine ved å bruke både et Application Access Token og en Application Key:

Autorisasjonsoverskrift
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Søknadsnøkkeloverskrift
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'

Erstatt APPLICATION_ACCESS_TOKEN med ditt faktiske tilgangstoken og APPLICATION_KEY med din faktiske applikasjonsnøkkel.

HVORDAN SVARENE ER STRUKTURERT

Endepunkter og forespørsler

Integration API-endepunktene er organisert etter ressurstype og følger den RESTful arkitektoniske stilen. Hvert endepunkt representerer en ressurs, og handlinger på disse ressursene utføres ved hjelp av standard HTTP-metoder.

Alle Integration API-forespørsler og svar er i JSON-format, og gir et konsistent og brukervennlig grensesnitt for interaksjon med API.

For fullstendige detaljer om hvert endepunkt, inkludert eksempler på forespørsler og svar, se vår Swagger-dokumentasjon.

Svarformat

Alle endepunkter returnerer data i et standardisert format med disse objektene:

{
  "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 av responsobjekter

links

Inneholder pagineringslenker for å navigere gjennom resultatene.

  • self — URL-en til gjeldende side.
  • first_page — URL-en til den første resultatsiden.
  • last_page — URL-en til den siste resultatsiden.
  • next_page — URL-en til neste side. null hvis det ikke er noen neste side.
  • prev_page — URL-en til forrige side. null hvis det ikke er noen forrige side.

meta

Inneholder metadata om svaret, for eksempel pagineringsinformasjon.

  • total — det totale antallet varer som er tilgjengelig på alle sider.
  • current_page — gjeldende sidenummer for resultatene.
  • per_page — antall elementer per side.

data

Hovedinnholdet i svaret. data varierer etter endepunkt - det kan være et enkelt objekt, for eksempel ett produkt, eller en rekke objekter, for eksempel en liste over produkter.

NÅR NOE GÅR FEIL

Feil og statuskoder

Alle API-forespørsler returnerer HTTP-statuskoder som gir innsikt i svaret.

400 Bad Request

Serveren kan ikke behandle forespørselen på grunn av valideringsfeil – manglende eller ugyldige parametere.

401 Unauthorized

Klienten har ikke oppgitt gyldig autentiseringslegitimasjon. Returneres også når tilgangstokenet er tilbakekalt.

403 Forbidden

Serveren avviste forespørselen på grunn av utilstrekkelige tilgangsrettigheter, vanligvis forårsaket av feil eller manglende tilgangstillatelser.

404 Not Found

Den forespurte ressursen ble ikke funnet på serveren.

412 Precondition Failed

Forespørselen kan ikke utføres i ressursens nåværende tilstand, for eksempel en ordre som ikke lenger kan kanselleres.

429 Too Many Requests

Klienten har overskredet det tillatte antallet forespørsler i en gitt tidsramme. Se Prisgrenser.

5xx Errors

Det oppstod en intern serverfeil. Ta kontakt med Fabrixas kundestøtte med detaljer om den mislykkede forespørselen.

Error Response Body

Et eksempel på en feilsvartekst:

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

errors inneholder detaljer om hva som mislyktes. messages-matrisen viser feilbeskrivelser. For en dårlig forespørsel vil du motta navnene på feltene som mislyktes i valideringen.

KJENN DINE FORESPØRSELSGRENSER

Satsgrenser

Integration API støtter en grense på 30 forespørsler per applikasjon per minutt.

Hvis du overskrider denne grensen vil du motta et 429 Too Many Requests svar.

Alle Integration API-svar inkluderer X-RateLimit-Remaining-headeren, hvor mange forespørsler klienten fortsatt kan gjøre, og X-RateLimit-Limit-headeren, totalt tillatt per minutt.

TEST FØR DU GÅR LIVE

Sandkassemodus

Sandkassemodus lar deg teste integrasjonen fra start til slutt før noen ekte bestilling produseres eller belastes. Den gjelder hele kontoen din: bestillinger fra alle salgskanaler, inkludert Integration API og tilkoblede Shopify- og WooCommerce-butikker, produseres ikke og trekkes ikke fra saldoen din. Kontoen din er i sandkassemodus så lenge statusen er venter på aktivering.

I sandkassemodus kan du:

For å teste bestillinger legger du til produkter fra Fabrixa-katalogen: åpne et produkt, klikk Selg dette og velg varianter og design. De vises deretter under Mine produkter.

For å bytte kontoen til sandkassemodus åpner du Platform, går til Innstillinger → Firma → Sandkassemodus og klikker Bytt til sandkassemodus. Du kan også slå den på når du legger til en ny salgskanal, inkludert en Integration API-kanal, eller sende e-post til support@fabrixa.com, så bytter vi kontoen for deg. Sandkassemodus er bare tilgjengelig for aktive kontoer.

Når du er klar, aktiverer du kontoen selv i Platform under Innstillinger → Firma → Sandkassemodus. Du kan også sende e-post til support@fabrixa.com, så aktiverer vi den for deg. Tilkoblede butikker og API-legitimasjon fortsetter å fungere, så ingenting må konfigureres på nytt.

Etter aktivering går alle nye bestillinger i produksjon og trekkes fra saldoen din. Bestillinger opprettet før aktivering forblir testbestillinger: de produseres eller belastes aldri, heller ikke etter aktivering.

FINN DET DU VIL SELGE

Produkter

Katalogen er alt Fabrixa produserer. Dine produkter er katalogproduktene du har lagt til i Fabrixa-kontoen din, med dine egne navn, beskrivelser, bilder og SKU-er. En ordrelinje angir en produktvariant - én størrelse eller utgave av et produkt - via dens sku eller variant_id: en variant av et av dine produkter, eller en katalogvariant som bestilles direkte.

HVA FABRIXA PRODUSERER

Bla i katalogen

For å hente produktene Fabrixa produserer, sender du en GET-forespørsel til https://api.fabrixa.com/v2/integration/catalog/products med påloggingsopplysningene dine. Den viser de aktive produktene som har en variant en trykkpartner produserer for øyeblikket, og bare disse variantene, hver med sin SKU, salgspris, mål og alternativverdier.

Spørringsparametere

  • page og limit (opptil 100) - deler listen i sider. Uten dem returneres hele katalogen i ett svar.
  • search - produktene hvis navn inneholder teksten, eller hvis slug eller variant-SKU begynner med den.
  • category_id - produktene i en kategori; parent_category_id - produktene i alle underkategorier til en toppkategori. Se Katalogkategorier.
  • group_id - produktene i en kataloggruppe.
  • sort_by - name, created, updated, type, popular eller sold, i sort_order asc eller desc. Som standard kommer de nyeste produktene først.

Eksempelforespørsel

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 på 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" } ] } ] } ] } ] }

Felt i svaret

  • id, name, subtitle, description (HTML), slug, code og HS_code, tolltariffkoden.
  • is_sellable - om produktet er åpent for salg. Et stengt produkt vises fortsatt, men en ordre på en av variantene avvises.
  • variants_min_selling_price og variants_max_selling_price - prisintervallet på tvers av de viste variantene.
  • type - produkttypen, som bestemmer trykklagene og PDF-siderekkefølgen; status - alltid Active i katalogen.
  • categories - kategoriene produktet ligger i, hver med sin parent_category.
  • images - produktbildene med url, is_main, screen_type_size og sort_number.
  • variants - utgavene av produktet som kan bestilles: id, name, subtitle, SKU, selling_price, målene width, height, length og weight, samt options, alternativverdiene som utgjør varianten, for eksempel størrelsen.
FINN FREM I KATALOGEN

Katalogkategorier

For å hente kategoriene katalogen er inndelt i, sender du en GET-forespørsel til https://api.fabrixa.com/v2/integration/catalog/categories med påloggingsopplysningene dine. Svaret inneholder toppkategoriene, hver med underkategoriene nøstet i sub_categories og antall katalogprodukter i den i products_count. Send en kategoris id som category_id når du blar i katalogen, eller en toppkategoris id som parent_category_id for å få produktene i alle underkategoriene på én gang.

Spørringsparametere

  • page og limit (opptil 100) - deler listen i sider. Uten dem returneres alle kategoriene.
  • search - kategoriene hvis navn inneholder teksten.
  • with_products_only - true utelater kategoriene som ikke inneholder noe katalogprodukt, verken direkte eller i en underkategori.
  • sort_by - category_name eller category_created, i sort_order asc eller desc. Som standard kommer kategoriene i katalogrekkefølgen sin.

Eksempelforespørsel

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 på 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
                }
            ]
        }
    ]
}
KONTOEN DIN

Dine produkter

For å hente produktene på kontoen din, sender du en GET-forespørsel til https://api.fabrixa.com/v2/integration/products med påloggingsopplysningene dine. Dine produkter er katalogproduktene du har lagt til i Fabrixa-kontoen din: de bærer navnene, beskrivelsene og bildene du ga dem der, og variantene deres SKU-verdiene du valgte. Bare aktive produkter vises, ti per side med mindre du sender limit.

Spørringsparametere

  • page og limit (opptil 100) - siden som skal returneres og størrelsen på den; som standard den første siden med ti.
  • search - produktene hvis navn inneholder teksten, eller hvis slug eller variant-SKU begynner med den.

Eksempelforespørsel

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 på 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 å lese ett produkt sender du en GET-forespørsel til https://api.fabrixa.com/v2/integration/products/{product_id}, der {product_id} er dets id. Svaret inneholder de samme feltene som listen. Et produkt som ikke er på kontoen din, også et katalogprodukt, svarer 404 Not Found med meldingen Product not found.

Felt i svaret

  • id, name, subtitle, description (HTML), slug, width, height, length og weight.
  • type - produkttypen, som bestemmer trykklagene og PDF-siderekkefølgen.
  • available_options - hvert alternativ for produktet med alle verdiene, for eksempel hver størrelse det finnes i; hver variant tar én verdi per alternativ.
  • categories og collections - kategoriene og kolleksjonene du har sortert produktet inn i i kontoen din.
  • images - produktbildene med url, is_main, image_size, screen_type_size og sort_number.
  • variants - utgavene av produktet som kan bestilles, se Produktvarianter: id, name, subtitle, SKU, options, images og trykklagene i available_source_types og required_source_types.
HVA EN ORDRELINJE ANGIR

Produktvarianter

En variant er én utgave av et produkt som kan bestilles - én størrelse, én farge - og det en ordrelinje angir, via sku eller variant_id. For å lese en variant av et av produktene dine sender du en GET-forespørsel til https://api.fabrixa.com/v2/integration/variants/{variant_id}, der {variant_id} er dens id. En variant av et produkt som ikke er på kontoen din, svarer 404 Not Found med meldingen Variant not found.

Eksempelforespørsel

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 på 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"] } }

Felt i svaret

  • id, name, subtitle, description, SKU, width, height, length, weight, options, images og det product varianten hører til.
  • available_source_types - variantens trykklag, navngitt slik produksjonsprosessen kjenner dem. I tillegg til "file", som enhver variant tar imot for en PDF, er dette verdiene en kildefils type kan ha; et produkt med ett enkelt trykklag viser "print".
  • required_source_types - lagene en trykkfil må dekke. En PDF sendt som "file" dekker dem med sidene sine, i produkttypens siderekkefølge. Ellers trenger linjen en JPEG-, PNG- eller TIFF-fil for hvert av dem, med lagets navn som type; en linje der ett mangler, avvises med 400 Bad Request og navnene på lagene som mangler.

En ordrelinje for denne varianten, med en PDF der sidene er lagene:

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

Hvilke varianter kan bestilles

  • En ordrelinje kan angi en variant av et produkt på kontoen din, eller en katalogvariant direkte, aldri et produkt som tilhører en annen kunde. Varianten finnes via sin variant_id, eller via sin sku uavhengig av store og små bokstaver.
  • Varianten må være aktiv, og produktet aktivt og åpent for salg. For din kopi av et katalogprodukt må også katalogproduktet være aktivt og katalogvarianten slått på.
  • Ellers avvises ordren med 400 Bad Request og årsaken for den aktuelle linjen: 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.
OPPRETT OG SPOR BESTILLINGER

Bestillinger

Opprett bestillinger i Fabrixa fra din egen butikkfront eller plattform, legg ved de nødvendige utskriftsfilene, og følg hver vare mens den beveger seg gjennom oppfyllelsen.

FORBERED DINE BESTILLINGSDATA

Opprett en ordre

For å opprette en ordre via Fabrixa Integration API, send en POST-forespørsel til https://api.fabrixa.com/v2/integration/orders. Forespørselsorganet må inneholde:

Be om kroppsstruktur

  • number (valgfritt) - ordrenummeret. Hvis det ikke oppgis, genereres et unikt nummer.
  • comments (valgfritt) - ekstra kommentarer eller merknader knyttet til ordren.
  • purchased_at - dato og klokkeslett for kjøpet, formatert som YYYY-MM-DD HH:MM:SS.
  • client_ip (valgfritt) - kundens IP-adresse.
  • client_user_agent (valgfritt) - kundens user-agent-streng.
  • rows - array med ordrelinjer, hver med:
    • sku - SKU for produktvarianten. Se Swagger for detaljer.
    • quantity - antall bestilte produktvarianter.
    • client_barcode (valgfritt) - unik klientidentifikator per ordrelinje, formatert som Code 128.
    • cart_item_key (påkrevd uten sources) - unik identifikator fra plattformen som bygger inn Fabrixa Studio, brukt til å knytte lagrede tilpasninger til ordren.
    • sources (påkrevd uten cart_item_key) - array med kildefiler knyttet til produktet, hver med:
      • type - "file" for en PDF, eller "print" for en JPEG-, PNG- eller TIFF-fil.
      • url - URL til kildefilen.
  • customer - kundeopplysninger:
    • first_name, last_name, email, phone.
  • shipping_address - leveringsopplysninger:
    • address, address2 (valgfritt), address3 (valgfritt).
    • city, country_code (ISO 3166-2), country, postal_code, state (valgfritt).
    • first_name, last_name, phone (valgfritt), company (valgfritt).
  • shipping_label (valgfritt) - etikettdetaljer:
    • method_name - f.eks. "Post NL".
    • tracking_number, tracking_url, label_pdf_url.
    • date_created - formatert som YYYY-MM-DD HH:MM:SS.

Eksempelforespørsel

{
  "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 på 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"
        }
    }
}
ENDRE ORDREOPPLYSNINGER

Oppdater en ordre

For å oppdatere en ordre, send en PATCH-forespørsel til https://api.fabrixa.com/v2/integration/orders/{order_id}, der {order_id} er Fabrixa-ordre-ID-en. Bare feltene du sender endres, og ordrens status forblir den samme. Svaret inneholder den oppdaterte ordren. Du kan endre:

  • number, comments, purchased_at, client_ip, client_user_agent.
  • customer - first_name, last_name, email, phone.
  • shipping_address - de samme feltene som når du oppretter en ordre.

Eksempelforespørsel

{
  "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 på 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 endres: en forespørsel med rows avvises med 400 Bad Request. For å endre varene, kanseller ordren og opprett en ny.
  • En ordre med status on hold kan ikke oppdateres; 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."
        ]
    }
}
STOPP EN ORDRE

Kanseller en ordre

For å kansellere en ordre, send en POST-forespørsel uten body til https://api.fabrixa.com/v2/integration/orders/{order_id}/cancel, der {order_id} er Fabrixa-ordre-ID-en (ordrens numeriske id-felt), ikke ordrenummeret ditt. Svaret inneholder ordren med statusen canceled, og en order.updated-webhook sendes.

  • En ordre kan kanselleres så lenge statusen er created, imported, accepted eller on hold og fulfillment_status fortsatt er unfulfilled. Når den blir scheduled, har produksjonen startet, og ordren kan ikke lenger kanselleres.
  • Gebyrene for en kansellert ordre refunderes til saldoen din.
  • Å kansellere en ordre som allerede er kansellert, returnerer den uendret, så forespørselen kan trygt gjentas.

Eksempel på 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 kanselleres, svarer API-et med 412 Precondition Failed og en melding med årsaken: den nåværende statusen tillater det ikke (statusen står i meldingen), eller produksjonen har 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 livssyklus

En ordre følges med tre statuser: ordrens status, produksjonsstatusen fulfillment_status og status for hver forsendelse i shipments. Hver endring sendes i webhooken order.updated og returneres av GET /orders/{order_id}.

Ordrestatuser

Verdiene i feltet status for en ordre, i den rekkefølgen de nås:

Oppfyllelsesstatuser

Verdiene i feltet fulfillment_status for en ordre og for hver ordrelinje, i den rekkefølgen de nås. Den går bare fremover, aldri tilbake:

En ordre som helhet blir aldri avvist. En enkelt vare kan bli avvist i kvalitetskontrollen under produksjonen. Den blir da trykt på nytt: den går tilbake til unfulfilled og går gjennom produksjonen én gang til, mens ordren beholder statusen sin og fortsetter når varen er ferdig.

Forsendelsesstatuser

Verdiene i feltet status for hver forsendelse i shipments, i den rekkefølgen de nås:

Unntak:

SPOR DINE BESTILLINGSVARER

Sporoppfyllelse

For å få oppfyllelsesstatus for en spesifikk bestilling, send en GET-forespørsel til https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. Svaret gir en liste over oppfyllelser knyttet til bestillingen, inkludert hver varestatus, produktdetaljer og fremdrift i produksjonstrinn.

Eksempel på 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 oppfyllelser, som hver gir:

  • id - unik identifikator for oppfyllelsen.
  • barcode - strekkode for intern sporing og identifikasjon; kan også skrives ut på produktet.
  • status - gjeldende oppfyllelsesstatus: unfulfilled eller fulfilled.
  • created_at og updated_at - tidsstempler for når oppfyllelsen ble opprettet og sist oppdatert.
  • variant - detaljert informasjon om produktvarianten: navn, undertittel, SKU.
  • product - produktdetaljer: navn, undertittel.
  • production_steps - liste over produksjonstrinn. Hvilke trinn som inngår, avhenger av produkttypen. For hvert trinn:
    • id - unik identifikator for produksjonstrinnet.
    • name - f.eks. «Print dynetrekk».
    • description - hva produksjonstrinnet innebærer.
    • status - gjeldende status:
      • pending - ikke startet ennå.
      • in progress - pågår nå.
      • rejected - trinnet støtte på et problem og ble ikke fullført.
      • done - trinnet er fullført.
    • notes - eventuelle tilleggsmerknader knyttet til trinnet.
    • updated_at - sist gang statusen for trinnet ble oppdatert.

Hver oppfyllelsespost tilsvarer et spesifikt produkt eller produktvariant i bestillingen, og hver kopi av produktet i bestillingen har sin egen oppfyllelsespost - hver vare spores individuelt gjennom hele produksjonen.

Hvis ingen oppfyllelser returneres for en bestilling, har bestillingen ennå ikke gått inn i behandlingsstadiet.

HVORDAN LEVERE DU UTSKRIFTSFILER

Krav til kildefil

Når du inkluderer kildefiler i bestillingen din, sørg for at de oppfyller følgende krav:

type

PDF er det foretrukne kildeformatet. For et produkt med ett trykklag, for eksempel et teppe eller et håndkle, fungerer også en JPEG-, PNG- eller TIFF-fil. For et produkt med flere lag leverer du en PDF-fil med hvert lag på en egen side: under behandlingen behandles hver side som et eget lag, slik at et design med flere lag sendes inn som én kildefil. Se PDF-krav og siderekkefølge.

Angi type etter filformatet. For en PDF bruker du "file": hver side trykkes på ett lag av produktet, i siderekkefølgen som er oppgitt for produktet. For en JPEG-, PNG- eller TIFF-fil, som passer for et produkt med ett trykklag, bruker du "print".

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

For mer informasjon, se Swagger-dokumentasjonen.

url

Feltet url må inneholde en direkte lenke til kildefilen. Sørg for at URL-en er tilgjengelig og at filen kan lastes ned uten autentisering. Linken må forbli tilgjengelig gjennom hele produksjonsprosessen.

Slik laster vi ned filen

Vi laster ned filen fra serveren din to ganger: en forespørsel med Range: 0-0 mens ordren valideres, og deretter hele filen. Begge forespørslene sender User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#sources; print file fetch); hvis nettstedet ditt filtrerer automatisert trafikk, må du tillate den. URL-en må bruke HTTPS på port 443 og returnere filen direkte, uten omdirigeringer, med filens faktiske Content-Type, for eksempel application/pdf. Hver forespørsel tidsavbrytes etter 60 sekunder.

Filformat

Lever en PDF-fil eller, for et produkt med ett lag, en JPEG-, PNG- eller TIFF-fil, servert med sin faktiske Content-Type. Gjennomsiktige områder i en PNG trykkes hvite. Sørg for at bildene har høy kvalitet og egner seg for trykk.

Bildedimensjoner

Maksimale dimensjoner er 15,000 pixels på hver side. Bilder som overskrider denne grensen kan endres eller avvises. Bildeoppløsningen bør samsvare med produktdimensjonene; ellers kan bilder endres eller beskjæres for å passe.

Oppløsning

Ingen spesifikt krav til oppløsning - bare sørg for at bildekvaliteten er tilstrekkelig for utskrift.

Fargerom

Bildene bør være i RGB fargerom for nøyaktig fargerepresentasjon. Andre fargerom vil bli konvertert under behandlingen, noe som kan resultere i feil farger.

Filstørrelse

Hver kildefil kan være på maks 200 MB. En større fil avvises: når ordren opprettes hvis serveren din sender Content-Length, ellers når filen lastes ned.

PDF-krav og siderekkefølge

Rekkefølgen på sidene i PDF-en er viktig. Sidene matches til produktlag etter posisjon, og forventet siderekkefølge avhenger av produkttypen. Sørg for at sidene i PDF-en din følger riktig lagsekvens for produktet du sender inn.

ProduktPDF-siderekkefø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

Viktig: hver PDF-side må samsvare med de nødvendige dimensjonene for sitt produktlag og være riktig orientert. Plasser kunstverket slik at toppen av designet er på linje med toppen av siden. Feil sidestørrelse eller -retning kan føre til problemer med skalering, rotasjon eller justering i produksjonen.

PLANLEGG LEVERINGEN

Frakt

Finn ut hva frakten for en bestilling vil koste og hvor lenge den vil være underveis før du legger den inn, beregnet etter de samme reglene som Fabrixa bruker for selve bestillingen.

HVOR DEN KAN SENDES

Leveringsland

For å finne ut hvilke land en produktvariant kan sendes til, sender du en GET-forespørsel til https://api.fabrixa.com/v2/integration/shipping/countries med påloggingsopplysningene dine. Listen er sortert etter navn og inneholder landene det finnes en fraktsats til fra lokasjonen som produserer varianten, for en fraktpakke varianten kan pakkes i. Et land som ikke står på listen, har ingen fraktsats for varianten.

Spørringsparametere

  • variant_id eller sku - varianten, angitt på samme måte som i en ordrelinje, akkurat som for et estimat.

Eksempelforespørsel

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 på 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
        }
    ]
}

Felt i svaret

  • code og name - landet, med ISO 3166-1 alpha-2-koden du sender som country_code til estimatet.
  • min_shipping_price og max_shipping_price - spennet i hva én fraktpakke til landet koster, eksklusive mva., i currency, blant fraktpakkene varianten kan pakkes i. En ordre med flere enheter kan trenge flere pakker, så be om et estimat for prisen på et gitt antall.
  • min_eta_days og max_eta_days - spennet i antall dager en pakke er underveis etter at den er overlevert til transportøren, produksjonstid ikke medregnet; null når satsene ikke har noe leveringsestimat.
FØR DU BESTILLER

Beregn frakt

For å finne ut hva frakten av en produktvariant vil koste og hvor lenge den vil være underveis, sender du en GET-forespørsel til https://api.fabrixa.com/v2/integration/shipping/estimate med påloggingsopplysningene dine. Estimatet følger de samme reglene som prisberegningen av en ordre: enhetene pakkes i fraktpakkene til lokasjonen som produserer varianten, og hver pakke prissettes etter ruten fra denne lokasjonen til mottakerlandet. Ingenting bestilles eller reserveres, og prisen på en ordre settes når den legges inn, så frakten kan avvike hvis satsene endres i mellomtiden.

Spørringsparametere

  • variant_id eller sku - varianten, angitt på samme måte som i en ordrelinje: en variant av et av dine produkter, eller en katalogvariant. Det må være en variant du kan bestille.
  • country_code - ISO 3166-1 alpha-2-koden for landet ordren sendes til, for eksempel NL.
  • quantity - antall enheter, fra 1 til 1000.

Eksempelforespørsel

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 på 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
    }
}

Felt i svaret

  • variant_id, sku, quantity og country_code - varianten, antallet og destinasjonen estimatet gjelder for.
  • origin_country - landet varianten sendes fra, med code og name.
  • packages_count - antall fraktpakker enhetene pakkes i.
  • packages - selve pakkene, én oppføring per pakketype: package_type, dens length, width og height i cm, quantity av slike pakker, price for å sende én av dem og dens eta_days. Prisene ganger antallene blir til sammen shipping_price.
  • shipping_price - fraktprisen for alle pakkene samlet, eksklusive mva., i currency. En rute uten fraktsats gir gratis frakt, akkurat som for en ordre, og prisen blir 0.00.
  • eta_days - antall dager den tregeste pakken er underveis etter at den er overlevert til transportøren, produksjonstid ikke medregnet; null når ruten ikke har noe leveringsestimat.

En forespørsel som ikke består valideringen, besvares med 400 Bad Request og årsaken for hvert felt, med de samme meldingene som for en ordrelinje, for eksempel The variant not found. Når ingen fraktpakke kan romme enhetene, er svaret 400 Bad Request med meldingen No shipping package can carry the variant.

TILPASNING AV PRODUKT

Fabrixa Studio

Fabrixa Studio er et verktøy som lar brukere sømløst tilpasse og tilpasse produkter i sanntid med et intuitivt grensesnitt der brukere kan lage eller laste opp sine egne design.

Fabrixa Studio er ideell for bedrifter som tilbyr tilpassede produkter - slik at kunder kan visualisere designene sine før de fullfører bestillinger.

LEGG TIL STUDIO I BUTIKKEN DIN

Bygg inn Fabrixa Studio

Du kan bygge Fabrixa Studio inn på nettstedet ditt ved å bruke en iframe. Dette gjør at kundene dine kan tilpasse produkter direkte på nettstedet ditt under kassen.

Eksempel iframe for innebygging av 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>

Erstatt verdiene for product_sku, cart_item_key og application_key med dine dynamiske verdier.

Studios topptekst viser produktnavnet slik det står i butikken din - den samme tittelen kundene dine ser - med alternativene for den valgte varianten under. Det er butikkens egen kopi av produktet, så et navn du endrer i Fabrixa, vises også i Studio; locale oversetter det ikke.

Forespørsel om å opprette en bestilling 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": {
    "...": "..."
  }
}
LYTT ETTER KUNDES HANDLINGER

Håndtere studioarrangementer

Når knappen Legg til handlekurv klikkes inne i iframen, utføres følgende kommando:

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

På samme måte, når Tilbake-knappen klikkes:

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

postMessage-metoden letter kommunikasjon på tvers av opprinnelse mellom iframen og dets overordnede vindu, slik at den kan varsle forelderen om spesifikke brukerhandlinger.

Det første argumentet til postMessage er dataene du vil sende. Strengen 'customizationFinished' indikerer at brukeren har fullført tilpasningen og legger produktet i handlekurven. 'closeButtonClicked' indikerer at brukeren har valgt å gå tilbake.

I det overordnede vinduet, lytt etter disse meldingene ved å bruke message hendelseslytteren:

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

Sjekk alltid origin for innkommende meldinger for å sikre at de kommer fra en pålitelig kilde. Avhengig av meldingen du mottar, utfør de nødvendige handlingene - oppdater brukergrensesnittet, behandle handlekurven, osv. Validering av origin er avgjørende for sikkerheten - det forhindrer uautoriserte skript fra å samhandle med applikasjonen din.

VIS FERDIG DESIGN

Forhåndsvisning av tilpasning

Etter at tilpasningen er fullført, viser du det endelige designet ved å bruke forhåndsvisningsadressen nedenfor. Denne nettadressen returnerer et bilde av det tilpassede produktet, egnet som src-verdien i en <img>-tag. Ideell for å vise det tilpassede produktet i handlekurven, bestillingssammendraget eller hvor som helst i butikkgrensesnittet.

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

Erstatt {CART_ITEM_KEY} med den faktiske vognvarenøkkelen og {APPLICATION_KEY} med din gyldige programnøkkel.

Eksempelbruk i en bildekode:

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

Live Demo

Tilpasningsforhåndsvisningen vises her etter at designet er ferdig.

Customization preview
MOTA EVENTOPPDATERINGER

Webhooks

Webhooks brukes av Fabrixa for å varsle systemet ditt om sanntidshendelser - bestill oppdateringer eller kreasjoner. Når en hendelse inntreffer, sender Fabrixa en webhook til serveren din som inneholder relevant informasjon. Serveren din må avsløre et offentlig POST-endepunkt for å håndtere innkommende webhooks.

GJENNOMGÅ DINE INNKOMMENDE OVERSKIPPER

Webhook-forespørselshoder

Webhook-forespørselen inkluderer følgende overskrifter for å hjelpe deg med å identifisere og validere den innkommende forespørselen:

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

Webhooks sendes med User-Agent Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook); hvis endepunktet ditt filtrerer automatisert trafikk, må du tillate den. For å være sikker på at en forespørsel kommer fra Fabrixa, verifiser x-webhook-signature.

VELG EVENTSEMNER

Webhook-arrangementer

Fabrixa webhooks varsler systemet ditt om endringer i ordrestatus eller aktivitet. Hver webhook utløses av en spesifikk x-webhook-topic verdi. Emner som støttes for øyeblikket:

EmneBeskrivelse
order.created Utløses når en ny ordre legges inn i Fabrixa, enten via API-forespørsel eller direkte i plattformen.
order.updated Utløses når ordredetaljer som ordrestatus eller oppfyllelsesstatus oppdateres.
KONTROLLER ARRANGEMENTETS NYTTELAST

Eksempel på webhook nyttelast

Et eksempel på nyttelasten sendt med webhook. Denne nyttelasten representerer en ordreoppdatering:

{
  "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 sendt, viser shipments hver forsendelse med transportør (carrier), fraktmetode (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. En order.updated-webhook sendes hver gang status eller sporing for en forsendelse endres, og GET /orders/{order_id} returnerer det samme feltet.

BEKREFT WEBHOOK-KILDEN

Bekreft Webhook-signaturer

For å sikre at webhook-forespørselen er autentisk og umanipulert, kontroller x-webhook-signature-overskriften. Dette innebærer å beregne HMAC-SHA256-signaturen på nytt ved å bruke den rå forespørselsnyttelasten og din hemmelige nøkkel, og deretter sammenligne den med den mottatte signaturen.

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

Erstatt $yourSecret med din delte hemmelige nøkkel. Bruk alltid hash_equals for å sammenligne signaturer for å redusere timingangrep.

HVA HVIS LEVERINGEN MISLYKKES?

Webhook prøver på nytt

Webhooks er som standard deaktivert etter 10 mislykkede leveringsforsøk. Hvis endepunktet ditt returnerer en mislykket status som 404 eller en hvilken som helst 5xx-feil, vil webhook-en prøve på nytt i totalt 10 ganger. Hvis den fortsetter å returnere en ikke-2xx eller ikke-3xx svarkode, vil den bli deaktivert. Vellykkede svar inkluderer:

RETUR ET KLART SVAR

Webhook-svar

Vi anbefaler på det sterkeste at endepunktet ditt returnerer en 200 OK statuskode så raskt som mulig for å bekrefte vellykket mottak av webhook. Mens ethvert 2xx eller 3xx svar anses som vellykket, er 200 den mest brukte og pålitelige.

For å unngå leveringstidsavbrudd eller gjenforsøk, returner 200 OK umiddelbart og håndtere webhook-nyttelastbehandling asynkront, for eksempel via en bakgrunnsjobb eller kø. Hvis endepunktet ditt tar for lang tid å svare, kan det betraktes som en feil selv om svaret til slutt er vellykket.

Svar med statuskoder i området 4xx eller 5xx, eller tidsavbrudd, vil utløse gjenforsøk i henhold til prøvemekanismen.