curl --request POST \
--url https://sandbox.myexpressdriver.com/v1/transports \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"type": "livraison",
"vehicle": {
"registration": "AB-123-CD",
"brand": "Renault",
"model": "Clio"
},
"pickup": {
"address": "10 Rue de Rivoli, 75004 Paris",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "08:00",
"end_time": "12:00",
"contact": {
"name": "Jean Dupont",
"phone": "+33600000000",
"mail": "jean.dupont@garage-demo.fr"
}
},
"delivery": {
"address": "1 Place Bellecour, 69002 Lyon",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "14:00",
"end_time": "18:00",
"contact": {
"name": "Marie Martin",
"phone": "+33611111111",
"mail": "marie.martin@concession-lyon.fr"
}
},
"billing": {
"company_name": "Garage Demo SARL",
"address": "5 Avenue des Champs, 75008 Paris",
"email": "compta@garage-demo.fr",
"siret": "12345678901234"
},
"options": []
}
'import requests
url = "https://sandbox.myexpressdriver.com/v1/transports"
payload = {
"type": "livraison",
"vehicle": {
"registration": "AB-123-CD",
"brand": "Renault",
"model": "Clio"
},
"pickup": {
"address": "10 Rue de Rivoli, 75004 Paris",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "08:00",
"end_time": "12:00",
"contact": {
"name": "Jean Dupont",
"phone": "+33600000000",
"mail": "jean.dupont@garage-demo.fr"
}
},
"delivery": {
"address": "1 Place Bellecour, 69002 Lyon",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "14:00",
"end_time": "18:00",
"contact": {
"name": "Marie Martin",
"phone": "+33611111111",
"mail": "marie.martin@concession-lyon.fr"
}
},
"billing": {
"company_name": "Garage Demo SARL",
"address": "5 Avenue des Champs, 75008 Paris",
"email": "compta@garage-demo.fr",
"siret": "12345678901234"
},
"options": []
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'livraison',
vehicle: {registration: 'AB-123-CD', brand: 'Renault', model: 'Clio'},
pickup: {
address: '10 Rue de Rivoli, 75004 Paris',
date: '2026-11-03T00:00:00.000Z',
start_time: '08:00',
end_time: '12:00',
contact: {name: 'Jean Dupont', phone: '+33600000000', mail: 'jean.dupont@garage-demo.fr'}
},
delivery: {
address: '1 Place Bellecour, 69002 Lyon',
date: '2026-11-03T00:00:00.000Z',
start_time: '14:00',
end_time: '18:00',
contact: {
name: 'Marie Martin',
phone: '+33611111111',
mail: 'marie.martin@concession-lyon.fr'
}
},
billing: {
company_name: 'Garage Demo SARL',
address: '5 Avenue des Champs, 75008 Paris',
email: 'compta@garage-demo.fr',
siret: '12345678901234'
},
options: []
})
};
fetch('https://sandbox.myexpressdriver.com/v1/transports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.myexpressdriver.com/v1/transports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'livraison',
'vehicle' => [
'registration' => 'AB-123-CD',
'brand' => 'Renault',
'model' => 'Clio'
],
'pickup' => [
'address' => '10 Rue de Rivoli, 75004 Paris',
'date' => '2026-11-03T00:00:00.000Z',
'start_time' => '08:00',
'end_time' => '12:00',
'contact' => [
'name' => 'Jean Dupont',
'phone' => '+33600000000',
'mail' => 'jean.dupont@garage-demo.fr'
]
],
'delivery' => [
'address' => '1 Place Bellecour, 69002 Lyon',
'date' => '2026-11-03T00:00:00.000Z',
'start_time' => '14:00',
'end_time' => '18:00',
'contact' => [
'name' => 'Marie Martin',
'phone' => '+33611111111',
'mail' => 'marie.martin@concession-lyon.fr'
]
],
'billing' => [
'company_name' => 'Garage Demo SARL',
'address' => '5 Avenue des Champs, 75008 Paris',
'email' => 'compta@garage-demo.fr',
'siret' => '12345678901234'
],
'options' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.myexpressdriver.com/v1/transports"
payload := strings.NewReader("{\n \"type\": \"livraison\",\n \"vehicle\": {\n \"registration\": \"AB-123-CD\",\n \"brand\": \"Renault\",\n \"model\": \"Clio\"\n },\n \"pickup\": {\n \"address\": \"10 Rue de Rivoli, 75004 Paris\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"08:00\",\n \"end_time\": \"12:00\",\n \"contact\": {\n \"name\": \"Jean Dupont\",\n \"phone\": \"+33600000000\",\n \"mail\": \"jean.dupont@garage-demo.fr\"\n }\n },\n \"delivery\": {\n \"address\": \"1 Place Bellecour, 69002 Lyon\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"14:00\",\n \"end_time\": \"18:00\",\n \"contact\": {\n \"name\": \"Marie Martin\",\n \"phone\": \"+33611111111\",\n \"mail\": \"marie.martin@concession-lyon.fr\"\n }\n },\n \"billing\": {\n \"company_name\": \"Garage Demo SARL\",\n \"address\": \"5 Avenue des Champs, 75008 Paris\",\n \"email\": \"compta@garage-demo.fr\",\n \"siret\": \"12345678901234\"\n },\n \"options\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.myexpressdriver.com/v1/transports")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"livraison\",\n \"vehicle\": {\n \"registration\": \"AB-123-CD\",\n \"brand\": \"Renault\",\n \"model\": \"Clio\"\n },\n \"pickup\": {\n \"address\": \"10 Rue de Rivoli, 75004 Paris\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"08:00\",\n \"end_time\": \"12:00\",\n \"contact\": {\n \"name\": \"Jean Dupont\",\n \"phone\": \"+33600000000\",\n \"mail\": \"jean.dupont@garage-demo.fr\"\n }\n },\n \"delivery\": {\n \"address\": \"1 Place Bellecour, 69002 Lyon\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"14:00\",\n \"end_time\": \"18:00\",\n \"contact\": {\n \"name\": \"Marie Martin\",\n \"phone\": \"+33611111111\",\n \"mail\": \"marie.martin@concession-lyon.fr\"\n }\n },\n \"billing\": {\n \"company_name\": \"Garage Demo SARL\",\n \"address\": \"5 Avenue des Champs, 75008 Paris\",\n \"email\": \"compta@garage-demo.fr\",\n \"siret\": \"12345678901234\"\n },\n \"options\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.myexpressdriver.com/v1/transports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"livraison\",\n \"vehicle\": {\n \"registration\": \"AB-123-CD\",\n \"brand\": \"Renault\",\n \"model\": \"Clio\"\n },\n \"pickup\": {\n \"address\": \"10 Rue de Rivoli, 75004 Paris\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"08:00\",\n \"end_time\": \"12:00\",\n \"contact\": {\n \"name\": \"Jean Dupont\",\n \"phone\": \"+33600000000\",\n \"mail\": \"jean.dupont@garage-demo.fr\"\n }\n },\n \"delivery\": {\n \"address\": \"1 Place Bellecour, 69002 Lyon\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"14:00\",\n \"end_time\": \"18:00\",\n \"contact\": {\n \"name\": \"Marie Martin\",\n \"phone\": \"+33611111111\",\n \"mail\": \"marie.martin@concession-lyon.fr\"\n }\n },\n \"billing\": {\n \"company_name\": \"Garage Demo SARL\",\n \"address\": \"5 Avenue des Champs, 75008 Paris\",\n \"email\": \"compta@garage-demo.fr\",\n \"siret\": \"12345678901234\"\n },\n \"options\": []\n}"
response = http.request(request)
puts response.read_body{
"id": "-O9xAbCdEf",
"transport_id": null,
"status": "scheduled",
"price": "407.44",
"billing": {
"entity_id": "7b1e2c34-5d6f-4a1b-9c8d-0e1f2a3b4c5d",
"return_entity_id": null
},
"pickup": {
"address": "10 Rue de Rivoli, 75004 Paris, France",
"lat": 48.8557,
"lng": 2.3589,
"place_id": "ChIJ7Qq9bF9u5kcRYJSMaMOCCwQ"
},
"delivery": {
"address": "Place Bellecour, 69002 Lyon, France",
"lat": 45.7578,
"lng": 4.832,
"place_id": "ChIJ65aN5w7q9EcR_HhwT2N0gJg"
},
"return_trip": null
}Créer une mission
Crée une mission de transport, immédiatement visible des équipes MED et
proposée aux convoyeurs. Émet l’événement transport.created.
La réponse 201 porte le prix HT de l’aller sous forme de chaîne
décimale (price, ex. "407.44") et transport_id: null : la référence
métier (M-xxxxx) est attribuée juste après la création. Lisez-la, ainsi que
le prix détaillé (price { amount_ht, surcharge_ht, currency }), via
GET /transports/{id}.
Posez toujours un Idempotency-Key. Après un 502 relay_timeout ou
une erreur réseau, la mission a pu être créée : réessayez avec la même clé et
le même corps pour récupérer la mission existante au lieu d’en créer une
seconde.
curl --request POST \
--url https://sandbox.myexpressdriver.com/v1/transports \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"type": "livraison",
"vehicle": {
"registration": "AB-123-CD",
"brand": "Renault",
"model": "Clio"
},
"pickup": {
"address": "10 Rue de Rivoli, 75004 Paris",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "08:00",
"end_time": "12:00",
"contact": {
"name": "Jean Dupont",
"phone": "+33600000000",
"mail": "jean.dupont@garage-demo.fr"
}
},
"delivery": {
"address": "1 Place Bellecour, 69002 Lyon",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "14:00",
"end_time": "18:00",
"contact": {
"name": "Marie Martin",
"phone": "+33611111111",
"mail": "marie.martin@concession-lyon.fr"
}
},
"billing": {
"company_name": "Garage Demo SARL",
"address": "5 Avenue des Champs, 75008 Paris",
"email": "compta@garage-demo.fr",
"siret": "12345678901234"
},
"options": []
}
'import requests
url = "https://sandbox.myexpressdriver.com/v1/transports"
payload = {
"type": "livraison",
"vehicle": {
"registration": "AB-123-CD",
"brand": "Renault",
"model": "Clio"
},
"pickup": {
"address": "10 Rue de Rivoli, 75004 Paris",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "08:00",
"end_time": "12:00",
"contact": {
"name": "Jean Dupont",
"phone": "+33600000000",
"mail": "jean.dupont@garage-demo.fr"
}
},
"delivery": {
"address": "1 Place Bellecour, 69002 Lyon",
"date": "2026-11-03T00:00:00.000Z",
"start_time": "14:00",
"end_time": "18:00",
"contact": {
"name": "Marie Martin",
"phone": "+33611111111",
"mail": "marie.martin@concession-lyon.fr"
}
},
"billing": {
"company_name": "Garage Demo SARL",
"address": "5 Avenue des Champs, 75008 Paris",
"email": "compta@garage-demo.fr",
"siret": "12345678901234"
},
"options": []
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'livraison',
vehicle: {registration: 'AB-123-CD', brand: 'Renault', model: 'Clio'},
pickup: {
address: '10 Rue de Rivoli, 75004 Paris',
date: '2026-11-03T00:00:00.000Z',
start_time: '08:00',
end_time: '12:00',
contact: {name: 'Jean Dupont', phone: '+33600000000', mail: 'jean.dupont@garage-demo.fr'}
},
delivery: {
address: '1 Place Bellecour, 69002 Lyon',
date: '2026-11-03T00:00:00.000Z',
start_time: '14:00',
end_time: '18:00',
contact: {
name: 'Marie Martin',
phone: '+33611111111',
mail: 'marie.martin@concession-lyon.fr'
}
},
billing: {
company_name: 'Garage Demo SARL',
address: '5 Avenue des Champs, 75008 Paris',
email: 'compta@garage-demo.fr',
siret: '12345678901234'
},
options: []
})
};
fetch('https://sandbox.myexpressdriver.com/v1/transports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.myexpressdriver.com/v1/transports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'livraison',
'vehicle' => [
'registration' => 'AB-123-CD',
'brand' => 'Renault',
'model' => 'Clio'
],
'pickup' => [
'address' => '10 Rue de Rivoli, 75004 Paris',
'date' => '2026-11-03T00:00:00.000Z',
'start_time' => '08:00',
'end_time' => '12:00',
'contact' => [
'name' => 'Jean Dupont',
'phone' => '+33600000000',
'mail' => 'jean.dupont@garage-demo.fr'
]
],
'delivery' => [
'address' => '1 Place Bellecour, 69002 Lyon',
'date' => '2026-11-03T00:00:00.000Z',
'start_time' => '14:00',
'end_time' => '18:00',
'contact' => [
'name' => 'Marie Martin',
'phone' => '+33611111111',
'mail' => 'marie.martin@concession-lyon.fr'
]
],
'billing' => [
'company_name' => 'Garage Demo SARL',
'address' => '5 Avenue des Champs, 75008 Paris',
'email' => 'compta@garage-demo.fr',
'siret' => '12345678901234'
],
'options' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.myexpressdriver.com/v1/transports"
payload := strings.NewReader("{\n \"type\": \"livraison\",\n \"vehicle\": {\n \"registration\": \"AB-123-CD\",\n \"brand\": \"Renault\",\n \"model\": \"Clio\"\n },\n \"pickup\": {\n \"address\": \"10 Rue de Rivoli, 75004 Paris\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"08:00\",\n \"end_time\": \"12:00\",\n \"contact\": {\n \"name\": \"Jean Dupont\",\n \"phone\": \"+33600000000\",\n \"mail\": \"jean.dupont@garage-demo.fr\"\n }\n },\n \"delivery\": {\n \"address\": \"1 Place Bellecour, 69002 Lyon\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"14:00\",\n \"end_time\": \"18:00\",\n \"contact\": {\n \"name\": \"Marie Martin\",\n \"phone\": \"+33611111111\",\n \"mail\": \"marie.martin@concession-lyon.fr\"\n }\n },\n \"billing\": {\n \"company_name\": \"Garage Demo SARL\",\n \"address\": \"5 Avenue des Champs, 75008 Paris\",\n \"email\": \"compta@garage-demo.fr\",\n \"siret\": \"12345678901234\"\n },\n \"options\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.myexpressdriver.com/v1/transports")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"livraison\",\n \"vehicle\": {\n \"registration\": \"AB-123-CD\",\n \"brand\": \"Renault\",\n \"model\": \"Clio\"\n },\n \"pickup\": {\n \"address\": \"10 Rue de Rivoli, 75004 Paris\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"08:00\",\n \"end_time\": \"12:00\",\n \"contact\": {\n \"name\": \"Jean Dupont\",\n \"phone\": \"+33600000000\",\n \"mail\": \"jean.dupont@garage-demo.fr\"\n }\n },\n \"delivery\": {\n \"address\": \"1 Place Bellecour, 69002 Lyon\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"14:00\",\n \"end_time\": \"18:00\",\n \"contact\": {\n \"name\": \"Marie Martin\",\n \"phone\": \"+33611111111\",\n \"mail\": \"marie.martin@concession-lyon.fr\"\n }\n },\n \"billing\": {\n \"company_name\": \"Garage Demo SARL\",\n \"address\": \"5 Avenue des Champs, 75008 Paris\",\n \"email\": \"compta@garage-demo.fr\",\n \"siret\": \"12345678901234\"\n },\n \"options\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.myexpressdriver.com/v1/transports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"livraison\",\n \"vehicle\": {\n \"registration\": \"AB-123-CD\",\n \"brand\": \"Renault\",\n \"model\": \"Clio\"\n },\n \"pickup\": {\n \"address\": \"10 Rue de Rivoli, 75004 Paris\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"08:00\",\n \"end_time\": \"12:00\",\n \"contact\": {\n \"name\": \"Jean Dupont\",\n \"phone\": \"+33600000000\",\n \"mail\": \"jean.dupont@garage-demo.fr\"\n }\n },\n \"delivery\": {\n \"address\": \"1 Place Bellecour, 69002 Lyon\",\n \"date\": \"2026-11-03T00:00:00.000Z\",\n \"start_time\": \"14:00\",\n \"end_time\": \"18:00\",\n \"contact\": {\n \"name\": \"Marie Martin\",\n \"phone\": \"+33611111111\",\n \"mail\": \"marie.martin@concession-lyon.fr\"\n }\n },\n \"billing\": {\n \"company_name\": \"Garage Demo SARL\",\n \"address\": \"5 Avenue des Champs, 75008 Paris\",\n \"email\": \"compta@garage-demo.fr\",\n \"siret\": \"12345678901234\"\n },\n \"options\": []\n}"
response = http.request(request)
puts response.read_body{
"id": "-O9xAbCdEf",
"transport_id": null,
"status": "scheduled",
"price": "407.44",
"billing": {
"entity_id": "7b1e2c34-5d6f-4a1b-9c8d-0e1f2a3b4c5d",
"return_entity_id": null
},
"pickup": {
"address": "10 Rue de Rivoli, 75004 Paris, France",
"lat": 48.8557,
"lng": 2.3589,
"place_id": "ChIJ7Qq9bF9u5kcRYJSMaMOCCwQ"
},
"delivery": {
"address": "Place Bellecour, 69002 Lyon, France",
"lat": 45.7578,
"lng": 4.832,
"place_id": "ChIJ65aN5w7q9EcR_HhwT2N0gJg"
},
"return_trip": null
}Autorisations
Clé API liée à un groupe (med_live_… en production, med_test_… en test).
Fournie en clair une seule fois à la création depuis le profil client.
En-têtes
Clé d'idempotence fournie par le client (un UUID v4 par opération), conservée
24 h. Recommandée sur toutes les créations. Rejouer la même clé avec un
corps identique sur la même route renvoie la réponse en cache
(Idempotent-Replayed: true). L'empreinte couvre la méthode, le chemin
(donc la mission visée) et le corps : la même clé pour une autre requête
renvoie 409 idempotency_key_reused. Requête identique encore en
traitement : 409 request_in_progress avec Retry-After.
Les réponses 5xx, 404 et 422 documents_failed ne sont pas mémorisées :
un nouvel essai avec la même clé et le même corps est retraité.
Après un 502 (code: relay_timeout), une erreur réseau ou un 5xx,
réessayez avec la même clé et le même corps : la requête est
relancée, et une mission créée malgré l'erreur vous est renvoyée (201,
Idempotent-Replayed: true) au lieu d'être créée une seconde fois.
Exception : si la réponse porte outcome_unknown: true, ne réessayez pas,
vérifiez d'abord (GET /transports). Seuls la création de mission et le
dépôt de documents sont dédoublonnés ainsi ; sans clé, un nouvel essai peut
créer un doublon.
"1f3c2b7a-9d4e-4a1b-8c2f-0e6d5a4b3c2d"
Corps
Requête de création d'une mission. Requis : le véhicule (vehicle ou son alias car) avec son immatriculation (registration) ; pickup et delivery, chacun avec address, date (ISO 8601 UTC avec millisecondes), contact (name, phone, mail) et le créneau start_time / end_time sauf need_appointment: true ; billing avec company_name, address et email.
Point d'enlèvement — objet requis avec address, date, contact (name, phone, mail) et le créneau start_time / end_time (sauf need_appointment: true). L'adresse RÉSOLUE est renvoyée dans la réponse.
Show child attributes
Show child attributes
Point de livraison — mêmes exigences que pickup.
Show child attributes
Show child attributes
Facturation. company_name, address et email sont toujours
requis, même quand vous désignez l'entité par entity_id. S'il en
manque un, la création est refusée en 422 et errors[] nomme chaque
champ manquant (billing.company_name, billing.address,
billing.email — ce dernier doit aussi être une adresse e-mail valide).
L'entité de facturation MED est résolue côté serveur et
posée sur la mission, dans cet ordre : entity_id explicite → siret
(parmi vos entités) → email (présent dans les e-mails d'une de vos
entités) → entité par défaut du donneur d'ordre. Si rien ne correspond,
la création est refusée : 422 avec code: billing_entity_required.
Une entity_id inconnue, archivée ou n'appartenant pas à votre compte /
groupe renvoie 422 avec code: billing_entity_not_allowed.
L'entité retenue est renvoyée dans billing.entity_id de la réponse.
Show child attributes
Show child attributes
Type de transport.
Caractéristiques du véhicule (alias car) — requis, avec registration. electric vaut false par défaut.
Show child attributes
Show child attributes
Alias de vehicle.
Show child attributes
Show child attributes
Carburant remboursé sur l'aller. S'ajoute au réglage de votre compte (un compte déjà en « carburant remboursé » le reste).
Votre référence de commande (bon de commande, dossier…), reprise sur la mission et ses documents.
Trajet retour (optionnel). Le départ du retour est AUTOMATIQUEMENT le lieu de LIVRAISON de l'aller (le convoyeur repart de là où il a livré) : ne renseignez donc QUE la destination du retour, jamais un point de départ. Formes acceptées :
true= A→B→A (retour au point d'enlèvement de l'aller) ; - une chaîne = A→B→C (adresse de destination du retour) ; - un objet = forme complète (CreateReturnTripInput). En forme courte (true/ chaîne), le retour reprend le véhicule de l'aller, la date de livraison de l'aller et le contact de livraison de l'aller (à défaut, celui d'enlèvement), sans créneau : il est créé en attente de rendez-vous. En forme objet,delivery.addressetdelivery.datesont requis (et le créneau, saufneed_appointment: true) ; véhicule et contact omis héritent de l'aller.
Réponse
Mission créée. Un nouvel essai avec le même Idempotency-Key et le même
corps renvoie cette même réponse.
Identifiant de la mission (offer_id). À conserver : il sert à tous les appels suivants.
Référence métier (M-xxxxx). Vaut null dans cette réponse : elle est attribuée juste après la création et se lit ensuite via GET /transports/{id}.
null
"scheduled"
Prix HT facturé pour l'aller, sous forme de chaîne décimale (ex. "407.44", ou "180" sans décimales), majorations comprises. Convertissez-la en nombre côté client. Le prix détaillé (price { amount_ht, surcharge_ht, currency }) et celui du retour (return_trip.price) se lisent via GET /transports/{id}.
"407.44"
Adresse d'enlèvement RÉSOLUE effectivement utilisée pour la mission.
Show child attributes
Show child attributes
Adresse de livraison RÉSOLUE effectivement utilisée pour la mission.
Show child attributes
Show child attributes
Adresses résolues du retour si présent, sinon null.
Show child attributes
Show child attributes
Entité(s) de facturation MED posée(s) sur la mission.
Show child attributes
Show child attributes
