> ## Documentation Index
> Fetch the complete documentation index at: https://upstash-fix-issues-on-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# List Events

> List all events that happened, such as message creation or delivery

## Request

<ParamField query="cursor" type="string">
  By providing a cursor you can paginate through all of the events.
</ParamField>

## Response

<ResponseField>
  <ResponseField name="cursor" type="string">
    A cursor which you can use in subsequent requests to paginate through all events.
    If no cursor is returned, you have reached the end of the events.
  </ResponseField>

  <ResponseField name="events" type="Array">
    <Expandable defaultOpen>
      <ResponseField name="time" type="int" required>
        Timestamp of this log entry, in milliseconds
      </ResponseField>

      <ResponseField name="messageId" type="string" required>
        The associated message id
      </ResponseField>

      <ResponseField name="state" type="string" required>
        The current state of the message at this point in time.

        | Value       | Description                                                                              |
        | ----------- | ---------------------------------------------------------------------------------------- |
        | `CREATED`   | The message has been accepted and stored in QStash                                       |
        | `RETRY`     | The task has been scheduled to retry.                                                    |
        | `ACTIVE`    | The task is currently being processed by a worker.                                       |
        | `ERROR`     | The execution threw an error and the task is waiting to be retried or failed.            |
        | `DELIVERED` | The message was successfully delivered.                                                  |
        | `FAILED`    | The task has errored too many times or encountered an error that it cannot recover from. |
      </ResponseField>

      <ResponseField name="error" type="string" optional>
        An explanation what went wrong
      </ResponseField>

      <ResponseField name="nextDeliveryTime" type="int">
        The next scheduled time of the message.
        (Unix timestamp in milliseconds)
      </ResponseField>

      <ResponseField name="url" type="string">
        The destination url
      </ResponseField>

      <ResponseField name="topicName" type="string">
        The name of the topic if this message was sent through a topic
      </ResponseField>

      <ResponseField name="endpointName" type="int">
        The name of the endpoint if this message was sent through a topic
      </ResponseField>

      <ResponseField name="scheduleId" type="string">
        The scheduleId of the message if the message is triggered by a schedule
      </ResponseField>
    </Expandable>
  </ResponseField>
</ResponseField>

<RequestExample>
  ```sh curl
  curl https://qstash.upstash.io/v2/events \
    -H "Authorization: Bearer <token>"
  ```

  ```javascript Node
  const response = await fetch("https://qstash.upstash.io/v2/events", {
    headers: {
      Authorization: "Bearer <token>",
    },
  });
  ```

  ```python Python
  import requests
  headers = {
      'Authorization': 'Bearer <token>',
  }

  response = requests.get(
    'https://qstash.upstash.io/v2/events',
     headers=headers
  )
  ```

  ```go Go
  req, err := http.NewRequest("GET", "https://qstash.upstash.io/v2/events", nil)
  if err != nil {
    log.Fatal(err)
  }
  req.Header.Set("Authorization", "Bearer <token>")
  resp, err := http.DefaultClient.Do(req)
  if err != nil {
    log.Fatal(err)
  }
  defer resp.Body.Close()
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK
  {
    "cursor": "1686652644442-12",
    "events":[
      {
        "time": "1686652644442",
        "messageId": "msg_123",
        "state": "delivered",
        "url": "https://example.com",
      }
    ] 
  }
  ```
</ResponseExample>
