# GET /api/v1/event-consumers/:id/events

Auth: Bearer

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

## Summary

Events strictly after the committed cursor, oldest first, in the same shape as GET /api/v1/events. Does not advance the cursor. limit is 1–100 (default 50). wait is 0–25 seconds, the same cap as GET /api/v1/events. There is no separate requests-per-minute cap. The response is {object:"list", data, commit_cursor, has_more, events_may_have_expired, consumer}. events_may_have_expired is true when the committed cursor is older than the 7-day window. HTTP 400 invalid_limit or invalid_wait. HTTP 404 consumer_not_found. Requires message_read.

## Query

```json
?limit=50&wait=20
```

## Response

HTTP 200. Sample values illustrate the schema.

```json
{
  "object": "list",
  "data": [
    {
      "id": "inb_example",
      "type": "string",
      "created_at": "2026-10-18T12:00:00.000Z",
      "data": {}
    }
  ],
  "commit_cursor": "string",
  "has_more": true,
  "events_may_have_expired": true,
  "consumer": {
    "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_limit
- HTTP 404 consumer_not_found

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

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

## Idempotency

This route does not document Idempotency-Key or client_id.
