Fordern Sie programmatisch Lieferangebote an und erstellen Sie Kurieraufträge für Ihr Geschäftskunden-Konto. Erstellte Aufträge erscheinen in Ihrem PackLast-Konto und werden gemäß Ihrem Abrechnungszyklus berechnet. Programmatically request delivery quotes and create courier orders for your business (Geschäftskunde) account. Orders appear in your PackLast account and are billed on your agreed billing cycle.
Mit der Partner-API bucht Ihr System PackLast-Lieferungen Server-zu-Server. Die Integration nutzt zwei Endpunkte: The Partner API lets your system price and book PackLast deliveries server-to-server. The integration uses two endpoints:
Alle übrigen Konto-Aktionen — Registrierung, Vertrag unterschreiben, API-Schlüssel erzeugen sowie Rechnungen ansehen/bezahlen — erfolgen nach Anmeldung in Ihrem Konto unter web.packlast.de. Everything else — registration, signing the contract, generating your API key, and viewing/paying invoices — is done by logging in to your account at web.packlast.de.
Die Aktivierung erfolgt im Konto unter web.packlast.de Schritt für Schritt (Menü „Aktivierung"). Activation happens in your account at web.packlast.de, step by step (the "Aktivierung" menu).
pk_live_…, nur einmal sichtbar). Danach rufen Sie Preis berechnen und Bestellung erstellen auf. Alternativ können Sie Bestellungen direkt im Konto unter „Neue Bestellung" aufgeben.
Generate the API key & integrate. Under API-Schlüssel generate your key (pk_live_…, shown only once). Then call Calculate price and Create order. Alternatively, place orders directly in your account under "Neue Bestellung".
Der API-Schlüssel kann erst nach Freischaltung und (falls erforderlich) Hinterlegung der Kaution erzeugt werden. Bis dahin können Sie Bestellungen wie ein normaler Kunde mit Zahlung pro Auftrag aufgeben. The API key can only be generated after approval and (if required) paying the deposit. Until then you may order like a normal customer, paying per order.
Authentifizieren Sie jeden Aufruf mit Ihrem API-Schlüssel als Bearer-Token: Authenticate every request with your API key as a Bearer token:
Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PackLast speichert nur einen Hash des Schlüssels — der Klartext ist nur bei der Erzeugung sichtbar und nicht abrufbar. Bei Verlust den Schlüssel im Konto widerrufen und neu erzeugen (der alte wird sofort ungültig). PackLast stores only a hash of the key — the plaintext is shown only at generation and cannot be retrieved. If lost, revoke and regenerate it in your account (the old key is immediately invalidated).
Schlüssel geheim halten. Nur serverseitig verwenden — niemals in einer App, im Browser oder in einem öffentlichen Repository. Der Schlüssel erlaubt das Erstellen kostenpflichtiger Aufträge. Keep your key secret. Use it server-side only — never in an app, browser, or public repo. It grants the ability to create billable orders.
| Ergebnis | Bedeutung |
|---|---|
401 Missing API key | Kein Authorization: Bearer-Header gesendet. |
403 Invalid or revoked API key | Schlüssel unbekannt, widerrufen oder kein Geschäftskonto. |
| Result | Meaning |
|---|---|
401 Missing API key | No Authorization: Bearer header sent. |
403 Invalid or revoked API key | Key unknown, revoked, or not a business account. |
| UmgebungEnvironment | Base URL |
|---|---|
| ProduktionProduction | https://app.packlast.de/api |
Alle Endpunkte sind relativ zur Basis-URL. Senden Sie Content-Type: application/json und Accept: application/json.
All endpoints are relative to the base URL. Send Content-Type: application/json and Accept: application/json.
| Status | Bedeutung |
|---|---|
200 | Erfolg. |
401 | API-Schlüssel fehlt. |
403 | Ungültiger/widerrufener Schlüssel oder Konto gesperrt. |
402 | Kreditlimit überschritten — offene Rechnung begleichen. |
409 | Preis hat sich geändert — neu berechnen und neue Signatur verwenden. |
422 | Validierungsfehler — siehe errors-Objekt. |
500 | Serverfehler (z. B. Entfernung nicht berechenbar). |
| Status | Meaning |
|---|---|
200 | Success. |
401 | Missing API key. |
403 | Invalid/revoked key, or account blocked. |
402 | Credit limit exceeded — settle an open invoice. |
409 | Price changed — re-calculate and use the new signature. |
422 | Validation error — see the errors object. |
500 | Server error (e.g. distance not computable). |
Berechnung und Buchung sind durch eine Preis-Signatur verbunden: Pricing and booking are tied together by a price signature:
calculate_signature.
Call Calculate price with your parcels. The response includes a calculate_signature.
409 abgelehnt — Sie zahlen also immer den angebotenen Preis.
Call Create order with the same parcels plus that signature. If a price-relevant field changed, the order is rejected with 409 — so you only ever pay the quoted price.
Die Signatur bindet den angebotenen Gesamtpreis. Ändern Sie beim Erstellen etwas, das den Preis beeinflusst (Adressen/Koordinaten, Artikelmaße/-gewichte, Anzahl Pakete, „zweiter Bote"), erhalten Sie 409 Preis hat sich geändert. Die Entfernung berechnet PackLast serverseitig — Sie senden sie nicht. Kontaktnamen, Telefonnummern und Hinweise beeinflussen den Preis nicht und werden erst beim Erstellen ergänzt.
The signature binds the quoted gross price. If you change anything that affects the price at order time (addresses/coordinates, item sizes/weights, number of packages, second carrier) you get 409 Price has changed. Distance is computed by PackLast server-side — you don't send it. Contact names, phone numbers and notes don't affect the price and are added at order time.
Jedem Geschäftskunden ist von PackLast ein Preismodell zugewiesen. Es bestimmt, wie Preis berechnen und Bestellung erstellen den Preis ermitteln. Die API verhält sich exakt wie Ihr Konto — der Endpunkt ist in beiden Modellen derselbe, nur die Preislogik und die Antwortfelder unterscheiden sich. Das aktive Modell steht in jeder Antwort unter price.pricing_model.
PackLast assigns every business customer a pricing model. It determines how Calculate price and Create order compute the price. The API behaves exactly like your account — the endpoints are the same for both models; only the pricing logic and response fields differ. The active model is returned in every response under price.pricing_model.
| Modell | pricing_model | Preisbildung |
|---|---|---|
| Standard (größenbasiert) | size_based | Preis nach Maßen, Gewicht und Entfernung je Artikel/Route (zzgl. optionalem zweiten Boten). Artikelmaße & -gewichte sind erforderlich. |
| Paketpreis | per_package | Preis pro Paket oder pro Lieferadresse, zzgl. Aufpreis je zusätzlicher Abholadresse. Maße/Gewicht sind nicht erforderlich — gezählt werden Pakete, Lieferadressen und Abholadressen. |
| Model | pricing_model | How price is formed |
|---|---|---|
| Standard (size-based) | size_based | Priced by dimensions, weight and distance per item/route (plus optional second carrier). Item sizes & weights are required. |
| Paketpreis (per-package) | per_package | Priced per package or per delivery address, plus a surcharge per additional pickup address. Sizes/weights are not required — packages, delivery addresses and pickup addresses are counted. |
Der Netto-Preis ergibt sich aus den vom Administrator festgelegten Sätzen. Entweder ein Paketpreis oder ein Lieferpreis ist aktiv (nie beide): The net price is built from the rates your administrator configured. Either a package price or a delivery price is active (never both):
items[] zählt als ein Paket (z. B. 3 Pakete × 10 € = 30 €), oderitems[] counts as one package (e.g. 3 packages × €10 = €30), or
In beiden Modellen ist total_amount der Netto-Preis (ohne MwSt.); die MwSt. wird einmalig auf der Rechnung addiert. Welches Modell für Sie gilt, sehen Sie in jeder Berechnungs-Antwort unter price.pricing_model und im Konto unter Aktivierung.
In both models total_amount is the net price (excl. VAT); VAT is added once on the invoice. Your active model is shown in every Calculate response under price.pricing_model and in your account under Aktivierung.
Liefert eine Preisaufschlüsselung und eine calculate_signature. Sie senden nur die Pakete — Gesamtgewicht, Artikel-/Routen-Erkennung und Stadt werden serverseitig ermittelt.
Returns a price breakdown and a calculate_signature. You only send parcels — combined weight, item/route detection and city are determined server-side.
| Feld | Typ | Beschreibung |
|---|---|---|
parcels[] erforderlich | array | Ein oder mehrere Pakete. Siehe Feld-Referenz. |
extra_mann_needed optional | 0 | 1 | Zweiter Bote nötig? Standard 0. |
| Field | Type | Description |
|---|---|---|
parcels[] required | array | One or more parcels. See Field reference. |
extra_mann_needed optional | 0 | 1 | Second carrier needed? Defaults to 0. |
curl https://app.packlast.de/api/partner/calculatetotal \
-H "Authorization: Bearer pk_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" }
]
}
]
}'
{
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" }
]
}
]
}
{
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" },
{ "length": 20, "breadth": 15, "height": 10, "weight": 4.0, "item_name": "Paket" }
]
}
]
}
{
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" }
]
},
{
"pickup_address": "Warschauer Str. 70, 10243 Berlin",
"delivery_address": "Hauptstr. 1, 10827 Berlin",
"pickup_lat": "52.5053", "pickup_long": "13.4490",
"delivery_lat": "52.4849", "delivery_long": "13.3520",
"items": [
{ "length": 25, "breadth": 25, "height": 25, "weight": 8.0, "item_name": "Box A" },
{ "length": 20, "breadth": 15, "height": 10, "weight": 4.0, "item_name": "Box B" }
]
}
]
}
Mehrere Pakete = mehrere Routen. Das Gesamtgewicht, die Routen-Erkennung und die Stadt werden serverseitig ermittelt — Sie senden nur die Pakete. Multiple parcels = multiple routes. Combined weight, route detection and city are derived server-side — you only send the parcels.
200{
"success": true,
"total_weight": 5.0,
"total_distance": [8.5],
"price": {
"currency": "EUR",
"distance_km": 9,
"weight_kg": 5,
"subtotal": 19.10,
"tax_percentage": 0,
"tax_amount": 0,
"total_amount": 19.10,
"breakdown": {
"base_price": 6.50,
"size_price_total": 6.50,
"distance_charge": 12.60,
"extra_man_charge": 0,
"stop_charge": 0,
"discount": 0
},
"extra_man": {
"needed": 1,
"requested": 0,
"help_required": true,
"charge": 36,
"threshold_kg": 35,
"message": "Aufgrund des Gewichts wird eine zweite Person zum Tragen benötigt …",
"note": "⚠ Hinweis zur Tragehilfe & Zusatzkosten … 36,00 € pro Stunde …"
},
"number_of_stops": null
},
"calculate_signature": "e7a1bdb2ebf09715c0fc11f792b6dc225c08f93c3c64dbff8bbb243c7e748a14"
}
Netto-Preise: total_amount ist der Netto-Preis (ohne MwSt.) für diese Bestellung — tax_amount ist daher 0. Die MwSt. wird einmalig auf der Rechnung addiert (Netto-Summe + 19 % = Endbetrag). Setzen Sie extra_mann_needed: 1, wenn ein zweiter Träger benötigt wird; bei schweren Sendungen liefert extra_man.note denselben Hinweis wie die App. distance_km wird beim Standard-Modell serverseitig aus den Koordinaten ermittelt — Sie senden keine Entfernung. Der berechnete Wert wird (informativ) als total_distance je Paket zurückgegeben.
Net pricing: total_amount is the net price (excl. VAT) for this order — so tax_amount is 0. VAT is added once on the invoice (net total + 19% = final amount). Set extra_mann_needed: 1 when a second carrier is required; for heavy shipments extra_man.note carries the same guidance as the app. for the Standard model distance_km is computed server-side from the coordinates — you do not send any distance. The computed value is returned (informationally) as total_distance per parcel.
per_package)Per-package model (per_package)
Ist Ihr Konto auf Paketpreis eingestellt, senden Sie dieselbe Struktur — aber ohne Maße/Gewicht. Jeder Eintrag in items[] zählt als ein Paket. Koordinaten beeinflussen den Preis nicht, werden aber empfohlen: PackLast berechnet daraus die Streckenentfernung und speichert sie am Auftrag. Fehlen Koordinaten, wird die Entfernung mit 0 gespeichert (die Bestellung wird trotzdem erstellt). Siehe Preismodelle.
If your account is on Paketpreis, send the same structure but without sizes/weight. Each entry in items[] counts as one package. Coordinates don't affect the price but are recommended: PackLast computes the route distance from them and stores it on the order. If coordinates are missing, the distance is saved as 0 (the order is still created). See Pricing models.
{
"parcels": [
{
"pickup_address": "Lager 1, Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"items": [
{ "item_name": "Paket" },
{ "item_name": "Paket" },
{ "item_name": "Paket" }
]
},
{
"pickup_address": "Lager 1, Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Hauptstr. 1, 10827 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.4849", "delivery_long": "13.3520",
"items": [ { "item_name": "Paket" } ]
}
]
}
Koordinaten optional (Preis unverändert), aber empfohlen — daraus wird die Entfernung berechnet und am Auftrag gespeichert.Coordinates optional (price unchanged) but recommended — the route distance is computed from them and stored on the order.
200{
"success": true,
"total_weight": 0,
"total_distance": [7.96, 15.72],
"price": {
"currency": "EUR",
"pricing_model": "per_package",
"subtotal": 20.00,
"tax_percentage": 0,
"tax_amount": 0,
"total_amount": 20.00,
"breakdown": {
"pricing_model": "per_package",
"package_price": 0,
"number_of_packages": 4,
"total_package_charge": 0,
"delivery_price": 10.00,
"number_of_deliveries": 2,
"total_delivery_charge": 20.00,
"pickup_price": 0,
"number_of_pickups": 1,
"total_pickup_charge": 0,
"discount": 0
}
},
"calculate_signature": "9f1c…"
}
Beispiel: 4 Pakete an 2 Lieferadressen, Modell „pro Lieferadresse" zu 10 € → 2 × 10 € = 20 € netto. Bei „pro Paket" zu 10 € wären es 4 × 10 € = 40 €. Der Abholpreis fällt nur ab der zweiten Abholadresse an. Example: 4 packages to 2 delivery addresses, model "per delivery address" at €10 → 2 × €10 = €20 net. With "per package" at €10 it would be 4 × €10 = €40. The pickup price only applies from the second pickup address onward.
Erstellt die Bestellung. Senden Sie dieselben Pakete wie bei der Berechnung, die calculate_signature sowie die Kontaktdaten für Abholung und Zustellung.
Creates the order. Send the same parcels you quoted, the calculate_signature, plus pickup and delivery contact details.
| Feld | Typ | Beschreibung |
|---|---|---|
calculate_signature erforderlich | string | Aus der Berechnungs-Antwort. |
parcels[].pickup_name erforderlich | string | Kontaktname Abholung. |
parcels[].pickup_contact_number erforderlich | string | Telefon Abholung. |
parcels[].delivery_name erforderlich | string | Empfängername. |
parcels[].delivery_contact_number erforderlich | string | Telefon Empfänger. |
parcels[].pickup_description, delivery_description, pickup_instruction, delivery_instruction optional | string | Hinweise für den Fahrer. |
| Field | Type | Description |
|---|---|---|
calculate_signature required | string | From the Calculate response. |
parcels[].pickup_name required | string | Pickup contact name. |
parcels[].pickup_contact_number required | string | Pickup phone. |
parcels[].delivery_name required | string | Recipient name. |
parcels[].delivery_contact_number required | string | Recipient phone. |
parcels[].pickup_description, delivery_description, pickup_instruction, delivery_instruction optional | string | Notes for the driver. |
Nicht senden: Gesamtgewicht, Artikel-/Routen-Flags, Stadt und Zahlungsart werden automatisch bestimmt. Partneraufträge werden immer über Ihr Abrechnungskonto („online") abgerechnet. Do not send: combined weight, item/route flags, city and payment method are determined automatically. Partner orders are always billed to your account ("online").
curl https://app.packlast.de/api/partner/order-save \
-H "Authorization: Bearer pk_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"calculate_signature": "e7a1bdb2ebf09715c0fc11f792b6dc225c08f93c3c64dbff8bbb243c7e748a14",
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"pickup_name": "Max Mustermann", "pickup_contact_number": "+49301234567",
"delivery_name": "Erika Musterfrau", "delivery_contact_number": "+49307654321",
"delivery_description": "Leave at reception",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" }
]
}
]
}'
{
"calculate_signature": "<aus der Calculate-Antwort / from the Calculate response>",
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"pickup_name": "Max Mustermann", "pickup_contact_number": "+49301234567",
"delivery_name": "Erika Musterfrau", "delivery_contact_number": "+49307654321",
"delivery_description": "Leave at reception",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" }
]
}
]
}
{
"calculate_signature": "<aus der Calculate-Antwort / from the Calculate response>",
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"pickup_name": "Max Mustermann", "pickup_contact_number": "+49301234567",
"delivery_name": "Erika Musterfrau", "delivery_contact_number": "+49307654321",
"delivery_description": "Leave at reception",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" },
{ "length": 20, "breadth": 15, "height": 10, "weight": 4.0, "item_name": "Paket" }
]
}
]
}
{
"calculate_signature": "<aus der Calculate-Antwort / from the Calculate response>",
"parcels": [
{
"pickup_address": "Alexanderplatz 1, 10178 Berlin",
"delivery_address": "Kurfürstendamm 21, 10719 Berlin",
"pickup_lat": "52.5219", "pickup_long": "13.4132",
"delivery_lat": "52.5033", "delivery_long": "13.3289",
"pickup_name": "Max Mustermann", "pickup_contact_number": "+49301234567",
"delivery_name": "Erika Musterfrau", "delivery_contact_number": "+49307654321",
"items": [
{ "length": 30, "breadth": 20, "height": 15, "weight": 5.0, "item_name": "Karton" }
]
},
{
"pickup_address": "Warschauer Str. 70, 10243 Berlin",
"delivery_address": "Hauptstr. 1, 10827 Berlin",
"pickup_lat": "52.5053", "pickup_long": "13.4490",
"delivery_lat": "52.4849", "delivery_long": "13.3520",
"pickup_name": "Lena Weber", "pickup_contact_number": "+49303333333",
"delivery_name": "Tom Fischer", "delivery_contact_number": "+49304444444",
"items": [
{ "length": 25, "breadth": 25, "height": 25, "weight": 8.0, "item_name": "Box A" },
{ "length": 20, "breadth": 15, "height": 10, "weight": 4.0, "item_name": "Box B" }
]
}
]
}
Verwenden Sie dieselben Pakete (Adressen, Artikel, Gewichte) wie bei der Berechnung und fügen Sie die calculate_signature sowie die Kontaktdaten hinzu. Bei Abweichung der preisrelevanten Felder folgt 409.
Use the same parcels (addresses, items, weights) you quoted and add the calculate_signature plus contact details. If a price-relevant field differs you get a 409.
200 (eine Route)(single route){
"success": true,
"status": "order created",
"parent_order_id": 1369
}
parent_order_id ist die PackLast-Auftragsnummer. Der Auftrag erscheint in Ihrem Konto unter Meine Bestellungen und wird Ihrer Abrechnung hinzugefügt.
parent_order_id is the PackLast order id. The order appears in your account under Meine Bestellungen and is added to your billing.
Für mehrere Stopps in einem Auftrag senden Sie mehrere Pakete. Jedes Paket wird zu einer eigenen Route mit eigener Abholung, Zustellung, Kontakten und Artikeln. PackLast erstellt einen Hauptauftrag plus einen Unterauftrag je Route und erfasst eine einzige Belastung für den gesamten Auftrag. Ein Paket darf auch mehrere Artikel enthalten. To book several stops in one order, send multiple parcels. Each becomes its own route with its own pickup, delivery, contacts and items. PackLast creates one parent order plus one child order per route, and records a single charge for the whole order. A parcel may contain multiple items.
200 (mehrere Routen)(multi route){
"success": true,
"status": "order created",
"parent_order_id": 1370,
"orders": [
{ "order_id": 1371, "status": "pending", "sequence": 1 },
{ "order_id": 1372, "status": "pending", "sequence": 2 }
]
}
Mehrere Routen werden automatisch erkannt, sobald parcels mehr als einen Eintrag enthält. Die berechneten Pakete (Adressen/Artikel) müssen zwischen Berechnung und Erstellung exakt übereinstimmen, sonst 409.
Multi-route is detected automatically when parcels has more than one entry. The quoted parcels (addresses/items) must match exactly between Calculate and Create order, or you get a 409.
| Feld | Typ | Hinweise |
|---|---|---|
pickup_address / delivery_address | string | Vollständige Adresse (min. 5 Zeichen). Signiert. |
pickup_lat/long, delivery_lat/long | string|number | Koordinaten. PackLast berechnet die Entfernung (Standard-Modell) serverseitig daraus. |
pickup_name / delivery_name | string | Kontaktname. Beim Erstellen erforderlich. |
pickup_contact_number / delivery_contact_number | string | Telefon. Beim Erstellen erforderlich. |
total_weight | number | Nicht senden. Wird aus den Artikelgewichten berechnet und in der Calculate-Antwort zurückgegeben. |
items[] | array | Ein oder mehrere Artikel. |
| Field | Type | Notes |
|---|---|---|
pickup_address / delivery_address | string | Full address (min 5 chars). Signed. |
pickup_lat/long, delivery_lat/long | string|number | Coordinates. PackLast computes the distance (Standard model) server-side from these. |
pickup_name / delivery_name | string | Contact name. Required at order time. |
pickup_contact_number / delivery_contact_number | string | Phone. Required at order time. |
total_weight | number | Do not send. Computed from the item weights and returned in the Calculate response. |
items[] | array | One or more items. |
| Feld | Typ | Hinweise |
|---|---|---|
length / breadth / height | number | Maße in cm (min. 1). Nur Standard-Modell (size_based) — erforderlich & signiert. Beim Paketpreis-Modell weglassen (wird ignoriert). |
weight | number | Artikelgewicht (kg, min. 0,1). Nur Standard-Modell — erforderlich & signiert. Beim Paketpreis-Modell weglassen. |
item_name | string | Bezeichnung auf dem Auftrag (z. B. „Karton"). Beim Paketpreis-Modell zählt jeder items[]-Eintrag als ein Paket. |
| Field | Type | Notes |
|---|---|---|
length / breadth / height | number | Dimensions in cm (min 1). Standard model only (size_based) — required & signed. Omit for the per-package model (ignored). |
weight | number | Item weight (kg, min 0.1). Standard model only — required & signed. Omit for the per-package model. |
item_name | string | Label shown on the order (e.g. "Karton"). In the per-package model each items[] entry counts as one package. |
API-Schlüssel verwalten Sie nach Anmeldung in Ihrem Konto unter web.packlast.de (Bereich API-Schlüssel): erzeugen, Status prüfen und widerrufen. Das Erzeugen eines neuen Schlüssels ersetzt den vorhandenen. Der Schlüssel wird nur einmal angezeigt und nur als Hash gespeichert. Manage API keys by logging in to your account at web.packlast.de (the API-Schlüssel section): generate, check status, and revoke. Generating a new key replaces the existing one. The key is shown only once and stored only as a hash.
Voraussetzung: Der Schlüssel kann erst nach Vertragsunterschrift, Freischaltung und (falls festgelegt) Hinterlegung der Kaution erzeugt werden. Andernfalls antwortet die Erzeugung mit 403 (nicht freigeschaltet) bzw. 402 (Kaution offen).
Prerequisite: the key can only be generated after the contract is signed, the account is approved and (if set) the deposit is paid. Otherwise generation returns 403 (not approved) or 402 (deposit due).
PackLast kann je Geschäftskunde eine Kaution festlegen (auch 0 €). Ist eine Kaution festgelegt, hinterlegen Sie diese vor der Aktivierung unter Wallet (Kreditkarte/SEPA via Stripe). Die Kaution wird innerhalb von 14 Tagen nach Vertragsende zurückerstattet, abzüglich offener Beträge. Bei 0 € entfällt dieser Schritt. PackLast may set a security deposit per business customer (including €0). If set, you pay it before activation under Wallet (credit card/SEPA via Stripe). It is refunded within 14 days after the contract ends, minus any outstanding amounts. At €0 this step is skipped.
Aufträge eines aktivierten Geschäftskunden werden nicht pro Auftrag bezahlt, sondern netto erfasst und gemäß Ihrem Abrechnungszyklus (wöchentlich, zweiwöchentlich, monatlich) automatisch zu einer Rechnung zusammengefasst — zzgl. 19 % MwSt. und mit Ihrer USt-IdNr. Rechnungen sehen und bezahlen Sie unter web.packlast.de (Bereich Rechnungen) per Kreditkarte/SEPA (Stripe) oder PayPal. Orders from an activated business customer are not paid per order; they are recorded net and automatically grouped into an invoice on your billing cycle (weekly, bi-weekly, monthly) — plus 19% VAT and with your VAT ID. View and pay invoices at web.packlast.de (the Rechnungen section) via credit card/SEPA (Stripe) or PayPal.
Zahlungsverzug: Ist eine Rechnung mehr als 2 Tage überfällig, wird Ihr Konto vorübergehend gesperrt und der offene Betrag von der Kaution einbehalten. Übersteigt der offene Betrag die Kaution, ist der Restbetrag innerhalb von 7 Tagen zu zahlen. Ein gesperrtes Konto liefert bei order-save eine 402/403-Antwort, bis der Rückstand ausgeglichen ist.
Overdue: if an invoice is more than 2 days overdue, your account is temporarily blocked and the amount due is deducted from the deposit. If the amount exceeds the deposit, the remainder must be paid within 7 days. While blocked, order-save returns 402/403 until the balance is cleared.
Vor der Aktivierung: Bis Vertrag + Freischaltung (+ ggf. Kaution) abgeschlossen sind, bestellen Sie wie ein normaler Kunde mit Zahlung pro Auftrag (inkl. MwSt.). Diese Aufträge erscheinen nicht auf der Sammelrechnung. Before activation: until the contract + approval (+ deposit if set) are complete, you order like a normal customer with payment per order (incl. VAT). Those orders are not added to the periodic invoice.
Fragen zur Integration oder Abrechnung? Kontaktieren Sie Ihren PackLast-Ansprechpartner oder support@packlast.de. Questions about integration or billing? Contact your PackLast account manager or support@packlast.de.
Rechtliches: Die Nutzung der Partner-API und aller PackLast-Dienste unterliegt unseren Allgemeinen Geschäftsbedingungen (AGB). Weitere Informationen finden Sie in unseren AGB sowie in der Datenschutzerklärung und im Impressum. Legal: Use of the Partner API and all PackLast services is subject to our Terms & Conditions (AGB). For more information see our AGB as well as the Privacy Policy and Imprint.