Fabrixa Integration API-referanse
6 min lest Sist oppdatert:07-08-2026 20:55
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.
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.
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- produkttypen; bruk"file"som standard.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": "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"
}
}
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_atog __created_atog __created_atfor fullføring oppdatering.variant- detaljert informasjon om produktvarianten: navn, undertittel, SKU.product- produktdetaljer: navn, undertittel.production_steps- rekke produksjonstrinn. Listen over trinn avhenger av produkttypen. For hvert trinn:id- unik identifikator for produksjonstrinnet.name- f.eks. "Printdyne".description- hva produksjonstrinnet innebærer.status- gjeldende status:- venter - ikke ennå startet.
- pågår - pågår for øyeblikket.
- avvist - trinnet oppsto et problem og ble ikke fullført. B__53____donFB__X5 har blitt fullført.
notes- eventuelle tilleggsmerknader knyttet til trinnet.updated_at- forrige gang trinnstatusen 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
Du må oppgi en PDF-fil som kilde. Hvis designet inneholder flere produktlag, inkluderer du hvert lag som en separat side i samme PDF. Under behandlingen blir hver side behandlet som et individuelt lag, slik at du kan sende inn et flerlagsdesign som en enkelt kildefil. Se PDF-krav og siderekkefølge.
type i kildeobjektet må settes til "file".
"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.
Filformat
Oppgi filer i PDF-format. Sørg for at bildene er av høy kvalitet og egnet for utskrift.
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 bør ikke overstige 50 MB. Større filer kan bli avvist eller forårsake behandlingsforsinkelser.
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.
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.
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",
"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.
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. |
Ordrestatuser
- Completed - ordren er sendt eller hentet, og mottak er bekreftet. For digitale produkter har kunden betalt, og filene er tilgjengelige for nedlasting.
- Canceled - kunden kansellerte betalingen; transaksjonen ble ikke fullført.
- On hold - ordren er midlertidig blokkert.
- Imported - ordren ble importert til plattformen.
Oppfyllelsesstatuser
- Uoppfylt - bestillingen er ikke forberedt eller sendt ut ennå.
- Delvis oppfylt - noen varer har blitt behandlet eller sendt, andre fortsatt venter.
- Planlagt - ordre er planlagt og planlagt for behandling.
- Rejected - oppfyllelsesforespørselen har blitt avvist, ofte på grunn av ugyldige ordredetaljer eller utilgjengelighet.
- Oppfylt - bestillingen er fullstendig behandlet og levert eller gjort tilgjengelig for kunden.
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": "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"
}
}
]
}
]
}
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.