> ## Documentation Index
> Fetch the complete documentation index at: https://docs.papslogistics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Créer une mission

> Déclenchez une mission de livraison et suivez son évolution

Ce guide couvre le parcours complet : du calcul du tarif à la création d'une mission, jusqu'au suivi de la commande générée.

```mermaid theme={null}
flowchart TD
    A[Calculer le tarif] --> B[Créer une mission]
    B --> C[Conserver les identifiants retournés]
    C --> D[Consulter la mission ou la commande]
    D --> E[Recevoir les changements de statut par webhook]
    E --> F[Générer le bordereau]
```

## Calculer le tarif

Avant de créer une mission, estimez son coût avec `POST /marketplace`. Voir le guide [Calculer un tarif](/guides/calculate-delivery-rate).

## Créer une mission

**`POST /tasks`**

### Authentification

```http theme={null}
x-api-key: {{PAPS_API_KEY}}
```

### Body

```json theme={null}
{
  "type": "Pickup",
  "vehicleType": "SCOOTER",
  "datePickup": "2026-08-01",
  "timePickup": "11:00",
  "address": "Dakar-Plateau, Dakar, Sénégal",
  "receiver": {
    "firstname": "John",
    "lastname": "Doe",
    "phoneNumber": "+221770000000",
    "email": "john.doe@gmail.com",
    "entreprise": "John Corporation",
    "address": "Dakar-Plateau, Dakar, Sénégal",
    "specificationAddress": "côté brioche"
  },
  "parcels": [
    {
      "packageSize": "XL",
      "description": "iPhone 13 Pro Max",
      "additionalInfo": "Pay attention, it's fragile",
      "Reference": "4759XHG0MKH",
      "price": 10000,
      "amountCollect": 10000
    }
  ]
}
```

### Champs

| Champ         | Type   | Requis | Description                                                 |
| ------------- | ------ | -----: | ----------------------------------------------------------- |
| `type`        | string |    oui | `Pickup`, `Dropoff` ou `FromStock`                          |
| `vehicleType` | string |    oui | `SCOOTER`, `MINI_VAN`, `TRICYCLE`, `VAN` ou `CAMION`        |
| `datePickup`  | string |    non | Date de retrait, requis uniquement pour le type `Pickup`    |
| `timePickup`  | string |    non | Heure de retrait, requis uniquement pour le type `Pickup`   |
| `address`     | string |    non | Adresse de retrait, requis uniquement pour le type `Pickup` |
| `receiver`    | object |    oui | Informations du destinataire                                |
| `parcels`     | array  |    oui | Liste des colis de la mission                               |

### Réponse — `200`

```json theme={null}
{
  "code": 200,
  "message": "Success",
  "error": null,
  "data": {
    "_id": "{{TASK_ID}}",
    "uid": "...",
    "job_type": "Pickup",
    "job_address": {
      "country": "Senegal",
      "countryCode": "SN",
      "city": "Dakar-Plateau",
      "region": "Dakar Region",
      "address": "Dakar-Plateau, Dakar Region, Senegal",
      "additional_address": null,
      "location": { "latitude": 14.6629438, "longitude": -17.4374803 },
      "place_id": "ChIJXRv0vE5ywQ4RpvG-1YKthC0"
    },
    "job_date": "2026-08-01",
    "job_slot_start": "11:00",
    "job_slot_end": "13:00",
    "job_time": "11:00",
    "job_vehicle_type": "SCOOTER"
  }
}
```

## Conserver les identifiants retournés

Sauvegardez le champ `_id` retourné dans `{{TASK_ID}}` : c'est lui qui sert à interroger la mission par la suite. Le champ `uid` est également présent dans la réponse, mais `GET /tasks/fetch/{id}` attend l'identifiant `_id`.

## Consulter la mission ou la commande

* `GET /tasks/fetch/{id}` retourne l'état d'une mission par son identifiant.
* `GET /orders/fetch/{uid}` retourne l'état d'une commande par son UID.

```http theme={null}
GET /tasks/fetch/{{TASK_ID}}
x-api-key: {{PAPS_API_KEY}}
```

## Recevoir les changements de statut par webhook

Configurez un webhook pour être notifié automatiquement des changements de statut, plutôt que d'interroger l'API en continu. Voir le guide [Configurer un webhook](/guides/configure-webhook).

## Générer le bordereau

Une fois la commande confirmée, générez son bordereau de transport. Voir le guide [Générer un bordereau](/guides/generate-waybill).

## Erreurs possibles

Voir [Gestion des erreurs](/errors). Une adresse de retrait manquante pour un type `Pickup`, ou un destinataire incomplet, renvoient typiquement une erreur `400`.

## Notes et règles métier

* `datePickup`, `timePickup` et `address` ne sont requis que pour le type `Pickup`.
* Chaque colis de `parcels` doit inclure un prix (`price`) et un montant à collecter (`amountCollect`), même si ce dernier est à `0`.
