---
title: "Start a mission: the entry point for handing an existing plan or build off to the AI agent team"
method: POST
path: "/missions/{issueId}/start"
tags: ["missions"]
---

# Start a mission: the entry point for handing an existing plan or build off to the AI agent team

`POST /missions/{issueId}/start`

## Request

- Base URL: `https://api.letsship.ai/v1`
- URL: `https://api.letsship.ai/v1/missions/{issueId}/start`
- Auth: none declared

Hand a mission off to the AI agent team. Omit startAt for the default full run (planner first); pass startAt=builder with a plan to skip straight to coding; pass startAt=reviewer or startAt=qa with an existing prNumber to hand off an existing build. Starts the mission by exactly the same route every other trigger uses, so the entry record you pass here is what decides where the run begins.

## Path parameters

- `issueId` string, required

## Headers

- `idempotency-key` string: Retrying a request with the same key charges it once and starts (or delivers) it once. Use a new key for new work.

## Request body

- StartMissionRequest
  - `projectId` string, required
  - `startAt` 'builder' | 'reviewer' | 'qa', nullable
  - `plan` string
  - `prNumber` integer
  - `filePlan` MissionEntryFilePlanEntry[]: Builder entry only. Files the supplied plan expects to touch.
    - `path` string, required
    - `action` 'create' | 'modify' | 'delete', required
    - `description` string
  - `acceptanceCriteria` string[]: Builder entry only. Criteria supplied with the plan; they win over the ones scraped from the issue body.
  - `agents` object: Per-role harness/model override for THIS mission, identical in shape and precedence to PUT /missions/{issueId}/agents-override. Written before the run is triggered, so it is in place when the first stage dispatches.
    - `planner` AgentsOverrideRoleEntry
      - `harness` 'claude-code' | 'codex' | 'pi' | 'kilo-code' | 'open-code'
      - `model` string
      - `provider` string
      - `effort` string
      - `providerRouting` object
        - `order` string[]
        - `only` string[]
        - `ignore` string[]
        - `allowFallbacks` boolean
        - `requireParameters` boolean
        - `quantizations` string[]
        - `sort` string
        - `dataCollection` 'allow' | 'deny'
      - `checkpoint` boolean
      - `rejectOn` 'critical' | 'suggestion' | 'trivial'
      - `prompt` union
        - string
        - AgentsOverrideInlinePrompt
          - `content` string, required
          - `mode` 'replace' | 'extend'
        - AgentsOverridePathPrompt
          - `path` string, required
          - `ref` string
          - `mode` 'replace' | 'extend'
      - `sandbox` string
      - `size` union
        - 'standard-1' | 'standard-2' | 'standard-3' | 'standard-4'
        - object
          - `vcpu` integer, required
          - `memoryMib` integer, required
          - `diskMb` integer, required
      - `mcp` union[]: Optional narrowing of the role's MCP servers/tools for this mission; can only remove access.
        - union
          - string
          - object
            - `server` string, required
            - `tools` string[]
    - `builder` AgentsOverrideRoleEntry
      - `harness` 'claude-code' | 'codex' | 'pi' | 'kilo-code' | 'open-code'
      - `model` string
      - `provider` string
      - `effort` string
      - `providerRouting` object
        - `order` string[]
        - `only` string[]
        - `ignore` string[]
        - `allowFallbacks` boolean
        - `requireParameters` boolean
        - `quantizations` string[]
        - `sort` string
        - `dataCollection` 'allow' | 'deny'
      - `checkpoint` boolean
      - `rejectOn` 'critical' | 'suggestion' | 'trivial'
      - `prompt` union
        - string
        - AgentsOverrideInlinePrompt
          - `content` string, required
          - `mode` 'replace' | 'extend'
        - AgentsOverridePathPrompt
          - `path` string, required
          - `ref` string
          - `mode` 'replace' | 'extend'
      - `sandbox` string
      - `size` union
        - 'standard-1' | 'standard-2' | 'standard-3' | 'standard-4'
        - object
          - `vcpu` integer, required
          - `memoryMib` integer, required
          - `diskMb` integer, required
      - `mcp` union[]: Optional narrowing of the role's MCP servers/tools for this mission; can only remove access.
        - union
          - string
          - object
            - `server` string, required
            - `tools` string[]
    - `reviewer` AgentsOverrideRoleEntry
      - `harness` 'claude-code' | 'codex' | 'pi' | 'kilo-code' | 'open-code'
      - `model` string
      - `provider` string
      - `effort` string
      - `providerRouting` object
        - `order` string[]
        - `only` string[]
        - `ignore` string[]
        - `allowFallbacks` boolean
        - `requireParameters` boolean
        - `quantizations` string[]
        - `sort` string
        - `dataCollection` 'allow' | 'deny'
      - `checkpoint` boolean
      - `rejectOn` 'critical' | 'suggestion' | 'trivial'
      - `prompt` union
        - string
        - AgentsOverrideInlinePrompt
          - `content` string, required
          - `mode` 'replace' | 'extend'
        - AgentsOverridePathPrompt
          - `path` string, required
          - `ref` string
          - `mode` 'replace' | 'extend'
      - `sandbox` string
      - `size` union
        - 'standard-1' | 'standard-2' | 'standard-3' | 'standard-4'
        - object
          - `vcpu` integer, required
          - `memoryMib` integer, required
          - `diskMb` integer, required
      - `mcp` union[]: Optional narrowing of the role's MCP servers/tools for this mission; can only remove access.
        - union
          - string
          - object
            - `server` string, required
            - `tools` string[]
    - `qa` AgentsOverrideRoleEntry
      - `harness` 'claude-code' | 'codex' | 'pi' | 'kilo-code' | 'open-code'
      - `model` string
      - `provider` string
      - `effort` string
      - `providerRouting` object
        - `order` string[]
        - `only` string[]
        - `ignore` string[]
        - `allowFallbacks` boolean
        - `requireParameters` boolean
        - `quantizations` string[]
        - `sort` string
        - `dataCollection` 'allow' | 'deny'
      - `checkpoint` boolean
      - `rejectOn` 'critical' | 'suggestion' | 'trivial'
      - `prompt` union
        - string
        - AgentsOverrideInlinePrompt
          - `content` string, required
          - `mode` 'replace' | 'extend'
        - AgentsOverridePathPrompt
          - `path` string, required
          - `ref` string
          - `mode` 'replace' | 'extend'
      - `sandbox` string
      - `size` union
        - 'standard-1' | 'standard-2' | 'standard-3' | 'standard-4'
        - object
          - `vcpu` integer, required
          - `memoryMib` integer, required
          - `diskMb` integer, required
      - `mcp` union[]: Optional narrowing of the role's MCP servers/tools for this mission; can only remove access.
        - union
          - string
          - object
            - `server` string, required
            - `tools` string[]

## Response `200`

Started

- StartMissionResponse
  - `ok` boolean, required
  - `issueId` string, required

## Other responses

- `402`: The org has no credits for this (code credits_exhausted)
- `403`: Forbidden
- `404`: Project not accessible
- `422`: startAt=reviewer|qa requires prNumber
- `429`: The org reached its daily mission limit (code daily_limit_reached)

---

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