Skip to the documentation
CLI

nextmail calendar

Every command in this namespace, with its arguments, flags and examples.

Commands

Calendar events found in mail, expanded into occurrences.

Every command here also takes the global flags, such as --json, --profile and --dry-run. See the global flags

nextmail calendar list-events

List one page of event occurrences inside a time window

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar list-events --from <when> --to <when> [flags]

Expands your events into their occurrences between from and to and returns one page of them, sorted by start time and then by event id. A recurring series gives one row per instance in the window, with its excluded dates left out, and every row points back to its event through eventId. The window is required because a repeating series has no end to list up to.

to must be after from and at most 366 days later. A missing from or to is a 422 invalid_parameter, while a value that does not parse, a reversed or overlong window, or an unknown zone is a 400 invalid_parameter naming the field. Both bounds take a Date or an ISO 8601 string, and the SDK converts a Date with toISOString().

timezone is an IANA zone and defaults to UTC on the server. It is used to expand any event stored without a zone of its own, which is what decides the day an all day event lands on.

Add --all to walk every page: a table on a terminal, one JSON object per line when piped or with --ndjson, and one { items, hasMore, nextCursor } document with --json. --max <n> stops after that many items.

Flags

--from <when>

Start of the window. Required.

--to <when>

End of the window, after from and at most 366 days later. Required.

--timezone <value>

IANA zone such as Europe/London, at most 64 characters. Defaults to UTC.

--include-team

Adds the events of the rest of the workspace, apart from the ones marked private. Only a key of the workspace owner sees more with it. Defaults to false.

Defaultfalse
--q <value>

Words to look for in the title, the place and the organiser, at most 200 characters. Only events that hold every word come back, so pass a long window to find an event by name, and the same q with every cursor.

--limit <n>

Occurrences per page, a whole number from 1 to 100. The server defaults to 25.

Default25
--cursor <value>

The nextCursor of the previous page, sent with the same window. It is opaque, so never build one yourself.

--all

Fetch every page and stream the items as they arrive.

--max <n>

Stop after this many items. Implies --all.

--ndjson

Print every item as one JSON object per line. Implies --all

Examples

The required values only
nextmail calendar list-events --from 2026-10-01T00:00:00Z --to 2026-10-31T23:59:59Z
With optional flags
nextmail calendar list-events --from 2026-10-01T00:00:00Z --to 2026-10-31T23:59:59Z --timezone Europe/London --limit 50
Walk every page and stop after 100 items
nextmail calendar list-events --from 2026-10-01T00:00:00Z --to 2026-10-31T23:59:59Z --all --max 100
One JSON object per line when piped
nextmail calendar list-events --from 2026-10-01T00:00:00Z --to 2026-10-31T23:59:59Z --all > calendar.ndjson

Also available in

API
GET /calendar/events
TypeScript
nextmail.calendar.listEvents()
Python
calendar.list_events()
Ruby
calendar.list_events
PHP
calendar->listEvents
Go
Calendar.ListEvents
Java
calendar().listEvents
C#
Calendar.ListEventsAsync

nextmail calendar get-event

Read an event with its attendees

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar get-event <id> [flags]

Returns a stored event with its attendees and their responses. What the server understood from the iCalendar data is structured here: recurrence holds the RRULE text, exdates the excluded instances, organizer the organiser and alarms the reminders as { minutesBefore, action }. The raw iCalendar source is not included, and getEventIcs serves the event as a document.

id is the event id, the eventId on an occurrence, and not the iCalendar uid. A recurring series is one event however many occurrences it has, so start and end describe its first instance. messageId and threadId link the event to mail in the mailbox when there is any.

Attendees come back in the order they were added, each with partstat, role, rsvp, cutype and respondedAt. A narrowed key gets a 404 unless one of the addresses it covers organises the event or is on the attendee list, and a key that holds a whole domain covers every address on it.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Examples

nextmail calendar get-event cal_8d3f0a2b9c4e41f7a6b5c2d1
Print the raw JSON
nextmail calendar get-event cal_8d3f0a2b9c4e41f7a6b5c2d1 --json

Also available in

API
GET /calendar/events/{id}
TypeScript
nextmail.calendar.getEvent()
Python
calendar.get_event()
Ruby
calendar.get_event
PHP
calendar->getEvent
Go
Calendar.GetEvent
Java
calendar().getEvent
C#
Calendar.GetEventAsync

nextmail calendar get-event-ics

Download an event as an iCalendar document

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar get-event-ics <id> [flags]

Resolves with the event serialised as an .ics document, as a raw string rather than parsed JSON. The server sends it as text/calendar; charset=utf-8 with a download filename built from the event's uid, and the SDK requests that type and returns the body untouched.

The document declares METHOD:PUBLISH, and the content type carries no method parameter. That is deliberate: a REQUEST document makes a calendar client offer accept and decline and reply to the organiser, and this endpoint has no authority to invite anyone. Import it to show what the event currently is, not to send an invitation.

It holds one VEVENT with the attendees and their participation status, the recurrence rule, excluded dates and alarms. Lines end in CRLF and long lines are folded. DTSTAMP is the time of the request, so two downloads of an unchanged event differ on that line.

Arguments

<id>Required

Event id, the eventId of an occurrence.

Flags

-o, --out <file>

Write the text to this file instead of printing it

Examples

nextmail calendar get-event-ics cal_8d3f0a2b9c4e41f7a6b5c2d1
Save the file
nextmail calendar get-event-ics cal_8d3f0a2b9c4e41f7a6b5c2d1 --out event.ics

Also available in

API
GET /calendar/events/{id}/ics
TypeScript
nextmail.calendar.getEventIcs()
Python
calendar.get_event_ics()
Ruby
calendar.get_event_ics
PHP
calendar->getEventIcs
Go
Calendar.GetEventIcs
Java
calendar().getEventIcs
C#
Calendar.GetEventIcsAsync

nextmail calendar create-event

Put an event on the calendar

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar create-event --summary <value> --start <when> --end <when> [flags]
nextmail calendar create-event --data <json|@file|-> [flags]

Creates an event, as New event on the Calendar page of the app does. start and end take a Date or ISO 8601 with a zone, and timezone is the IANA zone the event belongs to, which decides what an all-day event means.

With attendees, an invitation goes to each of them by email from from, which has to be an address the key may send as, so the call also needs emails:send. Send sendInvites: false to keep it to your own calendar.

Flags

--summary <value>

The title, 1 to 255 characters. Required, here or in --data.

--start <when>

When it starts, a Date or ISO 8601 with a zone. Required, here or in --data.

--end <when>

When it ends, after start and at most two years later. Required, here or in --data.

--description <value>

Notes about the event, up to 8,000 characters.

--location <value>

Where it is: a room, an address or a link.

--url <value>

A link that belongs to the event.

--meeting-url <value>

The link to the video call, such as a Zoom, Meet or Teams address. The invitation carries it, so guests get a Join button in their calendar too.

--all-day

Whether it fills whole days. start and end then mark the days.

--timezone <value>

The IANA zone the event belongs to, UTC unless you say.

--recurrence <value>

An RRULE such as FREQ=WEEKLY;BYDAY=MO when it repeats.

--attendees <json|@file|->

Up to 200 people to invite, each { email, name?, optional? }. JSON shaped as Array<CalendarAttendeeInput>, inline or from a file with @path.

--reminders <json|@file|->

Up to five reminders, each { minutesBefore, action? }. JSON shaped as Array<CalendarReminderInput>, inline or from a file with @path.

--transparency <value>

OPAQUE shows you busy and TRANSPARENT free.

--visibility <value>

PUBLIC, PRIVATE or CONFIDENTIAL.

--send-invites

False keeps the change to your own calendar, and sends nothing.

--from <value>

The address the invitations come from. It has to be one the key may send as.

--data <json|@file|->

The whole body as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

The required values only
nextmail calendar create-event --summary Planning --start 2026-10-12T09:00:00Z --end 2026-10-12T09:30:00Z
With optional flags
nextmail calendar create-event --summary Planning --start 2026-10-12T09:00:00Z --end 2026-10-12T09:30:00Z --from team@acme.com
Read the whole body from a JSON file
nextmail calendar create-event --data @calendar.json

Also available in

API
POST /calendar/events
TypeScript
nextmail.calendar.createEvent()
Python
calendar.create_event()
Ruby
calendar.create_event
PHP
calendar->createEvent
Go
Calendar.CreateEvent
Java
calendar().createEvent
C#
Calendar.CreateEventAsync

nextmail calendar update-event

Change an event

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar update-event <id> [flags]

Changes an event you organise. A field you leave out keeps its value, and attendees replaces the whole list. Everyone invited gets the updated invitation by email from from, so a change to an event with attendees needs emails:send too, unless --send-invites is false.

For a repeating event, scope says which dates change, as the app asks when you edit one date: occurrence changes only the date that starts at --occurrence-start, following that date and every one after it, and series all of them. With following the later dates become a new series with its own id, which is what comes back, and the old one ends the day before.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Flags

--summary <value>

The title, 1 to 255 characters.

--start <when>

When it starts, a Date or ISO 8601 with a zone.

--end <when>

When it ends, after start and at most two years later.

--description <value>

Notes about the event, up to 8,000 characters.

--location <value>

Where it is: a room, an address or a link.

--url <value>

A link that belongs to the event.

--meeting-url <value>

The link to the video call. An empty string takes it off.

--all-day

Whether it fills whole days. start and end then mark the days.

--timezone <value>

The IANA zone the event belongs to, UTC unless you say.

--recurrence <value>

An RRULE such as FREQ=WEEKLY;BYDAY=MO when it repeats.

--attendees <json|@file|->

Up to 200 people to invite, each { email, name?, optional? }. It replaces the whole list. JSON shaped as Array<CalendarAttendeeInput>, inline or from a file with @path.

--reminders <json|@file|->

Up to five reminders, each { minutesBefore, action? }. JSON shaped as Array<CalendarReminderInput>, inline or from a file with @path.

--transparency <value>

OPAQUE shows you busy and TRANSPARENT free.

--visibility <value>

PUBLIC, PRIVATE or CONFIDENTIAL.

--send-invites

False keeps the change to your own calendar, and sends nothing.

--from <value>

The address the invitations come from. It has to be one the key may send as.

--scope <value>

occurrence, following or series: which dates of a repeating event change. Left out, the change reaches the event or date the id names.

--occurrence-start <when>

The start of the date you mean, as listEvents gives it. Needed with occurrence and following.

--data <json|@file|->

The whole patch as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

With optional flags
nextmail calendar update-event cal_3f9a1c7e5b2d48a06c1e9f4b --start 2026-10-12T10:00:00Z --end 2026-10-12T10:30:00Z
Print the raw JSON
nextmail calendar update-event cal_3f9a1c7e5b2d48a06c1e9f4b --start 2026-10-12T10:00:00Z --end 2026-10-12T10:30:00Z --json

Also available in

API
PATCH /calendar/events/{id}
TypeScript
nextmail.calendar.updateEvent()
Python
calendar.update_event()
Ruby
calendar.update_event
PHP
calendar->updateEvent
Go
Calendar.UpdateEvent
Java
calendar().updateEvent
C#
Calendar.UpdateEventAsync

nextmail calendar delete-event

Remove an event from the calendar

Scopescalendar:writeNeeds a sign-in
Asks you to confirm

Usage

nextmail calendar delete-event <id> [flags]

Removes an event for good, as Remove does in the app. Nobody else is told, so call off a meeting with others in it with cancelEvent instead. For a repeating event, scope occurrence with --occurrence-start removes one date, and following that date and every one after it.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Flags

--scope <value>

occurrence, following or series: which dates of a repeating event go.

--occurrence-start <when>

The start of the date you mean, as listEvents gives it. Needed with occurrence and following.

Examples

The required values only
nextmail calendar delete-event cal_3f9a1c7e5b2d48a06c1e9f4b
With optional flags
nextmail calendar delete-event cal_3f9a1c7e5b2d48a06c1e9f4b --scope occurrence --occurrence-start 2026-10-19T09:00:00Z
Skip the confirmation, for scripts
nextmail calendar delete-event cal_3f9a1c7e5b2d48a06c1e9f4b --yes

Also available in

API
DELETE /calendar/events/{id}
TypeScript
nextmail.calendar.deleteEvent()
Python
calendar.delete_event()
Ruby
calendar.delete_event
PHP
calendar->deleteEvent
Go
Calendar.DeleteEvent
Java
calendar().deleteEvent
C#
Calendar.DeleteEventAsync

nextmail calendar cancel-event

Call off a meeting

Scopescalendar:writeNeeds a sign-in
Asks you to confirm

Usage

nextmail calendar cancel-event <id> [flags]

Cancels a meeting you organise, as Cancel meeting does in the app. It stays on the calendar with status CANCELLED, and everyone invited is told it is off by email from from, so a meeting with attendees also needs emails:send.

For a repeating meeting, scope occurrence with --occurrence-start calls off one date, and following that date and every one after it. Guests get the matching update.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Flags

--from <value>

The address the cancellation comes from. It has to be one the key may send as.

--scope <value>

occurrence, following or series: which dates of a repeating meeting are called off.

--occurrence-start <when>

The start of the date you mean, as listEvents gives it. Needed with occurrence and following.

--data <json|@file|->

The whole body as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

The required values only
nextmail calendar cancel-event cal_3f9a1c7e5b2d48a06c1e9f4b
With optional flags
nextmail calendar cancel-event cal_3f9a1c7e5b2d48a06c1e9f4b --from team@acme.com
Skip the confirmation, for scripts
nextmail calendar cancel-event cal_3f9a1c7e5b2d48a06c1e9f4b --yes

Also available in

API
POST /calendar/events/{id}/cancel
TypeScript
nextmail.calendar.cancelEvent()
Python
calendar.cancel_event()
Ruby
calendar.cancel_event
PHP
calendar->cancelEvent
Go
Calendar.CancelEvent
Java
calendar().cancelEvent
C#
Calendar.CancelEventAsync

nextmail calendar respond-to-event

Answer an invitation

Scopescalendar:writeemails:sendNeeds a sign-in

Usage

nextmail calendar respond-to-event <id> --response <value> [flags]
nextmail calendar respond-to-event <id> --data <json|@file|-> [flags]

Accepts, declines or tentatively accepts an invitation, as the buttons of an invitation do in the app. The answer goes to the organiser by email from the invited address the key may send as, or from --responding-as when the invitation went to more than one of yours, so it needs emails:send as well.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Flags

--response <value>

ACCEPTED, DECLINED or TENTATIVE. Required, here or in --data.

--responding-as <value>

Which of your invited addresses answers, when there is more than one.

--proposed-start <when>

A new start to propose with your answer, sent together with --proposed-end.

--proposed-end <when>

The end of the proposed time.

--data <json|@file|->

The whole body as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

nextmail calendar respond-to-event cal_3f9a1c7e5b2d48a06c1e9f4b --response ACCEPTED
Read the whole body from a JSON file
nextmail calendar respond-to-event cal_3f9a1c7e5b2d48a06c1e9f4b --data @calendar.json

Also available in

API
POST /calendar/events/{id}/respond
TypeScript
nextmail.calendar.respondToEvent()
Python
calendar.respond_to_event()
Ruby
calendar.respond_to_event
PHP
calendar->respondToEvent
Go
Calendar.RespondToEvent
Java
calendar().respondToEvent
C#
Calendar.RespondToEventAsync

nextmail calendar decline-proposal

Decline a proposed time

Scopescalendar:writeemails:sendNeeds a sign-in

Usage

nextmail calendar decline-proposal <id> --attendee <value> [flags]
nextmail calendar decline-proposal <id> --data <json|@file|-> [flags]

Keeps the original time of a meeting you organise after a guest proposed another one, as Decline in the proposal on the event does in the app. The guest is told by email from from, or from the organising address, so it needs emails:send as well. To take the proposed time instead, change the event with updateEvent.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Flags

--attendee <value>

The guest whose proposal you decline, by email address. Required, here or in --data.

--from <value>

The address the answer is sent from, when it is not the organising address.

--data <json|@file|->

The whole body as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

nextmail calendar decline-proposal cal_8d3f0a2b9c4e41f7a6b5c2d1 --attendee example
Read the whole body from a JSON file
nextmail calendar decline-proposal cal_8d3f0a2b9c4e41f7a6b5c2d1 --data @calendar.json

Also available in

API
POST /calendar/events/{id}/decline-proposal
TypeScript
nextmail.calendar.declineProposal()
Python
calendar.decline_proposal()
Ruby
calendar.decline_proposal
PHP
calendar->declineProposal
Go
Calendar.DeclineProposal
Java
calendar().declineProposal
C#
Calendar.DeclineProposalAsync

nextmail calendar hide-event

Hide an event from your calendar

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar hide-event <id> [flags]

Takes an event off your own calendar and leaves it for everyone else, as Hide from my calendar does in the app. Use it for an invitation that reached you through a shared address, or an event you may not remove. It hides every date of a repeating event, and stops its reminders for you. unhideEvent brings it back.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Examples

nextmail calendar hide-event cal_3f9a1c7e5b2d48a06c1e9f4b
Print the raw JSON
nextmail calendar hide-event cal_3f9a1c7e5b2d48a06c1e9f4b --json

Also available in

API
POST /calendar/events/{id}/hide
TypeScript
nextmail.calendar.hideEvent()
Python
calendar.hide_event()
Ruby
calendar.hide_event
PHP
calendar->hideEvent
Go
Calendar.HideEvent
Java
calendar().hideEvent
C#
Calendar.HideEventAsync

nextmail calendar unhide-event

Show a hidden event again

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar unhide-event <id> [flags]

Puts an event you hid back on your calendar, as Show on my calendar does on the invitation in the app.

Arguments

<id>Required

Event id, the eventId of an occurrence, such as cal_ followed by 24 hex characters.

Examples

nextmail calendar unhide-event cal_3f9a1c7e5b2d48a06c1e9f4b
Print the raw JSON
nextmail calendar unhide-event cal_3f9a1c7e5b2d48a06c1e9f4b --json

Also available in

API
POST /calendar/events/{id}/unhide
TypeScript
nextmail.calendar.unhideEvent()
Python
calendar.unhide_event()
Ruby
calendar.unhide_event
PHP
calendar->unhideEvent
Go
Calendar.UnhideEvent
Java
calendar().unhideEvent
C#
Calendar.UnhideEventAsync

nextmail calendar free-busy

Free and busy times

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar free-busy --emails <a,b> --from <when> --to <when> [flags]

When the people you name are busy, as Find a time in the event editor of the app shows it. An address of the workspace shows the busy times of the person who holds it, from their events, the invitations they have not declined, their subscribed calendars and their bookings, without any detail. Any other address comes back with known false.

With --duration-minutes, suggestions lists up to five times when everyone known is free, on weekdays between 09:00 and 17:00 in timezone. from and to take a Date or an ISO 8601 string and may be at most 31 days apart.

Flags

--emails <a,b>Repeatable

The addresses to look up, at most 20. Required.

--from <when>

The start of the window. Required.

--to <when>

The end of the window, at most 31 days after from. Required.

--timezone <value>

The IANA zone the suggested times keep to working hours in, UTC unless you say.

Default"UTC"
--duration-minutes <n>

The length of the meeting, 5 to 480 minutes. Send it to get suggestions.

Examples

The required values only
nextmail calendar free-busy --emails ana@acme.com,ben@acme.com --from 2026-10-01T00:00:00Z --to 2026-10-31T23:59:59Z
With optional flags
nextmail calendar free-busy --emails ana@acme.com,ben@acme.com --from 2026-10-01T00:00:00Z --to 2026-10-31T23:59:59Z --timezone Europe/London --duration-minutes 30
Print the raw JSON
nextmail calendar free-busy --emails ana@acme.com,ben@acme.com --from 2026-10-01T00:00:00Z --to 2026-10-31T23:59:59Z --json

Also available in

API
GET /calendar/free-busy
TypeScript
nextmail.calendar.freeBusy()
Python
calendar.free_busy()
Ruby
calendar.free_busy
PHP
calendar->freeBusy
Go
Calendar.FreeBusy
Java
calendar().freeBusy
C#
Calendar.FreeBusyAsync

nextmail calendar list-feeds

List calendar links

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar list-feeds [flags]

Resolves the secret links that publish your calendar to other calendar apps, as Share in the calendar settings of the app lists them. Anyone with a link can read what it shows, so treat url and webcalUrl like passwords.

Examples

nextmail calendar list-feeds
Print the raw JSON
nextmail calendar list-feeds --json

Also available in

API
GET /calendar/feeds
TypeScript
nextmail.calendar.listFeeds()
Python
calendar.list_feeds()
Ruby
calendar.list_feeds
PHP
calendar->listFeeds
Go
Calendar.ListFeeds
Java
calendar().listFeeds
C#
Calendar.ListFeedsAsync

nextmail calendar create-feed

Create a calendar link

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar create-feed --name <value> --mode <value> [flags]
nextmail calendar create-feed --data <json|@file|-> [flags]

Makes a secret link that publishes your calendar as an iCalendar feed, for Google Calendar (From URL), Outlook (Subscribe from web) or Apple Calendar (New subscription). full shows every detail, busy only the times you are busy. The calendar app reads the link again on its own schedule, usually every few hours.

Flags

--name <value>

The name calendar apps show for the calendar, up to 100 characters. Required, here or in --data.

--mode <value>

full for every detail, busy for busy times only. Required, here or in --data.

--data <json|@file|->

The whole body as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

nextmail calendar create-feed --name 'Work (busy)' --mode busy
Read the whole body from a JSON file
nextmail calendar create-feed --data @calendar.json

Also available in

API
POST /calendar/feeds
TypeScript
nextmail.calendar.createFeed()
Python
calendar.create_feed()
Ruby
calendar.create_feed
PHP
calendar->createFeed
Go
Calendar.CreateFeed
Java
calendar().createFeed
C#
Calendar.CreateFeedAsync

nextmail calendar reset-feed

Reset a calendar link

Scopescalendar:writeNeeds a sign-in
Asks you to confirm

Usage

nextmail calendar reset-feed <id> [flags]

Replaces the secret in a calendar link, so the old address stops working everywhere it was shared. Paste the new address into the calendar apps you still want to update.

Arguments

<id>Required

Calendar link id, cfd_ followed by 24 hex characters.

Examples

nextmail calendar reset-feed cfd_3f9a1c7e5b2d48a06c1e9f4b
Skip the confirmation, for scripts
nextmail calendar reset-feed cfd_3f9a1c7e5b2d48a06c1e9f4b --yes

Also available in

API
POST /calendar/feeds/{id}/reset
TypeScript
nextmail.calendar.resetFeed()
Python
calendar.reset_feed()
Ruby
calendar.reset_feed
PHP
calendar->resetFeed
Go
Calendar.ResetFeed
Java
calendar().resetFeed
C#
Calendar.ResetFeedAsync

nextmail calendar delete-feed

Delete a calendar link

Scopescalendar:writeNeeds a sign-in
Asks you to confirm

Usage

nextmail calendar delete-feed <id> [flags]

Turns a calendar link off for good. Calendar apps that subscribed to it stop getting updates.

Arguments

<id>Required

Calendar link id, cfd_ followed by 24 hex characters.

Examples

nextmail calendar delete-feed cfd_3f9a1c7e5b2d48a06c1e9f4b
Skip the confirmation, for scripts
nextmail calendar delete-feed cfd_3f9a1c7e5b2d48a06c1e9f4b --yes

Also available in

API
DELETE /calendar/feeds/{id}
TypeScript
nextmail.calendar.deleteFeed()
Python
calendar.delete_feed()
Ruby
calendar.delete_feed
PHP
calendar->deleteFeed
Go
Calendar.DeleteFeed
Java
calendar().deleteFeed
C#
Calendar.DeleteFeedAsync

nextmail calendar list-subscriptions

List calendar subscriptions

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar list-subscriptions [flags]

Resolves the other calendars you subscribe to by link, such as a Google or Outlook calendar address, a team rota or public holidays, as Other calendars in the app lists them. Their events show on your calendar, read-only.

Examples

nextmail calendar list-subscriptions
Print the raw JSON
nextmail calendar list-subscriptions --json

Also available in

API
GET /calendar/subscriptions
TypeScript
nextmail.calendar.listSubscriptions()
Python
calendar.list_subscriptions()
Ruby
calendar.list_subscriptions
PHP
calendar->listSubscriptions
Go
Calendar.ListSubscriptions
Java
calendar().listSubscriptions
C#
Calendar.ListSubscriptionsAsync

nextmail calendar create-subscription

Subscribe to a calendar

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar create-subscription --url <value> [flags]
nextmail calendar create-subscription --data <json|@file|-> [flags]

Adds a calendar by its iCalendar link: an https, http or webcal address, such as the secret address of a Google calendar or a published Outlook calendar. It is read at once, then again about every half hour. name defaults to the name the calendar gives itself.

Flags

--url <value>

The calendar link, https, http or webcal. Required, here or in --data.

--name <value>

The name to show, up to 100 characters.

--body-color <value>

The colour of its events, from CALENDAR_COLORS.

--data <json|@file|->

The whole body as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

The required values only
nextmail calendar create-subscription --url webcal://example.com/holidays.ics
With optional flags
nextmail calendar create-subscription --url webcal://example.com/holidays.ics --body-color green
Read the whole body from a JSON file
nextmail calendar create-subscription --data @calendar.json

Also available in

API
POST /calendar/subscriptions
TypeScript
nextmail.calendar.createSubscription()
Python
calendar.create_subscription()
Ruby
calendar.create_subscription
PHP
calendar->createSubscription
Go
Calendar.CreateSubscription
Java
calendar().createSubscription
C#
Calendar.CreateSubscriptionAsync

nextmail calendar update-subscription

Change a calendar subscription

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar update-subscription <id> [flags]

Renames a subscription or gives it another colour.

Arguments

<id>Required

Subscription id, csb_ followed by 24 hex characters.

Flags

--name <value>

The new name, up to 100 characters.

--patch-color <value>

The new colour, from CALENDAR_COLORS.

--data <json|@file|->

The whole patch as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

Examples

With optional flags
nextmail calendar update-subscription csb_3f9a1c7e5b2d48a06c1e9f4b --name 'Team rota' --patch-color purple
Print the raw JSON
nextmail calendar update-subscription csb_3f9a1c7e5b2d48a06c1e9f4b --name 'Team rota' --patch-color purple --json

Also available in

API
PATCH /calendar/subscriptions/{id}
TypeScript
nextmail.calendar.updateSubscription()
Python
calendar.update_subscription()
Ruby
calendar.update_subscription
PHP
calendar->updateSubscription
Go
Calendar.UpdateSubscription
Java
calendar().updateSubscription
C#
Calendar.UpdateSubscriptionAsync

nextmail calendar refresh-subscription

Refresh a calendar subscription

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar refresh-subscription <id> [flags]

Reads a subscribed calendar again now instead of waiting for the next half-hourly read, and restarts one that stopped after repeated failures.

Arguments

<id>Required

Subscription id, csb_ followed by 24 hex characters.

Examples

nextmail calendar refresh-subscription csb_3f9a1c7e5b2d48a06c1e9f4b
Print the raw JSON
nextmail calendar refresh-subscription csb_3f9a1c7e5b2d48a06c1e9f4b --json

Also available in

API
POST /calendar/subscriptions/{id}/refresh
TypeScript
nextmail.calendar.refreshSubscription()
Python
calendar.refresh_subscription()
Ruby
calendar.refresh_subscription
PHP
calendar->refreshSubscription
Go
Calendar.RefreshSubscription
Java
calendar().refreshSubscription
C#
Calendar.RefreshSubscriptionAsync

nextmail calendar delete-subscription

Unsubscribe from a calendar

Scopescalendar:writeNeeds a sign-in
Asks you to confirm

Usage

nextmail calendar delete-subscription <id> [flags]

Removes a subscription and every event it brought onto your calendar.

Arguments

<id>Required

Subscription id, csb_ followed by 24 hex characters.

Examples

nextmail calendar delete-subscription csb_3f9a1c7e5b2d48a06c1e9f4b
Skip the confirmation, for scripts
nextmail calendar delete-subscription csb_3f9a1c7e5b2d48a06c1e9f4b --yes

Also available in

API
DELETE /calendar/subscriptions/{id}
TypeScript
nextmail.calendar.deleteSubscription()
Python
calendar.delete_subscription()
Ruby
calendar.delete_subscription
PHP
calendar->deleteSubscription
Go
Calendar.DeleteSubscription
Java
calendar().deleteSubscription
C#
Calendar.DeleteSubscriptionAsync

nextmail calendar import-ics

Import a calendar file

Scopescalendar:writeNeeds a sign-in

Usage

nextmail calendar import-ics <data> [flags]

Sends an iCalendar (.ics) file as the request body and queues it. Its events become events of your own that you can edit, and nobody on them is sent anything, now or when you change them later, unless you ask for that on the change. Poll getImport until status is completed.

The file may be 10 MB and hold 25,000 events. Several calendars in one file are merged, and the report keeps their names. An event whose UID is already in the workspace is skipped and counted, never overwritten, so sending the same file twice adds nothing.

data is a Blob, an ArrayBuffer or a Uint8Array, and it goes out as text/calendar.

Arguments

<data>Required

The .ics file: a Blob, ArrayBuffer or Uint8Array.

Flags

--filename <value>

The name to show for the file in the list of imports, at most 255 characters.

Examples

The required values only
nextmail calendar import-ics ./calendar.ics
With optional flags
nextmail calendar import-ics ./calendar.ics --filename work.ics

Also available in

API
POST /calendar/imports
TypeScript
nextmail.calendar.importIcs()
Python
calendar.import_ics()
Ruby
calendar.import_ics
PHP
calendar->importIcs
Go
Calendar.ImportIcs
Java
calendar().importIcs
C#
Calendar.ImportIcsAsync

nextmail calendar list-imports

List calendar imports

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar list-imports [flags]

Returns one page of the calendar files and calendars brought in, newest first, each with what it added and what it left out. Beside the files sent with importIcs it lists the calendars that came with a mailbox import, and those carry the id of that import in parentImportId.

Paging is keyset. --limit takes 1 to 100 and defaults to 25, and nextCursor goes back as --cursor while hasMore is true.

Add --all to walk every page: a table on a terminal, one JSON object per line when piped or with --ndjson, and one { items, hasMore, nextCursor } document with --json. --max <n> stops after that many items.

Flags

--limit <n>

Imports per page, a whole number from 1 to 100. The server defaults to 25.

Default25
--cursor <value>

The nextCursor from the previous page. Never build one yourself.

--all

Fetch every page and stream the items as they arrive.

--max <n>

Stop after this many items. Implies --all.

--ndjson

Print every item as one JSON object per line. Implies --all

Examples

nextmail calendar list-imports
With optional flags
nextmail calendar list-imports --limit 50
Walk every page and stop after 100 items
nextmail calendar list-imports --all --max 100
One JSON object per line when piped
nextmail calendar list-imports --all > calendar.ndjson

Also available in

API
GET /calendar/imports
TypeScript
nextmail.calendar.listImports()
Python
calendar.list_imports()
Ruby
calendar.list_imports
PHP
calendar->listImports
Go
Calendar.ListImports
Java
calendar().listImports
C#
Calendar.ListImportsAsync

nextmail calendar get-import

Get a calendar import

Scopescalendar:readNeeds a sign-in

Usage

nextmail calendar get-import <id> [flags]

Resolves one calendar import with its counts and its report: the calendars it read, how many events it left out and why, and up to 20 of the events it left out. Poll it after importIcs until status is completed or failed.

counts.imported is what was added and counts.skipped what was left out, which report.skipped breaks down by reason: uid-taken for an event that was already here, no-start for one with no start time, invalid for one that could not be read and empty for a file or calendar that held no events.

Arguments

<id>Required

Calendar import id, iimp_ followed by 24 hex characters.

Examples

nextmail calendar get-import iimp_3f9c2a7b1e4d8f60a5c7b92d
Print the raw JSON
nextmail calendar get-import iimp_3f9c2a7b1e4d8f60a5c7b92d --json

Also available in

API
GET /calendar/imports/{id}
TypeScript
nextmail.calendar.getImport()
Python
calendar.get_import()
Ruby
calendar.get_import
PHP
calendar->getImport
Go
Calendar.GetImport
Java
calendar().getImport
C#
Calendar.GetImportAsync

nextmail calendar undo-import

Remove what a calendar import added

Scopescalendar:writeNeeds a sign-in
Asks you to confirm

Usage

nextmail calendar undo-import <id> [flags]

Deletes every event the import added, changed since or not, and marks the import undone. Nobody is told. Events that were skipped because they were already here are not touched.

Arguments

<id>Required

Calendar import id, iimp_ followed by 24 hex characters.

Examples

nextmail calendar undo-import iimp_3f9c2a7b1e4d8f60a5c7b92d
Skip the confirmation, for scripts
nextmail calendar undo-import iimp_3f9c2a7b1e4d8f60a5c7b92d --yes

Also available in

API
POST /calendar/imports/{id}/undo
TypeScript
nextmail.calendar.undoImport()
Python
calendar.undo_import()
Ruby
calendar.undo_import
PHP
calendar->undoImport
Go
Calendar.UndoImport
Java
calendar().undoImport
C#
Calendar.UndoImportAsync