> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wede.pt/llms.txt
> Use this file to discover all available pages before exploring further.

# Get event

> Read one event with its full delivery lifecycle.

```text theme={null}
GET /v1/events/{event_id}
```

## Authentication

API key or session token with the `events:read` permission. API keys have it. An API key reads only events of its own environment. A session reads production events unless it passes `environment=sandbox`.

## Path parameters

**event\_id** `string` *required*

Event ID (UUID) returned when the event was created.

## Query parameters

**environment** `string`

Sessions only: `production` (default) or `sandbox`.

## Example

```bash theme={null}
curl https://api.wede.pt/v1/events/0ee3dfbe-6a0b-4c55-9d0e-2b7f3f1c9a40 \
  -H "x-wede-api-key: wede_live_YOUR_KEY"
```

## Response

`200 OK`

```json theme={null}
{
  "id": "0ee3dfbe-6a0b-4c55-9d0e-2b7f3f1c9a40",
  "tenant_id": "9eb65ffa-3c1d-4d7e-8f02-1a2b3c4d5e6f",
  "zone_id": "c1d2e3f4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
  "zone_code": "zone_lisbon_central",
  "zone_name": "Lisboa Centro",
  "idempotency_key": "incident-2026-09-26-0042",
  "type": "cardiac_arrest",
  "event_type_id": "6f8a0c2e-4b6d-4f1a-8c3e-5a7c9e1b3d5f",
  "requires_teams": true,
  "dispatchable": true,
  "vertical": "healthcare",
  "priority": "critical",
  "status": "completed",
  "channel_used": "sms",
  "environment": "production",
  "payload": {},
  "metadata": { "zone_id": "zone_lisbon_central" },
  "offline_generated_at": null,
  "connectivity_state_at_generation": null,
  "integrity_hash": null,
  "sdk_version": null,
  "operator_id": null,
  "action_id": null,
  "billed_at": null,
  "token_cost": null,
  "created_at": "2026-09-26T09:12:04.512Z",
  "updated_at": "2026-09-26T09:12:07.031Z",
  "lifecycle": [
    { "status": "pending", "channel": null, "note": "Evento aceite", "timestamp": "2026-09-26T09:12:04.512Z" },
    { "status": "completed", "channel": "sms", "note": "tentativas: 1", "timestamp": "2026-09-26T09:12:07.031Z" }
  ]
}
```

**id** `string`

Event ID (UUID). Same value as `event_id` in the other event endpoints.

**tenant\_id** `string`

Your tenant ID.

**zone\_id** `string | null`

Internal ID (UUID) of the event's zone. Use `zone_code` to match your own zone codes.

**zone\_code** `string | null`

Zone code, the value you send as `metadata.zone_id`.

**zone\_name** `string | null`

Zone name.

**idempotency\_key** `string`

The key the event was created with.

**type** `string`

Event type as sent.

**event\_type\_id** `string | null`

ID of the type in your catalog (see [`GET /v1/catalog`](/api-reference/event-types)). `null` for an event sent before 8 October 2026 with a type that is not in your catalog.

**requires\_teams** `boolean`

`true` when the type sends a field team. `dispatchable` carries the same value and is kept for clients of SDK 2.4.1.

**vertical** `string`

Vertical.

**priority** `string`

`low`, `normal`, `high` or `critical`.

**status** `string`

`pending`, `completed` or `failed`. See below.

**channel\_used** `string | null`

Delivery channel. See below.

**environment** `string`

`production` or `sandbox`.

**payload** `object`

Your payload. For a type that does not send a team it is emptied (`{}`) once a channel has confirmed delivery. For a type that sends a team (`requires_teams`) it is kept until the event is closed or its missions end, so the teams have the data they are sent for. A `field_operator` session receives a reduced payload, see below.

**labels** `object`

Labels of the `payload` fields written by your [parser](/api-reference/parsers/list.md), keyed by field name: `{ "incident_type": { "label": "Incident type", "value_label": "Cardiac arrest" } }`. `value_label` is present for enumerated fields and gives the label of the chosen option; the codes in `payload` never change. Absent when the event has no parser, or when no key of the payload is a parser field. The same object comes with the `event.created` [webhook](/api-reference/webhooks/events.md).

**metadata** `object`

The metadata sent with the event, or `{}`.

**payload\_filtered** `boolean`

Only for a `field_operator` session: `true`, the payload and metadata were reduced to what the team may see.

**filter\_reason** `string`

Only for a `field_operator` session: `no_parser` when the event's vertical has no parser, so no field was marked for the team and the payload is withheld.

**offline\_generated\_at** `string | null`

Capture time, for events received through [sync](/api-reference/sync/batch.md).

**connectivity\_state\_at\_generation** `string | null`

Connectivity at capture time, for synced events that sent it.

**integrity\_hash** `string | null`

Integrity checksum, for synced events.

**sdk\_version** `string | null`

Reserved. The `sdk_version` you send is kept in `metadata`.

**operator\_id** `string | null`

Reserved. The `operator_id` you send is kept in `metadata`.

**action\_id** `string | null`

Reserved for dispatch. You can ignore it.

**billed\_at** `string | null`

Reserved for billing. You can ignore it.

**token\_cost** `string | null`

Reserved for billing. You can ignore it.

**created\_at** `string`

When wede received the event.

**updated\_at** `string`

Last change.

**lifecycle** `object[]`

Every step of the event, oldest first.

**properties**

**status** `string`

Status recorded at this step.

**channel** `string | null`

Channel of this step, if any.

**note** `string | null`

Free-text note for people, for example the number of attempts or the last error. Do not parse it. Simulated sandbox steps start with `sandbox:`.

**timestamp** `string`

When the step happened.

wede staff roles never receive `payload`, `metadata` or `type`.

## What a field operator sees

People on the ground are informed within the limits your organisation set. A session with the `field_operator` role receives the event with:

* `payload` reduced to the fields marked **Show to team** in the parser the event was written with (`metadata.parser`), or, for an event sent over the API, in the active parser model of its vertical whose type field maps to the event type. Keys outside the parser never reach the team. With no parser for the vertical, `payload` is `{}` and `filter_reason` is `no_parser`; the dashboard warns the company admin until a parser is active.
* `metadata` reduced to `zone_id`, `location`, `parser`, `offline_generated_at` and `connectivity_state_at_generation`.
* `labels` for the fields it sees, `payload_filtered: true`, and everything else unchanged: type, category, priority, status, channel, location and lifecycle.

The other tenant roles see the full payload. A dispatched team also receives a snapshot of the same fields on its [mission](/api-reference/missions.md), which outlives the event payload while the mission lasts.

## Status and channel

| `status` | `channel_used` | Meaning |
| - | - | - |
| `pending` | `null` | Accepted, delivery in progress |
| `pending` | `queued_offline` | Queued for delivery when connectivity returns |
| `completed` | `rest_full` or `rest_compressed` | Delivered over the internet path |
| `completed` | `sms`, `voice`, `satellite`, `lora`, `edge` | Delivered through that channel of your cascade |
| `completed` | `queued_offline` | Queued event reconciled after connectivity returned |
| `failed` | last channel tried | No channel delivered and the event could not be queued |

The status is the delivery status. Missions of the optional teams module never change it: follow a mission's outcome on the [mission](/api-reference/missions.md) itself.

When an event of a type that does not send a team becomes `completed`, wede clears the stored payload and keeps the identifiers, type, channel and lifecycle. An event of a type that sends a team keeps its payload until it is closed (by an operator, or when its primary mission completes) or until its last active mission completes; then the payload is cleared too.

## Errors

| Status | Code | When |
| - | - | - |
| 401 | `unauthorized` | Credential missing, malformed, revoked or expired |
| 403 | `forbidden` | The credential lacks `events:read` |
| 404 | `not_found` | No event with this ID in your tenant and environment |
| 503 | `service_unavailable` | The API key could not be validated right now. Retry |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.