30 days free. No credit card. Full access from the moment you connect your site.

Start free trial

Create Event

events/create-event creates an event the way the calendar creates one: through its own data layer, so the dates land in post meta and in the calendar’s occurrence tables at the same time.

It needs a title. Everything else is optional, and it defaults to draft.

At a glance

Abilityevents/create-event
ToolsetThe Events Calendar — toolset/events-calendar
GroupThe Events Calendar › Events
RequiresThe Events Calendar, active on the site
Capabilitymanage_options
SafetyWrites data
RepeatableNot idempotent — each call changes the row set, so re-running is not a no-op
Ships inAcrossAI Abilities Manager 0.0.34 and later

Why it does not just insert a post

An event is not a post with a start date on it. The calendar keeps local times, UTC times, a timezone and an abbreviation in meta, and mirrors the occurrence into its own tables so that calendar views can be queried efficiently. Insert the post and set the meta yourself and you get an event that exists but never appears in a month view, because the table row was never written.

So this goes through tribe_events(), the calendar’s own creation path. Same code the admin screen runs, same rows written, same hooks fired for anything else on the site that listens for a new event.

Venue and organizer IDs are checked before the write, not after. Hand the calendar an ID that is not a venue and it drops the link silently — the event saves, looks fine, and has no venue. Checking first turns that into a refusal naming the bad ID.

The end date gets the same treatment from the other direction. If the end precedes the start the calendar discards the whole date block without complaint, so the dates are read back after the write and reported as rejected if that happened.

Input

NameTypeRequiredWhat it is
titlestringYesThe event title.
descriptionstringNoThe event body content.
statusstringNo — defaults to draftPost status: draft, publish, pending or private.
start_datestringNoLocal start, such as 2026-11-02 09:00:00. Read in the event’s own timezone, not the site’s.
end_datestringNoLocal 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_daybooleanNoWhether the event runs all day.
timezonestringNoOlson timezone, such as America/New_York. The UTC times and the timezone abbreviation are both derived from this.
venueintegerNoVenue ID. Refused if the ID is not a venue, because the calendar would drop the link without saying so.
organizersarrayNoOrganizer IDs. An empty array clears them.
coststringNoCost as displayed, such as 25 or Free.
urlstringNoExternal event website.
featuredbooleanNoWhether the event is featured.

What comes back

NameTypeWhat it is
eventobjectThe created event as events/get-event would return it, including the dates as they were actually stored.
successbooleanWhether the call completed.
messagestringA one-line summary of what happened, suitable for showing a human.
error_codestringPresent 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:

Create a draft event called “Winter Product Workshop” on 2 November from 9am to 5pm at venue 204.

It resolves to one call:

{
  "ability": "events/create-event",
  "parameters": {
    "title": "Winter Product Workshop",
    "start_date": "2026-11-02 09:00:00",
    "end_date": "2026-11-02 17:00:00",
    "timezone": "Europe/London",
    "venue": 204,
    "cost": "Free"
  }
}

Worth knowing

  • Drafts by default. An event created by an assistant should be reviewed before it appears on a public calendar.
  • Without a timezone the site default is used. Supply one explicitly whenever the event is somewhere the site is not.
  • Not idempotent. Run it twice and you have two events — check with events/list-events before retrying a call whose result you did not see.
  • Organizers is a list. One organizer is a list of one.

Related abilities


Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager

Browse the rest: Every ability, by category


Keep reading