I'mBoardDocs
Resources

Proposed Slots

Time options for a meeting that participants vote on, used for collaborative scheduling.

Proposed slots are time options for a board meeting that participants vote on. They enable collaborative scheduling — members propose times, vote on availability, and the organizer confirms the winning slot as the meeting time.

Relationship to Meetings

Every proposed slot belongs to exactly one meeting. All endpoints are nested under a meeting.

Endpoints

MethodPathDescription
GET/api/v1/boards/:boardId/meetings/:meetingId/slotsList proposed slots
POST/api/v1/boards/:boardId/meetings/:meetingId/slotsCreate a proposed slot
PUT/api/v1/boards/:boardId/meetings/:meetingId/slots/:slotId/voteVote on a slot
DELETE/api/v1/boards/:boardId/meetings/:meetingId/slots/:slotIdDelete a slot
POST/api/v1/boards/:boardId/meetings/:meetingId/slots/:slotId/confirmConfirm slot as meeting time

Proposed Slot Object

{
  "object": "proposed_slot",
  "id": "60d5ec49f1a2c8b1f8e4e1c1",
  "meetingId": "60d5ec49f1a2c8b1f8e4e1b1",
  "createdByUserId": "507f1f77bcf86cd799439011",
  "startTime": "2025-07-15T14:00:00.000Z",
  "timezone": "America/New_York",
  "durationInMinutes": 120,
  "feedbacks": [
    {
      "userId": "507f1f77bcf86cd799439011",
      "vote": "ok",
      "comment": null,
      "email": null,
      "isGuest": false
    },
    {
      "userId": null,
      "vote": "challenging",
      "comment": "Tight but can make it",
      "email": "[email protected]",
      "isGuest": true
    }
  ],
  "createdAt": "2025-06-01T10:00:00.000Z",
  "updatedAt": "2025-06-10T09:30:00.000Z"
}

Fields

FieldTypeDescription
object"proposed_slot"Always "proposed_slot"
idstringOpaque slot ID
meetingIdstringThe meeting this slot belongs to
createdByUserIdstring | nullUser who proposed this time
startTimestringProposed start time (ISO-8601 UTC)
timezonestringIANA timezone for display (e.g. America/New_York)
durationInMinutesnumberDuration in minutes (default 120)
feedbacksarrayVotes from board members and invited guests (see below)
createdAtstringISO-8601 timestamp
updatedAtstringISO-8601 timestamp

Feedback Object

FieldTypeDescription
userIdstring | nullThe voting member's user ID, null for a guest vote
votestringOne of: ok, challenging, cant, didNotVote
commentstring | nullOptional comment (max 500 characters)
emailstring | nullEmail address the vote was submitted under, for guest votes
isGuestbooleantrue when the vote came from a meeting guest rather than a board member

Vote Values

ValueMeaning
okCan attend
challengingMaybe / difficult
cantCannot attend
didNotVoteHas not voted yet (system-assigned; not settable via the vote endpoint)

List Proposed Slots

GET /api/v1/boards/:boardId/meetings/:meetingId/slots

Returns all proposed time slots for a meeting. Feedbacks are filtered to include only current board members plus any guest votes.

Response

{
  "data": [
    /* array of proposed slot objects */
  ],
  "meta": { "nextCursor": null, "hasMore": false }
}

Errors

CodeStatusWhen
UNAUTHENTICATED401Missing or invalid token
FORBIDDEN403User does not have access to this board
RESOURCE_NOT_FOUND404Board or meeting does not exist

Create a Proposed Slot

POST /api/v1/boards/:boardId/meetings/:meetingId/slots

Proposes a new time slot. The creator is automatically marked as ok. All other board members start as didNotVote. Requires at least collaborator access.

Request Body

Only startTime, timezone, and durationInMinutes are accepted — unknown fields are rejected.

FieldTypeRequiredDescription
startTimestringYesProposed start time (ISO-8601), must not be in the past
timezonestringYesIANA timezone (e.g. America/New_York)
durationInMinutesintegerNoDuration 15–180 (default 120)

Response

Returns 201 with the created proposed slot object wrapped in { "data": ... }.

Errors

CodeStatusWhen
INVALID_REQUEST_BODY400Missing/invalid fields, or startTime is in the past
UNAUTHENTICATED401Missing or invalid token
FORBIDDEN403Caller is not at least a collaborator
BILLING_RESTRICTED403Billing not active
RESOURCE_NOT_FOUND404Board or meeting does not exist
CONFLICT409A slot already exists at the same start time — details.slotId names the existing slot; treat this as "already proposed," not a transient error

Vote on a Slot

PUT /api/v1/boards/:boardId/meetings/:meetingId/slots/:slotId/vote

Casts or updates the authenticated user's vote on a proposed slot. Only vote and comment are accepted.

Request Body

FieldTypeRequiredDescription
votestringYesOne of ok, challenging, cant (didNotVote cannot be set directly)
commentstringNoOptional comment (max 500 characters)

Response

Returns the updated proposed slot object wrapped in { "data": ... }.

Errors

CodeStatusWhen
INVALID_REQUEST_BODY400Invalid vote value or unknown fields
UNAUTHENTICATED401Missing or invalid token
FORBIDDEN403Caller is not at least a collaborator
BILLING_RESTRICTED403Billing not active
RESOURCE_NOT_FOUND404Board, meeting, or slot does not exist
CONFLICT409details.reason: "SLOT_VOTES_CLOSED" — the meeting is no longer collecting slot votes; not retryable

Delete a Slot

DELETE /api/v1/boards/:boardId/meetings/:meetingId/slots/:slotId

Removes a proposed time slot.

Response

{ "data": { "deleted": true } }

Errors

CodeStatusWhen
UNAUTHENTICATED401Missing or invalid token
FORBIDDEN403Caller is not at least a collaborator
BILLING_RESTRICTED403Billing not active
RESOURCE_NOT_FOUND404Board or slot does not exist
CONFLICT409details.reason: "SLOT_IS_PROMOTED" — this slot backs the meeting's currently booked time; not retryable

Confirm Slot as Meeting Time

POST /api/v1/boards/:boardId/meetings/:meetingId/slots/:slotId/confirm

Confirms a proposed slot as the meeting's scheduled time. Copies the slot's start time, duration, and timezone to the meeting.

Response

Returns the updated meeting object (see Meetings).

Errors

CodeStatusWhen
UNAUTHENTICATED401Missing or invalid token
FORBIDDEN403Caller is not at least a collaborator
BILLING_RESTRICTED403Billing not active
RESOURCE_NOT_FOUND404Board, meeting, or slot does not exist
CONFLICT409details.reason is one of: SLOT_START_IN_PAST (slot's start time already passed), MEETING_FINALIZED (the meeting is no longer editable) — neither is retryable

On this page