Spring til indhold

Senest opdateret

Reference

WeLabel API: forsendelser, idempotens og fejl

Til den, der senere vil sende ordrer direkte til WeLabel i stedet for at lade os hente ordrefilen: kaldet, kvitteringen, idempotensreglen og fejlkoderne.

Under udvikling — endnu ikke åbnet

Siden beskriver et API, der endnu ikke er åbnet.

Den står her, fordi I skal kunne se, hvad I senere kobler jer på — men den beskriver den form, vi bygger efter, ikke en tjeneste, I kan kalde i dag. POST /api/v1/shipments svarer i skrivende stund 501 og kan kun nås fra en indlogget session. API-nøgler findes endnu ikke, så Authorization: Bearer nedenfor er et forslag, ikke en beskrivelse. Skriver I integrationen efter denne side i dag, bygger I på et gæt.

Det, der virker i dag, er filen. WeLabel henter den Interline-fil, jeres webshop allerede skriver, fra jeres server. Feltspecifikationen for Interline-CSV’en er målt på rigtige filer og gælder nu. Skal I bygge på noget, så byg på den — og skriv til os, så siger vi til, når kaldet og nøglerne står fast.

01

Kommer

Autentificering

Én API-nøgle pr. organisation, oprettet i dashboardet. Den sendes i Authorization-headeren — aldrig i URL’en, hvor den ender i jeres egne adgangslogs.

Nøglen vises én gang ved oprettelsen. Bliver den væk, laver I en ny og sletter den gamle; begge kan være aktive imens, så I kan skifte uden at stoppe pakkebordet.

POSThttps://welabel.io/api/v1/shipmentsKommer
Authorization: Bearer wl_live_7Q2K…9ZTV
Content-Type: application/json; charset=utf-8
Idempotency-Key: 10482-0

02

Kommer

Opret en forsendelse

Ét kald pr. ordre. Vi oversætter til GLS’ nye Label API med jeres egne GLS-oplysninger, gemmer etiketten og lægger printjobbet i kø til den printer, I har valgt.

Kaldet

{
  "orderId": "10482",
  "shipmentDate": "2026-09-14",
  "delivery": {
    "name1": "Mette Sørensen",
    "street1": "Nørrebrogade 42, 3. th",
    "zipcode": "2200",
    "city": "København N",
    "country": "DK",
    "email": "mette@example.dk",
    "mobile": "+45 20 12 34 56"
  },
  "parcels": [
    { "index": 0, "weight": 1.4 }
  ],
  "services": [
    { "type": "ShopDelivery",
      "value": "2760 4001" }
  ],
  "labelFormat": "zpl"
}
Svaret201 Created
{
  "shipmentId": "shp_8Q2K4M7ZTV",
  "orderId": "10482",
  "status": "afventer_print",
  "parcels": [
    {
      "index": 0,
      "parcelNumber": "052300091234",
      "labelFormat": "zpl",
      "printer": "PAKKEBORD-01"
    }
  ],
  "carrier": "gls-dk",
  "traceId": "b41f…c7a2",
  "createdAt":
    "2026-09-14T09:41:12Z"
}

Hvad I får tilbage

Pakkenummeret, med det samme. Etiketten selv ligger hos os og printes af agenten — I skal ikke håndtere ZPL for at printe.

Gem traceId

Det er GLS’ eget spor på kaldet, og det eneste håndtag GLS’ support tager imod. Vi gemmer det også selv i 90 dage.

Bemærk orderId

Det bliver til GLS’ eget Reference-felt, som højst må fylde 15 tegn. Er jeres ordrenumre længere, siger vi det ved oprettelsen frem for at klippe dem af i stilhed.

03

Kommer

Idempotens

Nøglen er ordrenummer + pakkeindeks. Sender I det samme kald igen — fordi jobbet blev kørt to gange, eller fordi netværket faldt ud midt i svaret — får I den forsendelse tilbage, der allerede findes. Der oprettes ikke en pakke mere.

Sætter I selv Idempotency-Key, bruger vi jeres. Gør I ikke, danner vi den af de to felter.

Vi prøver aldrig et kald igen, der kan være gået igennem

GLS’ API har ingen idempotens i sin ende. Svarer det ikke i tide, ved ingen, om pakken blev oprettet. Så gætter vi ikke: forsendelsen får status afklaring_paakraevet, og et menneske afgør, hvad der skal ske. Det er derfor, den samme ordre aldrig får to pakkenumre, og modtageren aldrig får to adviseringer — GLS adviserer, så snart en etiket er oprettet.

Når GLS ikke svarer i tide202 Accepted
{
  "shipmentId": "shp_8Q2K4M7ZTV",
  "status": "afklaring_paakraevet",
  "message": "GLS svarede ikke i tide.
    Pakken findes måske allerede — vi
    opretter den ikke igen af os selv."
}

04

Kommer

Svar og fejl

Et afvist kald har både en code, som jeres kode kan skifte på, og en message, som et menneske kan læse højt i telefonen.

StatusBetydning
400Kaldet mangler et felt, GLS kræver — typisk vægt, e-mail eller mobil. Vi siger hvilket, og hvorfor det er obligatorisk for den valgte service.
401API-nøglen mangler, er forkert eller er slettet.
402Nøglen er god nok — kontoen skal ses til. Ikke 403, netop for at ingen begynder at fejlsøge sin API-nøgle. Koderne står nedenfor.
422GLS afviste forsendelsen. GLS’ egen besked og traceId følger med uændret.
202Modtaget, men endnu ikke afgjort — enten fordi GLS ikke svarede i tide, eller fordi forsendelsen står i kø under en forstyrrelse. Intet går tabt, og intet skal skrives ind igen.

proeve_udloebetPrøveperioden er udløbet.

proeve_opbrugtDe 100 prøveetiketter er brugt.

abonnement_ubetaltBetalingen kunne ikke trækkes.

abonnement_paa_pauseAbonnementet er sat på pause.

abonnement_ophoertAbonnementet er ophørt.

ingen_kontoIngen aktiv plan på kontoen.

En etiket, der allerede er hentet hos GLS, kan altid printes igen — genudskrivning bliver aldrig afvist af de her koder. En pakke, I har betalt for, skal kunne komme ud af printeren.

Vil I koble jer på, når kaldet åbner?

Indtil da virker WeLabel med den Interline-fil, jeres webshop skriver i dag — uden at I skal røre ved webshoppen.