Skip to content

Jobs

Suivi des operations asynchrones. Chaque POST (dossiers, factures, conventions, certificats, documents) retourne un jobId permettant de suivre l'avancement.

GET /:opcoId/jobs/:jobId

Recupere le statut et le resultat d'un job asynchrone.

Auth : X-API-KEY obligatoire. Le job n'est visible que par le tenant qui l'a cree.

Parametres de chemin

ParametreTypeDescription
opcoIdstringIdentifiant de l'OPCO
jobIdstringUUID du job (retourne par le POST initial)

Statuts possibles

StatutDescription
pendingJob en file d'attente
processingJob en cours de traitement
completedJob termine avec succes
failedJob echoue

Reponse 200 -- Job simple (en attente)

json
{
  "jobId": "550e8400-e29b-41d4-a716-446655440000",
  "opcoId": "opco-ep",
  "type": "post-dossier",
  "status": "pending",
  "retries": 0,
  "createdAt": "2024-06-01T10:00:00.000Z",
  "startedAt": null,
  "completedAt": null
}

Reponse 200 -- Job simple (termine)

json
{
  "jobId": "550e8400-e29b-41d4-a716-446655440000",
  "opcoId": "opco-ep",
  "type": "post-dossier",
  "status": "completed",
  "result": {
    "status": "success",
    "numeroInterne": "INT-12345",
    "comment": "Dossier transmis"
  },
  "retries": 0,
  "createdAt": "2024-06-01T10:00:00.000Z",
  "startedAt": "2024-06-01T10:00:05.000Z",
  "completedAt": "2024-06-01T10:00:12.000Z"
}

Reponse 200 -- Job simple (echoue)

json
{
  "jobId": "550e8400-e29b-41d4-a716-446655440000",
  "opcoId": "opco-ep",
  "type": "post-dossier",
  "status": "failed",
  "error": {
    "message": "OPCO returned 400",
    "code": "UPSTREAM_ERROR",
    "upstream": { "errors": ["SIRET invalide"] }
  },
  "retries": 3,
  "createdAt": "2024-06-01T10:00:00.000Z",
  "startedAt": "2024-06-01T10:00:05.000Z",
  "completedAt": "2024-06-01T10:01:30.000Z"
}

Reponse 200 -- Job composite (multi-etapes)

Certains jobs (ex: dossier + convention) sont composites et comportent plusieurs etapes.

json
{
  "jobId": "550e8400-e29b-41d4-a716-446655440000",
  "opcoId": "opco-ep",
  "type": "post-dossier",
  "status": "processing",
  "currentStep": 2,
  "totalSteps": 3,
  "steps": [
    { "step": 1, "name": "dossier", "status": "completed", "result": { ... } },
    { "step": 2, "name": "convention", "status": "processing" },
    { "step": 3, "name": "document", "status": "pending" }
  ],
  "retries": 0,
  "createdAt": "2024-06-01T10:00:00.000Z",
  "startedAt": "2024-06-01T10:00:05.000Z",
  "completedAt": null
}

Reponse 200 -- Job composite (echoue a une etape)

json
{
  "jobId": "550e8400-e29b-41d4-a716-446655440000",
  "opcoId": "opco-ep",
  "type": "post-dossier",
  "status": "failed",
  "currentStep": 2,
  "totalSteps": 3,
  "steps": [
    { "step": 1, "name": "dossier", "status": "completed", "result": { ... } },
    { "step": 2, "name": "convention", "status": "failed" }
  ],
  "error": {
    "message": "OPCO returned 400",
    "code": "UPSTREAM_ERROR",
    "step": 2
  },
  "retries": 2,
  "createdAt": "2024-06-01T10:00:00.000Z",
  "startedAt": "2024-06-01T10:00:05.000Z",
  "completedAt": "2024-06-01T10:01:00.000Z"
}

Erreurs

Code HTTPCode erreurDescription
403HTTP_ERRORX-API-KEY manquant
404NOT_FOUNDJob introuvable (mauvais jobId ou tenant)

Exemple curl

bash
curl -H "X-API-KEY: votre-cle" \
  "https://api.opcovia.com/opco-ep/jobs/550e8400-e29b-41d4-a716-446655440000"

Cycle de vie d'un job

Strategie de polling

Nous recommandons un polling progressif :

  1. Premiere requete apres 2 secondes
  2. Puis toutes les 5 secondes pendant 1 minute
  3. Puis toutes les 30 secondes

Alternativement, utilisez les webhooks pour etre notifie automatiquement (job.completed, job.failed).