---
title: "POST /public/v1/approvals/responses/{messageId}/approve"
method: POST
path: "/public/v1/approvals/responses/{messageId}/approve"
tags: ["Inbox"]
---

# POST /public/v1/approvals/responses/{messageId}/approve

`POST /public/v1/approvals/responses/{messageId}/approve`

## Request

- Base URL: `https://api.joinvalley.co`
- URL: `https://api.joinvalley.co/public/v1/approvals/responses/{messageId}/approve`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/joinvalley/apis/valley-public-api/docs/public/v1/approvals/responses/:messageId/approve/post.ts> (a function with typed inputs; its response is checked against the schema)

Approve an AI-drafted response and send it to the prospect. Unlike outreach approval there is no scheduler in between: the reply goes out during this request and the draft moves straight to SENT. Pass an edited `message` to send different copy than the draft; the stored draft is updated to what was actually sent. A draft that was already sent returns 400. An id that no longer exists returns 404, which includes a draft the server discarded before this request arrived. A draft that was still pending when this request claimed it, but whose conversation moved on before it could send, is discarded here and returns 409, as does losing a race to another approval of the same draft. So 404 means the draft is gone, 409 means it was gone out from under you. and a draft that cannot be sent as written (blocked content, exhausted LinkedIn InMail credits) returns 422.

## Path parameters

- `messageId` string, required

## Request body

- object
  - `message` string: Optional edited body to send instead of the draft. Validated against the same per-type character limits as PATCH /approvals/messages/{id}.

## Response `200`

Default Response

- object
  - `statusCode` number
  - `status` boolean
  - `message` string
  - `data` object
    - `messageId` string
    - `messageType` string
    - `campaignId` string
    - `prospectId` string
    - `conversationId` string, nullable
    - `status` string

## Other responses

- `400`: Default Response
- `401`: Default Response
- `403`: Default Response
- `404`: Default Response
- `409`: Default Response
- `422`: Default Response
- `429`: Default Response
- `500`: Default Response

## Changes

- **2026-09-11** `ccd54424eeb2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/joinvalley/apis/valley-public-api/changes/public/v1/approvals/responses/:messageId/approve/post.md)

---

[API](https://skmtc.dev/joinvalley/apis/valley-public-api.md) - [All operations](https://skmtc.dev/joinvalley/apis/valley-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/joinvalley/apis/valley-public-api/revisions/798c2eb1b512?raw)
