curl --request POST \
--url https://sandbox.myexpressdriver.com/v1/pricing \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"pickup": "<string>",
"delivery": "<string>",
"vehicle": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": false
},
"car": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": false
},
"plateau": true,
"options": [
"<string>"
],
"return_trip": true,
"billing": {}
}
'import requests
url = "https://sandbox.myexpressdriver.com/v1/pricing"
payload = {
"pickup": "<string>",
"delivery": "<string>",
"vehicle": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": False
},
"car": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": False
},
"plateau": True,
"options": ["<string>"],
"return_trip": True,
"billing": {}
}
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({
pickup: '<string>',
delivery: '<string>',
vehicle: {
type: '<string>',
registration: '<string>',
vin: '<string>',
brand: '<string>',
model: '<string>',
electric: false
},
car: {
type: '<string>',
registration: '<string>',
vin: '<string>',
brand: '<string>',
model: '<string>',
electric: false
},
plateau: true,
options: ['<string>'],
return_trip: true,
billing: {}
})
};
fetch('https://sandbox.myexpressdriver.com/v1/pricing', 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/pricing",
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([
'pickup' => '<string>',
'delivery' => '<string>',
'vehicle' => [
'type' => '<string>',
'registration' => '<string>',
'vin' => '<string>',
'brand' => '<string>',
'model' => '<string>',
'electric' => false
],
'car' => [
'type' => '<string>',
'registration' => '<string>',
'vin' => '<string>',
'brand' => '<string>',
'model' => '<string>',
'electric' => false
],
'plateau' => true,
'options' => [
'<string>'
],
'return_trip' => true,
'billing' => [
]
]),
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/pricing"
payload := strings.NewReader("{\n \"pickup\": \"<string>\",\n \"delivery\": \"<string>\",\n \"vehicle\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"car\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"plateau\": true,\n \"options\": [\n \"<string>\"\n ],\n \"return_trip\": true,\n \"billing\": {}\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/pricing")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"pickup\": \"<string>\",\n \"delivery\": \"<string>\",\n \"vehicle\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"car\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"plateau\": true,\n \"options\": [\n \"<string>\"\n ],\n \"return_trip\": true,\n \"billing\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.myexpressdriver.com/v1/pricing")
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 \"pickup\": \"<string>\",\n \"delivery\": \"<string>\",\n \"vehicle\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"car\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"plateau\": true,\n \"options\": [\n \"<string>\"\n ],\n \"return_trip\": true,\n \"billing\": {}\n}"
response = http.request(request)
puts response.read_bodyEstimer un prix
Calcule un tarif (grille du groupe) sans créer de mission.
curl --request POST \
--url https://sandbox.myexpressdriver.com/v1/pricing \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"pickup": "<string>",
"delivery": "<string>",
"vehicle": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": false
},
"car": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": false
},
"plateau": true,
"options": [
"<string>"
],
"return_trip": true,
"billing": {}
}
'import requests
url = "https://sandbox.myexpressdriver.com/v1/pricing"
payload = {
"pickup": "<string>",
"delivery": "<string>",
"vehicle": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": False
},
"car": {
"type": "<string>",
"registration": "<string>",
"vin": "<string>",
"brand": "<string>",
"model": "<string>",
"electric": False
},
"plateau": True,
"options": ["<string>"],
"return_trip": True,
"billing": {}
}
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({
pickup: '<string>',
delivery: '<string>',
vehicle: {
type: '<string>',
registration: '<string>',
vin: '<string>',
brand: '<string>',
model: '<string>',
electric: false
},
car: {
type: '<string>',
registration: '<string>',
vin: '<string>',
brand: '<string>',
model: '<string>',
electric: false
},
plateau: true,
options: ['<string>'],
return_trip: true,
billing: {}
})
};
fetch('https://sandbox.myexpressdriver.com/v1/pricing', 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/pricing",
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([
'pickup' => '<string>',
'delivery' => '<string>',
'vehicle' => [
'type' => '<string>',
'registration' => '<string>',
'vin' => '<string>',
'brand' => '<string>',
'model' => '<string>',
'electric' => false
],
'car' => [
'type' => '<string>',
'registration' => '<string>',
'vin' => '<string>',
'brand' => '<string>',
'model' => '<string>',
'electric' => false
],
'plateau' => true,
'options' => [
'<string>'
],
'return_trip' => true,
'billing' => [
]
]),
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/pricing"
payload := strings.NewReader("{\n \"pickup\": \"<string>\",\n \"delivery\": \"<string>\",\n \"vehicle\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"car\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"plateau\": true,\n \"options\": [\n \"<string>\"\n ],\n \"return_trip\": true,\n \"billing\": {}\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/pricing")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"pickup\": \"<string>\",\n \"delivery\": \"<string>\",\n \"vehicle\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"car\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"plateau\": true,\n \"options\": [\n \"<string>\"\n ],\n \"return_trip\": true,\n \"billing\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.myexpressdriver.com/v1/pricing")
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 \"pickup\": \"<string>\",\n \"delivery\": \"<string>\",\n \"vehicle\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"car\": {\n \"type\": \"<string>\",\n \"registration\": \"<string>\",\n \"vin\": \"<string>\",\n \"brand\": \"<string>\",\n \"model\": \"<string>\",\n \"electric\": false\n },\n \"plateau\": true,\n \"options\": [\n \"<string>\"\n ],\n \"return_trip\": true,\n \"billing\": {}\n}"
response = http.request(request)
puts response.read_bodyAutorisations
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 d'estimation tarifaire.
Point d'enlèvement. Une chaîne (adresse) suffit pour estimer, ou un objet pour plus de détails.
Point de livraison (même format que pickup).
Caractéristiques du véhicule (alias car).
Show child attributes
Show child attributes
Alias de vehicle.
Show child attributes
Show child attributes
Transport sur plateau.
Trajet retour (alias returnTrip). 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. Le départ du retour est toujours la livraison de l'aller (B).
Informations de facturation simplifiées (optionnel pour l'estimation).
Réponse
Estimation tarifaire.
Résultat de l'estimation tarifaire (prix CLIENT uniquement).
Prix HT CLIENT pour le véhicule demandé — gabarit effectivement retenu (déduit de l'immatriculation : VP/VU/VUL), options, plaque W, suppléments et plateau inclus si demandés. C'est le tarif de référence à facturer. Il peut donc différer de tariffs.vp (voir tariffs).
Devise (toujours EUR).
Distance routière estimée, en kilomètres.
Adresse d'enlèvement RÉSOLUE (géocodée) — confirmez le match.
Show child attributes
Show child attributes
Adresse de livraison RÉSOLUE (géocodée).
Show child attributes
Show child attributes
Détail du trajet retour si demandé, sinon null.
Show child attributes
Show child attributes
Supplément de localisation HT (transport international, desserte de la Corse) déjà inclus dans price_ht ; 0 sinon.
Tarifs TRANSPORT par gabarit VP/VU/VUL (options/suppléments/plateau EXCLUS), pour comparer les gabarits. Indépendant de price_ht (qui, lui, inclut le gabarit demandé + options + suppléments).
Show child attributes
Show child attributes
