---
title: "POST /events"
method: POST
path: "/events"
tags: ["Events"]
---

# POST /events

`POST /events`

## Request

- Base URL: `https://api.aisle.wedding/v1`
- URL: `https://api.aisle.wedding/v1/events`
- Auth: HTTP bearer

Retry is not safe after a lost response. List the collection before creating again.

## Request body

- object
  - `name` string, required
  - `type` 'welcome_dinner' | 'ceremony' | 'reception' | 'brunch' | 'rehearsal' | 'cocktail_hour' | 'after_party' | 'activity' | 'other'
  - `starts_at` string, date-time, required: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
  - `ends_at` string, date-time, nullable: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
  - `all_day` boolean: True for an all-day item, such as a travel day: it has a day and no time. `starts_at` is then the start of its first day in the wedding's `timezone` and `ends_at`, when set, the start of its last day; show the days, never midnight. On a write, any time sent with the days is dropped. Defaults to false.
  - `venue_name` string, nullable
  - `venue_address` string, nullable
  - `venue_latitude` union: A decimal from -90 through 90.
    - number
    - string
  - `venue_longitude` union: A decimal from -180 through 180.
    - number
    - string
  - `description` string, nullable
  - `images` string[]
  - `dress_code_id` string, nullable
  - `has_meal_selection` boolean
  - `meal_options` object[]
    - `id` string, required
    - `name` string, required
    - `description` string
    - `dietary_tags` string[]
  - `meal_selection_deadline` string, date-time, nullable: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
  - `requires_ticket` boolean
  - `ticket_price` union: A decimal from 0 through 99999999.99.
    - number
    - string
  - `ticket_pay_later` boolean: Let guests reply yes before paying for the ticket. Read back as `ticket.pay_later`.
  - `asks_rsvp` boolean
  - `rsvp_options` object[], nullable
    - `id` string, required
    - `label` string, required
    - `counts_as` 'attending' | 'maybe' | 'declined', required
  - `visibility` 'public' | 'invite_only' | 'internal'
  - `transport_note` string, nullable
  - `audience_tags` string[]
  - `audience_property_ids` string[]
  - `transport_legs` object[]
    - `id` string, required
    - `location` string, required
    - `time` string, date-time, nullable, required: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
    - `note` string, nullable, required
    - `audience_tags` string[], required
    - `audience_properties` string[], required
    - `audience_undecided` boolean
  - `sort_order` integer
  - `seating_not_required` boolean

## Response `200`

Success.

- object
  - `data` Event, required
    - `id` string, required
    - `name` string, required
    - `type` 'welcome_dinner' | 'ceremony' | 'reception' | 'brunch' | 'rehearsal' | 'cocktail_hour' | 'after_party' | 'activity' | 'other', required
    - `starts_at` string, date-time, required: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
    - `ends_at` string, date-time, nullable, required: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
    - `all_day` boolean, required: True for an all-day item, such as a travel day: it has a day and no time. `starts_at` is then the start of its first day in the wedding's `timezone` and `ends_at`, when set, the start of its last day; show the days, never midnight. On a write, any time sent with the days is dropped. Defaults to false.
    - `venue` object, required
      - `name` string, nullable
      - `address` string, nullable
      - `latitude` string, nullable
      - `longitude` string, nullable
    - `description` string, nullable, required
    - `images` string[], required
    - `dress_code_id` string, nullable, required
    - `meal_selection` object, required
      - `enabled` boolean
      - `deadline` string, date-time, nullable: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
      - `options` object[]
        - `id` string, required
        - `name` string, required
        - `description` string
        - `dietary_tags` string[]
    - `ticket` object, required
      - `required` boolean
      - `price` string, nullable
      - `pay_later` boolean: When true, an attending reply is recorded before the ticket is paid and the ticket stays owed. When false, an attending reply to a ticketed event waits for a completed ticket payment.
    - `rsvp` object, required
      - `asks_separately` boolean
      - `options` object[], nullable
        - `id` string, required
        - `label` string, required
        - `counts_as` 'attending' | 'maybe' | 'declined', required
    - `visibility` 'public' | 'invite_only' | 'internal', required
    - `audience_tags` string[], required
    - `audience_property_ids` string[], required
    - `transport_note` string, nullable, required
    - `transport_legs` object[], required
      - `id` string, required
      - `location` string, required
      - `time` string, date-time, nullable, required: An instant, not a wall clock. Format it in the wedding's `timezone` from `GET /wedding`, never in the reader's zone.
      - `note` string, nullable, required
      - `audience_tags` string[], required
      - `audience_properties` string[], required
      - `audience_undecided` boolean
    - `sort_order` integer, required
    - `seating_not_required` boolean, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `400`: The request itself could not be read, such as a body that is not a JSON object. A field we refuse is validation_failed instead.
- `401`: The API key is missing, malformed, or no longer valid.
- `402`: The operation requires an active Aisle membership for this wedding.
- `403`: The key is valid but not permitted to do this.
- `404`: No such resource inside the key's wedding.
- `409`: The request collided with the current state of the resource.
- `415`: A request body must be sent as application/json.
- `422`: The request was well-formed but a field was not acceptable. Every field at fault is named in error.details.
- `429`: Too many requests. Retry after the time given in Retry-After.
- `500`: Something went wrong on our side.

---

[API](https://skmtc.dev/aisle/apis/aisle-api.md) · [All operations](https://skmtc.dev/aisle/apis/aisle-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aisle/apis/aisle-api/revisions/689a2f2420cc?raw)
