Description

Crée un ordre de transport au statut create. Il devient visible du transporteur une fois validé (voir Valider des OTR).

Clé API expéditeur dans l'en-tête X-API-KEY (ou Authorization: Bearer).

Pour rejouer une requête sans risque de doublon, envoyez un en-tête Idempotency-Key unique : la même clé renvoie la même réponse.

Corps de la requête (JSON)

ChampTypeObligatoireDescription
matchcodestringOui*Code du client destinataire dans votre carnet d'adresses
client_idintOui*Identifiant du client destinataire (alternative au matchcode)
carrier_idintOuiIdentifiant du transporteur : un de vos partenaires, avec un abonnement actif
pickup_datestringOuiDate d'enlèvement (ISO 8601 ou AAAA-MM-JJTHH:MM), aujourd'hui ou plus tard
delivery_datestringOuiDate de livraison prévue, au moins un jour ouvré après l'enlèvement
unitsarrayOuiUnités à transporter (au moins une)
packagingarrayNonEmballages consignés
pickup_namestringNonNom du lieu d'enlèvement (sinon, l'adresse de votre société)
pickup_streetstringNonRue
pickup_zipstringNonCode postal
pickup_citystringNonVille
pickup_countrystringNonPays (code ISO, ex. CH)
pickup_phonestringNonTéléphone
delivery_namestringNonNom du lieu de livraison (sinon, l'adresse du client)
delivery_streetstringNonRue
delivery_zipstringNonCode postal
delivery_citystringNonVille
delivery_countrystringNonPays (code ISO, ex. CH)
delivery_phonestringNonTéléphone
reference1stringNonVotre référence 1
reference2stringNonVotre référence 2
temperature_zonestringNonZone de température
delivery_timestringNonHeure ou créneau (ex. 08:00 - 12:00, 10:00)
delivery_slotstringNonday, morning, afternoon ou fixed
default_instructionsstringNonInstructions habituelles
instructionsstringNonInstructions propres à cet OTR
notesstringNonNotes

* matchcode ou client_id. Les dates tombant un samedi ou un dimanche sont acceptées, avec un avertissement.

Format des unités et des emballages

ChampTypeDescription
units[].type_unitstringType d'unité (ex. palette, colis)
units[].quantityintQuantité (1 par défaut)
units[].descriptionstringDescription
units[].weightnumberPoids unitaire en kg
units[].length / width / heightnumberDimensions en cm
units[].volume_cm3numberVolume en cm³
packaging[].packaging_idintIdentifiant de l'emballage consigné (voir Emballages dans Shippinova)
packaging[].quantityintQuantité

Exemple de requête

curl -X POST "https://shippinova.com/APIs/external/api_create_otr.php" \
  -H "X-API-KEY: votre_cle_api" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: commande-48213" \
  -d '{
    "matchcode": "CLIENT123",
    "carrier_id": 2,
    "pickup_date": "2026-01-22T09:00",
    "delivery_date": "2026-01-23T09:00",
    "units": [ { "type_unit": "palette", "quantity": 2, "description": "Palettes EUR", "weight": 500 } ],
    "packaging": [ { "packaging_id": 1, "quantity": 3 } ],
    "reference1": "REF-OTR-001",
    "delivery_slot": "morning"
  }'

Réponse (succès)

{
  "success": true,
  "otr_id": 123,
  "otr_number": "OTR-20260122-093000-A1B2C3",
  "warnings": [
    "delivery_date is on a weekend (Saturday or Sunday)"
  ]
}

warnings n'est présent que si une date tombe un week-end.

Codes d'erreur

CodeSignification
401Clé API absente
403Clé invalide, ou clé transporteur utilisée sur un endpoint expéditeur
400Champ manquant ou invalide (dates, unités…) : code vaut VALIDATION_ERROR, le détail est dans field_errors
422Transporteur qui n'est pas votre partenaire ou sans abonnement actif (CARRIER_NOT_ALLOWED), client inconnu (CLIENT_NOT_FOUND)
429Trop de requêtes (120 par minute, 20 000 par jour) ; réessayer après le délai Retry-After