Zum Inhalt springen
LOGICAR Entwickler Suchen

#Bisherige Schnittstelle

Auf dieser Seite

Vor der API v1 gab es POST /extern/transportauftraege. Sie läuft unverändert weiter, damit keine bestehende Anbindung bricht. Neue Anbindungen nutzen die API v1 (/extern/orders): strukturierte Adressen, Transportart und Zulassung, ändern und stornieren, OAuth 2.0 und Rechte je Zugang, ein einheitliches Fehlerformat (Endpunkte).

Was diese Seite beschreibt, gilt nur für die bisherige Schnittstelle.

#Endpunkte

Basisadresse: https://api.logicar.cloud/api/v1

MethodePfadZweckUmgebung
POST/extern/transportauftraegeTransportauftrag einstellenbeide
GET/extern/transportauftraege/{kennung}Stand eines Auftrags oder einer Anfragebeide
GET/extern/sandbox/transportauftraegeDie letzten Testvorgänge mit Verlaufnur Sandbox
POST/extern/sandbox/transportauftraege/{kennung}/weiterNächsten Schritt des Szenarios jetzt ausführennur Sandbox
POST/extern/sandbox/transportauftraege/{kennung}/abschliessenAlle verbleibenden Schritte ausführennur Sandbox

#Anmeldung

Nur mit einem API-Schlüssel, als Authorization: Bearer lc_… oder X-API-Key: lc_…, mit dem Recht orders:write zum Einstellen und Steuern und orders:read zum Abfragen. Ein OAuth-Client und seine Token gelten hier nicht.

#Auftrag einstellen

http
POST /api/v1/extern/transportauftraege
Authorization: Bearer lc_live_…
Content-Type: application/json

Pflicht sind nur Abhol- und Zielort, jeweils als eine Zeile.

FeldTypPflichtBedeutung
externalOrderId
auch external_order_id
TextIhre eigene Auftragsnummer (bis 200 Zeichen). Je Mandant eindeutig: derselbe Aufruf ein zweites Mal ergibt keinen zweiten Auftrag, sondern die Antwort des ersten.
pickupTextjaAbholadresse in einer Zeile: Straße, Hausnummer, Postleitzahl, Ort.
deliveryTextjaZieladresse in einer Zeile.
pickupZipTextPostleitzahl des Abholorts. Wird angenommen, aber nicht getrennt ausgewertet — die Postleitzahl gehört in pickup.
deliveryZipTextPostleitzahl des Zielorts. Wie pickupZip.
pickupDateZeitpunktGewünschter Abholzeitpunkt, ISO 8601.
expectedDeliveryDateZeitpunktGewünschter Liefertermin, ISO 8601.
vehicleTypeAuswahlFahrzeugklasse. Ohne Angabe gilt CAR.
CAR COMBI SUV VAN TRUCK_7_5 TRUCK_12 TRUCK_40
fuelTypeAuswahlAntrieb. Ohne Angabe gilt DIESEL.
DIESEL PETROL ELECTRIC HYBRID HYDROGEN LPG LNG
vinTextFahrgestellnummer.
vehicleMakeTextHersteller.
vehicleModelTextModell.
vehicleYearGanzzahlBaujahr (ganze Zahl, auch als Text).
licensePlateTextKennzeichen, falls das Fahrzeug zugelassen ist.
pickupContactNameTextAnsprechpartner am Abholort.
pickupContactPhoneTextTelefon am Abholort.
deliveryContactNameTextAnsprechpartner am Zielort.
deliveryContactPhoneTextTelefon am Zielort.
notesTextHinweis für Disposition und Fahrer, bis 500 Zeichen.
registrationServiceAuswahlZulassungsleistung: FULL_REGISTRATION = LOGICAR lässt das Fahrzeug zu.
NONE FULL_REGISTRATION
transportModeAuswahlTransportart: DRIVEN_SINGLE (auf eigener Achse gefahren), CARRIER_SINGLE (Einzeltransport auf fremder Achse), CARRIER_MULTI (Sammeltransport), FLEXIBLE (LOGICAR wählt die wirtschaftlichste Art).
DRIVEN_SINGLE CARRIER_SINGLE CARRIER_MULTI FLEXIBLE
roadMovementMethodAuswahlFahrberechtigung: EXISTING_REGISTRATION (vorhandene Zulassung), RED_PLATE (rotes Kennzeichen), SHORT_TERM_PLATE (Kurzzeitkennzeichen), AUTO_SELECT (LOGICAR wählt), NOT_REQUIRED (wird transportiert).
EXISTING_REGISTRATION RED_PLATE SHORT_TERM_PLATE AUTO_SELECT NOT_REQUIRED
registrationStatusAuswahlZulassungsstand: REGISTERED, NOT_REGISTERED oder DEREGISTERED (abgemeldet). Ohne Angabe gilt „unbekannt“, nicht „nein“.
REGISTERED NOT_REGISTERED DEREGISTERED
distanceZahlStrecke in Kilometern, falls bekannt (auch als Text).
endCustomerEmail
auch end_customer_email
E-MailE-Mail des Endkunden. Er erhält den Link zur Sendungsverfolgung und die Statusmeldungen; ein Konto wird nicht angelegt.

Auswahlfelder nehmen jede Schreibweise an (car wird CAR); ein unbekannter Wert ist ein Fehler, der die erlaubten Werte nennt. Feldnamen werden auch in snake_case angenommen (external_order_id, end_customer_email).

json
{
  "externalOrderId": "SAP-4500019283",
  "pickup": "Musterstraße 12, 20095 Hamburg",
  "delivery": "Beispielweg 5, 80331 München",
  "pickupDate": "2026-10-01T08:00:00Z",
  "expectedDeliveryDate": "2026-10-01T18:00:00Z",
  "vehicleType": "CAR",
  "fuelType": "DIESEL",
  "vin": "WVWZZZ1KZAW000001",
  "vehicleMake": "Volkswagen",
  "vehicleModel": "Golf",
  "vehicleYear": 2021,
  "pickupContactName": "Autohaus Beispiel, Frau Muster",
  "pickupContactPhone": "+49 40 123456",
  "deliveryContactName": "Fuhrpark Beispiel, Herr Beispiel",
  "deliveryContactPhone": "+49 89 654321",
  "notes": "Schlüssel liegt beim Empfang.",
  "endCustomerEmail": "empfaenger@example.com"
}

Antwort (201 Created):

json
{
  "art": "ORDER",
  "wiederholung": false,
  "orderId": "8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f",
  "orderNumber": "26K7F070042E",
  "status": "OPEN",
  "externalOrderId": "SAP-4500019283",
  "verworfeneFelder": []
}

#Auftrag oder Anfrage

  • art: "ORDER" — der Auftrag ist angelegt und wird zum vereinbarten Preis durchgeführt.
  • art: "REQUEST" — dieser Fall braucht ein Angebot. Erst nach der Annahme entsteht der Auftrag, und Ihr System bekommt order.created. hinweis sagt in einem Satz, warum.
StandBedeutung
RECEIVEDEingegangen, noch nicht bewertet.
QUOTE_REQUIREDBraucht ein Angebot — Sie erhalten es per E-Mail.
QUOTE_SENTDas Angebot ist bei Ihnen.
QUOTE_ACCEPTEDAngebot angenommen; der Auftrag entsteht.
CONVERTEDDer Auftrag ist angelegt. Die Auskunft antwortet ab jetzt mit dem Auftrag.
REJECTEDAbgelehnt — von Ihnen oder von uns.

#Was verworfen wird

Anders als die API v1 lehnt die bisherige Schnittstelle unbekannte Felder nicht ab: sie übernimmt sie nicht. Preisfelder werden verworfen und in verworfeneFelder benannt, hinweis sagt es in Worten.

basePrice price priceNet priceGross priceVatRate manualPrice priceAdjustmentPercent discount status tenantId customerId driverId executingTenantId awardType orderSource priceSnapshot payoutNet payoutGross

#Wiederholungen

Wiedererkannt wird ein Aufruf über die externalOrderId, sonst über den Idempotency-Key — unter Aufträgen und Anfragen. Eine Wiederholung ergibt keinen zweiten Vorgang, sondern die Antwort des ersten mit wiederholung: true und HTTP 200. Geprüft wird die Kennung, nicht der Inhalt: ein zweiter Aufruf mit geänderten Feldern ändert den Auftrag nicht.

#Stand

GET /extern/transportauftraege/{kennung} nimmt jede Nummer, unter der Sie den Vorgang kennen: unsere Auftrags- oder Anfragenummer, die interne Kennung oder Ihre externalOrderId. Die Antwort nennt den internen Status:

StatusKurzBedeutungEigenes Ereignis
OPENOffenAngelegt, noch nicht vergeben.
POOLEDEingestelltIm Pool, wartet auf ein ausführendes Unternehmen.
TENANT_ACCEPTEDÜbernommenEin ausführendes Unternehmen hat den Auftrag übernommen.
OFFEREDAusgeschriebenDie Fahrt wird Fahrern angeboten.
ASSIGNEDFahrer zugewiesenEin Fahrer ist eingeplant.
ACCEPTEDAngenommenDer Fahrer hat die Fahrt angenommen.
PICKUPAbholungDer Fahrer ist auf dem Weg zum Abholort oder dort.
IN_TRANSITUnterwegsDas Fahrzeug ist abgeholt; das Abholprotokoll liegt vor.
DELIVERYAm ZielDer Fahrer ist am Zielort, die Übergabe läuft.
DELIVEREDAbgeliefertDas Fahrzeug ist übergeben; das Übergabeprotokoll liegt vor.order.delivered
COMPLETEDAbgeschlossenDer Auftrag ist erledigt.order.completed
INVOICEDAbgerechnetDie Rechnung ist erstellt.
CANCELLEDStorniertDer Auftrag wurde storniert.order.cancelled
COMPLAINTReklamationNach der Zustellung wurde ein Schaden gemeldet.
DRAFTEntwurfNoch nicht freigegeben. Über die API angelegte Aufträge sind nie Entwurf.
REQUESTEDAngefragtZur Disposition freigegeben.
CONFIRMEDBestätigtPreis und Termin sind bestätigt.

Webhook-Endpunkte, die vor dem 23.09.2026 angelegt wurden, bekommen jeden Wechsel dieses Status als order.status_changed (bisheriges Format).

#Fehler

Fehlerantworten haben hier die Form { "error", "message", "details"?, "requestId" }:

json
{
  "error": "INVALID_INPUT",
  "message": "Die Auftragsdaten sind unvollständig.",
  "details": {
    "fehler": [
      { "feld": "delivery", "grund": "Der Zustellort fehlt." },
      { "feld": "vehicleType", "grund": "Unbekannter Wert. Erlaubt: CAR, COMBI, SUV, VAN, TRUCK_7_5, TRUCK_12, TRUCK_40." }
    ]
  },
  "requestId": "…"
}
HTTPerrorBedeutungWas tun
400INVALID_INPUTEin Pflichtfeld fehlt oder ein Wert ist falsch. details.fehler nennt Feld und Grund.Eingabe korrigieren. Unverändert wiederholt, bleibt es ein Fehler.
400invalid_jsonDer Rumpf ist kein gültiges JSON.Gültiges JSON mit Content-Type: application/json senden.
400INVALID_SCENARIONur Sandbox: unbekannter Wert in X-Sandbox-Scenario.Einen Wert aus der Tabelle der Szenarien verwenden.
401MISSING_API_KEYKein Schlüssel in der Anfrage.Authorization: Bearer lc_… oder X-API-Key: lc_… mitschicken.
401INVALID_API_KEYDer Schlüssel ist unbekannt, widerrufen, abgelaufen oder gesperrt — oder er gehört zu einem OAuth-Client, der nur am Token-Endpunkt gilt.Im Portal einen neuen Schlüssel anlegen und den alten ersetzen.
401NO_TENANTDer Schlüssel gehört zu keinem Mandanten.Uns kontaktieren — das ist ein Fehler in der Einrichtung.
403ACCESS_DENIEDDas Konto ist gesperrt oder kein Auftraggeber-Konto.Uns kontaktieren.
403INSUFFICIENT_SCOPEDem Schlüssel fehlt das Recht für diesen Aufruf: orders:write zum Einstellen und Steuern, orders:read zum Abfragen.Im Portal dem Zugang das Recht geben oder einen Zugang mit diesem Recht verwenden.
403SANDBOX_ONLYDieser Endpunkt steht nur mit einem Testschlüssel zur Verfügung.Einen Schlüssel lc_test_… verwenden.
404NOT_FOUNDZu dieser Kennung ist nichts hinterlegt.Kennung prüfen. Sandbox und Echtbetrieb sind getrennt: ein Testvorgang ist mit einem Live-Schlüssel nicht zu finden.
409NO_CONTRACTING_PARTYFür Ihren Mandanten ist kein Auftraggeber (kaufmännischer Ansprechpartner) hinterlegt.Im Portal einen kaufmännischen Ansprechpartner hinterlegen oder uns kontaktieren.
409SANDBOX_FINISHEDNur Sandbox: der Vorgang hat sein Szenario schon durchlaufen.Einen neuen Testvorgang anlegen.
429RATE_LIMITEDZu viele Anfragen mit diesem Zugang — oder zu viele abgewiesene Anmeldungen von Ihrer Adresse.Nach Retry-After Sekunden wiederholen.
429SANDBOX_LIMITNur Sandbox: das Tageslimit an Testvorgängen ist erreicht.Am nächsten Tag weiter testen oder uns um ein höheres Limit bitten.
500INTERNALUnerwarteter Fehler auf unserer Seite.Später wiederholen — mit derselben externalOrderId oder demselben Idempotency-Key, dann entsteht nichts doppelt. Die requestId hilft uns beim Suchen.
503NUMBER_COLLISIONBei der Vergabe der Nummer kam ein gleichzeitiger Aufruf dazwischen.Unverändert erneut senden.