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.
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.
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.nullhvis det ikke er noen neste side.prev_page— URL-en til forrige side.nullhvis 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.
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.
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.
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:
- koble til Shopify- eller WooCommerce-butikken din eller opprette en Integration API-kanal;
- legge til produkter og sjekke priser og fraktestimater;
- importere, opprette, oppdatere og kansellere bestillinger;
- se at ingen av disse bestillingene produseres eller trekkes fra saldoen din;
- kontrollere levering av webhooks og signaturer.
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.
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.
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
pageoglimit(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-SKUbegynner 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,popularellersold, isort_orderascellerdesc. 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,codeogHS_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_priceogvariants_max_selling_price- prisintervallet på tvers av de viste variantene.type- produkttypen, som bestemmer trykklagene og PDF-siderekkefølgen;status- alltidActivei katalogen.categories- kategoriene produktet ligger i, hver med sinparent_category.images- produktbildene medurl,is_main,screen_type_sizeogsort_number.variants- utgavene av produktet som kan bestilles:id,name,subtitle,SKU,selling_price, målenewidth,height,lengthogweight, samtoptions, alternativverdiene som utgjør varianten, for eksempel størrelsen.
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
pageoglimit(opptil 100) - deler listen i sider. Uten dem returneres alle kategoriene.search- kategoriene hvis navn inneholder teksten.with_products_only-trueutelater kategoriene som ikke inneholder noe katalogprodukt, verken direkte eller i en underkategori.sort_by-category_nameellercategory_created, isort_orderascellerdesc. 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
}
]
}
]
}
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
pageoglimit(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-SKUbegynner 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,lengthogweight.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.categoriesogcollections- kategoriene og kolleksjonene du har sortert produktet inn i i kontoen din.images- produktbildene medurl,is_main,image_size,screen_type_sizeogsort_number.variants- utgavene av produktet som kan bestilles, se Produktvarianter:id,name,subtitle,SKU,options,imagesog trykklagene iavailable_source_typesogrequired_source_types.
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,imagesog detproductvarianten 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 kildefilstypekan 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 somtype; en linje der ett mangler, avvises med400 Bad Requestog 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 sinskuuavhengig 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 Requestog å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.ellerThe catalog variant is not active.
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.
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 somYYYY-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 somCode 128.cart_item_key(påkrevd utensources) - unik identifikator fra plattformen som bygger inn Fabrixa Studio, brukt til å knytte lagrede tilpasninger til ordren.sources(påkrevd utencart_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 somYYYY-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"
}
}
}
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
rowsavvises med400 Bad Request. For å endre varene, kanseller ordren og opprett en ny. - En ordre med status
on holdkan ikke oppdateres; API-et svarer med412 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."
]
}
}
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,acceptedelleron holdogfulfillment_statusfortsatt erunfulfilled. Når den blirscheduled, 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)."
]
}
}
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:
imported- ordren er mottatt via API-et. Alle ordrer starter her.on hold- saldoen dekker ikke kostnaden for ordren. Når den er fylt på, går ordren tilbake tilimportedog fortsetter.accepted- ordren er akseptert og sendes til produksjon.completed(endelig) - alle varer er produsert.canceled(endelig) - ordren er kansellert. Det er mulig så lenge den erimported,acceptedelleron holdog produksjonen ennå ikke har startet.
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:
unfulfilled- produksjonen har ikke startet.scheduled- ordren er planlagt i en produksjonsbatch. Fra nå av kan den ikke lenger kanselleres.processing- produksjonen pågår.partially fulfilled- noen varer er ferdige, resten er fortsatt i produksjon.fulfilled(endelig) - alle varer er ferdige. Ordrensstatusblir dacompleted.
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:
pending- forsendelsen klargjøres.registered- etiketten er opprettet hos transportøren.collected- transportøren har hentet pakken.in transit- pakken er underveis.delivered(endelig) - pakken er levert.
Unntak:
failed- transportøren har meldt om et problem.returned(endelig) - pakken er returnert til oss.canceled(endelig) - forsendelsen er kansellert.
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_atogupdated_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.
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.
| Produkt | PDF-siderekkefølge |
|---|---|
| Duvet Cover |
|
| Curtains |
|
| T-shirt |
|
| Tanktop |
|
| Sweater |
|
| Hoodie |
|
| Sweatpants |
|
| Sweatshorts |
|
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.
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.
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_idellersku- 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
codeogname- landet, med ISO 3166-1 alpha-2-koden du sender somcountry_codetil estimatet.min_shipping_priceogmax_shipping_price- spennet i hva én fraktpakke til landet koster, eksklusive mva., icurrency, 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_daysogmax_eta_days- spennet i antall dager en pakke er underveis etter at den er overlevert til transportøren, produksjonstid ikke medregnet;nullnår satsene ikke har noe leveringsestimat.
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_idellersku- 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 eksempelNL.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,quantityogcountry_code- varianten, antallet og destinasjonen estimatet gjelder for.origin_country- landet varianten sendes fra, medcodeogname.packages_count- antall fraktpakker enhetene pakkes i.packages- selve pakkene, én oppføring per pakketype:package_type, denslength,widthogheighti cm,quantityav slike pakker,pricefor å sende én av dem og denseta_days. Prisene ganger antallene blir til sammenshipping_price.shipping_price- fraktprisen for alle pakkene samlet, eksklusive mva., icurrency. En rute uten fraktsats gir gratis frakt, akkurat som for en ordre, og prisen blir0.00.eta_days- antall dager den tregeste pakken er underveis etter at den er overlevert til transportøren, produksjonstid ikke medregnet;nullnå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.
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.
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.
application_key- unik nøkkel for autentisering til integrerings-API.product_sku- SKU-en til produktvarianten, hentet fra integrasjons-APIen.- .
cart_item_key- en unik vareverdi som identifiserer produktets bilbeddingsplattform Brukes til å lagre brukertilpasningene; under bestillingsoppretting identifiserer den de lagrede tilpasningene og tilordner dem til bestillingen. Se eksempel nedenfor. locale(valgfri) - språket i Studios grensesnitt og feilmeldinger, f.eks.de_DEellerde. Uten den åpnes Studio på kjøperens nettleserspråk hvis det støttes, ellers på engelsk.
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": {
"...": "..."
}
}
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.
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;" />
Live Demo
Tilpasningsforhåndsvisningen vises her etter at designet er ferdig.
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.
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
content-type- alltid satt tilapplication/jsonfor webhooks.x-webhook-signature- HMAC-SHA256-signaturen for forespørselsverifisering.x-webhook-topicfor arrangementstypen eller. For eksempel:order.created- utløses når en ny ordre opprettes.order.updated- utløses når en eksisterende ordre oppdateres.
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.
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:
| Emne | Beskrivelse |
|---|---|
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. |
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-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.
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:
2xx- indikerer vellykket behandling, f.eks.200 OK.301og302- omdirigeringssvar som indikerer at webhook er vellykket håndtert eller videresendt.
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.