---
title: "Answer a blocked run"
method: POST
path: "/migrations/{migration_id}/runs/{run_id}/messages"
tags: ["Runs"]
---

# Answer a blocked run

`POST /migrations/{migration_id}/runs/{run_id}/messages`

## Request

- Base URL: `https://app.vern.so/api/v1`
- URL: `https://app.vern.so/api/v1/migrations/{migration_id}/runs/{run_id}/messages`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/vern-so/apis/vern-api/docs/migrations/:migration_id/runs/:run_id/messages/post.ts> (a function with typed inputs; its response is checked against the schema)

Resume a run paused at `blocked` with `blocked_reason: "question"`. Send `answers` as the structured `[{id,value}]` form (one per question) or a free-form string. Only a question-blocked run accepts this (409 otherwise) — a credentials-blocked run is rejected so secrets never enter the agent thread; submit those to `POST .../credentials` instead.

## Request body

- object
  - `answers` union, required: Structured answers (one {id,value} per question) or a free-form string.
    - object[]
      - `id` string
      - `value` string
    - string

## Response `200`

The run resumed and is running again.

- object
  - `run_id` string, uuid
  - `status` string

## Other responses

- `400`: Malformed request.
- `401`: API key missing, malformed, or revoked.
- `404`: The referenced resource isn't in your account.
- `409`: The run has no pending question, it is blocked for credentials (use `POST .../credentials`), there's no active question to answer yet (retry shortly), or the migration is archived (`code: migration_archived`).
- `429`: Rate limit hit. Counted per account (company), not per API key or IP. Each endpoint is in one class: reads 30/minute, writes 30/minute, jobs (starting an export) 15/hour, agent (starting a run, answering, submitting credentials) 30/hour. Creating a migration and starting a `generate` run also have their own 30/hour caps. A separate per-IP ceiling absorbs floods before authentication. `Retry-After` gives the seconds until the window resets, alongside `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`.
- `500`: Unexpected server error.
- `503`: The reply could not be saved or delivered to the waiting run, so it is still blocked. A transient failure — retry the same request.

## Changes

- **2026-11-08** `0ae6ef5f1887`: 7 info
  - added the non-success response with the status `500`
  - added the non-success response with the status `503`
  - added the optional property `code` to the response with the `400` status
  - added the optional property `code` to the response with the `401` status
  - …3 more
- **2026-06-18** `c5a09eb23a64`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/vern-so/apis/vern-api/changes/migrations/:migration_id/runs/:run_id/messages/post.md)

---

[API](https://skmtc.dev/vern-so/apis/vern-api.md) - [All operations](https://skmtc.dev/vern-so/apis/vern-api/llms.txt) - [OpenAPI document](https://skmtc.dev/vern-so/apis/vern-api/revisions/0ae6ef5f1887?raw)
