Everyday | API DocumentationEveryday | API Documentation
  • Pricing
  • Documentation
  • API Reference
Information
Organizations
    List available organizationsget
Profiles
    List profilesgetCreate profilepostRetrieve profilegetDelete profiledeleteUpdate profilepatchList a profile's eventsgetCreate event for a profilepostList a profile's seriesgetCreate series for a profilepostList followers of a profileget
Events
    List a profile's eventsgetCreate event for a profilepostList eventsgetCreate eventpostRetrieve eventgetDelete eventdeleteUpdate eventpatchCancel eventpostReschedule eventpostList RSVPsgetCreate RSVPpostDelete RSVPdeleteUpdate RSVPpatchRSVP statisticsgetGet RSVP settingsgetUpdate RSVP settingspatchList events in a seriesgetAdd event to seriespostRemove event from seriesdelete
RSVPs
    List RSVPsgetCreate RSVPpostDelete RSVPdeleteUpdate RSVPpatchRSVP statisticsgetGet RSVP settingsgetUpdate RSVP settingspatch
Series
    List a profile's seriesgetCreate series for a profilepostList seriesgetRetrieve seriesgetDelete seriesdeleteUpdate seriespatchPreview series deletiongetList events in a seriesgetAdd event to seriespostRemove event from seriesdelete
Calendars
    List calendarsgetRetrieve calendargetList calendar eventsgetCreate calendar eventpostDelete calendar eventdeleteUpdate calendar eventpatchList connected external calendarsgetRead your agendaget
Subscriptions
    List subscriptionsgetCreate subscriptionpostRetrieve subscriptiongetDelete subscriptiondeleteUpdate subscriptionpatch
Follows
    List followers of a profilegetList followsgetCreate followpostDelete followdelete
Search
    Search across events, profiles, and seriesget
MCP
    MCP Server (consumer / OAuth)postMCP Server (developer / API key)post
Schemas
powered by Zuplo
Everyday Public API
Everyday Public API

Profiles

Public-facing profiles owned by Everyday users. Each profile groups events, series, and followers under a single identity.


List profiles

GET
https://api.every.day
/v1/profiles

Returns the profiles the authenticated caller can manage — those they own directly or administer through an organization they belong to. This is a workflow endpoint, not platform-wide discovery: public profiles owned by others are not returned. Use it to resolve a name to a profile you can write to before creating or modifying its events or series. (Platform-wide public search is a separate, forthcoming capability.)

List profiles › query Parameters

cursor
​string

Opaque cursor returned from a previous list response.

limit
​integer · min: 1 · max: 100

Maximum number of items to return per page. Range 1-100, default 20.

Default: 20

List profiles › Responses

A page of profiles.

​object[] · required
has_more
​boolean · required
next_cursor
​string | null · required
GET/v1/profiles
curl --request GET \ --url https://api.every.day/v1/profiles
shell
Example Responses
No example specified for this content type
application/json

Create profile

POST
https://api.every.day
/v1/profiles

Creates a profile owned by the authenticated user. organization_id is optional when the caller has one active owned organization; use GET /v1/organizations to select another available organization. everyday_id must be unique across the platform; conflicts return 409.

Create profile › Headers

Idempotency-Key
​string · minLength: 8 · maxLength: 255

A client-generated identifier (UUIDv4 recommended; 8–255 chars, alphanumeric/underscore/hyphen) for the request. The header is validated and logged, but server-side deduplication is not enforced: resubmitting a create with the same key produces a second resource. Treat creates as non-idempotent and design retries accordingly. Deduplication is planned for a future API version.

Create profile › Request Body

everyday_id
​string · pattern: ^[A-Za-z0-9_.-]{3,}$ · required

Profile handle used in links. This is not a resource ID; use the profile id (prf_...) in ID fields.

display_name
​string · required
description
​string | null
profile_image_url
​string | null · uri
header_image_url
​string | null · uri
is_private
​boolean
organization_id
​string · pattern: ^org_[0-9a-fA-F]{32}…

Optional organization from GET /v1/organizations. When omitted, the caller's single active owned organization is used.

Create profile › Responses

Created

organization_id
​string · pattern: ^org_[0-9a-fA-F]{32}… · required

The organization selected explicitly or resolved from the caller's owned default.

id
​string · pattern: ^prf_[0-9a-fA-F]{32}…
everyday_id
​string · pattern: ^[A-Za-z0-9_.-]{3,}$

Profile handle used in links. This is not a resource ID; use the profile id (prf_...) in ID fields.

display_name
​string
description
​string | null
profile_image_url
​string | null · uri
header_image_url
​string | null · uri
is_private
​boolean
default_event_duration_minutes
​integer | null
created_at
​string | null · date-time
updated_at
​string | null · date-time
POST/v1/profiles
curl --request POST \ --url https://api.every.day/v1/profiles \ --header 'Content-Type: application/json' \ --data ' { "everyday_id": "everyday_id", "display_name": "display_name", "description": "description", "profile_image_url": "https://www.example.com/path/to/resource", "header_image_url": "https://www.example.com/path/to/resource", "is_private": true, "organization_id": "organization_id" } '
shell
Example Request Body
{ "everyday_id": "everyday_id", "display_name": "display_name", "description": "description", "profile_image_url": "https://www.example.com/path/to/resource", "header_image_url": "https://www.example.com/path/to/resource", "is_private": true, "organization_id": "organization_id" }
json
Example Responses
No example specified for this content type
application/json

Retrieve profile

GET
https://api.every.day
/v1/profiles/{profile_id}

Returns a single profile by its prefixed ID. Returns 404 if the profile does not exist or is private and not visible to the caller.

Retrieve profile › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

Retrieve profile › Responses

Profile

id
​string · pattern: ^prf_[0-9a-fA-F]{32}…
everyday_id
​string · pattern: ^[A-Za-z0-9_.-]{3,}$

Profile handle used in links. This is not a resource ID; use the profile id (prf_...) in ID fields.

display_name
​string
description
​string | null
profile_image_url
​string | null · uri
header_image_url
​string | null · uri
is_private
​boolean
default_event_duration_minutes
​integer | null
created_at
​string | null · date-time
updated_at
​string | null · date-time
GET/v1/profiles/{profile_id}
curl --request GET \ --url https://api.every.day/v1/profiles/:profile_id
shell
Example Responses
No example specified for this content type
application/json

Delete profile

DELETE
https://api.every.day
/v1/profiles/{profile_id}

Soft-deletes a profile and schedules its associated data for cleanup. Idempotent — deleting an already-deleted profile is a no-op.

Delete profile › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

Delete profile › Responses

Deleted

No data returned
DELETE/v1/profiles/{profile_id}
curl --request DELETE \ --url https://api.every.day/v1/profiles/:profile_id
shell
Example Responses
No example specified for this content type

Update profile

PATCH
https://api.every.day
/v1/profiles/{profile_id}

Updates a profile owned by the authenticated user. Only the caller's own profiles are mutable; attempting to update someone else's profile returns 404.

Update profile › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

Update profile › Request Body

display_name
​string
description
​string | null
profile_image_url
​string | null · uri
header_image_url
​string | null · uri
is_private
​boolean

Update profile › Responses

Updated

id
​string · pattern: ^prf_[0-9a-fA-F]{32}…
everyday_id
​string · pattern: ^[A-Za-z0-9_.-]{3,}$

Profile handle used in links. This is not a resource ID; use the profile id (prf_...) in ID fields.

display_name
​string
description
​string | null
profile_image_url
​string | null · uri
header_image_url
​string | null · uri
is_private
​boolean
default_event_duration_minutes
​integer | null
created_at
​string | null · date-time
updated_at
​string | null · date-time
PATCH/v1/profiles/{profile_id}
curl --request PATCH \ --url https://api.every.day/v1/profiles/:profile_id \ --header 'Content-Type: application/json' \ --data ' { "display_name": "display_name", "description": "description", "profile_image_url": "https://www.example.com/path/to/resource", "header_image_url": "https://www.example.com/path/to/resource", "is_private": true } '
shell
Example Request Body
{ "display_name": "display_name", "description": "description", "profile_image_url": "https://www.example.com/path/to/resource", "header_image_url": "https://www.example.com/path/to/resource", "is_private": true }
json
Example Responses
No example specified for this content type
application/json

List a profile's events

GET
https://api.every.day
/v1/profiles/{profile_id}/events

Returns events belonging to the specified profile. Honors the same visibility rules as listEvents — private events on a private profile are not returned to non-owners.

List a profile's events › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

List a profile's events › query Parameters

cursor
​string

Opaque cursor returned from a previous list response.

limit
​integer · min: 1 · max: 100

Maximum number of items to return per page. Range 1-100, default 20.

Default: 20

List a profile's events › Responses

Page

​object[] · required
has_more
​boolean · required
next_cursor
​string | null · required
GET/v1/profiles/{profile_id}/events
curl --request GET \ --url https://api.every.day/v1/profiles/:profile_id/events
shell
Example Responses
No example specified for this content type
application/json

Create event for a profile

POST
https://api.every.day
/v1/profiles/{profile_id}/events

Creates an event under a profile owned by the authenticated user. The profile_id is taken from the path; the request body must not also set it. Identical to createEvent except that the parent profile is path-bound.

Time formats — timed events: send a naive local time plus a timezone (recommended), e.g. start_time "2026-06-06T09:30:00" with start_timezone "America/New_York"; the server resolves it to UTC. An offset-bearing RFC 3339 value (e.g. "2026-06-06T09:30:00-04:00") is also accepted and validated against the zone. All-day events: set is_all_day true and send date-only start_date/end_date (end_date exclusive) instead of start_time/end_time.

Create event for a profile › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

Create event for a profile › Headers

Idempotency-Key
​string · minLength: 8 · maxLength: 255

A client-generated identifier (UUIDv4 recommended; 8–255 chars, alphanumeric/underscore/hyphen) for the request. The header is validated and logged, but server-side deduplication is not enforced: resubmitting a create with the same key produces a second resource. Treat creates as non-idempotent and design retries accordingly. Deduplication is planned for a future API version.

Create event for a profile › Request Body

title
​string · required
profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}…

Required when calling POST /v1/events; inferred from path when calling POST /v1/profiles/{profile_id}/events.

description
​string | null
location
​string | null
start_time
​string · pattern: ^\d{4}-\d{2}-\d{2}[T…

Event start time. Recommended: a naive local time (no offset) interpreted in start_timezone — e.g. "2026-06-06T09:30:00". An offset-bearing RFC 3339 value (e.g. "2026-06-06T09:30:00-04:00") is also accepted. Must be sent together with start_timezone. Omit for all-day events (use start_date).

Example: 2026-06-06T09:30:00
end_time
​string | null · pattern: ^\d{4}-\d{2}-\d{2}[T…

Event end time, same formats as start_time. When present, must be sent together with end_timezone. Omit for all-day events (use end_date).

Example: 2026-06-06T11:30:00
start_timezone
​string

IANA timezone name (e.g. "America/New_York") for start_time. Required. Used for display, outbound calendar sync, and recurrence expansion; it does not reinterpret an explicit offset in start_time. Must not be null.

end_timezone
​string

IANA timezone name for end_time. Independent of start_timezone (e.g. a NYC→LA flight). Must be sent together with end_time and must not be null. When omitted on create, the platform fills it from start_timezone.

start_date
​string · pattern: ^\d{4}-\d{2}-\d{2}$

All-day start date (YYYY-MM-DD, date only). Required when is_all_day is true; do not send with start_time/end_time.

end_date
​string · pattern: ^\d{4}-\d{2}-\d{2}$

All-day end date (YYYY-MM-DD), EXCLUSIVE — the event spans up to but not including this date. Optional; defaults to start_date + 1 day (single day) and must be after start_date (multi-day allowed).

recurrence_rule
​string | null · maxLength: 8192

Single RRULE text (optional RRULE: prefix), or null to clear recurrence. Must produce a first occurrence within a bounded work allowance using the effective event start. Invalid or excessively costly rules return 400 invalid_recurrence_rule. Advanced rules such as BYDAY=2TU are supported.

slug
​string

URL slug for the event. Optional — when omitted the platform derives one from the title and start time (evaluated in start_timezone). Reserved values (history, previous, s) are rejected.

image_url
​string | null · uri
is_all_day
​boolean
is_private
​boolean
require_rsvp
​boolean
require_payment
​boolean
transparency
​string · enum

RFC 5545 busy/free behavior: opaque blocks time; transparent does not.

Enum values:
opaque
transparent

Create event for a profile › Responses

Created

id
​string · pattern: ^evt_[0-9a-fA-F]{32}…
profile_id
​string | null · pattern: ^prf_[0-9a-fA-F]{32}…

Owning profile ID. Null when the profile is no longer visible to the caller.

title
​string
description
​string | null
location
​string | null
start_time
​string · date-time
end_time
​string | null · date-time
start_timezone
​string | null
end_timezone
​string | null
recurrence_rule
​string | null
status
​string | null
slug
​string
image_url
​string | null · uri
is_all_day
​boolean
is_private
​boolean
require_rsvp
​boolean
require_payment
​boolean
cancellation_reason
​string | null
cancelled_at
​string | null · date-time
is_rescheduled
​boolean | null
created_at
​string | null · date-time
updated_at
​string | null · date-time
transparency
​string · enum

RFC 5545 busy/free behavior: opaque blocks time; transparent does not.

Enum values:
opaque
transparent
POST/v1/profiles/{profile_id}/events
curl --request POST \ --url https://api.every.day/v1/profiles/:profile_id/events \ --header 'Content-Type: application/json' \ --data ' { "profile_id": "profile_id", "title": "title", "description": "description", "location": "location", "start_time": "2026-06-06T09:30:00", "end_time": "2026-06-06T11:30:00", "start_timezone": "start_timezone", "end_timezone": "end_timezone", "start_date": "start_date", "end_date": "end_date", "recurrence_rule": "recurrence_rule", "slug": "slug", "image_url": "https://www.example.com/path/to/resource", "is_all_day": true, "is_private": true, "require_rsvp": true, "require_payment": true, "transparency": "opaque" } '
shell
Example Request Body
{ "profile_id": "profile_id", "title": "title", "description": "description", "location": "location", "start_time": "2026-06-06T09:30:00", "end_time": "2026-06-06T11:30:00", "start_timezone": "start_timezone", "end_timezone": "end_timezone", "start_date": "start_date", "end_date": "end_date", "recurrence_rule": "recurrence_rule", "slug": "slug", "image_url": "https://www.example.com/path/to/resource", "is_all_day": true, "is_private": true, "require_rsvp": true, "require_payment": true, "transparency": "opaque" }
json
Example Responses
No example specified for this content type
application/json

List a profile's series

GET
https://api.every.day
/v1/profiles/{profile_id}/series

Returns series belonging to the specified profile.

List a profile's series › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

List a profile's series › query Parameters

cursor
​string

Opaque cursor returned from a previous list response.

limit
​integer · min: 1 · max: 100

Maximum number of items to return per page. Range 1-100, default 20.

Default: 20

List a profile's series › Responses

Page

​object[] · required
has_more
​boolean · required
next_cursor
​string | null · required
GET/v1/profiles/{profile_id}/series
curl --request GET \ --url https://api.every.day/v1/profiles/:profile_id/series
shell
Example Responses
No example specified for this content type
application/json

Create series for a profile

POST
https://api.every.day
/v1/profiles/{profile_id}/series

Creates a series under a profile owned by the authenticated user. slug must be unique within the profile; conflicts return 409.

Create series for a profile › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

Create series for a profile › Headers

Idempotency-Key
​string · minLength: 8 · maxLength: 255

A client-generated identifier (UUIDv4 recommended; 8–255 chars, alphanumeric/underscore/hyphen) for the request. The header is validated and logged, but server-side deduplication is not enforced: resubmitting a create with the same key produces a second resource. Treat creates as non-idempotent and design retries accordingly. Deduplication is planned for a future API version.

Create series for a profile › Request Body

name
​string · required
slug
​string · required
description
​string | null
is_private
​boolean

Create series for a profile › Responses

Created

id
​string · pattern: ^ser_[0-9a-fA-F]{32}…
profile_id
​string | null · pattern: ^prf_[0-9a-fA-F]{32}…

Owning profile ID. Null when the profile is no longer visible to the caller.

name
​string
slug
​string
description
​string | null
is_private
​boolean
created_at
​string | null · date-time
updated_at
​string | null · date-time
POST/v1/profiles/{profile_id}/series
curl --request POST \ --url https://api.every.day/v1/profiles/:profile_id/series \ --header 'Content-Type: application/json' \ --data ' { "name": "name", "slug": "slug", "description": "description", "is_private": true } '
shell
Example Request Body
{ "name": "name", "slug": "slug", "description": "description", "is_private": true }
json
Example Responses
No example specified for this content type
application/json

List followers of a profile

GET
https://api.every.day
/v1/profiles/{profile_id}/followers

Returns users following the specified profile. Only returned if the profile is public, or if the authenticated user owns the profile.

List followers of a profile › path Parameters

profile_id
​string · pattern: ^prf_[0-9a-fA-F]{32}… · required

Prefixed unique identifier of the profile (e.g., prf_8f3ab21e49c44c8baf7b5e4a1b2c3d4e).

List followers of a profile › query Parameters

cursor
​string

Opaque cursor returned from a previous list response.

limit
​integer · min: 1 · max: 100

Maximum number of items to return per page. Range 1-100, default 20.

Default: 20

List followers of a profile › Responses

Page

​object[] · required
has_more
​boolean · required
next_cursor
​string | null · required
GET/v1/profiles/{profile_id}/followers
curl --request GET \ --url https://api.every.day/v1/profiles/:profile_id/followers
shell
Example Responses
No example specified for this content type
application/json

OrganizationsEvents