#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
| Methode | Pfad | Zweck | Umgebung |
|---|---|---|---|
| POST | /extern/transportauftraege | Transportauftrag einstellen | beide |
| GET | /extern/transportauftraege/{kennung} | Stand eines Auftrags oder einer Anfrage | beide |
| GET | /extern/sandbox/transportauftraege | Die letzten Testvorgänge mit Verlauf | nur Sandbox |
| POST | /extern/sandbox/transportauftraege/{kennung}/weiter | Nächsten Schritt des Szenarios jetzt ausführen | nur Sandbox |
| POST | /extern/sandbox/transportauftraege/{kennung}/abschliessen | Alle verbleibenden Schritte ausführen | nur 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
POST /api/v1/extern/transportauftraege
Authorization: Bearer lc_live_…
Content-Type: application/jsonPflicht sind nur Abhol- und Zielort, jeweils als eine Zeile.
| Feld | Typ | Pflicht | Bedeutung |
|---|---|---|---|
externalOrderIdauch external_order_id | Text | — | Ihre eigene Auftragsnummer (bis 200 Zeichen). Je Mandant eindeutig: derselbe Aufruf ein zweites Mal ergibt keinen zweiten Auftrag, sondern die Antwort des ersten. |
pickup | Text | ja | Abholadresse in einer Zeile: Straße, Hausnummer, Postleitzahl, Ort. |
delivery | Text | ja | Zieladresse in einer Zeile. |
pickupZip | Text | — | Postleitzahl des Abholorts. Wird angenommen, aber nicht getrennt ausgewertet — die Postleitzahl gehört in pickup. |
deliveryZip | Text | — | Postleitzahl des Zielorts. Wie pickupZip. |
pickupDate | Zeitpunkt | — | Gewünschter Abholzeitpunkt, ISO 8601. |
expectedDeliveryDate | Zeitpunkt | — | Gewünschter Liefertermin, ISO 8601. |
vehicleType | Auswahl | — | Fahrzeugklasse. Ohne Angabe gilt CAR.CAR COMBI SUV VAN TRUCK_7_5 TRUCK_12 TRUCK_40 |
fuelType | Auswahl | — | Antrieb. Ohne Angabe gilt DIESEL.DIESEL PETROL ELECTRIC HYBRID HYDROGEN LPG LNG |
vin | Text | — | Fahrgestellnummer. |
vehicleMake | Text | — | Hersteller. |
vehicleModel | Text | — | Modell. |
vehicleYear | Ganzzahl | — | Baujahr (ganze Zahl, auch als Text). |
licensePlate | Text | — | Kennzeichen, falls das Fahrzeug zugelassen ist. |
pickupContactName | Text | — | Ansprechpartner am Abholort. |
pickupContactPhone | Text | — | Telefon am Abholort. |
deliveryContactName | Text | — | Ansprechpartner am Zielort. |
deliveryContactPhone | Text | — | Telefon am Zielort. |
notes | Text | — | Hinweis für Disposition und Fahrer, bis 500 Zeichen. |
registrationService | Auswahl | — | Zulassungsleistung: FULL_REGISTRATION = LOGICAR lässt das Fahrzeug zu.NONE FULL_REGISTRATION |
transportMode | Auswahl | — | Transportart: 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 |
roadMovementMethod | Auswahl | — | Fahrberechtigung: 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 |
registrationStatus | Auswahl | — | Zulassungsstand: REGISTERED, NOT_REGISTERED oder DEREGISTERED (abgemeldet). Ohne Angabe gilt „unbekannt“, nicht „nein“.REGISTERED NOT_REGISTERED DEREGISTERED |
distance | Zahl | — | Strecke in Kilometern, falls bekannt (auch als Text). |
endCustomerEmailauch end_customer_email | — | E-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).
{
"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):
{
"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 bekommtorder.created.hinweissagt in einem Satz, warum.
| Stand | Bedeutung |
|---|---|
RECEIVED | Eingegangen, noch nicht bewertet. |
QUOTE_REQUIRED | Braucht ein Angebot — Sie erhalten es per E-Mail. |
QUOTE_SENT | Das Angebot ist bei Ihnen. |
QUOTE_ACCEPTED | Angebot angenommen; der Auftrag entsteht. |
CONVERTED | Der Auftrag ist angelegt. Die Auskunft antwortet ab jetzt mit dem Auftrag. |
REJECTED | Abgelehnt — 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:
| Status | Kurz | Bedeutung | Eigenes Ereignis |
|---|---|---|---|
OPEN | Offen | Angelegt, noch nicht vergeben. | — |
POOLED | Eingestellt | Im Pool, wartet auf ein ausführendes Unternehmen. | — |
TENANT_ACCEPTED | Übernommen | Ein ausführendes Unternehmen hat den Auftrag übernommen. | — |
OFFERED | Ausgeschrieben | Die Fahrt wird Fahrern angeboten. | — |
ASSIGNED | Fahrer zugewiesen | Ein Fahrer ist eingeplant. | — |
ACCEPTED | Angenommen | Der Fahrer hat die Fahrt angenommen. | — |
PICKUP | Abholung | Der Fahrer ist auf dem Weg zum Abholort oder dort. | — |
IN_TRANSIT | Unterwegs | Das Fahrzeug ist abgeholt; das Abholprotokoll liegt vor. | — |
DELIVERY | Am Ziel | Der Fahrer ist am Zielort, die Übergabe läuft. | — |
DELIVERED | Abgeliefert | Das Fahrzeug ist übergeben; das Übergabeprotokoll liegt vor. | order.delivered |
COMPLETED | Abgeschlossen | Der Auftrag ist erledigt. | order.completed |
INVOICED | Abgerechnet | Die Rechnung ist erstellt. | — |
CANCELLED | Storniert | Der Auftrag wurde storniert. | order.cancelled |
COMPLAINT | Reklamation | Nach der Zustellung wurde ein Schaden gemeldet. | — |
DRAFT | Entwurf | Noch nicht freigegeben. Über die API angelegte Aufträge sind nie Entwurf. | — |
REQUESTED | Angefragt | Zur Disposition freigegeben. | — |
CONFIRMED | Bestätigt | Preis 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" }:
{
"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": "…"
}| HTTP | error | Bedeutung | Was tun |
|---|---|---|---|
| 400 | INVALID_INPUT | Ein Pflichtfeld fehlt oder ein Wert ist falsch. details.fehler nennt Feld und Grund. | Eingabe korrigieren. Unverändert wiederholt, bleibt es ein Fehler. |
| 400 | invalid_json | Der Rumpf ist kein gültiges JSON. | Gültiges JSON mit Content-Type: application/json senden. |
| 400 | INVALID_SCENARIO | Nur Sandbox: unbekannter Wert in X-Sandbox-Scenario. | Einen Wert aus der Tabelle der Szenarien verwenden. |
| 401 | MISSING_API_KEY | Kein Schlüssel in der Anfrage. | Authorization: Bearer lc_… oder X-API-Key: lc_… mitschicken. |
| 401 | INVALID_API_KEY | Der 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. |
| 401 | NO_TENANT | Der Schlüssel gehört zu keinem Mandanten. | Uns kontaktieren — das ist ein Fehler in der Einrichtung. |
| 403 | ACCESS_DENIED | Das Konto ist gesperrt oder kein Auftraggeber-Konto. | Uns kontaktieren. |
| 403 | INSUFFICIENT_SCOPE | Dem 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. |
| 403 | SANDBOX_ONLY | Dieser Endpunkt steht nur mit einem Testschlüssel zur Verfügung. | Einen Schlüssel lc_test_… verwenden. |
| 404 | NOT_FOUND | Zu dieser Kennung ist nichts hinterlegt. | Kennung prüfen. Sandbox und Echtbetrieb sind getrennt: ein Testvorgang ist mit einem Live-Schlüssel nicht zu finden. |
| 409 | NO_CONTRACTING_PARTY | Für Ihren Mandanten ist kein Auftraggeber (kaufmännischer Ansprechpartner) hinterlegt. | Im Portal einen kaufmännischen Ansprechpartner hinterlegen oder uns kontaktieren. |
| 409 | SANDBOX_FINISHED | Nur Sandbox: der Vorgang hat sein Szenario schon durchlaufen. | Einen neuen Testvorgang anlegen. |
| 429 | RATE_LIMITED | Zu viele Anfragen mit diesem Zugang — oder zu viele abgewiesene Anmeldungen von Ihrer Adresse. | Nach Retry-After Sekunden wiederholen. |
| 429 | SANDBOX_LIMIT | Nur Sandbox: das Tageslimit an Testvorgängen ist erreicht. | Am nächsten Tag weiter testen oder uns um ein höheres Limit bitten. |
| 500 | INTERNAL | Unerwarteter Fehler auf unserer Seite. | Später wiederholen — mit derselben externalOrderId oder demselben Idempotency-Key, dann entsteht nichts doppelt. Die requestId hilft uns beim Suchen. |
| 503 | NUMBER_COLLISION | Bei der Vergabe der Nummer kam ein gleichzeitiger Aufruf dazwischen. | Unverändert erneut senden. |