events/update-event changes an event in place. Only the fields you send are touched; everything else is left exactly as it was.
Dates are read back after the write, because the calendar has a habit of discarding them quietly.
At a glance
| Ability | events/update-event |
| Toolset | The Events Calendar — toolset/events-calendar |
| Group | The Events Calendar › Events |
| Requires | The Events Calendar, active on the site |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Idempotent — running it twice leaves the same result |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
The silent discard, and what is done about it
If the end date precedes the start, The Events Calendar does not raise an error. It drops the entire date block and saves everything else. The call returns success, the event keeps its old times, and nothing anywhere says why.
This ability reads the dates back after writing and compares them to what you sent. If they did not take, the response says the dates were rejected instead of reporting a clean success. That is the difference between a rescheduling that failed loudly and one that failed silently three weeks before the event.
Recurring events are refused outright. A series is stored as a rule plus generated occurrences, and writing to one occurrence through this path produces results that range from ignored to corrupting. The refusal is deliberate: use the calendar’s own series editor for those.
A venue or organizer ID is validated before it is written, the same as on creation. An ID that is not a venue is a refusal, not a silently dropped link.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
id | integer | Yes | The event ID. |
title | string | No | The event title. |
description | string | No | The event body content. |
status | string | No — defaults to draft | Post status: draft, publish, pending or private. |
start_date | string | No | Local start, such as 2026-11-02 09:00:00. Read in the event’s own timezone, not the site’s. |
end_date | string | No | Local end. Must not precede the start — the calendar discards the entire date block if it does, and this ability reports that rather than claiming success. |
all_day | boolean | No | Whether the event runs all day. |
timezone | string | No | Olson timezone, such as America/New_York. The UTC times and the timezone abbreviation are both derived from this. |
venue | integer | No | Venue ID. Refused if the ID is not a venue, because the calendar would drop the link without saying so. |
organizers | array | No | Organizer IDs. An empty array clears them. |
cost | string | No | Cost as displayed, such as 25 or Free. |
url | string | No | External event website. |
featured | boolean | No | Whether the event is featured. |
What comes back
| Name | Type | What it is |
|---|---|---|
event | object | The event after the write, with the dates as they were actually stored — which is how a rejected date block becomes visible. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation. |
Example
Ask your assistant:
Move event 1840 to start at 10am instead of 9.
It resolves to one call:
{
"ability": "events/update-event",
"parameters": {
"id": 1840,
"start_date": "2026-11-02 10:00:00",
"end_date": "2026-11-02 17:00:00"
}
}Worth knowing
- Send both dates when you move either one. Sending a new start alone against an unchanged end is the exact shape that triggers a silent discard.
- Idempotent. Applying the same change twice leaves the same event.
- An empty organizers array clears the organizers. Omitting the field leaves them alone. Those are different requests and they are spelled differently.
- Changing the timezone re-derives the UTC times from the local ones. The wall-clock time stays; the absolute moment moves.
Related abilities
- Get Event — read it first, including whether it recurs
- Set Event Categories — categories are set separately
- Trash Event — take it off the calendar instead
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category