Skip to content

Erst der Ablauf, dann die Felder

Fracht anlegen erklärt den vollständigen Ablauf — anlegen, ausschreiben, abrufen, Angebote lesen. Diese Seite ist die Feldreferenz dazu.

Drei Dinge, die hier gerne schiefgehen

Beim Anlegen liegt die Fracht flach in data — die neue ID also unter data.id, nicht data.route.id. Beim Abrufen ist es dann data.route.

Eine neue Fracht ist ein Entwurf (status: "draft") und für Anbieter unsichtbar. Ausgeschrieben wird sie erst durch POST /freights/view/{id}.json mit {"action": "publish"} — es gibt keinen /freights/publish/-Endpunkt, und die Antwort ist ein 302 trotz Erfolg.

Angebote holst du hier, nicht unter /quotes/. Sie kommen als _bids in der Antwort von GET /freights/view/{id}.json mit.

Fertige Anzeigefelder

Jede Fracht liefert neben den Rohwerten formatierte f_-Felder: f_eta (2026-09-22 14:00), f_from (FRA (DE)), caption, display_id. Direkt verwendbar, in der Sprache des Benutzers. Für Logik die Rohfelder nehmen — f_eta kann nicht festgelegt enthalten.

Trucking ist der Normalfall

class: "rfs" heißt Trucking, class: "air" heißt Luftfracht. Bei Trucking genügen Postleitzahlen (city:34119) — dann musst du from_country, from_addr und die Koordinaten allerdings selbst mitsenden, weil nur IATA-Codes automatisch aufgelöst werden.

Datumsangaben brauchen eine Uhrzeit

"eta": "2026-09-22"            → wird zu null, ohne Fehlermeldung
"eta": "2026-09-22 14:00:00"   → funktioniert

Gilt genauso für etd. Zeitfenster (eta_range, etd_range) sind ein String mit dem Separator to — bei jedem anderen Trennzeichen bleiben beide Zielfelder leer.

Die Feldbeschreibungen unten stecken im Request-Body-Schema — auf Schema klicken, um sie aufzuklappen. Wer lieber ein vollständiges Beispiel sieht: unter Samples liegen vier, beginnend mit einer kompletten Trucking-Ausschreibung.

Freights

Frachten in der Frachtenbörse anlegen, abrufen und ausschreiben.

Im URL-Segment heißen sie /freights/…. Eine Fracht beschreibt eine
Transportanfrage: Strecke, Gewicht, Packstücke, Zeitfenster.


Fracht anlegen

POST
/freights/add.json

Legt eine neue Fracht an.

Wem gehört die Fracht?

Immer der Firma, zu der dein Benutzer gehört. company und user werden
serverseitig gesetzt und lassen sich nicht überschreiben — es gibt keinen
Parameter, um im Namen einer anderen Firma anzulegen, und keinen anonymen
Anlage-Endpunkt.

Wenn deine Integration Frachten für mehrere Firmen erzeugen soll, brauchst du pro
Firma einen eigenen Benutzer und damit einen eigenen Token.

Status nach dem Anlegen

Bedingung resultierender status
Standardfall draft
winner_direct gesetzt open (+ visibility = -2, whitelist = [winner_direct])
refs.obj_id gesetzt draft

Eine draft-Fracht ist für Anbieter nicht sichtbar. Zum Ausschreiben
anschließend POST /freights/view/{id}.json mit {"action": "publish"} aufrufen.
Das ist der Schritt, der am häufigsten fehlt.

Start und Ziel

from und to akzeptieren drei Schreibweisen: airport:FRA, city:34119 oder den
nackten IATA-Code FRA. Der Prefix wird abgeschnitten.

Bei einem IATA-Code werden Adresse, Land und Koordinaten automatisch ergänzt —
allerdings nur, solange from_addr bzw. to_addr leer sind. Bei city:-Werten
findet keine automatische Auflösung statt.

Authorizations

authTokenHeader

Empfohlen. Dein API-Token als Header. Das Schema heißt ApplePass
historisch bedingt, aber so muss es lauten:

Authorization: ApplePass DEIN_TOKEN

Den Token holst du über
POST /users/login.json.

Type
API Key (header: Authorization)
or
authTokenQuery

Derselbe Token als Query-Parameter: ?auth_token=DEIN_TOKEN.

Praktisch für curl und schnelle Tests.

Nicht für produktive Integrationen verwenden: Query-Parameter landen in
Server-Logs, Proxy-Logs und Browser-Referrern. Nutze dort authTokenHeader.

Type
API Key (query: auth_token)

Parameters

Query Parameters

type

Frachttyp. Default AHR.

pricing_search_id

Vorbefüllung aus einer Ratensuche: übernimmt from, to, weight und
Packstücke und hinterlegt refs.pricing_search_id.

Type
integer

Request Body

Enthält alles, was die Weboberfläche beim Anlegen einer Ausschreibung
mitschickt. So sieht die Fracht auch im UI vollständig aus.

Weil Start und Ziel Postleitzahlen sind, löst der Server Land, Adresse
und Koordinaten nicht auf — deshalb sind die from_* / to_*-Felder
hier explizit gesetzt.

Ergebnis: status: "draft" — danach noch ausschreiben über
POST /freights/view/{id}.json mit {"action": "publish"}.

JSON
{
  
"class": "rfs",
  
"type": "AHR",
  
"category": "ftl",
  
"from": "city:60547",
  
"from_country": "DE",
  
"from_addr": "Frankfurt am Main, Germany",
  
"from_latitude": 50.0379,
  
"from_longitude": 8.5622,
  
"to": "city:34119",
  
"to_country": "DE",
  
"to_addr": "Kassel, Germany",
  
"to_latitude": 51.3127,
  
"to_longitude": 9.4797,
  
"eta": "2026-09-22 14:00:00",
  
"dangerous": "no",
  
"secured": 1,
  
"pieces": [
  
  
{
  
  
  
"pieces": 2,
  
  
  
"depth": 120,
  
  
  
"width": 80,
  
  
  
"height": 100,
  
  
  
"weight": 125,
  
  
  
"stackable": 1
  
  
},
  
  
{
  
  
  
"pieces": 2,
  
  
  
"depth": 120,
  
  
  
"width": 80,
  
  
  
"height": 60,
  
  
  
"weight": 115,
  
  
  
"stackable": 1
  
  
}
  
],
  
"refs": {
  
  
"commodity": "Autoteile",
  
  
"customer": "Musterkunde GmbH / Bestellung 4711",
  
  
"incoterm": "dap",
  
  
"incoterm_place": "Kassel",
  
  
"pieces": 4,
  
  
"weight_actual": 480,
  
  
"weight_volume": 640,
  
  
"capacity": 3.84,
  
  
"external_ref": "MYAPP-2026-00123"
  
}
}

Responses

Fracht angelegt.

Die Fracht liegt flach in data — die neue ID also unter data.id, nicht
unter data.route.id. Beim Abrufen ist es dann data.route. Im UI erreichbar
unter /freights/view/{id}.

Neben den Rohfeldern liefert die Antwort formatierte Anzeigefelder (f_from,
f_eta, caption, display_id, …), die du direkt in deine Oberfläche schreiben
kannst.

application/json
JSON
{
  
"data": {
  
  
"id": 0,
  
  
"type": "string",
  
  
"status": "string",
  
  
"class": "string",
  
  
"target": 0,
  
  
"from": "string",
  
  
"to": "string",
  
  
"from_country": "string",
  
  
"to_country": "string",
  
  
"from_addr": "string",
  
  
"to_addr": "string",
  
  
"from_latitude": 0,
  
  
"from_longitude": 0,
  
  
"to_latitude": 0,
  
  
"to_longitude": 0,
  
  
"weight": 0,
  
  
"weight_actual": 0,
  
  
"weight_volume": 0,
  
  
"direction": "string",
  
  
"etd": "string",
  
  
"etd_end": "string",
  
  
"eta": "string",
  
  
"eta_end": "string",
  
  
"deadline": "string",
  
  
"dangerous_goods": "string",
  
  
"secured": 0,
  
  
"stackable": 0,
  
  
"dutiable": 0,
  
  
"awb": "string",
  
  
"price": 0,
  
  
"visibility": "string",
  
  
"whitelist": [
  
  
  
0
  
  
],
  
  
"company": 0,
  
  
"user": 0,
  
  
"winner": 0,
  
  
"transport_company_id": 0,
  
  
"delivery_status": 0,
  
  
"parent_id": 0,
  
  
"refs": {
  
  
  
"additionalProperties": "string"
  
  
},
  
  
"created": "string",
  
  
"modified": "string",
  
  
"f_from": "FRA (DE)",
  
  
"f_to": "MUC (DE)",
  
  
"f_eta": "2026-09-22 14:00",
  
  
"f_etd": "string",
  
  
"f_eta_end": "string",
  
  
"f_etd_end": "string",
  
  
"caption": "FRA (DE) to MUC (DE) - (Bestellung 4711)",
  
  
"display_id": "string",
  
  
"delivery_status_in_words": "unbekannt",
  
  
"editable": true,
  
  
"_route_pieces": [
  
  
],
  
  
"_bids": [
  
  
]
  
},
  
"status": "string",
  
"auth": "string"
}

Playground

Server
Authorization
Variables
Key
Value
Body

Samples


Fracht abrufen

GET
/freights/view/{id}.json

Liefert eine Fracht mit ihren Packstücken und — unter zwei Bedingungen — den
Angeboten dazu.

Hier bekommst du die Angebote

Es gibt keinen eigenen Endpunkt, um Angebote zu einer Fracht abzurufen.
Angebote kommen als Array data.route._bids in dieser Antwort mit. Zwei
Bedingungen müssen erfüllt sein:

  1. Die Fracht hat den Status open, pending oder taken. Bei draft,
    expired, revoked, closed oder archived fehlt _bids ganz.
  2. Sichtbarkeit: Gehört die Fracht deiner Firma, siehst du alle Angebote.
    Gehört sie einer anderen Firma, siehst du ausschließlich deine eigenen
    Angebote — die der Mitbewerber werden herausgefiltert.

Wenn _bids fehlt, heißt das also nicht zwingend „keine Angebote vorhanden".
Prüfe zuerst den Status.

Sichtbarkeit allgemein

Was du siehst, hängt von deiner Rolle an der Fracht ab (Eigentümer, Bieter,
beauftragter Transporteur). Bei fremden Frachten können einzelne Felder maskiert
sein.

Authorizations

authTokenHeader

Empfohlen. Dein API-Token als Header. Das Schema heißt ApplePass
historisch bedingt, aber so muss es lauten:

Authorization: ApplePass DEIN_TOKEN

Den Token holst du über
POST /users/login.json.

Type
API Key (header: Authorization)
or
authTokenQuery

Derselbe Token als Query-Parameter: ?auth_token=DEIN_TOKEN.

Praktisch für curl und schnelle Tests.

Nicht für produktive Integrationen verwenden: Query-Parameter landen in
Server-Logs, Proxy-Logs und Browser-Referrern. Nutze dort authTokenHeader.

Type
API Key (query: auth_token)

Parameters

Responses

Fracht.

application/json
JSON
{
  
"data": {
  
  
"route": "string"
  
},
  
"status": "string",
  
"auth": "string"
}

Playground

Server
Authorization

Samples


Fracht ausschreiben (veröffentlichen)

POST
/freights/view/{id}.json

Schreibt eine Fracht aus und setzt damit status = open. Erst danach sehen Anbieter
die Fracht und können Angebote abgeben.

Achtung, ungewöhnlicher Pfad: Es gibt keinen /freights/publish/-Endpunkt.
Ausgeschrieben wird über dieselbe URL wie beim Abrufen, per POST und mit
{"action": "publish"} im Body. Ein POST /freights/publish/{id}.json läuft ins
Leere.

Ohne deadline wird automatisch jetzt + 24 Stunden gesetzt, damit immer ein
Bietfenster existiert.

Ausschreiben darf nur die Firma, der die Fracht gehört. Andernfalls kommt ein
Redirect auf die Fracht-Seite statt eines Fehler-JSON — als Fehler behandeln.

Authorizations

authTokenHeader

Empfohlen. Dein API-Token als Header. Das Schema heißt ApplePass
historisch bedingt, aber so muss es lauten:

Authorization: ApplePass DEIN_TOKEN

Den Token holst du über
POST /users/login.json.

Type
API Key (header: Authorization)
or
authTokenQuery

Derselbe Token als Query-Parameter: ?auth_token=DEIN_TOKEN.

Praktisch für curl und schnelle Tests.

Nicht für produktive Integrationen verwenden: Query-Parameter landen in
Server-Logs, Proxy-Logs und Browser-Referrern. Nutze dort authTokenHeader.

Type
API Key (query: auth_token)

Parameters

Request Body

application/json
JSON
{
  
"action": "publish",
  
"deadline": "+48 hours"
}

Responses

Publiziert.

application/json
JSON
"string"

Playground

Server
Authorization
Body

Samples


Fracht bearbeiten

POST
/freights/edit/{id}.json

Patcht eine bestehende Fracht. Gleiche Feldsemantik wie beim Anlegen; nur
mitgesendete Felder werden geändert.

Sinnvoll vor allem auf draft-Frachten. Nach dem Publizieren sollten
Kerndaten (Route, Gewicht, Zeitfenster) nicht mehr geändert werden — bereits
abgegebene Angebote beziehen sich darauf.

Authorizations

authTokenHeader

Empfohlen. Dein API-Token als Header. Das Schema heißt ApplePass
historisch bedingt, aber so muss es lauten:

Authorization: ApplePass DEIN_TOKEN

Den Token holst du über
POST /users/login.json.

Type
API Key (header: Authorization)
or
authTokenQuery

Derselbe Token als Query-Parameter: ?auth_token=DEIN_TOKEN.

Praktisch für curl und schnelle Tests.

Nicht für produktive Integrationen verwenden: Query-Parameter landen in
Server-Logs, Proxy-Logs und Browser-Referrern. Nutze dort authTokenHeader.

Type
API Key (query: auth_token)

Parameters

Request Body

application/json
JSON
"string"

Responses

Aktualisierte Fracht.

application/json
JSON
"string"

Playground

Server
Authorization
Body

Samples


Frachten listen

GET
/freights/enlist/{filterId}.json

Listet Frachten nach einer vordefinierten Filter-ID — das sind dieselben Listen,
die im UI im Frachten-Dashboard als Reiter erscheinen. Es gibt keinen freien
Query-Filter.

Das Ergebnis ist paginiert über page, limit, sort und direction.
Die Antwort enthält keine Pagination-Metadaten — weder Gesamtzahl noch
Seitenanzahl. Blättere, bis das zurückgegebene Array kürzer als limit ist.

Authorizations

authTokenHeader

Empfohlen. Dein API-Token als Header. Das Schema heißt ApplePass
historisch bedingt, aber so muss es lauten:

Authorization: ApplePass DEIN_TOKEN

Den Token holst du über
POST /users/login.json.

Type
API Key (header: Authorization)
or
authTokenQuery

Derselbe Token als Query-Parameter: ?auth_token=DEIN_TOKEN.

Praktisch für curl und schnelle Tests.

Nicht für produktive Integrationen verwenden: Query-Parameter landen in
Server-Logs, Proxy-Logs und Browser-Referrern. Nutze dort authTokenHeader.

Type
API Key (query: auth_token)

Parameters

Path Parameters

filterId*

Vordefinierte Liste. Die relevanten IDs für die Frachtenbörse:

Als Anbieter (fremde Frachten):

ID Liste
8 Offene Anfragen, auf die ich noch nicht geboten habe
7 Anfragen, auf die ich geboten habe
6 Anfragen, bei denen mein Angebot abgelehnt wurde
2 Gewonnene Aufträge (status = taken, Lieferung offen)
9 Archiv fremder Frachten (archived, closed, revoked, expired)

Als Auftraggeber (eigene Frachten):

ID Liste
20 Meine Entwürfe (status = draft)
10 Meine offenen Tender (open, pending)
17 Meine Tender mit eingegangenen Angeboten
18 Meine offenen Tender (Basis für „ohne Angebote")
12 Meine beauftragten Transporte (taken)
19 Archiv eigener Frachten

Buchungsanfragen (FFR): 200/201/209 ausgehend (offen/erfolgreich/Archiv),
210/211/219 eingehend.

Type
integer
Required
Example20

Query Parameters

page
Type
integer
Default
1
limit
Type
integer
Default
20
sort

Sortierfeld, z. B. Routes.created.

Type
string
direction
Type
string
Valid values
"asc""desc"

Responses

Liste von Frachten unter data.routes.

application/json
JSON
{
  
"data": {
  
  
"routes": [
  
  
]
  
},
  
"status": "string",
  
"auth": "string"
}

Playground

Server
Authorization
Variables
Key
Value

Samples


Buchungsanfrage aus Rate oder Flight

POST
/freights/request/{entity}/{objId}.json

Erzeugt eine Buchungsanfrage (type = FFR, class = air) zu einer konkreten
veröffentlichten Rate oder einem Kapazitätsflug. from / to / etd / eta
werden aus dem Objekt übernommen, refs.entity und refs.obj_id gesetzt.

Bei entity = flight wird der Anbieter automatisch aus dem Flug übernommen und
als winner gesetzt.

Authorizations

authTokenHeader

Empfohlen. Dein API-Token als Header. Das Schema heißt ApplePass
historisch bedingt, aber so muss es lauten:

Authorization: ApplePass DEIN_TOKEN

Den Token holst du über
POST /users/login.json.

Type
API Key (header: Authorization)
or
authTokenQuery

Derselbe Token als Query-Parameter: ?auth_token=DEIN_TOKEN.

Praktisch für curl und schnelle Tests.

Nicht für produktive Integrationen verwenden: Query-Parameter landen in
Server-Logs, Proxy-Logs und Browser-Referrern. Nutze dort authTokenHeader.

Type
API Key (query: auth_token)

Parameters

Path Parameters

entity*
  • rate — eine veröffentlichte Luftfrachtrate
  • flight — ein einzelner Kapazitätsflug
  • direct — direkte Anfrage ohne Bezug auf Rate oder Flug
Type
string
Required
Valid values
"rate""flight""direct"
objId*

ID des Rate- bzw. Flight-Objekts.

Type
integer
Required

Request Body

application/json
JSON
"string"

Responses

Buchungsanfrage angelegt.

application/json
JSON
"string"

Playground

Server
Authorization
Variables
Key
Value
Body

Samples


Fracht aus Vorlage anlegen

POST
/freights/create-from-template.json

Klont die Quell-Fracht einer RouteTemplate der eigenen Company. Die neue Fracht
startet direkt mit status = taken und die eigene Company als Transporteur —
das ist ein Charter-/TMS-Flow, keine Ausschreibung.

Die Vorlage muss der eigenen Company gehören.

Authorizations

authTokenHeader

Empfohlen. Dein API-Token als Header. Das Schema heißt ApplePass
historisch bedingt, aber so muss es lauten:

Authorization: ApplePass DEIN_TOKEN

Den Token holst du über
POST /users/login.json.

Type
API Key (header: Authorization)
or
authTokenQuery

Derselbe Token als Query-Parameter: ?auth_token=DEIN_TOKEN.

Praktisch für curl und schnelle Tests.

Nicht für produktive Integrationen verwenden: Query-Parameter landen in
Server-Logs, Proxy-Logs und Browser-Referrern. Nutze dort authTokenHeader.

Type
API Key (query: auth_token)

Request Body

application/json
JSON
{
  
"template_id": 0
}

Responses

Neue Fracht-ID unter data.route_id.

application/json
JSON
{
  
"data": {
  
  
"route_id": 0
  
},
  
"status": "string",
  
"auth": "string"
}

Playground

Server
Authorization
Body

Samples


Sendung verfolgen (öffentlich)

GET
/freights/track/{query}.json

Der einzige Frachten-Endpunkt ohne Authentifizierung
(allowUnauthenticated(['track'])).

Parameters

Path Parameters

query*

AWB-Nummer oder Referenz, URL-encoded.

Type
string
Required
Example"020-12345675"

Query Parameters

type
Type
string
Default
"awb"
fullstring
Type
integer
Default
1

Responses

Tracking-Ergebnis.

application/json
JSON
"string"

Playground

Server
Variables
Key
Value

Samples