---
title: "Update a Discord scheduled event"
method: PATCH
path: "/v1/discord/guilds/{guildId}/events/{eventId}"
tags: ["Discord"]
---

# Update a Discord scheduled event

`PATCH /v1/discord/guilds/{guildId}/events/{eventId}`

Patch any subset of fields. Passing `status: 'cancelled'` is how you
cancel an event — Discord doesn't have a dedicated cancel endpoint,
it's a status transition.

Most status transitions Discord enforces (you can't go SCHEDULED →
COMPLETED directly). The common consumer case is SCHEDULED → CANCELED.

## Path parameters

- `guildId` string, required
- `eventId` string, required

## Request body

- object
  - `accountId` string, required
  - `name` string
  - `description` string
  - `startsAt` string, date-time
  - `endsAt` string, date-time
  - `location` string — For external events.
  - `status` 'scheduled' | 'active' | 'completed' | 'cancelled' — Status transition. Most common: 'cancelled' to cancel an event.
  - `imageDataUri` string

## Response `200`

Event updated.

- object
  - `data` DiscordScheduledEvent — Discord guild scheduled event. Returned by /v1/discord/guilds/{guildId}/events endpoints. Fields below are the subset Zernio consumes — Discord may return more (e.g. creator, image hash) which we pass through verbatim.
    - `id` string — Event snowflake ID
    - `guild_id` string
    - `channel_id` string, nullable — Voice/stage channel ID; null for external events.
    - `creator_id` string, nullable
    - `name` string
    - `description` string, nullable
    - `scheduled_start_time` string, date-time
    - `scheduled_end_time` string, date-time, nullable — Required for external events; optional for voice/stage.
    - `privacy_level` 2 — Always 2 (GUILD_ONLY) — Discord deprecated PUBLIC events.
    - `status` 1 | 2 | 3 | 4 — 1=SCHEDULED, 2=ACTIVE, 3=COMPLETED, 4=CANCELED
    - `entity_type` 1 | 2 | 3 — 1=STAGE_INSTANCE, 2=VOICE, 3=EXTERNAL
    - `entity_id` string, nullable
    - `entity_metadata` object, nullable
      - `location` string — External event location string.
    - `user_count` integer — Number of members who RSVP'd. Only present when withUserCount=true on list.
    - `image` string, nullable — Cover image hash; build URL via cdn.discordapp.com.

## Other responses

- `400` — Validation error, no updatable fields beyond accountId provided, or Discord rejected the update (invalid status transition).
- `401` — Unauthorized
- `403` — Discord refused the update (bot permissions).
- `404` — Event or Discord account not found.
- `502` — Discord was unreachable or returned an unclassified error.

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/versions/51932b099b2f/schema)
