api.pickwings.ch v2

Übersicht Schnittstellen

Pickwings stellt Schnittstellen für Drittsysteme zur Verfügung. Diese ermöglichen es ...

... eine Sendung aufzugeben.
... ein Preisanfrage zu machen.
... über Ereignisse benachrichtigt zu werden.

Anfragen an Pickwings müssen über HTTPS erfolgen. Anfragen über HTTP werden nicht akzeptiert. Die Basis-URL für alle Anfragen lautet https://api.pickwings.ch/api/v2/sender/. Die Benachrichtigung über Ereignisse erfolgt via vom Kunden definierte Webhooks.

Sendung aufgeben

Mittels einer HTTPS-Anfrage kann eine Sendung aufgegeben werden. Dazu müssen alle relevanten Sendungsdaten übermittelt werden. Die Sendung wird direkt von Pickwings verarbeitet und ins Netzwerk gestellt.

Preisanfrage

Über eine HTTPS-Anfrage kann eine Sendungsofferte eingeholt werden. Dazu müssen alle relevanten Sendungsdaten übermittelt werden. Zurückgeschickt wird u.a. ein Release Token und ein Preis für die Sendung. Mittels einer weiteren HTTPS-Anfrage und dem Release Token kann die Sendung freigeben werden. Das Release Token läuft nach 15 Minuten ab.

Benachrichtigung über Ereignisse

Pickwings kann Drittsysteme über Ereignisse benachrichtigen. Es gibt folgende Ereignisse:

  • Sendung wurde durch einen Transportpartner akzeptiert
  • Sendung wurde abgeholt
  • Sendung ist am Hub eingetroffen
  • Sendung befindet sich in Zustellung
  • Sendung wurde zugestellt
Die Benachrichtigung erfolgt via Webhooks.

# Code Examples
# Author: Pickwings
# Help: info@pickwings.ch

Konfiguration

Damit Pickwings Anfragen von Drittsystemen und umgekehrt Drittsysteme Anfragen von Pickwings authentifizieren können, braucht es Tokens. Es gibt zwei verschiedene Tokentypen:

  • API Token: Dieses Token muss bei jeder Anfrage an Pickwings übermittelt werden
  • Webhook Token: Jede Anfrage von Pickwings an einen Webhook enthält eine Signatur, welche auf Basis des Webhook Tokens berechnet wird

Damit Drittsysteme von Pickwings benachrichtigt werden können, müssen zusätzlich Webhooks erstellt werden. Tokens und Webhooks werden im Webportal unter "Konto" -> "API Admin" verwaltet. Tokens müssen unbedingt geheim gehalten werden!

Konfiguration API Tokens

Sobald ein API Token erstellt wurde, können Anfragen an Pickwings gestellt werden. Dazu muss über das HTTP-Header-Feld "Authorization" das Token bei jeder Anfrage mitgeschickt werden. Der Wert des Feldes muss wie folgt gesetzt werden:

Authorization: Token <Dein geheimes API Token>

Konfiguration Web Tokens und Webhooks

Damit Pickwings Drittsysteme benachrichtigen kann, braucht es neben einem Webhook Token einen Webhook. Nachdem beides erstellt wurde, wird Pickwings Benachrichtigungen an die registrierten Webhooks schicken. Jeder registierte Webhook wird für jedes Ereignis aufgerufen.

Webhooks müssen mit einem Statuscode 200 antworten. Antwortet der Webhook mit einem anderen Statuscode oder gar nicht, wird der Webhook deaktiviert.

Ein Webhook sollte unbedingt jede Anfrage authentifizieren. Dazu muss die von Pickwings mitgesendete Signatur im Header-Feld x-signature überprüft werden. Die Signatur ist ein SHA1 HMAC Hash über den Body der Webhook-Anfrage, wobei das Webhook Token als Schlüssel der Hashfunktion verwendet wird. Zur Authentifizierung der Anfrage sollte das Drittsystem die Signatur berechnen und mit der mitgeschickten vergleichen.

Siehe rechts für ein Codebeispiel in Python.

# pylint: disable=all

# Beispiel Code Python: Überprüfung der Signatur einer Webhook-Anfrage
# webhook_token enthält das Webhook Token
# webhook_request_body enthält den Body der Webhook-Anfrage

from hashlib import sha1
import hmac

x = hmac.new(str(webhook_token), webhook_request_body, sha1)
signature = x.digest().encode("base64").rstrip('\n')

Allgemeines zur API

Parameter

Die Parameter einer Anfrage werden als JSON-Objekt mit Contenttype application/json angehängt oder können in der URL enthalten sein. Z.B. werden bei einer Preisanfrage die Sendungsdaten als JSON-Objekt übergeben, bei der Freigabe der Sendung befindet sich das Release Token in der URL (siehe unten).

In der Sektion Typen sind die JSON-Objekte beschrieben. In der weiteren API-Beschreibung wird jeweils auf diese Typen verwiesen (Beispiel: Shipment).

Fehler

Pickwings verwendet HTTP Status Codes um den Erfolg oder Fehlerfall eines Requests mitzuteilen.

Fehler bei der Validierung werden mit einem HTTP Fehler Code im Response deklariert. Im Body des Response sind die Fehlermeldungen aufgeführt, inkl. welche Felder betroffen sind.

Siehe rechts für Beispiele.

Automatische Anpassung von Abhol- und Lieferdaten

Um Wochenend- und Feiertagen Rechnung zu tragen, werden Abhol- und Lieferdaten von Pickwings automatisch auf die nächstmöglichen Werktage angepasst. Die angepassten Daten sind in der Antwort enthalten.

Json:

{
"<field name>": [
"Fehlermeldung 1", "Fehlermeldung 2", ...
],
...
}

Json:

{
"pickup_date": [
"Abholung in der Vergangenheit nicht möglich."
]
}

API Sendung aufgeben

Endpoint URL ../shipments/

GET: Liefert eine Liste aller eigener Sendungen zurück.
Parameter: -
Resultat: Liste von Shipment

POST: Eine Sendung welche an diesen Endpoint gesendet wird, wird direkt ins Netzwerk gestellt.
Parameter: Shipment
Resultat: Status Code 201, Shipment

Endpoint URL ../shipments/<shipment number>/

GET: Abfrage einer Sendung mit all ihren Daten.
Parameter: Sendungsnummer in der URL
Resultat: Status Code 200, Shipment

POST: Nicht unterstützt


API Preisanfrage

Endpoint URL ../shipments/quotes/

GET: nicht unterstützt

POST: Eine Sendung welche an diesen Endpoint gesendet wird, wird als Entwurf erstellt. Als Antwort erhält man den Preis für die Sendung, ein Token und die Sendungsdaten. Mit Hilfe des Tokens kann die Sendung innerhalb von 15 Minuten freigegeben werden.
Parameter: DraftShipmentQuote
Resultat: Status Code 201, Quote

Endpoint URL ../shipments/quotes/<release-token>/confirm/

GET: nicht unterstützt

POST: Sendung mit Token freigeben
Parameter: Release Token in URL
Resultat: Status Code 201, Shipment


Typen

Jedes Feld ist entweder nicht schreibbar, erforderlich oder hat einen Default. Nicht schreibbare Felder müssen bei der Anfrage nicht mitgeschickt werden. Sie sind in der Antwort der Anfrage enthalten. Erforderliche Felder müssen bei der Anfrage mitgeschickt werden. Felder mit einem Default können, müssen aber nicht mitgeschickt werden. Wenn sie nicht mitgeschickt werden, wird der angegebene Defaultwert verwendet. Gewisse Felder haben Abhängigkeiten zueinander. Dies ist an entsprechender Stelle angegeben.

Shipment

Feld Beschreibung

number

String

Nicht schreibbar

Sendungsnummer unformatiert

number_formatted

String

Nicht schreibbar

Sendungsnummer formatiert

shipment_type

Integer

Erforderlich

Typ der Sendung:
0: Standard Tag A / Tag B
1: Express Tag A / Tag A
3: Flexibel

shipment_type_display

String

Nicht schreibbar

Siehe shipment_type.

price

Integer

Erforderlich falls price_mode == 1, sonst null

Preis in Rappen (exkl. MwSt.)

price_mode

Integer

Erforderlich

Preis Modus:
0: Pickwings Preis
1: Manueller Preis
2: Auktion
Manueller Preis und Auktion nur möglich falls in Pickwings Konto freigeschaltet.

price_mode_display

String

Nicht schreibbar

Siehe price_mode.

auction_min_price

Integer

Erforderlich falls price_mode == 2, sonst null

Start Preis der Auktion in Rappen

auction_max_price

Integer

Erforderlich falls price_mode == 2, sonst null

Höchstpreis der Auktion in Rappen

auction_duration

Integer

Erforderlich falls price_mode == 2, sonst null

Dauer der Auktion in Minuten. Mögliche Werte:
15
30
60
120
180
240

delivery_state_display

String

Nicht schreibbar

Status der Sendung

bundle

Boolean

Erforderlich

Gehört zu Sammelabholung. False falls Sammelabholung nicht freigeschaltet.

tracking_hash

String

Nicht schreibbar

Tracking Hash

tracking_link

String

Nicht schreibbar

Tracking Link.

dangerous_load

Boolean

Nicht schreibbar

Ist Gefahrgut. Gefahrgutangaben können pro Packstück festgelegt werden.

lifting_ramp_necessary

Boolean

Erforderlich

Braucht Hebebühne

insured

Boolean

Erforderlich

Muss Versichert werden

chilled_load

Boolean

Erforderlich

Muss gekühlt werden.

chilled_temperature

Integer

Erforderlich falls chilled_load == true, sonst null

Gewünschte Kühltemperatur.

truck_buildup

Integer

Fahrzeugaufbau.
0: Keine Vorgaben
1:Planen-Fahrzeug
2:'Kasten-Fahrzeug (ISO)
3:Kühl-Fahrzeug
4:Offenes Fahrzeug

truck_buildup_display

String

Nicht schreibbar

Siehe truck_buildup.

pickup_company

String

Default: null

Ladeort Firmenname

pickup_first_name

String

Erforderlich

Ladeort Vorname Kontakt

pickup_last_name

String

Erforderlich

Ladeort Nachname Kontakt

pickup_address

String

Erforderlich

Abholadresse

pickup_address_line2

String

Default:null

Adresszusatz Abholung

pickup_zip

String

Erforderlich

Ladeort Postleitzahl

pickup_location

String

Erforderlich

Ladeort

pickup_phone

String

Erforderlich

Telefonnummer Kontakt Abholung

pickup_email

String

Default: null

Kontakt Email Adresse für Abholung. Falls vorhanden werden folgende Informationen an diese Email-Adresse gesendet: Abholavisierung, Lieferbestätigung

pickup_date

String mit Format: 'yyyy-mm-dd'

Erforderlich

Abholdatum. Siehe Bemerkung unter Allgemeines.

pickup_time_start

String mit Format: 'hh:mm'

Erforderlich

Startzeit für Abholzeitfenster

pickup_time_end

String mit Format: 'hh:mm'

Erforderlich

Schlusszeit für Abholzeitfenster

pickup_reference_number

String

Default: null

Referenznummer des Kunden. Erscheint auf der Rechnung und dem Lieferschein

pickup_description

String

Default: null

Zusatzinformationen zum Ladeort.

pickup_phone_call

Boolean

Erforderlich

Ist eine Abholavisierung notwendig. Bei Abholung von Privatadresse wird die Avisierung automatisch gesetzt.

pickup_floor_pickup

Boolean

Erforderlich

Muss die Fracht in einem Stockwerk abgeholt werden.

pickup_noon_possible

Boolean

Erforderlich

Abholung über den Mittag möglich.

pickup_email_language

String 'de', 'fr', 'it', 'en'

Default: 'de'

Korrespondenzsprache für E-Mail Nachrichten bei der Abholung. Nachrichten werden zur Zeit nur in Deutsch versendet.

pickup_on_delivery_day_possible

Boolean

Erforderlich

Abholung am Liefertag möglich.

lodge_pickup

Boolean

Erforderlich

Ist die Ware bei der Abholung deponiert.

lodge_pickup_description

String

Default: null

Beschreibung zur Deponierung bei der Abolung.

needs_second_person_pickup

Boolean

Erforderlich

Weiteres Hilfspersonal bei Abholung benötigt.

truck_max_height_pickup

Float. nullable

Erforderlich

Höhenbeschränkung beim Abholhort.

pickup_access_restriction

Integer

Zufahrtsbeschränkung bei Abholung.
0: Keine Einschränkungen
1: Nur mit Kleinfahrzeug (bis 3.5t)
2: Nur mit LKW-Solo (bis 18t)

pickup_access_restriction_display

String

Nicht schreibbar

Siehe pickup_access_restriction.

needs_crane_pickup

Boolean

Wird ein Kran für das Laden benötigt.

delivery_company

String

Default: null

Lieferort Firma

delivery_first_name

String

Erforderlich

Lieferort Vorname Kontakt

delivery_last_name

String

Erforderlich

Lieferort Nachname Kontakt

delivery_address

tring

Erforderlich

Lieferort Adresse

delviery_address_line2

String

Default: null

Adresszusatz Zustellung

delivery_zip

String

Erforderlich

Lieferort Postleitzahl

delivery_location

String

Erforderlich

Lieferort

delivery_phone

String

Erforderlich

Telefonnummer Kontakt Lieferung

delivery_email

String

Default: null

Kontakt Email Adresse für Lieferung. Falls vorhanden werden folgende Informationen an diese Email-Adresse gesendet: Lieferavisierung, Lieferbestätigung

delivery_date

String mit Format 'yyyy-mm-dd'

Erforderlich

Lieferdatum. Siehe Bemerkung unter Allgemeines.

delivery_time_start

String mit Format 'hh:mm'

Erforderlich

Startzeit für Lieferzeitfenster

delivery_time_end

String mit Format 'hh:mm'

Erforderlich

Schlusszeit für Lieferzeitfenster

delivery_reference_number

String

Default: null

Referenznummer des Empfängers. Erscheint auf der Rechnung und dem Lieferschein

delivery_description

String

Default: null

Zusatzinformationen für Lieferort

delivery_phone_call

Boolean

Erforderlich

Ist eine Lieferavisierung notwendig. Bei Lieferung an Privatadresse wird die Avisierung automatisch gesetzt.

delivery_floor_delivery

Boolean

Erforderlich

Muss die Fracht in ein Stockwerk verbracht werden.

delivery_noon_possible

Boolean

Erforderlich

Lieferung über den Mittag möglich.

delivery_email_language

String 'de', 'fr', 'it', 'en'; Default: 'de'

Default: 'de'

Korrespondenzsprache für E-Mail Nachrichten bei der Lieferung. Nachrichten werden zur Zeit nur in Deutsch versendet.

lodge_delivery

Boolean

Erforderlich

Darf die Ware deponiert werden.

lodge_delivery_description

String

Default: null

Beschreibung zur Deponierung bei der Lieferung.

needs_second_person_delivery

Boolean

Erforderlich

Weiteres Hilfspersonal bei Lieferung benötigt.

neutral_delivery

Boolean

Erforderlich

Neutrale Lieferung.

neutral_delivery_comment

String

Default: null

Kommentar zur neutrale Lieferung.

truck_max_height_delivery

Float, nullable

Erforderlich

Höhenbeschränkung beim Lieferort.

delivery_access_restriction

Integer

Zufahrtsbeschränkung bei Abholung.
0: Keine Einschränkungen
1: Nur mit Kleinfahrzeug (bis 3.5t)
2: Nur mit LKW-Solo (bis 18t)

delivery_access_restriction_display

String

Nicht schreibbar

Siehe delivery_access_restriction.

needs_crane_delivery

Boolean

Wird ein Kran fürs Entladen benötigt.

packets

List

Erforderlich

Frachtstücke (siehe Packet)

events

List

Nicht schreibbar

Liste mit allen Sendungs-Events (siehe ShipmentEvent)

uploaded_documents

List

Nicht schreibbar

Liste mit vom Kunden hochgeladenen Dokumenten. Ein Dokument besteht aus folgenden Keys: "type" (0: Eigener Lieferschein, 1: Dokument zu Gefahrgut, 2: Bild der Ware, 3: Anderes Dokument), "type_display", "filename" und "url".

generated_documents

List

Nicht schreibbar

Liste mit Objekten für generierte Dokumente. Ein Dokument besteht aus folgenden Keys: "document_type", "file_type" und "url". Als Beispiel können dies Lieferschein, Lieferbestätigung oder die Labels sein als PDF sein.

locations

Dictionary

Nicht schreibbar

Daten zu Mehrladestelle oder Mehrabladestellen. Aufgeteilt nach "pick" und "delivery". "pick" und "delivery" haben jeweils folgende Keys: "company", "first_name", "last_name", "address", "zip", "location", "phone" und "description".

signatures

Dictionary

Nicht schreibbar

Unterschriften, aufgeteilt nach Abholung "pick" und Lieferung "delivery". "pick" und "delivery" haben jeweils folgende Keys: "name" (Name der Person) und "image" URL auf Unterschirftsbild.

images

Dictionary

Nicht schreibbar

Sendungsbilder, aufgeteilt nach Abholung "pick" und Lieferung "delivery". "pick" und "delivery" sind jeweils Listen mit URLs auf die Bilder.

meta_data

Dictionary

Default: null

Meta-Daten zur Sendung. Key - Value.

Json:

{
"number": "094626737889017",
"number_formatted": "09-4626-7378-89017",
"shipment_type": 0,
"shipment_type_display": "Standard",
"price": 36895,
"price_mode": 0,
"price_mode_display": "Pickwings price",
"auction_min_price": null,
"auction_max_price": null,
"auction_duration": null,
"delivery_state_display": "Akzeptiert",
"bundle": false,
"tracking_hash": "d8416a55-43a2-4bba-8ec3-ff101a955723",
"tracking_link": "https://pickwings.ch/de/tracking/d8416a55-43a2-4bba-8ec3-ff101a955723",
"dangerous_load": false,
"lifting_ramp_necessary": false,
"insured": false,
"chilled_load": true,
"chilled_temperature": -8,
"truck_buildup": 1,
"truck_buildup_display": "Tarpaulin",
"pickup_company": "Abholfirma",
"pickup_first_name": "",
"pickup_last_name": "",
"pickup_address": "Baarermattstrasse 8a",
"pickup_address_line2": "",
"pickup_zip": "6340",
"pickup_location": "Baar",
"pickup_phone": "+41 44 533 04 90",
"pickup_email": "info@pickwings.ch",
"pickup_date": "2020-03-02",
"pickup_time_start": "08:30",
"pickup_time_end": "09:30",
"pickup_reference_number": "1111",
"pickup_description": "Bei Tor 5 anfahren",
"pickup_phone_call": false,
"pickup_floor_pickup": false,
"pickup_noon_possible": false,
"pickup_email_language": "de",
"pickup_on_delivery_day_possible": true,
"lodge_pickup": false,
"lodge_pickup_description": null,
"needs_second_person_pickup": true,
"truck_max_height_pickup": null,
"pickup_access_restriction": 0,
"pickup_access_restriction_display": "No restrictions",
"needs_crane_pickup": false,
"delivery_company": "Zustellfirma",
"delivery_first_name": "",
"delivery_last_name": "",
"delivery_address": "Baarermattstrasse 8a",
"delivery_address_line2": "",
"delivery_zip": "6340",
"delivery_location": "Baar",
"delivery_phone": "+41 44 533 04 90",
"delivery_email": "info@pickwings.ch",
"delivery_date": "2020-03-05",
"delivery_time_start": "08:30",
"delivery_time_end": "12:30",
"delivery_reference_number": "2222",
"delivery_description": "",
"delivery_phone_call": false,
"delivery_floor_delivery": false,
"delivery_noon_possible": false,
"delivery_email_language": "de",
"lodge_delivery": true,
"lodge_delivery_description": "In front of the door",
"needs_second_person_delivery": true,
"neutral_delivery": true,
"neutral_delivery_comment": null,
"truck_max_height_delivery": 3.5,
"delivery_access_restriction": 0,
"delivery_access_restriction_display": "No restrictions",
"needs_crane_delivery": false,
"packets": [
{
"name": "Handelsware Packstück 1",
"description": "Handelsware palettiert und geschrumpft",
"type": 1,
"type_display": "Euro Palette (80cm x 120cm)",
"stackable": false,
"packed_for_transport": true,
"change_pallet": 0,
"change_frame": 0,
"change_cover": 0,
"weight": 1000.0,
"length": 120.0,
"width": 80.0,
"height": 160.0,
"count": 5,
"value": 0.0,
"is_dangerous_load": false,
"qrcodes": [
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>",
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>",
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>",
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>",
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>"
]
},
{
"name": "Handelsware Packstück 2",
"description": "Handelsware palettiert und geschrumpft",
"type": 1,
"type_display": "Euro Palette (80cm x 120cm)",
"stackable": false,
"packed_for_transport": true,
"change_pallet": 0,
"change_frame": 0,
"change_cover": 0,
"weight": 1000.0,
"length": 120.0,
"width": 80.0,
"height": 160.0,
"count": 4,
"value": 0.0,
"is_dangerous_load": false,
"qrcodes": [
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>",
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>",
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>",
"<?xml version='1.0' encoding='UTF-8'?><svg>...svgcode...</svg>"
]
}
],
"events": [
{
"date_time": "2018-02-09T15:46:42.463552+01:00",
"type": 1,
"type_display": "create"
},
{
"date_time": "2018-02-12T09:56:28.046553+01:00",
"type": 2,
"type_display": "accept"
}
],
"uploaded_documents": [
{
"type": 0,
"type_display": "Eigener Lieferschein",
"filename": "Lieferschein-42.pdf",
"url": "https://pickwings.ch/...TODO.../lieferschein-42.pdf"
}
],
"generated_documents": [
{
"document_type": "delivery_slip",
"file_type": "application/pdf",
"url": "https://api.pickwings.ch/api/v2/f/s/gd/094626737889017/delivery_slip"
},
{
"document_type": "delivery_confirmation",
"file_type": "application/pdf",
"url": "https://api.pickwings.ch/api/v2/f/s/gd/094626737889017/delivery_confirmation"
},
{
"document_type": "label_a",
"file_type": "application/pdf",
"url": "https://api.pickwings.ch/api/v2/f/s/gd/094626737889017/label_a"
}
],
"locations": {
"pick": [
{
"company": "Abholfirma Ladestelle 2",
"first_name": "",
"last_name": "",
"address": "Baarermattstrasse 8a",
"zip": "6340",
"location": "Baar",
"phone": "+41 44 533 04 90",
"description": "Hinter dem Gebäude"
}
],
"delivery": [
{
"company": "Zustellfirma Abladestelle 2",
"first_name": "",
"last_name": "",
"address": "Baarermattstrasse 8a",
"zip": "6340",
"location": "Baar",
"phone": "+41 44 533 04 90",
"description": "Bei Tor 3"
}
]
},
"signatures": {
"pick": {
"name": "Hans Muster",
"image": "https://api.pickwings.ch/..."
},
"delivery": {
"name": "Hans Muster",
"image": "https://api.pickwings.ch/..."
}
},
"images": {
"pick": [
"https://api.pickwings.ch/... img1"
],
"delivery": [
"https://api.pickwings.ch/... img1",
"https://api.pickwings.ch/... img2"
]
},
"meta_data": {
"key0": "value0",
"key1": "value1"
}
}

Packet

Feld Beschreibung

name

String (max. 255 characters)

Erforderlich

Name des Frachtstückes.

description

String (max. 1200 characters)

Default: null

Beschreibung des Frachtstückes.

type

Integer

Erforderlich

Typ des Frachtstückes:
1: Euro Palette (80cm x 120cm)
4: Einweg-Palette (max. 120cm x 120cm)
3: Anderes

type_display

String

Nicht schreibbar

Siehe type.

stackable

Boolean

Erforderlich

Ist das Frachtstück stapelbar.

packed_for_transport

Boolean

Erforderlich

Transporttüchtig verpackt.

change_pallet

Integer

Erforderlich falls type == 1, sonst null

Anzahl der Paletten zum tauschen.

change_frame

Integer

Erforderlich falls type == 1, sonst null

Anzahl der Rahmen zum tauschen.

change_cover

Integer

Erforderlich falls type == 1, sonst null

Anzahl der Deckel zum tauschen.

weight

Float

Erforderlich

Totalgewicht dieses Frachtstückes in Kilogram. Bsp. 4 Paletten à 200kg -> Totalgewicht: 8000kg

length

Float

Erforderlich

Länge des Frachtstückes in cm.

width

Float

Erforderlich

Breite des Frachtstückes in cm.

height

Float

Erforderlich

Höhe des Frachtstückes in cm.

count

Integer

Erforderlich

Anzahl Frachstücke

value

Float

Default: -1

Total Warenwert aller Frachtstücke in CHF. Bsp. 4 Paletten mit Warenwert von je CHF 200.- -> Totalwarenwert: CHF 800.-

is_dangerous_load

Boolean

Erforderlich

Ist das Frachtstück Gefahrgut

un_number

String

Erforderlich falls is_dangerous_load == true, sonst null

UN Nummer

packing_unit

String

Erforderlich falls is_dangerous_load == true, sonst null

Packeinheit

dangerous_points

Integer

Erforderlich falls is_dangerous_load == true, sonst null

Gefahrgutpunkte

qrcodes

List

Nicht schreibbar

QR Codes für die einzelnen Frachtstücke. Format: SVG

Json:

{
"name": "Handelsware",
"description": "Beschreibung der Ware",
"type": 1,
"type_display": "Euro Palette",
"stackable": false,
"packed_for_transport": true,
"change_pallet": 0,
"change_frame": 0,
"change_cover": 0,
"weight": 1000.0,
"length": 120.0,
"width": 80.0,
"height": 160.0,
"count": 2,
"value": 0.0,
"is_dangerous_load": true,
"un_number": "UN1234",
"packing_unit": "Kanister a 5l",
"dangerous_points": 123,
"qrcodes": [
"<svg>...svgcode...</svg>",
"<svg>...svgcode...</svg>"
]
}

ShipmentEvent

Feld Beschreibung

date_time

String (Datum ISO Format)

Nicht schreibbar

Datum und Zeit des Events

type

Integer

Nicht schreibbar

Event Typ:
0: create draft
1: create
2: accept
3: pick
4: deliver
7: tohub
9: in delivery
10: incident
11: canceled
12: added invoice item
301: edited pickup address
302: edited delivery address
303: edited pickup date and time
304: editet delivery date and time
306: edited cargo item
307: edited options
308: added cargo item
309: removed cargo item

type_display

String

Nicht schreibbar

Event-Typ Text.

Json:

{
"date_time": "2018-02-09T15:46:42.463552+01:00",
"type": 1,
"type_display": "create"
}

DraftShipmentQuote

Feld Beschreibung

shipment_type

Integer

Default: 0

Typ der Sendung:
0: Standard Tag A / Tag B
1: Express Tag A / Tag A
3: Flexibel

shipment_type_display

String

Nicht schreibbar

Siehe shipment_type.

price_mode

Integer

Nicht schreibbar

Preis Modus:
0: Pickwings Preis

price_mode_display

String

Nicht schreibbar

Siehe price_mode.

price

Integer

Nicht schreibbar

Preis in Rappen (exkl. MwSt.).

pickup_company

String

Default: null

Ladeort Firmenname.

pickup_first_name

String

Default: null

Ladeort Vorname Kontakt.

pickup_last_name

String

Default: null

Ladeort Nachname Kontakt.

pickup_address

String

Erforderlich

Abholadresse.

pickup_address_line2

String

Default: null

Adresszusatz Abholung.

pickup_zip

String

Erforderlich

Ladeort Postleitzahl.

pickup_location

String

Erforderlich

Ladeort.

pickup_phone

String

Default: null

Telefonnummer Kontakt Abholung.

pickup_email

String

Default: null

Kontakt Email Adresse für Abholung. Falls vorhanden werden folgende Informationen an diese Email-Adresse gesendet: Abholavisierung, Lieferbestätigung.

pickup_date

String mit Format: 'yyyy-mm-dd'

Erforderlich

Abholdatum. Siehe Bemerkung unter Allgemeines.

pickup_time_start

String mit Format: 'hh:mm'

Erforderlich

Startzeit für Abholzeitfenster.

pickup_time_end

String mit Format: 'hh:mm'

Erforderlich

Schlusszeit für Abholzeitfenster.

pickup_reference_number

String

Default: null

Referenznummer des Kunden. Erscheint auf der Rechnung und dem Lieferschein.

pickup_description

String

Default: null

Zusatzinformationen zum Ladeort.

pickup_phone_call

Boolean

Default: false

Ist eine Abholavisierung notwendig. Bei Abholung von Privatadresse wird die Avisierung automatisch gesetzt.

pickup_floor_pickup

Boolean

Default: false

Muss die Fracht in einem Stockwerk abgeholt werden.

pickup_noon_possible

Boolean

Default: true

Abholung über den Mittag möglich.

pickup_email_language

String 'de', 'fr', 'it', 'en'

Default: 'de'

Korrespondenzsprache für E-Mail Nachrichten bei der Abholung. Nachrichten werden zur Zeit nur in Deutsch versendet.

pickup_on_delivery_day_possible

Boolean

Default: true

Abholung am Liefertag möglich.

lodge_pickup

Boolean

Default: false

Ist die Ware bei der Abholung deponiert.

lodge_pickup_description

String

Default: null

Beschreibung zur Deponierung bei der Abolung.

needs_second_person_pickup

Boolean

Default: false

Weiteres Hilfspersonal bei Abholung benötigt.

truck_max_height_pickup

Float

Default: null

Höhenbeschränkung beim Abholhort.

pickup_access_restriction

Integer

Default: 0

Zufahrtsbeschränkung bei Abholung.
0: Keine Einschränkungen
1: Nur mit Kleinfahrzeug (bis 3.5t)
2: Nur mit LKW-Solo (bis 18t)

pickup_access_restriction_display

String

Nicht schreibbar

Siehe pickup_access_restriction.

needs_crane_pickup

Boolean

Default: false

Wird ein Kran für das Laden benötigt.

delivery_company

String

Default: null

Lieferort Firma.

delivery_first_name

String

Default: null

Lieferort Vorname Kontakt.

delivery_last_name

String

Default: null

Lieferort Nachname Kontakt.

delivery_address

tring

Erforderlich

Lieferort Adresse.

delviery_address_line2

String

Default: null

Adresszusatz Zustellung.

delivery_zip

String

Erforderlich

Lieferort Postleitzahl.

delivery_location

String

Erforderlich

Lieferort.

delivery_phone

String

Default: null

Telefonnummer Kontakt Lieferung.

delivery_email

String

Default: null

Kontakt Email Adresse für Lieferung. Falls vorhanden werden folgende Informationen an diese Email-Adresse gesendet: Lieferavisierung, Lieferbestätigung

delivery_date

String mit Format 'yyyy-mm-dd'

Erforderlich

Lieferdatum. Siehe Bemerkung unter Allgemeines.

delivery_time_start

String mit Format 'hh:mm'

Erforderlich

Startzeit für Lieferzeitfenster.

delivery_time_end

String mit Format 'hh:mm'

Erforderlich

Schlusszeit für Lieferzeitfenster.

delivery_reference_number

String

Default: null

Referenznummer des Empfängers. Erscheint auf der Rechnung und dem Lieferschein.

delivery_description

String

Default: null

Zusatzinformationen für Lieferort.

delivery_phone_call

Boolean

Default: false

Ist eine Lieferavisierung notwendig. Bei Lieferung an Privatadresse wird die Avisierung automatisch gesetzt.

delivery_floor_delivery

Boolean

Default: false

Muss die Fracht in ein Stockwerk verbracht werden.

delivery_noon_possible

Boolean

Default: true

Lieferung über den Mittag möglich.

delivery_email_language

String 'de', 'fr', 'it', 'en'

Default: 'de'

Korrespondenzsprache für E-Mail Nachrichten bei der Lieferung. Nachrichten werden zur Zeit nur in Deutsch versendet.

lodge_delivery

Boolean

Default: false

Darf die Ware deponiert werden.

lodge_delivery_description

String

Default: null

Beschreibung zur Deponierung bei der Lieferung.

needs_second_person_delivery

Boolean

Default: false

Weiteres Hilfspersonal bei Lieferung benötigt.

neutral_delivery

Boolean

Default: false

Neutrale Lieferung.

neutral_delivery_comment

String

Default: null

Kommentar zur neutrale Lieferung.

delivery_access_restriction

Integer

Default: 0

Zufahrtsbeschränkung bei Abholung.
0: Keine Einschränkungen
1: Nur mit Kleinfahrzeug (bis 3.5t)
2: Nur mit LKW-Solo (bis 18t)

delivery_access_restriction_display

String

Nicht schreibbar

Siehe delivery_access_restriction.

needs_crane_delivery

Boolean

Default: false

Wird ein Kran fürs Entladen benötigt.

truck_max_height_delivery

Float

Default: null

Höhenbeschränkung beim Lieferort.

truck_buildup

Integer

Default: 0

Fahrzeugaufbau.
0: Keine Vorgaben
1:Planen-Fahrzeug
2:'Kasten-Fahrzeug (ISO)
3:Kühl-Fahrzeug
4:Offenes Fahrzeug

truck_buildup_display

String

Nicht schreibbar

Siehe truck_buildup.

dangerous_load

Boolean

Nicht schreibbar

Ist Gefahrgut. Gefahrgutangaben können pro Packstück festgelegt werden.

lifting_ramp_necessary

Boolean

Default: true

Braucht Hebebühne.

insured

Boolean

Default: false

Muss versichert werden.

chilled_load

Boolean

Default: false

Muss gekühlt werden.

chilled_temperature

Integer

Erforderlich falls chilled_load == true, sonst null

Gewünschte Kühltemperatur.

bundle

Boolean

Default: false

Sendung für Abholung bündeln.

packets

List

Erforderlich

Frachtstücke (siehe DraftPacketQuote).

meta_data

Dictionary

Default: null

Meta-Daten zur Sendung. Key - Value.

Json:

{
"shipment_type": 0,
"shipment_type_display": "Standard",
"price_mode": 0,
"price_mode_display": "Pickwings price",
"price": 33200,
"pickup_company": "Abholfirma",
"pickup_first_name": "",
"pickup_last_name": "",
"pickup_address": "Baarermattstrasse 8a",
"pickup_address_line2": "",
"pickup_zip": "6340",
"pickup_location": "Baar",
"pickup_phone": "+41 44 533 04 90",
"pickup_email": "info@pickwings.ch",
"pickup_date": "2020-03-02",
"pickup_time_start": "08:30",
"pickup_time_end": "09:30",
"pickup_reference_number": "1111",
"pickup_description": "Bei Tor 5 anfahren",
"pickup_phone_call": false,
"pickup_floor_pickup": false,
"pickup_noon_possible": false,
"pickup_email_language": "de",
"pickup_on_delivery_day_possible": true,
"lodge_pickup": false,
"lodge_pickup_description": "",
"needs_second_person_pickup": false,
"truck_max_height_pickup": 3.5,
"pickup_access_restriction": 0,
"pickup_access_restriction_display": "No restrictions",
"needs_crane_pickup": false,
"delivery_company": "Zustellfirma",
"delivery_first_name": "",
"delivery_last_name": "",
"delivery_address": "Baarermattstrasse 8a",
"delivery_address_line2": "",
"delivery_zip": "6340",
"delivery_location": "Baar",
"delivery_phone": "+41 44 533 04 90",
"delivery_email": "info@pickwings.ch",
"delivery_date": "2020-03-05",
"delivery_time_start": "08:30",
"delivery_time_end": "12:30",
"delivery_reference_number": "2222",
"delivery_description": "",
"delivery_phone_call": false,
"delivery_floor_delivery": false,
"delivery_noon_possible": false,
"delivery_email_language": "de",
"lodge_delivery": false,
"lodge_delivery_description": "",
"needs_second_person_delivery": false,
"neutral_delivery": false,
"neutral_delivery_comment": "",
"delivery_access_restriction": 0,
"delivery_access_restriction_display": "No restrictions",
"needs_crane_delivery": false,
"truck_max_height_delivery": 3.5,
"truck_buildup": 1,
"truck_buildup_display": "Tarpaulin",
"dangerous_load": false,
"lifting_ramp_necessary": true,
"insured": false,
"chilled_load": true,
"chilled_temperature": -6,
"bundle": false,

"packets": [
{
"name": "Handelsware Packstück 1",
"description": "Handelsware palettiert und geschrumpft",
"type": 1,
"stackable": false,
"packed_for_transport": true,
"change_pallet": 0,
"change_frame": 0,
"change_cover": 0,
"weight": 1000.0,
"length": 120.0,
"width": 80.0,
"height": 160.0,
"count": 5,
"value": 0.0,
"is_dangerous_load": true,
"un_number": "2550",
"packing_unit": "-",
"dangerous_points": 4600
},
{
"name": "Handelsware Packstück 2",
"description": "Handelsware palettiert und geschrumpft",
"type": 1,
"type_display": "Euro Palette (80cm x 120cm)",
"stackable": false,
"packed_for_transport": true,
"change_pallet": 0,
"change_frame": 0,
"change_cover": 0,
"weight": 1000.0,
"length": 120.0,
"width": 80.0,
"height": 160.0,
"count": 4,
"value": 0.0,
"is_dangerous_load": false,
"un_number": null,
"packing_unit": null,
"dangerous_points": null
}
],
"meta_data": {
"key0": "value0",
"key1": "value1"
}
}

DraftPacketQuote

Feld Beschreibung

name

String (max. 255 characters)

Default: null

Name des Frachtstückes.

description

String (max. 1200 characters)

Default: null

Beschreibung des Frachtstückes.

type

Integer

Erforderlich

Typ des Frachtstückes:
1: Euro Palette (80cm x 120cm)
3: Anderes
4: Einweg-Palette (max. 120cm x 120cm)

type_display

String

Nicht schreibbar

Siehe type.

stackable

Boolean

Default: false

Ist das Frachtstück stapelbar.

packed_for_transport

Boolean

Default: true

Transporttüchtig verpackt.

change_pallet

Integer

Erforderlich falls type == 1, sonst Default: 0

Anzahl der Paletten zum tauschen.

change_frame

Integer

Erforderlich falls type == 1, sonst Default: 0

Anzahl der Rahmen zum tauschen.

change_cover

Integer

Erforderlich falls type == 1, sonst Default: 0

Anzahl der Deckel zum tauschen.

weight

Float

Erforderlich

Totalgewicht dieses Frachtstückes in Kilogram. Bsp. 4 Paletten à 200kg -> Totalgewicht: 8000kg

length

Float

Erforderlich

Länge des Frachtstückes in cm.

width

Float

Erforderlich

Breite des Frachtstückes in cm.

height

Float

Erforderlich

Höhe des Frachtstückes in cm.

count

Integer

Erforderlich

Anzahl Frachstücke

value

Float

Default: null

Total Warenwert aller Frachtstücke in CHF. Bsp. 4 Paletten mit Warenwert von je CHF 200.- -> Totalwarenwert: CHF 800.-

is_dangerous_load

Boolean

Default: false

Ist das Frachtstück Gefahrgut

un_number

String

Erforderlich falls is_dangerous_load == true, sonst Default: null

UN Nummer

packing_unit

String

Erforderlich falls is_dangerous_load == true, sonst Default: null

Packeinheit

dangerous_points

Integer

Erforderlich falls is_dangerous_load == true, sonst Default: null

Gefahrgutpunkte

Json:

{
"name": "Handelsware Packstück 1",
"description": "Handelsware palettiert und geschrumpft",
"type": 1,
"type_display": 1,
"stackable": false,
"packed_for_transport": true,
"change_pallet": 0,
"change_frame": 0,
"change_cover": 0,
"weight": 1000.0,
"length": 120.0,
"width": 80.0,
"height": 160.0,
"count": 5,
"value": 250.0,
"is_dangerous_load": true,
"un_number": "2550",
"packing_unit": "-",
"dangerous_points": 4600
}

Quote

Feld Beschreibung

token

String

Nicht schreibbar

Token für die Freigabe der Sendung

valid_until

String (Datum ISO Format)

Nicht schreibbar

Gültigkeit des Tokens

price

Integer

Nicht schreibbar

Preis für die Sendung in Rappen

draft_shipment

DraftShipmentQuote

Nicht schreibbar

Siehe DraftShipmentQuote

Json:

{
"token": "4c553421-b162-4fda-91e6-ad7190d7bef9",
"valid_until": "2019-03-14T11:22:40.057000+01:00",
"price": 43200,
"draft_shipment": {
"shipment_type": 1,
"shipment_type_display": "Express",
"price_mode": 0,
"price_mode_display": "Pickwings price",
"price": 43200,
"pickup_company": "",
"pickup_first_name": null,
"pickup_last_name": null,
"pickup_address": "Tellenmattstrasse 43",
"pickup_address_line2": "",
"pickup_zip": "6317",
"pickup_location": "Oberwil b. Zug",
"pickup_phone": "0797287243",
"pickup_email": "",
"pickup_date": "2019-12-27",
"pickup_time_start": "08:00:00",
"pickup_time_end": "09:00:00",
"pickup_reference_number": "",
"pickup_description": "",
"pickup_phone_call": true,
"pickup_floor_pickup": false,
"pickup_noon_possible": true,
"pickup_email_language": "de",
"pickup_on_delivery_day_possible": false,
"lodge_pickup": false,
"lodge_pickup_description": null,
"needs_second_person_pickup": false,
"truck_max_height_pickup": 3.4544,
"pickup_access_restriction": 0,
"pickup_access_restriction_display": "No restrictions",
"needs_crane_pickup": false,
"delivery_company": "",
"delivery_first_name": null,
"delivery_last_name": null,
"delivery_address": "Uferweg 23",
"delivery_address_line2": "",
"delivery_zip": "3920",
"delivery_location": "Zermatt",
"delivery_phone": "079 666 66 66",
"delivery_email": "",
"delivery_date": "2019-12-27",
"delivery_time_start": "13:00:00",
"delivery_time_end": "14:00:00",
"delivery_reference_number": "",
"delivery_description": "",
"delivery_phone_call": true,
"delivery_floor_delivery": false,
"delivery_noon_possible": true,
"delivery_email_language": "de",
"lodge_delivery": false,
"lodge_delivery_description": null,
"needs_second_person_delivery": false,
"neutral_delivery": false,
"neutral_delivery_comment": null,
"delivery_access_restriction": 0,
"delivery_access_restriction_display": "No restrictions",
"needs_crane_delivery": false,
"bundle": false,
"truck_max_height_delivery": null,
"truck_buildup": 1,
"truck_buildup_display": "Tarpaulin",
"dangerous_load": false,
"lifting_ramp_necessary": true,
"insured": false,
"chilled_load": false,
"chilled_temperature": null,
"packets": [
{
"name": "Fernseher",
"description": "",
"type": 3,
"type_display": "Anderes",
"stackable": false,
"packed_for_transport": true,
"change_pallet": 0,
"change_frame": 0,
"change_cover": 0,
"weight": 12.0,
"length": 80.0,
"width": 3.0,
"height": 40.0,
"count": 1,
"value": 200.0,
"is_dangerous_load": false,
"un_number": null,
"packing_unit": null,
"dangerous_points": null
}
],
"meta_data": {}
}
}

Webhook Body Data

Feld Beschreibung

id

Integer

ID des Webhook-Events

event_type

String

Typ des Webhook-Events:
shipment_accept
shipment_pick
shipment_athub
shipment_indelivery
shipment_deliver

date_time

String (ISO Date Format)

Datum und Zeit des Webhook-Events

data

Dictionary

Daten zum Event. Die Daten unterscheiden sich anhand des Event-Typs.

Data: Accept

Feld Beschreibung

shipment_number

String

Sendungsnummer

company

String

Name des Transportpartners

date_time

String (ISO Date Format)

Datum und Zeit des Events

Data: Pick

Feld Beschreibung

shipment_number

String

Sendungsnummer

date_time

String (ISO Date Format)

Datum und Zeit des Events

comment

String

Abholkommentar.

signature

Dictionary

Dictionary mit Keys:
name: Name der Unterschrift

Data: Athub

Feld Beschreibung

shipment_number

String

Sendungsnummer

date_time

String (ISO Date Format)

Datum und Zeit des Events

Data: Deliver

Feld Beschreibung

shipment_number

String

Sendungsnummer

date_time

String (ISO Date Format)

Datum und Zeit des Events

comment

String

Zustellkommentar.

signature

Dictionary

Dictionary mit Keys:
name: Name der Unterschrift

conditional

Boolean

Ware mit Vorbehalt entgegen genommen.

Json:

{
"id": 1,
"event_type": "pick",
"date_time": "2018-02-09T15:46:42.463552+01:00",
"data": {
"shipment_number": "094626737889017",
"date_time": "2018-02-09T15:46:00.000000+01:00",
"comment": "",
"signature": {
"name": "Max Muster"
},

}
}