# GET /v1/events/{event_id}

> One event.

In [Webhooks and events API](https://vestra.ai/developers/reference/api/webhooks-and-events.md): Where events go, how each delivery went, and the record of every event.

Send `Authorization: Bearer vk_test_...` on every call.

One event.

Your API key, scope `runtime` or `all`. On the card: [`events`](https://vestra.ai/developers/events.md). Over HTTP it is made from the contract: fill in each {…} and every value.

## Request

Path:

- `event_id` (`string`, required): The event's id (`evt_...`).

## Answers 200

- `id` (`string`): The event (evt_...): the same on every retry, so use it to skip one you already took. Example: `evt_4hq`.
- `object` (`"event"`): Always event.
- `type` (`string`): An event a webhook carries: every event of the catalog but the six that ride only the stream (message.delta, task.progress, usage.updated, screen.control, error and ping). Limits: one of 28 values. Example: `task.completed`.
- `mode` (`"live" | "test"`): The mode it happened in: test or live.
- `created_at` (`string`): When it happened, as an ISO 8601 time.
- `user_id` (`string | null`): Your id for the user it concerns; null for your company's own Bash, or when it concerns no user.
- `task_id` (`string | null`): The task it concerns (task_...); null when none.
- `conversation_id` (`string | null`): The conversation it concerns (conv_...); null when none.
- `data` (`map of any`): What it says: its fields depend on its type, as the events reference lists them.

## Code

**HTTP**

```bash
curl "$VESTRA_BASE_URL/v1/events/{event_id}" \
  -H "Authorization: Bearer $VESTRA_API_KEY"
```

**TypeScript, Python, CLI, MCP**: No sample in your language for this route, so here it is over HTTP.
