Erscheinungsbild
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" → funktioniertGilt 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 dortauthTokenHeader.
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"
{
}
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:
- Die Fracht hat den Status
open,pendingodertaken. Beidraft,
expired,revoked,closedoderarchivedfehlt_bidsganz. - 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 dortauthTokenHeader.
Type
API Key (query: auth_token)
Parameters
Responses
Fracht.
application/json
JSON "data": { "route": "string" }, "status": "string", "auth": "string"
{
}
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, perPOSTund mit
{"action": "publish"}im Body. EinPOST /freights/publish/{id}.jsonlä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 dortauthTokenHeader.
Type
API Key (query: auth_token)
Parameters
Request Body
application/json
JSON "action": "publish", "deadline": "+48 hours"
{
}
Responses
Publiziert.
application/json
JSON
"string"
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 dortauthTokenHeader.
Type
API Key (query: auth_token)
Parameters
Request Body
application/json
JSON
"string"
Responses
Aktualisierte Fracht.
application/json
JSON
"string"
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 dortauthTokenHeader.
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
Requiredinteger
Example
20Query Parameters
page
Type
integer
Default
1limit
Type
integer
Default
20sort
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"
{
}
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 dortauthTokenHeader.
Type
API Key (query: auth_token)
Parameters
Path Parameters
entity*
rate— eine veröffentlichte Luftfrachtrateflight— ein einzelner Kapazitätsflugdirect— direkte Anfrage ohne Bezug auf Rate oder Flug
Type
Requiredstring
Valid values
"rate""flight""direct"objId*
ID des Rate- bzw. Flight-Objekts.
Type
Requiredinteger
Request Body
application/json
JSON
"string"
Responses
Buchungsanfrage angelegt.
application/json
JSON
"string"
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 dortauthTokenHeader.
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"
{
}
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
Requiredstring
Example
"020-12345675"Query Parameters
type
Type
string
Default
"awb"fullstring
Type
integer
Default
1Responses
Tracking-Ergebnis.
application/json
JSON
"string"
