# POST /api/v1/event-consumers/:id/commit

Auth: Bearer

HTML: https://cooperemail.com/docs/reference/event-consumer-commit

## Summary

Advance the committed cursor. cursor is the evc1 commit_cursor from the poll. An older cursor is a no-op and the response keeps the current cursor. One conditional update compares created_at and id, so two workers cannot move it backwards. HTTP 400 invalid_cursor. HTTP 404 consumer_not_found. Requires message_read. Delivery is at-least-once until this commit, so dedupe by event id when a side effect can run twice.

## Request

```json
{
  "cursor": "evc1.…"
}
```

## Response

HTTP 200. Sample values illustrate the schema.

```json
{
  "object": "event_consumer",
  "id": "inb_example",
  "client_id": "inb_example",
  "cursor": "string",
  "created_at": "2026-10-18T12:00:00.000Z",
  "updated_at": "2026-10-18T12:00:00.000Z"
}
```

## Errors

- HTTP 400 invalid_cursor
- HTTP 404 consumer_not_found

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

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

## Idempotency

This route does not document Idempotency-Key or client_id.
