UTVECKLARE · Referens för integrations-API

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.

INNAN DIN FÖRSTA BEGÄRAN

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.

HUR SVAREN ÄR STRUKTURERADE

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. null om det inte finns någon nästa sida.
  • prev_page — webbadressen till föregående sida. null om 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.

NÄR NÅGOT GÅR FEL

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.

KÄNNA DINA FRÅGAN BEGRÄNSNINGAR

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.

SKAPA OCH SPÅRA BESTÄLLNINGAR

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.

FÖRBERED DINA BESTÄLLNINGSDATA

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 som YYYY-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 som Code 128.
    • cart_item_key (krävs utan sources) - unik identifierare från plattformen som bäddar in Fabrixa Studio, används för att koppla sparade anpassningar till ordern.
    • sources (krävs utan cart_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 som YYYY-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ÅRA DINA BESTÄLLNINGSVAROR

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_at och updated_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.

HUR MAN TILLHANDAHÅLLER UTSKRIFTSFILER

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.

ProduktPDF sidordning
Duvet Cover
  1. Duvet cover
  2. Pillow front
  3. Pillow back
Curtains
  1. Left curtain
  2. Right curtain
T-shirt
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Tanktop
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Sweater
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Collar
  8. Waistband
Hoodie
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Hood inside left
  8. Hood inside right
  9. Hood outside left
  10. Hood outside right
  11. Waistband
  12. Pocket lower left
  13. Pocket lower right
  14. Pocket upper right
  15. Pocket upper left
Sweatpants
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Left cuff
  6. Right cuff
  7. Waistband
  8. Right pocket
  9. Left pocket
  10. Back pocket
  11. Back pocket interfacing
Sweatshorts
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Waistband
  6. Right pocket
  7. Left pocket

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.

PRODUKTANPASSNING

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.

LÄGG TILL STUDIO I DIN BUTIK

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.

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": {
    "...": "..."
  }
}
LYSSNA EFTER KUNDÅTGÄRDER

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.

VISA DEN FÄRDIGA DESIGNEN

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;" />
PROVA MED DINA VÄRDERINGAR

Live Demo

Anpassningsförhandsgranskningen visas här när designen är klar.

Customization preview
FÅ UPPDATERINGAR AV HÄNDELSER

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.

GRANSKA DINA INKOMMANDE HEADERS

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
VÄLJ DINA EVENTÄMNEN

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:

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

Uppfyllelsestatusar

KONTROLLERA DIN EVENEMANGSNYTTSLAST

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 DIN WEBHOOK-KÄLLA

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.

VAD OM LEVERANS MISSLYCKAS?

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:

TILLBAKA ETT TYDLIGT SVAR

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.