# Select Slot

> **ALPHA**

> **SECONDARY:** This is an ALPHA feature and needs to be enabled by Cronofy support. Please email [support@cronofy.com](mailto:support@cronofy.com) with the `client_id` of your Application to have it enabled.

#### Description
Books a time for a [Scheduling Request](/developers/api/scheduling-requests/index.md)
by posting the `start` of the chosen slot.

This is the second of the two [Time Selection](/developers/api/scheduling-requests/time-selection/index.md)
integration operations. Read that page first for the shared
[response envelope](/developers/api/scheduling-requests/time-selection/index.md),
[result vocabulary](/developers/api/scheduling-requests/time-selection/index.md),
[authentication](/developers/api/scheduling-requests/time-selection/index.md),
and error shapes.

Only a `start` is required: the Scheduling Request already fixes the meeting
length, so the `end` is derived from the request's duration. The `start` must
match the start of a slot returned by [Available Slots](/developers/api/scheduling-requests/time-selection/available-slots/index.md).

Selecting a time here runs the exact same booking as the human booking page:
the same calendar writes, notifications, and workflow triggers.

On success the response is `202 Accepted`, not `200`: the selection is taken but
the calendar write finalizes moments later. The `scheduling_request` rides along
and settles from `pending` to `complete` shortly after; query it again whenever
you like to see the confirmed event.

You do not build this URL. It is returned as the [opaque](/developers/api/scheduling-requests/time-selection/index.md)
`simple_select_slot_url` by [Available Slots](/developers/api/scheduling-requests/time-selection/available-slots/index.md),
alongside the times. This operation requires the `organizational_unit_scheduler`
scope.

#### Example Request
Send the request to the `simple_select_slot_url` returned by Available Slots,
exactly as given.

```http
POST {SIMPLE_SELECT_SLOT_URL} HTTP/1.1
Authorization: Bearer {API_KEY}
Content-Type: application/json; charset=utf-8

{
  "start": "2026-09-17T09:30:00Z"
}
```

#### Example Response
```http
HTTP/1.1 202 Accepted
Content-Type: application/json; charset=utf-8

{
  "integration_operation_result": {
    "type": "select_slot",
    "result": "accepted",
    "integration_operations": {},
    "selected_slot": {
      "start": "2026-09-17T09:30:00Z",
      "end": "2026-09-17T10:00:00Z"
    }
  },
  "scheduling_request": {
    "scheduling_request_id": "srq_7b9784257940f9bbbfcad097",
    "slot_selection": "pending",
    "primary_select_url": "https://app.cronofy.com/rts/wZ9tLbN4sWjH6yD1cF0a",
    "dashboard_url": "https://app.cronofy.com/scheduler/requests/7b9784257940f9bbbfcad097",
    "summary": "Intro call with Riya Patel"
  }
}
```

#### Request parameters
##### `start` *(required)*

A [`Time`](/developers/api/data-types/index.md) in UTC (for example
`2026-09-17T09:30:00Z`) of the chosen slot. It must match the `start` of a slot
returned by [Available Slots](/developers/api/scheduling-requests/time-selection/available-slots/index.md). The `end` is not
accepted; it is derived from the request's fixed duration.

A missing or unparseable `start` returns `invalid` (`422`); see
[Error responses](#error-responses).

##### `API_KEY` *(required)*

An access token for the Organizational Unit with the
`organizational_unit_scheduler` scope, or the `client_secret` of the linked
Internal Application. See [Authentication](/developers/api/scheduling-requests/time-selection/index.md).

#### Response parameters
##### `integration_operation_result`

An [`Object`](/developers/api/data-types/index.md) describing the outcome of the
operation. See [The response envelope](/developers/api/scheduling-requests/time-selection/index.md).

##### `integration_operation_result.type`

A [`String`](/developers/api/data-types/index.md) of `select_slot` for this
operation.

##### `integration_operation_result.result`

A [`String`](/developers/api/data-types/index.md) outcome, one of:

- `accepted`: the selection was taken; the calendar write finalizes moments
later (`202`).

- `conflict`: a concurrent booking briefly held the slot; retry the same
payload (`409`).

- `not_possible`: the request's state means this cannot be done (`409`); see
`result_detail`.

- `invalid`: the input was wrong, such as a missing or malformed `start`
(`422`); see the top-level `errors`.

##### `integration_operation_result.result_detail`

Present only when `result` is `not_possible`. A [`String`](/developers/api/data-types/index.md)
explaining why, one of `slot_unavailable`, `superseded`, `no_longer_possible`,
`requires_more_input`, or `configuration_error`. See
[result_detail](/developers/api/scheduling-requests/time-selection/index.md).

##### `integration_operation_result.integration_operations`

An [`Object`](/developers/api/data-types/index.md) of the actions available next.
Empty on an `accepted` selection (nothing is left to do). On a `slot_unavailable`
result it carries a `simple_select_slot_url` so you can re-pick without another
call.

##### `integration_operation_result.selected_slot`

Present when `result` is `accepted`. An [`Object`](/developers/api/data-types/index.md)
with the `start` and `end` of the booked slot.

##### `integration_operation_result.selected_slot.start`

A [`Time`](/developers/api/data-types/index.md) representing the UTC start of the
booked slot.

##### `integration_operation_result.selected_slot.end`

A [`Time`](/developers/api/data-types/index.md) representing the UTC end of the
booked slot, derived from the request's fixed duration.

##### `scheduling_request`

The full Scheduling Request, in the same shape as the
[Query](/developers/api/scheduling-requests/query/index.md)
response. It travels alongside every envelope response so you can render the
current state without a second call.

#### Error responses
Beyond the shared [errors](/developers/api/scheduling-requests/time-selection/index.md)
for authentication, authorization, an unknown token, and rate limiting, this
operation can return the following.

##### Chosen time already gone
`not_possible` with a `result_detail` of `slot_unavailable` (`409`): the request
is still open, but that time has been taken. The response hands back a fresh
`available_slots` / `suggested_slots` list and the `simple_select_slot_url`, so
you can re-pick without another call.

```json
{
  "integration_operation_result": {
    "type": "select_slot",
    "result": "not_possible",
    "result_detail": "slot_unavailable",
    "integration_operations": {
      "simple_select_slot_url": "{SIMPLE_SELECT_SLOT_URL}"
    },
    "available_slots": [
      { "start": "2026-09-17T10:00:00Z", "end": "2026-09-17T10:30:00Z" },
      { "start": "2026-09-17T14:00:00Z", "end": "2026-09-17T14:30:00Z" }
    ],
    "suggested_slots": [
      { "start": "2026-09-17T10:00:00Z", "end": "2026-09-17T10:30:00Z" }
    ]
  },
  "scheduling_request": { ... }
}
```

##### Concurrent booking held the slot
`conflict` (`409`): another booking briefly held the target calendars. Nothing is
wrong; retry the same payload in a moment.

```json
{
  "integration_operation_result": {
    "type": "select_slot",
    "result": "conflict",
    "integration_operations": {}
  },
  "scheduling_request": { ... }
}
```

##### Missing or malformed start
`invalid` (`422`): the `start` was absent or unparseable. A top-level `errors`
map (the public API's shape) names the offending field:
`errors.required` when missing, `errors.not_recognized` when unparseable.

```json
{
  "integration_operation_result": {
    "type": "select_slot",
    "result": "invalid",
    "integration_operations": {}
  },
  "errors": {
    "start": [
      { "key": "errors.required", "description": "required" }
    ]
  },
  "scheduling_request": { ... }
}
```

##### Request needs more than a time, or is no longer open
`not_possible` with a `result_detail` of `requires_more_input`, `superseded`,
`no_longer_possible`, or `configuration_error` (`409`), depending on the
request's state. See [result_detail](/developers/api/scheduling-requests/time-selection/index.md)
for what each means and how to react.

```json
{
  "integration_operation_result": {
    "type": "select_slot",
    "result": "not_possible",
    "result_detail": "no_longer_possible",
    "integration_operations": {}
  },
  "scheduling_request": { ... }
}
```


---
[Read in HTML](/developers/api/scheduling-requests/time-selection/select-slot/)
