Til jeres eget system – fx et ERP, et lagersystem eller en webshop, vi ikke har en færdig forbindelse til. Systemet sender ordrerne til fragtr, kan vise jeres forsendelsesmetoder i sin egen checkout og får trackingnummeret tilbage, når ordren er booket.
fco_…). Den vises kun én gang – lav en ny under webshoppen, hvis den bliver væk.Authorization: Bearer fco_…Alle adresser starter med https://fragtr.dk/api/v1/shop. Data sendes og modtages som JSON.
| Kald | Hvad det gør |
|---|---|
POST /orders | Opret en ordre – eller opdatér den, hvis den ikke er booket endnu (samme order_id). |
GET /orders/{order_id} | Status, booking og trackingnummer. |
DELETE /orders/{order_id} | Ordren er annulleret hos jer – flyttes til Ignoreret (hvis den ikke er booket). |
GET /methods | Jeres synlige forsendelsesmetoder. |
POST /rates | Fragtvalg og priser til checkout ud fra land, vægt og kurv. |
POST https://fragtr.dk/api/v1/shop/orders
Authorization: Bearer fco_…
Content-Type: application/json
{
"order_id": "SO-1001", // jeres eget id (påkrævet, unikt)
"number": "1001", // vises i fragtr og bruges som reference
"ordered_at": "2026-10-24T10:30:00Z",
"shipping_method": "fragtr-12", // code fra /rates eller /methods (valgfri)
"currency": "DKK",
"total": 800.00, // varernes værdi – bruges til told uden for EU
"receiver": {
"name": "Bergen Interiør AS", "contact": "Ola Nordmann",
"street": "Karl Johans gate 12", "street2": "", "zip": "0162", "city": "Oslo",
"country": "NO", "email": "ola@bergen.no", "phone": "+47 22 00 00 00"
},
"items": [
{"name": "Bordlampe messing", "qty": 2, "price": 400.00, "weight_kg": 1.1,
"sku": "L-1", "hs_code": "940520", "origin_country": "DK"}
]
}
Svar 201 (ny) eller 200 (opdateret):
{"order": {"order_id": "SO-1001", "number": "1001", "status": "new", "shipping_method": "fragtr-12", "booking": null}}
order_id og modtagerens name, street, zip, city og country (to bogstaver, fx DK).weight_kg kan sendes for hele ordren – ellers lægger vi varernes vægt sammen.hs_code og origin_country bruges til handelsfakturaen, når pakken skal uden for EU.new (ny), hold (på hold), booked (booket) eller ignored (ignoreret). En booket ordre kan ikke ændres (409).Ordren lander under Mine bookinger → Webshop-ordrer. Har den en shipping_method, kan den bookes med ét klik – ellers vælger man pris i fragtr.
Kald /rates, når kunden skal vælge fragt. Svaret er jeres egne forsendelsesmetoder med de priser, I har sat op – kun dem, der dækker landet, vægten og kurven.
POST https://fragtr.dk/api/v1/shop/rates
Authorization: Bearer fco_…
{"country": "NO", "items": [{"qty": 2, "price": 400.00, "weight_kg": 1.1}]}
{"rates": [
{"code": "fragtr-12", "name": "Levering til døren",
"description": "1–3 hverdage · Told og moms betales af modtageren ved levering",
"price": 149.0, "currency": "DKK"}
]}
Gem den valgte code og send den som shipping_method, når ordren sendes til fragtr.
Har I angivet en webhook, sender fragtr en POST, så snart ordren er booket og trackingnummeret findes:
POST https://jeres-system.dk/fragtr/webhook
X-Fragtr-Event: order.shipped
X-Fragtr-Timestamp: 1792700000
X-Fragtr-Signature: sha256=5d1c…
{"event": "order.shipped", "sent_at": "2026-10-24T11:02:00+00:00",
"data": {"order_id": "SO-1001", "tracking_number": "1Z999AA10123456784",
"tracking_url": "https://www.ups.com/track?tracknum=1Z999AA10123456784", "carrier": "UPS"}}
Signaturen er HMAC-SHA256 af "{timestamp}.{body}" med ordresystemets nøgle (fco_…). Svar med 2xx inden for 8 sekunder – ellers prøver vi igen senere.
# Python
import hmac, hashlib, time
def ok(key, ts, body, signature):
expected = "sha256=" + hmac.new(key.encode(), f"{ts}.{body}".encode(), hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature) and abs(time.time() - int(ts)) < 300
Uden webhook kan jeres system selv hente status med GET /orders/{order_id}.
Fejl returneres som {"error": "Forklaring på dansk"}: 400 ugyldige data, 401 manglende eller ugyldig nøgle, 403 kontoen er spærret, 404 findes ikke, 409 ordren er allerede booket, 423 ordresystemet er sat på pause, 429 for mange kald (højst 120 pr. minut).
Send Accept-Language: en for at få fejlbeskeder på engelsk.