---
title: "Distribuer une Mission à un runner local pairé"
method: POST
path: "/api/v1/missions/{id}/runner-dispatch"
tags: ["AI Workforce", "Runner local"]
---

# Distribuer une Mission à un runner local pairé

`POST /api/v1/missions/{id}/runner-dispatch`

## Request

- Base URL: `https://arcadeops.leadalpes.fr`
- URL: `https://arcadeops.leadalpes.fr/api/v1/missions/{id}/runner-dispatch`
- Auth: HTTP bearer

Fige le Delivery Contract et crée atomiquement l'AgentRun, le lease et la commande runner. Une session utilisateur ou un Bearer ArcadeOps avec le droit RUN_INGEST est requis.

## Path parameters

- `id` string, required

## Headers

- `Idempotency-Key` string, required

## Request body

- RunnerDispatchRequest
  - `runnerId` string, required
  - `provider` 'codex' | 'claude', required
  - `model` string, nullable
  - `contract` object, required
    - `schemaVersion` 'arcade.delivery-contract.v0', required
    - `subject` object, required
      - `organizationId` string, required
      - `projectId` string, required
      - `missionId` string, required
      - `repository` string
      - `repositoryPath` string, required
      - `baseSha` string, required
    - `objective` object, required
      - `outcome` string, required
      - `nonGoals` string[]
    - `scope` object, required
      - `allowedPaths` string[], required
      - `forbiddenPaths` string[]
    - `acceptance` object, required
      - `requiredCommands` object[], required
        - `id` string, required
        - `command` string, required
        - `args` string[]
        - `timeoutSeconds` integer
        - `executionRoot` 'TRUSTED_BASE'
    - `authority` object, required
      - `mode` 'BUILD', required
      - `network` 'deny', required
      - `gitPush` 'deny', required
      - `deployment` 'deny', required
    - `limits` object, required
      - `durationMinutes` integer, required
      - `retries` integer
      - `humanInterruptions` integer
    - `verification` object, required
      - `cleanCheckoutRequired` true, required
      - `policyId` string, required
      - `policyVersion` string, required
      - `receiptTtlHours` integer

## Response `201`

Mission distribuée et commande runner créée

- RunnerDispatchResponse
  - `runId` string, required
  - `commandId` string, required
  - `leaseVersion` integer, required
  - `expiresAt` string, date-time, required
  - `contractHash` string, required

## Other responses

- `400`: Delivery Contract, Mission ou Idempotency-Key invalide
- `401`: Session utilisateur ou Bearer ArcadeOps requis
- `403`: Droits RUN_INGEST insuffisants
- `404`: Mission ou runner actif introuvable
- `409`: Mission, lease ou clé d'idempotence en conflit
- `413`: Corps de requête trop volumineux
- `429`: Limite de requêtes atteinte
- `503`: Racine de certificats runner indisponible

---

[API](https://skmtc.dev/leadalpes/apis/arcadeops-api.md) · [All operations](https://skmtc.dev/leadalpes/apis/arcadeops-api/llms.txt) · [OpenAPI document](https://skmtc.dev/leadalpes/apis/arcadeops-api/revisions/f10422ec7412?raw)
