# POST /api/v1/tasks/:id/reply

Auth: Bearer

HTML: https://cooperemail.com/docs/reference/task-reply

## Summary

Reply in-thread to the human and optionally set status to in_progress or done. The recipient is checked against send allow and block lists. HTTP 403 recipient_blocked sends nothing. PATCH /api/v1/tasks/:id {status} updates status without sending. Idempotency-Key works the same way as on send (example: Idempotency-Key: task-reply-001). The first response is {task, message} with HTTP 201. A replay returns the stored message with HTTP 200, idempotent true, and Idempotent-Replayed: true.

## Request

```json
{
  "text": "Using USD.",
  "status": "done"
}
```

## Response

The OpenAPI document does not declare a JSON response schema for this call. The summary is the contract.

## Errors

- HTTP 403 recipient_blocked

The live `message` is the sentence for that code. Branch on `code`.

```json
{
  "error": {
    "type": "authentication_error",
    "code": "recipient_blocked",
    "docs_url": "https://cooperemail.com/docs#recipient_blocked"
  }
}
```

## Idempotency

Idempotency-Key is 1 to 256 characters of letters, digits, and - . _ ~. The same key and the same request within 24 hours returns the original response with HTTP 200 and Idempotent-Replayed: true. A different request is HTTP 409 idempotency_key_conflict. A second call while the first is running is HTTP 409 idempotency_request_in_progress. An empty or invalid key is HTTP 400 invalid_idempotency_key. client_id is checked first when both are set.
