---
title: "ackOutboundMessages"
method: POST
path: "/v1/integrations/{integrationId}/outbound/messages/ack"
tags: ["integrations"]
---

# ackOutboundMessages

`POST /v1/integrations/{integrationId}/outbound/messages/ack`

Acknowledge polled outbound messages. Acks are validated against the
active lease and committed as a prefix-contiguous cursor advance:
messages must be acknowledged in stream order. Out-of-order acks past
the first gap are rejected per id (`out_of_order`), acks with an
outdated lease token are rejected (`stale_lease`), and unknown ids are
rejected (`not_found`). Acknowledged messages are never delivered
again. Requires the `integration:consume` grant.

## Path parameters

- `integrationId` string, uuid, required

## Request body

- AckOutboundMessagesRequest
  - `acks` object[], required
    - `id` string, required — The message id (msg_…) to acknowledge
    - `lease_token` string, required — The lease token (lt_…) returned by the poll that leased this message

## Response `200`

Per-id acknowledgement results

- AckOutboundMessagesResponse
  - `results` AckResult[], required — Per-id acknowledgement outcome
    - `id` string, required — The acknowledged message id
    - `status` 'accepted' | 'rejected', required
    - `reason` 'stale_lease' | 'out_of_order' | 'not_found' — Rejection reason — present only when status is rejected

## Other responses

- `400` — Bad request
- `401` — Unauthorized request
- `403` — Forbidden - insufficient permissions
- `404` — Resource not found
- `500` — Internal Server Error

---

[API](https://skmtc.net/epilot/apis/integration-toolkit-api.md) · [All operations](https://skmtc.net/epilot/apis/integration-toolkit-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/epilot/integration-toolkit-api/revisions/a567add0c3f5/schema)
