Fabrixa Integration API Referens
6 min läst Senast uppdaterad:07-08-2026 20:55
Integration API hjälper dig att skapa och hantera Fabrixa-order, lansera Fabrixa Studio och hålla dig synkroniserad med produktions- och leveransstatus via webhooks. API:n följer REST-konventioner och använder JSON för alla förfrågnings- och svarsinstanser.
BAS URL
https://api.fabrixa.com/v2/integration
Skicka alla förfrågningar till denna bas-URL följt av den specifika slutpunktssökvägen. Bas-URLen är grunden för att interagera med Fabrixa API - hämta, skapa, uppdatera eller ta bort resurser.
Autentisering
För att komma åt Integration API, autentisera dina förfrågningar med både en Application Access Token och en Application Key:
Auktoriseringshuvud
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Applikationsnyckelhuvud
X-Application-Key: APPLICATION_KEY
Exempel 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'
Ersätt APPLICATION_ACCESS_TOKEN med din faktiska åtkomsttoken och APPLICATION_KEY med din faktiska applikationsnyckel.
Slutpunkter och förfrågningar
Integration API-slutpunkterna är organiserade efter resurstyp och följer den arkitektoniska stilen RESTful. Varje slutpunkt representerar en resurs, och åtgärder på dessa resurser utförs med vanliga HTTP-metoder.
Alla Integration API-förfrågningar och svar är i JSON-format, vilket ger ett konsekvent och lättanvänt gränssnitt för interaktion med API.
För fullständig information om varje endpoint, inklusive exempel på förfrågningar och svar, se vår Swagger-dokumentation.
Svarsformat
Alla endpoints returnerar data i ett standardiserat format med dessa objekt:
{
"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"
}
]
}
Beskrivning av svarsobjekt
links
Innehåller pagineringslänkar för att navigera genom resultaten.
self— webbadressen till den aktuella sidan.first_page— webbadressen till den första resultatsidan.last_page— webbadressen till den sista resultatsidan.next_page— webbadressen till nästa sida.nullom det inte finns någon nästa sida.prev_page— webbadressen till föregående sida.nullom det inte finns någon föregående sida.
meta
Innehåller metadata om svaret, till exempel sidnumreringsinformation.
total— det totala antalet artiklar som är tillgängliga på alla sidor.current_page— det aktuella sidnumret för resultaten.per_page— antalet objekt per sida.
data
Huvudinnehållet i svaret. data varierar beroende på slutpunkt - det kan vara ett enskilt objekt, till exempel en produkt, eller en uppsättning objekt, till exempel en lista med produkter.
Fel och statuskoder
Alla API-begäranden returnerar HTTP-statuskoder som ger insikt i svaret.
400 Bad Request
Servern kan inte behandla begäran på grund av valideringsfel - saknade eller ogiltiga parametrar.
401 Unauthorized
Klienten har inte angett giltiga autentiseringsuppgifter. Returneras även när åtkomsttoken har återkallats.
403 Forbidden
Servern nekade begäran på grund av otillräckliga åtkomsträttigheter, vanligtvis orsakad av felaktiga eller saknade åtkomstbehörigheter.
404 Not Found
Den begärda resursen kunde inte hittas på servern.
429 Too Many Requests
Klienten har överskridit det tillåtna antalet förfrågningar under en given tidsram. Se Rate Limits.
5xx Errors
Ett internt serverfel uppstod. Kontakta Fabrixas support med information om den misslyckade begäran.
Fel Response Body
Ett exempel på en felsvarskropp:
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/ping"
},
"meta": [],
"errors": {
"messages": [
"Application Key is not specified."
]
}
}
errors innehåller detaljer om vad som misslyckades. messages-matrisen listar felbeskrivningar. För en dålig begäran kommer du att få namnen på de fält som misslyckades med valideringen.
Prisgränser
Integration API stöder en gräns på 30 förfrågningar per applikation per minut.
Om du överskrider denna gräns kommer du att få ett 429 Too Many Requests svar.
Alla Integration API-svar inkluderar rubriken X-RateLimit-Remaining, hur många förfrågningar klienten fortfarande kan göra och rubriken X-RateLimit-Limit, det totala tillåtna antalet per minut.
Order
Skapa beställningar i Fabrixa från ditt eget skyltfönster eller plattform, bifoga de nödvändiga utskriftsfilerna och följ varje artikel när den går igenom uppfyllelsen.
Skapa en beställning
För att skapa en beställning via Fabrixa Integration API, skicka en POST-förfrågan till https://api.fabrixa.com/v2/integration/orders. Begäran måste innehålla:
Begär kroppsstruktur
number(valfritt) - ordernumret. Om det inte anges genereras ett unikt nummer.comments(valfritt) - ytterligare kommentarer eller anteckningar för ordern.purchased_at- datum och tid då ordern köptes, formaterat somYYYY-MM-DD HH:MM:SS.client_ip(valfritt) - kundens IP-adress.client_user_agent(valfritt) - kundens user-agent-sträng.rows- array med orderrader, varje rad innehåller:sku- produktvariantens SKU. Se Swagger för detaljer.quantity- antal beställda produktvarianter.client_barcode(valfritt) - unik klientidentifierare per orderrad, formaterad somCode 128.cart_item_key(krävs utansources) - unik identifierare från plattformen som bäddar in Fabrixa Studio, används för att koppla sparade anpassningar till ordern.sources(krävs utancart_item_key) - array med källfiler kopplade till produkten, varje fil innehåller:type- produkttypen; använd"file"som standard.url- URL till källfilen.
customer- kunduppgifter:first_name,last_name,email,phone.
shipping_address- leveransuppgifter:address,address2(valfritt),address3(valfritt).city,country_code(ISO 3166-2),country,postal_code,state(valfritt).first_name,last_name,phone(valfritt),company(valfritt).
shipping_label(valfritt) - etikettuppgifter:method_name- t.ex. "Post NL".tracking_number,tracking_url,label_pdf_url.date_created- formaterat somYYYY-MM-DD HH:MM:SS.
Exempelförfrågan
{
"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": "0647185332"
},
"shipping_address": {
"address": "Pierre cuypershof",
"address2": "17",
"city": "Amsterdam",
"country_code": "NL",
"country": "Netherlands",
"postal_code": "1012 AB",
"state": "North Holland",
"first_name": "John",
"last_name": "Doe",
"phone": "0647185332"
},
"shipping_label": {
"method_name": "Post NL",
"tracking_number": "3SYZXG1585577",
"tracking_url": "https://postnl.nl/tracktrace/3SYZXG1585577",
"label_pdf_url": "https://api.fabrixa.com/storage/8966630826422f36d822f91680012141.pdf",
"date_created": "2024-01-01 00:00:00"
}
}
Spåruppfyllelse
För att få uppfyllelsestatus för en specifik beställning, skicka en GET-förfrågan till https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. Svaret ger en lista över uppfyllelser som är associerade med beställningen, inklusive varje artikelstatus, produktinformation och framsteg i produktionssteg.
Exempel 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 innehåller en lista över uppfyllelser, som var och en innehåller:
id- unik identifierare för fulfilment.barcode- streckkod för intern spårning och identifiering; kan också tryckas på produkten.status- aktuell fulfilment-status: unfulfilled eller fulfilled.created_atochupdated_at- tidsstämplar för skapande och senaste uppdatering.variant- detaljerad information om produktvarianten: namn, undertitel, SKU.product- produktinformation: namn, undertitel.production_steps- array med produktionssteg. Listan beror på produkttypen. För varje steg:id- unik identifierare för produktionssteget.name- t.ex. "Print duvet".description- vad produktionssteget innebär.status- aktuell status:- pending - ännu inte startat.
- in progress - pågår.
- rejected - steget fick ett problem och slutfördes inte.
- done - steget är slutfört.
notes- eventuella ytterligare anteckningar för steget.updated_at- senaste gången stegstatusen uppdaterades.
Varje uppfyllnadspost motsvarar en specifik produkt eller produktvariant inom beställningen, och varje kopia av produkten i beställningen har sin egen uppfyllnadspost - varje artikel spåras individuellt genom hela produktionen.
Om inga uppfyllelser returneras för en beställning har beställningen ännu inte kommit in i behandlingsstadiet.
Källfilskrav
När du inkluderar källfiler i din beställning, se till att de uppfyller följande krav:
type
Du måste tillhandahålla en PDF-fil som källa. Om din design innehåller flera produktlager, inkludera varje lager som en separat sida i samma PDF. Under bearbetningen behandlas varje sida som ett individuellt lager, vilket gör att du kan skicka in en design med flera lager som en enda källfil. Se PDF-krav och sidordning.
type i källobjektet måste ställas in på "file".
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/source.pdf"
}
]
För mer information, se Swagger-dokumentationen.
url
Fältet url måste innehålla en direktlänk till källfilen. Se till att webbadressen är tillgänglig och att filen kan laddas ner utan autentisering. Länken måste vara tillgänglig under hela produktionsprocessen.
Filformat
Tillhandahåll filer i formatet PDF. Se till att bilderna är av hög kvalitet och lämpar sig för utskrift.
Bildmått
Maximala mått är 15,000 pixels på vardera sidan. Bilder som överskrider denna gräns kan ändras i storlek eller avvisas. Bildupplösningen bör matcha produktens dimensioner; Annars kan bilderna ändras eller beskäras så att de passar.
Upplösning
Inga specifika upplösningskrav - se bara till att bildkvaliteten är tillräcklig för utskrift.
Färgrymd
Bilder bör vara i RGB färgrymd för korrekt färgrepresentation. Andra färgrymder kommer att konverteras under bearbetningen, vilket kan resultera i felaktiga färger.
Fil-storlek
Varje källfil bör inte överstiga 50 MB. Större filer kan avvisas eller orsaka bearbetningsförseningar.
PDF-krav och sidordning
Ordningen på sidorna i PDF:en är viktig. Sidorna matchas till produktlager efter position, och den förväntade sidordningen beror på produkttypen. Se till att sidorna i din PDF följer rätt lagersekvens för produkten du skickar in.
| Produkt | PDF sidordning |
|---|---|
| Duvet Cover |
|
| Curtains |
|
| T-shirt |
|
| Tanktop |
|
| Sweater |
|
| Hoodie |
|
| Sweatpants |
|
| Sweatshorts |
|
Viktigt: varje PDF-sida måste matcha de nödvändiga måtten för sitt produktlager och vara korrekt orienterad. Placera konstverket så att toppen av designen är i linje med toppen av sidan. Felaktig sidstorlek eller orientering kan orsaka problem med skalning, rotation eller justering i produktionen.
Fabrixa Studio
Fabrixa Studio är ett verktyg som låter användare sömlöst anpassa och personifiera produkter i realtid med ett intuitivt gränssnitt där användare kan skapa eller ladda upp sina egna mönster.
Fabrixa Studio är idealisk för företag som erbjuder skräddarsydda produkter - vilket gör det möjligt för kunder att visualisera sin design innan de slutför beställningar.
Bädda in Fabrixa Studio
Du kan bädda in Fabrixa Studio på din webbplats med en iframe. Detta gör det möjligt för dina kunder att anpassa produkter direkt på din webbplats under kassan.
Exempel på iframe för inbäddning 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>
Ersätt värdena för product_sku, cart_item_key och application_key med dina dynamiska värden.
application_key- unik nyckel för autentisering till integrations-API.product_sku- produktvariantens SKU, hämtad från integrations-API:et.cart_item_key- ett unikt värde som är associerat med produktens bilbeläggningsplattform som identifierar inbäddningsplattformen Används för att spara användaranpassningarna; under orderskapandet identifierar den de sparade anpassningarna och tilldelar dem till ordern. Se exempel nedan.
Begäran om att skapa en beställning 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": {
"...": "..."
}
}
Hantera studioevenemang
När knappen Lägg till i kundvagn klickas inuti iframen, körs följande kommando:
window.parent.postMessage('customizationFinished', '*');
På samma sätt, när knappen Back klickas:
window.parent.postMessage('closeButtonClicked', '*');
Metoden postMessage underlättar kommunikation mellan iframen och dess överordnade fönster, vilket gör att den kan meddela föräldern om specifika användaråtgärder.
Det första argumentet för postMessage är den data du vill skicka. Strängen 'customizationFinished' indikerar att användaren har slutfört anpassningen och lägger till produkten i kundvagnen. 'closeButtonClicked' indikerar att användaren har valt att gå tillbaka.
I det överordnade fönstret, lyssna efter dessa meddelanden med message händelseavlyssnaren:
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.');
}
}
});
Kontrollera alltid origin för inkommande meddelanden för att säkerställa att de kommer från en pålitlig källa. Beroende på det mottagna meddelandet, utför nödvändiga åtgärder - uppdatera användargränssnittet, bearbeta vagnen, etc. Validering av origin är avgörande för säkerheten - det förhindrar obehöriga skript från att interagera med din applikation.
Förhandsvisning av anpassning
När anpassningen är klar visar du den slutliga designen med förhandsgranskningsadressen nedan. Denna URL returnerar en bild av den anpassade produkten, lämplig som src-värdet i en <img>-tagg. Idealisk för att visa den skräddarsydda produkten i din kundvagn, beställningssammanfattning eller var som helst i ditt butiksgränssnitt.
https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}
Ersätt {CART_ITEM_KEY} med den faktiska varukorgsnyckeln och {APPLICATION_KEY} med din giltiga applikationsnyckel.
Exempel på användning i en bildtagg:
<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
Anpassningsförhandsgranskningen visas här när designen är klar.
Webhooks
Webhooks används av Fabrixa för att meddela ditt system om händelser i realtid - beställ uppdateringar eller skapelser. När en händelse inträffar skickar Fabrixa en webhook till din server som innehåller relevant information. Din server måste exponera en offentlig POST-slutpunkt för att hantera inkommande webhooks.
Webhook Request Headers
Webhook-begäran innehåller följande rubriker för att hjälpa dig att identifiera och validera den inkommande begäran:
{
"content-type": "application/json",
"x-webhook-signature": "YmEwNjBhMGMyMzE3ZWQ5NGQ5NDYwOGVhNzNhMjQ4M2MyODZkZmI3NTQ1YzYxYjdkMzNhZjgzYzBmMTkxYTAxMw==",
"x-webhook-topic": "order.updated"
}
Rubrikfördelning
content-type- alltid inställd påapplication/jsonför webhooks.x-webhook-signature- HMAC-SHA256-signaturen för begäran om verifiering.x-webhook-topic- av evenemangstypen eller.topic. Till exempel:order.created- utlöses när en ny order skapas.order.updated- utlöses när en befintlig order uppdateras.
Webhook-evenemang
Fabrixa webhooks meddelar ditt system om ändringar i orderstatus eller aktivitet. Varje webhook triggas av ett specifikt x-webhook-topic-värde. Ämnen som stöds för närvarande:
| Ämne | Beskrivning |
|---|---|
order.created |
Utlöses när en ny beställning görs i Fabrixa, antingen via API-förfrågan eller direkt i plattformen. |
order.updated |
Utlöses när beställningsinformation som beställningsstatus eller leveransstatus uppdateras. |
Orderstatus
- Completed - ordern har skickats eller hämtats och mottagandet är bekräftat. För digitala produkter har kunden betalat och filerna är tillgängliga för nedladdning.
- Canceled - kunden avbröt betalningen; transaktionen slutfördes inte.
- On hold - ordern är tillfälligt blockerad.
- Imported - ordern importerades till plattformen.
Uppfyllelsestatusar
- Unfulfilled - beställningen har inte förberetts eller skickats ut ännu.
- Delvis uppfylld - vissa varor har bearbetats eller skickats, andra fortfarande väntar.
- Scheduled - beställning är planerad och schemalagd för behandling.
- Rejected - begäran om uppfyllelse har avvisats, ofta på grund av ogiltiga beställningsdetaljer eller otillgänglighet.
- Uppfylld - beställningen har fullständigt bearbetats och levererats eller gjorts tillgänglig för kunden.
Webhook Payload Exempel
Ett exempel på nyttolasten som skickas med webhook. Denna nyttolast representerar en orderuppdatering:
{
"id": 23069,
"number": "1250211835",
"comments": null,
"is_archived": false,
"status": "imported",
"fulfillment_status": "unfulfilled",
"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": "unfulfilled",
"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"
}
}
]
}
]
}
Verifiera Webhook-signaturer
För att säkerställa att webhook-begäran är äkta och opåverkad, verifiera rubriken x-webhook-signature. Detta innebär att man räknar om HMAC-SHA256-signaturen med hjälp av den råa begäranden nyttolasten och din hemliga nyckel och sedan jämför den med den mottagna signaturen.
Exempel 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 exempel
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...
}
Ersätt $yourSecret med din delade hemliga nyckel. Använd alltid hash_equals för att jämföra signaturer för att mildra timingattacker.
Webhook försöker igen
Webhooks är inaktiverat efter 10 misslyckade leveransförsök som standard. Om din slutpunkt returnerar en misslyckad status som 404 eller något 5xx-fel, kommer webhooken att försöka igen totalt 10 gånger. Om den fortsätter att returnera en icke-2xx eller icke-3xx svarskod, kommer den att avaktiveras. Framgångsrika svar inkluderar:
2xx- indikerar framgångsrik bearbetning, t.ex.200 OK.301och302- omdirigeringssvar som indikerar att webhook har hanterats eller vidarebefordrats.
Webhook svar
Vi rekommenderar starkt att din slutpunkt returnerar en 200 OK-statuskod så snabbt som möjligt för att bekräfta mottagandet av webhook. Även om alla 2xx- eller 3xx-svar anses vara framgångsrika, är 200 det vanligaste och mest pålitliga.
För att undvika tidsgränser för leverans eller omförsök, returnera 200 OK omedelbart och hantera webhook-nyttolasten asynkront, till exempel via ett bakgrundsjobb eller kö. Om din slutpunkt tar för lång tid att svara kan det anses vara ett misslyckande även om svaret i slutändan är framgångsrikt.
Svar med statuskoder i intervallet 4xx eller 5xx, eller timeouts, kommer att utlösa omförsök enligt mekanismen för återförsök.