Nylas Configurations API

A configuration is a collection of event settings and preferences. Nylas Scheduler stores Configuration objects in the Scheduler database and loads them as Scheduling Pages in the Scheduler UI. A configuration can be either private if it uses a session, or public if it does not. By default, Nylas creates public configurations (`requires_session_auth: false`). To create a private configuration, set `requires_session_auth` to `true`. After you create a private configuration, you can make a [`POST /v3/scheduling/sessions` request](/docs/reference/api/sessions/post-sessions/) that includes the Configuration object ID to create a session. ## Agent Accounts as the organizer The `grant_id` in the path can be an [Agent Account](/docs/v3/agent-accounts/) grant, which makes the Agent Account the organizer of the Configuration. Guests then book against the agent's own calendar and receive confirmation email from the agent's own address, with no OAuth connection involved. Two limits apply when an Agent Account is a participant: - Set `availability.calendar_ids` to `["primary"]` and `booking.calendar_id` to `"primary"`. Scheduler reads and writes the Agent Account's primary calendar only. - Round-robin Configurations aren't supported. An Agent Account can't be a host under `max-fairness` or `max-availability`, though one-on-one, collective, and group Configurations all work. The scopes table below covers Google and Microsoft grants. Agent Accounts have no OAuth token, so they authenticate with your API key alone. For the full walkthrough, see [Use Scheduler with Agent Accounts](/docs/v3/scheduler/agent-accounts/). ## Configurations scopes The table below lists the Configurations endpoints and which scopes they require. The table shortens the full scope URI for space reasons, so add the prefix for the provider when requesting scopes. The ☑️ in each column indicates the most restrictive scope you can request for each provider and still use that API. More permissive scopes appear under the minimum option. If you're already using one of the permissive scopes, you don't need to add the more restrictive scope. | Endpoint | Google Scopes`https://www.googleapis.com/auth/...` | Microsoft Scopes`https://graph.microsoft.com/...` | | :-------------------------------------------------------------------------------------------------- | :------------------------------------------------------ | :----------------------------------------------------- | | **POST** `/scheduling/configurations`**PUT** `/scheduling/configuration/` | `/calendar.readonly` ☑️`/calendar` | `Calendars.Read` ☑️`Calendars.ReadWrite` | For more information about scopes, see [Using scopes to request user data](/docs/dev-guide/scopes/).

Operations 5

POST /v3/grants/{grant_id}/scheduling/configurations Create Configuration #
GET /v3/grants/{grant_id}/scheduling/configurations Return all Configuration objects #
GET /v3/grants/{grant_id}/scheduling/configurations/{configuration_id} Return a Configuration #
PUT /v3/grants/{grant_id}/scheduling/configurations/{configuration_id} Update Configuration #
DELETE /v3/grants/{grant_id}/scheduling/configurations/{configuration_id} Delete a Configuration #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/nylas-configurations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

nylas-configurations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Nylas Configurations API
  version: v3
  summary: The complete Nylas v3 API — Email, Calendar, Contacts, Notetaker, Scheduling, Administration, and Migration.
  description: The Nylas API is designed using the REST ideology to provide simple and predictable URIs to access and modify objects.
  contact:
    url: https://www.nylas.com/
  x-provenance:
    method: harvested
    first_party: true
    publisher: Nylas
    source: https://developer.nylas.com/_spec-files/nylas-api.yaml
    harvested: '2026-08-21'
    sha256: 7ff001d571e163b1ffe22178741b59f813d8208ec878157a839a33dc2c13fd35
    bytes: 1666223
    note: 'Published by Nylas as the unified contract for the Nylas v3 API and stored verbatim; API Evangelist added only this provenance block. Submitted by the provider in api-evangelist/nylas#1 and verified against the live URL before harvest: OpenAPI 3.1.0, 118 paths, 208 operations, 174 component schemas, 100% of operations carrying summary, description, tag and a unique operationId, x-code-samples on 208 of 208. This document REPLACES a 22-operation scaffold API Evangelist derived from reading the documentation, now quarantined under openapi/_scaffold/.'
  x-evidence:
  - url: https://developer.nylas.com/_spec-files/nylas-api.yaml
    what: the published unified contract, harvested verbatim 2026-08-21 (200, text/yaml, 1,666,223 bytes)
  - url: https://developer.nylas.com/.well-known/api-catalog
    what: RFC 9727 linkset advertising that URL as service-desc for api.us.nylas.com and api.eu.nylas.com (200, application/linkset+json)
servers:
- url: https://api.us.nylas.com
  description: U.S.
- url: https://api.eu.nylas.com
  description: E.U.
security:
- ACCESS_TOKEN: []
- NYLAS_API_KEY: []
tags:
- name: Configurations
  description: A configuration is a collection of event settings and preferences.
paths:
  /v3/grants/{grant_id}/scheduling/configurations:
    parameters:
    - schema:
        type: string
      name: grant_id
      in: path
      required: true
      description: 'ID of the grant to access. You can also use the email address associated with the grant, or use

        `/me/` to refer to the grant associated with an access token.'
      example: nyla@example.com
    post:
      summary: Create Configuration
      tags:
      - Configurations
      operationId: post-configurations
      description: 'Creates a Configuration object that you use to define settings and preferences for a scheduling

        session.


        ### Duplicate email notifications


        If the organizer in a scheduling session is a Microsoft account user, both the organizer and all

        attendees might receive duplicate email notifications, including booking confirmations, rescheduling

        and cancellation notifications, and reminders. This is because of the way Microsoft handles email

        notifications. If you set notifications in Scheduler, Microsoft also sends its own notifications

        to the event organizer and attendees. Microsoft doesn''t provide a way to disable these

        notifications.


        ### Metadata as additional fields


        You can add metadata fields (`type: metadata`) to your Configuration to store custom information

        about a booking. For example, you can add campaign tags or keywords to track specific bookings.


        Booking webhook notifications (`booking.created`, `booking.rescheduled`, `booking.cancelled`,

        `booking.pending`, and `booking.reminder`) include your metadata fields in

        `booking_info.additional_fields`. Calendar event webhooks (for example, `event.updated`) do _not_

        include them, and email notifications and booking forms don''t display them.


        To identify Scheduler-related changes in event webhooks instead, use the metadata that Scheduler

        stamps on the calendar events it creates. For more information, see the

        `event.updated` notification schema.'
      x-scopes:
        google:
          min: https://www.googleapis.com/auth/calendar.readonly
          others: https://www.googleapis.com/auth/calendar
        microsoft:
          min: https://graph.microsoft.com/Calendars.Read
          others: https://graph.microsoft.com/Calendars.ReadWrite
      security:
      - NYLAS_API_KEY: []
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/configuration'
                title: Standard Configuration
              - $ref: '#/components/schemas/group-configuration'
                title: Group Configuration
      x-code-samples:
      - lang: bash
        label: cURL
        source: "curl --compressed --request POST \\\n  --url \"https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations\" \\\n  --header 'Accept: application/json' \\\n  --header 'Authorization: Bearer <NYLAS_API_KEY>' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"requires_session_auth\": false,\n    \"participants\": [{\n      \"name\": \"Nyla\",\n      \"email\": \"nyla@example.com\",\n      \"is_organizer\": true,\n      \"availability\": {\n        \"calendar_ids\": [\"primary\"]\n      },\n      \"booking\": {\n        \"calendar_id\": \"primary\"\n      }\n    }],\n    \"availability\": {\n      \"duration_minutes\": 30\n    },\n    \"event_booking\": {\n      \"title\": \"Testing Scheduler\",\n      \"hide_participants\": false,\n      \"conferencing\": {\n        \"provider\": \"Zoom Meeting\",\n        \"autocreate\": {\n          \"conf_grant_id\": \"<NYLAS_GRANT_ID>\",\n          \"conf_settings\": {\n            \"settings\": {\n              \"join_before_host\": true,\n              \"waiting_room\": false,\n              \"mute_upon_entry\": false,\n              \"auto_recording\": \"none\"\n            }\n          }\n        }\n      }\n    }\n  }'"
      - lang: javascript
        label: Node.js SDK
        source: "import Nylas from \"nylas\";\n\nconst nylas = new Nylas({\n  apiKey: \"<NYLAS_API_KEY>\",\n  apiUri: \"<NYLAS_API_URI>\",\n});\n\nasync function createConfiguration() {\n  try {\n    const configuration = await nylas.scheduler.configurations.create({\n      identifier: \"<NYLAS_GRANT_ID>\",\n      requestBody: {\n        participants: [\n          {\n            email: \"host@example.com\",\n            isOrganizer: true,\n            availability: {\n              calendarIds: [\"primary\"],\n            },\n            booking: {\n              calendarId: \"primary\",\n            },\n          },\n        ],\n        availability: {\n          durationMinutes: 30,\n        },\n        eventBooking: {\n          title: \"30-minute meeting\",\n        },\n      },\n    });\n\n    console.log(\"Configuration:\", configuration);\n  } catch (error) {\n    console.error(\"Error creating configuration:\", error);\n  }\n}\n\ncreateConfiguration();\n"
      - lang: python
        label: Python SDK
        source: "from nylas import Client\n\nnylas = Client(\n    \"<NYLAS_API_KEY>\",\n    \"<NYLAS_API_URI>\",\n)\n\nconfiguration = nylas.scheduler.configurations.create(\n    identifier=\"<NYLAS_GRANT_ID>\",\n    request_body={\n        \"participants\": [\n            {\n                \"name\": \"<HOST_NAME>\",\n                \"email\": \"<HOST_EMAIL>\",\n                \"is_organizer\": True,\n                \"availability\": {\n                    \"calendar_ids\": [\"<CALENDAR_ID>\"],\n                },\n                \"booking\": {\n                    \"calendar_id\": \"<CALENDAR_ID>\",\n                },\n            }\n        ],\n        \"availability\": {\n            \"duration_minutes\": 30,\n        },\n        \"event_booking\": {\n            \"title\": \"30-minute meeting\",\n        },\n    },\n)\n\nprint(\"Configuration:\", configuration)\n"
      - lang: ruby
        label: Ruby SDK
        source: "# Load gems\nrequire 'nylas'\n\n# Initialize Nylas client\nnylas = Nylas::Client.new(\n  api_key: \"<NYLAS_API_KEY>\"\n)\n\nrequest_body = {\n  \"requires_session_auth\": false,\n  \"participants\": [\n    {\n        \"name\": \"Test\",\n        \"email\": \"nylas_test_8@nylas.com\",\n        \"is_organizer\": true,\n        \"availability\": {\n          \"calendar_ids\": [\n            \"primary\"\n          ]\n        },\n        \"booking\": {\n          \"calendar_id\": \"primary\"\n        }\n      }\n    ],\n    \"availability\": {\n      \"duration_minutes\": 30\n    },\n    \"event_booking\": {\n      \"title\": \"My test event\",\n      \"hide_participants\": false\n    }\n}\n\n# Create  a configuration\nconfiguration, _request_ids = nylas.scheduler.configurations.create(identifier: \"<NYLAS_GRANT_ID>\", request_body: request_body)\n\nputs configuration"
      - lang: java
        label: Java SDK
        source: "import com.nylas.NylasClient;\nimport com.nylas.models.Configuration;\nimport com.nylas.models.ConfigurationAvailability;\nimport com.nylas.models.ConfigurationAvailabilityParticipant;\nimport com.nylas.models.ConfigurationBookingParticipant;\nimport com.nylas.models.ConfigurationEventBooking;\nimport com.nylas.models.ConfigurationParticipant;\nimport com.nylas.models.CreateConfigurationRequest;\nimport com.nylas.models.NylasApiError;\nimport com.nylas.models.NylasSdkTimeoutError;\nimport com.nylas.models.Response;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class CreateConfiguration {\n  public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {\n    NylasClient nylas = new NylasClient.Builder(\"<NYLAS_API_KEY>\").build();\n\n    ConfigurationParticipant participant = new ConfigurationParticipant.Builder(\"host@example.com\")\n        .isOrganizer(true)\n        .availability(new ConfigurationAvailabilityParticipant.Builder()\n            .calendarIds(Collections.singletonList(\"primary\"))\n            .build())\n        .booking(new ConfigurationBookingParticipant.Builder()\n            .calendarId(\"primary\")\n            .build())\n        .build();\n\n    ConfigurationAvailability availability = new ConfigurationAvailability.Builder()\n        .durationMinutes(30)\n        .build();\n\n    ConfigurationEventBooking eventBooking = new ConfigurationEventBooking.Builder()\n        .title(\"30-minute meeting\")\n        .build();\n\n    CreateConfigurationRequest requestBody = new CreateConfigurationRequest.Builder(\n        Collections.singletonList(participant), availability, eventBooking)\n        .build();\n\n    Response<Configuration> configuration = nylas.scheduler().configurations()\n        .create(\"<NYLAS_GRANT_ID>\", requestBody);\n\n    System.out.println(\"Configuration: \" + configuration.getData());\n  }\n}\n"
      - lang: kotlin
        label: Kotlin SDK
        source: "import com.nylas.NylasClient\nimport com.nylas.models.ConfigurationAvailability\nimport com.nylas.models.ConfigurationAvailabilityParticipant\nimport com.nylas.models.ConfigurationBookingParticipant\nimport com.nylas.models.ConfigurationEventBooking\nimport com.nylas.models.ConfigurationParticipant\nimport com.nylas.models.CreateConfigurationRequest\n\nfun main() {\n  val nylas = NylasClient.Builder(\"<NYLAS_API_KEY>\").build()\n\n  val participant = ConfigurationParticipant.Builder(\"host@example.com\")\n      .isOrganizer(true)\n      .availability(ConfigurationAvailabilityParticipant.Builder()\n          .calendarIds(listOf(\"primary\"))\n          .build())\n      .booking(ConfigurationBookingParticipant.Builder()\n          .calendarId(\"primary\")\n          .build())\n      .build()\n\n  val availability = ConfigurationAvailability.Builder()\n      .durationMinutes(30)\n      .build()\n\n  val eventBooking = ConfigurationEventBooking.Builder()\n      .title(\"30-minute meeting\")\n      .build()\n\n  val requestBody = CreateConfigurationRequest.Builder(\n      listOf(participant), availability, eventBooking)\n      .build()\n\n  val configuration = nylas.scheduler().configurations()\n      .create(\"<NYLAS_GRANT_ID>\", requestBody)\n\n  println(\"Configuration: ${configuration.data}\")\n}\n"
      responses:
        '200':
          $ref: '#/components/responses/configuration'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '429':
          $ref: '#/components/responses/429'
        '504':
          $ref: '#/components/responses/504'
    get:
      summary: Return all Configuration objects
      tags:
      - Configurations
      operationId: get-configurations
      description: Returns all Configuration objects.
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page_token'
      x-code-samples:
      - lang: bash
        label: cURL
        source: "curl --compressed --request GET \\\n  --url \"https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations\" \\\n  --header 'Accept: application/json' \\\n  --header 'Authorization: Bearer <NYLAS_API_KEY>' \\\n  --header 'Content-Type: application/json'"
      - lang: javascript
        label: Node.js SDK
        source: "import Nylas from \"nylas\";\n\nconst nylas = new Nylas({\n  apiKey: \"<NYLAS_API_KEY>\",\n  apiUri: \"<NYLAS_API_URI>\",\n});\n\nasync function listConfigurations() {\n  try {\n    const configurations = await nylas.scheduler.configurations.list({\n      identifier: \"<NYLAS_GRANT_ID>\",\n    });\n\n    console.log(\"Configurations:\", configurations);\n  } catch (error) {\n    console.error(\"Error listing configurations:\", error);\n  }\n}\n\nlistConfigurations();\n"
      - lang: python
        label: Python SDK
        source: "from nylas import Client\n\nnylas = Client(\n    \"<NYLAS_API_KEY>\",\n    \"<NYLAS_API_URI>\",\n)\n\nconfigurations = nylas.scheduler.configurations.list(\n    identifier=\"<NYLAS_GRANT_ID>\",\n    query_params={\n        \"limit\": 50,\n    },\n)\n\nprint(\"Configurations:\", configurations)\n"
      - lang: ruby
        label: Ruby SDK
        source: "# Load gems\nrequire 'nylas'\n\n# Initialize Nylas client\nnylas = Nylas::Client.new(\n  api_key: \"<NYLAS_API_KEY>\"\n)\n\n# Get a list of configurations\nconfigurations, _request_ids = nylas.scheduler.configurations.list(identifier: \"<NYLAS_GRANT_ID>\")\n\n# Loop the configurations\n\nconfigurations.each {|configuration|\n\tputs(\"ID: #{configuration[:id]} | Slug: #{configuration[:slug]}\")\n}"
      - lang: java
        label: Java SDK
        source: "import com.nylas.NylasClient;\nimport com.nylas.models.Configuration;\nimport com.nylas.models.ListResponse;\nimport com.nylas.models.NylasApiError;\nimport com.nylas.models.NylasSdkTimeoutError;\n\npublic class ListConfigurations {\n  public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {\n    NylasClient nylas = new NylasClient.Builder(\"<NYLAS_API_KEY>\").build();\n\n    ListResponse<Configuration> configurations = nylas.scheduler().configurations()\n        .list(\"<NYLAS_GRANT_ID>\");\n\n    System.out.println(\"Configurations: \" + configurations.getData());\n  }\n}\n"
      - lang: kotlin
        label: Kotlin SDK
        source: "import com.nylas.NylasClient\n\nfun main() {\n  val nylas = NylasClient.Builder(\"<NYLAS_API_KEY>\").build()\n\n  val configurations = nylas.scheduler().configurations().list(\"<NYLAS_GRANT_ID>\")\n\n  println(\"Configurations: ${configurations.data}\")\n}\n"
      responses:
        '200':
          $ref: '#/components/responses/configurations'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '429':
          $ref: '#/components/responses/429'
        '504':
          $ref: '#/components/responses/504'
      security:
      - NYLAS_API_KEY: []
  /v3/grants/{grant_id}/scheduling/configurations/{configuration_id}:
    parameters:
    - schema:
        type: string
      name: grant_id
      in: path
      required: true
      description: 'ID of the grant to access. You can also use the email address associated with the grant, or use

        `/me/` to refer to the grant associated with an access token.'
      example: nyla@example.com
    - schema:
        type: string
      name: configuration_id
      in: path
      required: true
      description: The ID of the Configuration object to access.
    get:
      summary: Return a Configuration
      tags:
      - Configurations
      operationId: get-configurations-id
      description: Returns the specified Configuration object.
      x-code-samples:
      - lang: bash
        label: cURL
        source: "curl --compressed --request GET \\\n  --url \"https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations/<SCHEDULER_CONFIG_ID>\" \\\n  --header 'Accept: application/json' \\\n  --header 'Authorization: Bearer <NYLAS_API_KEY>' \\\n  --header 'Content-Type: application/json'"
      - lang: javascript
        label: Node.js SDK
        source: "import Nylas from \"nylas\";\n\nconst nylas = new Nylas({\n  apiKey: \"<NYLAS_API_KEY>\",\n  apiUri: \"<NYLAS_API_URI>\",\n});\n\nasync function findConfiguration() {\n  try {\n    const configuration = await nylas.scheduler.configurations.find({\n      identifier: \"<NYLAS_GRANT_ID>\",\n      configurationId: \"<CONFIGURATION_ID>\",\n    });\n\n    console.log(\"Configuration:\", configuration);\n  } catch (error) {\n    console.error(\"Error finding configuration:\", error);\n  }\n}\n\nfindConfiguration();\n"
      - lang: python
        label: Python SDK
        source: "from nylas import Client\n\nnylas = Client(\n    \"<NYLAS_API_KEY>\",\n    \"<NYLAS_API_URI>\",\n)\n\nconfiguration = nylas.scheduler.configurations.find(\n    identifier=\"<NYLAS_GRANT_ID>\",\n    config_id=\"<SCHEDULER_CONFIG_ID>\",\n)\n\nprint(\"Configuration:\", configuration)\n"
      - lang: ruby
        label: Ruby SDK
        source: "# Load gems\nrequire 'nylas'\n\n# Initialize Nylas client\nnylas = Nylas::Client.new(\n  api_key: \"<NYLAS_API_KEY>\"\n)\n\nconfiguration, _request_ids = nylas.scheduler.configurations.find(identifier: \"<NYLAS_GRANT_ID>\", configuration_id: \"<SCHEDULER_CONFIG_ID>\")\n\nputs configuration"
      - lang: java
        label: Java SDK
        source: "import com.nylas.NylasClient;\nimport com.nylas.models.Configuration;\nimport com.nylas.models.NylasApiError;\nimport com.nylas.models.NylasSdkTimeoutError;\nimport com.nylas.models.Response;\n\npublic class FindConfiguration {\n  public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {\n    NylasClient nylas = new NylasClient.Builder(\"<NYLAS_API_KEY>\").build();\n\n    Response<Configuration> configuration = nylas.scheduler().configurations()\n        .find(\"<NYLAS_GRANT_ID>\", \"<CONFIGURATION_ID>\");\n\n    System.out.println(\"Configuration: \" + configuration.getData());\n  }\n}\n"
      - lang: kotlin
        label: Kotlin SDK
        source: "import com.nylas.NylasClient\n\nfun main() {\n  val nylas = NylasClient.Builder(\"<NYLAS_API_KEY>\").build()\n\n  val configuration = nylas.scheduler().configurations()\n      .find(\"<NYLAS_GRANT_ID>\", \"<CONFIGURATION_ID>\")\n\n  println(\"Configuration: ${configuration.data}\")\n}\n"
      responses:
        '200':
          $ref: '#/components/responses/configuration'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '504':
          $ref: '#/components/responses/504'
      security:
      - NYLAS_API_KEY: []
    put:
      summary: Update Configuration
      tags:
      - Configurations
      operationId: put-configurations-id
      description: 'Updates the specified Configuration object.


        When you make a `PUT` request, Nylas replaces all data in the nested object with the information

        included in your request. For more information, see

        Updating objects.'
      x-scopes:
        google:
          min: https://www.googleapis.com/auth/calendar.readonly
          others: https://www.googleapis.com/auth/calendar
        microsoft:
          min: https://graph.microsoft.com/Calendars.Read
          others: https://graph.microsoft.com/Calendars.ReadWrite
      security:
      - NYLAS_API_KEY: []
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/configuration'
                title: Standard Configuration
              - $ref: '#/components/schemas/group-configuration'
                title: Group Configuration
      x-code-samples:
      - lang: bash
        label: cURL
        source: "curl --compressed --request PUT \\\n  --url \"https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations/<SCHEDULER_CONFIGURATION_ID>\" \\\n  --header 'Accept: application/json' \\\n  --header 'Authorization: Bearer <NYLAS_API_KEY>' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n     \"event_booking\": {\n      \"title\": \"Testing Scheduler\",\n      \"hide_participants\": false,\n      \"conferencing\": {\n        \"provider\": \"Zoom Meeting\",\n        \"autocreate\": {\n          \"conf_grant_id\": \"<NYLAS_GRANT_ID>\",\n          \"conf_settings\": {\n            \"settings\": {\n              \"join_before_host\": true,\n              \"waiting_room\": false,\n              \"mute_upon_entry\": false,\n              \"auto_recording\": \"none\"\n            }\n          }\n        }\n      }\n    }\n    \"scheduler\": {\n      \"rescheduling_url\": \"https://www.example.com/reschdule/:booking_ref\",\n      \"cancellation_url\": \"https://www.example.com/cancel/:booking_ref\" \n    }\n  }'"
      - lang: javascript
        label: Node.js SDK
        source: "import Nylas from \"nylas\";\n\nconst nylas = new Nylas({\n  apiKey: \"<NYLAS_API_KEY>\",\n  apiUri: \"<NYLAS_API_URI>\",\n});\n\nasync function updateConfiguration() {\n  try {\n    const configuration = await nylas.scheduler.configurations.update({\n      identifier: \"<NYLAS_GRANT_ID>\",\n      configurationId: \"<CONFIGURATION_ID>\",\n      requestBody: {\n        availability: {\n          durationMinutes: 45,\n        },\n      },\n    });\n\n    console.log(\"Updated configuration:\", configuration);\n  } catch (error) {\n    console.error(\"Error updating configuration:\", error);\n  }\n}\n\nupdateConfiguration();\n"
      - lang: ruby
        label: Ruby SDK
        source: "# Load gems\nrequire 'nylas'\n\n# Initialize Nylas client\nnylas = Nylas::Client.new(\n  api_key: \"<NYLAS_API_KEY>\"\n)\n\nrequest_body = {\n  \"availability\": {\n    \"duration_minutes\": 60\n  }\n}\n\nconfiguration, _request_ids = nylas.scheduler.configurations.update(identifier: \"<NYLAS_GRANT_ID>\", configuration_id: \"<SCHEDULER_CONFIG_ID>\", request_body: request_body)\n\nputs configuration"
      - lang: java
        label: Java SDK
        source: "import com.nylas.NylasClient;\nimport com.nylas.models.Configuration;\nimport com.nylas.models.ConfigurationAvailability;\nimport com.nylas.models.NylasApiError;\nimport com.nylas.models.NylasSdkTimeoutError;\nimport com.nylas.models.Response;\nimport com.nylas.models.UpdateConfigurationRequest;\n\npublic class UpdateConfiguration {\n  public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {\n    NylasClient nylas = new NylasClient.Builder(\"<NYLAS_API_KEY>\").build();\n\n    ConfigurationAvailability availability = new ConfigurationAvailability.Builder()\n        .durationMinutes(45)\n        .build();\n\n    UpdateConfigurationRequest requestBody = new UpdateConfigurationRequest.Builder()\n        .availability(availability)\n        .build();\n\n    Response<Configuration> configuration = nylas.scheduler().configurations()\n        .update(\"<NYLAS_GRANT_ID>\", \"<CONFIGURATION_ID>\", requestBody);\n\n    System.out.println(\"Updated configuration: \" + configuration.getData());\n  }\n}\n"
      - lang: kotlin
        label: Kotlin SDK
        source: "import com.nylas.NylasClient\nimport com.nylas.models.ConfigurationAvailability\nimport com.nylas.models.UpdateConfigurationRequest\n\nfun main() {\n  val nylas = NylasClient.Builder(\"<NYLAS_API_KEY>\").build()\n\n  val availability = ConfigurationAvailability.Builder()\n      .durationMinutes(45)\n      .build()\n\n  val requestBody = UpdateConfigurationRequest.Builder()\n      .availability(availability)\n      .build()\n\n  val configuration = nylas.scheduler().configurations()\n      .update(\"<NYLAS_GRANT_ID>\", \"<CONFIGURATION_ID>\", requestBody)\n\n  println(\"Updated configuration: ${configuration.data}\")\n}\n"
      responses:
        '200':
          $ref: '#/components/responses/configuration'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '504':
          $ref: '#/components/responses/504'
    delete:
      summary: Delete a Configuration
      tags:
      - Configurations
      operationId: delete-configurations-id
      description: 'Deletes the specified Configuration object. You can''t delete a Configuration that has active

        sessions.'
      x-code-samples:
      - lang: bash
        label: cURL
        source: "curl --compressed --request DELETE \\\n  --url \"https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations/<SCHEDULER_CONFIG_ID>\" \\\n  --header 'Accept: application/json' \\\n  --header 'Authorization: Bearer <NYLAS_API_KEY>' \\\n  --header 'Content-Type: application/json'"
      - lang: javascript
        label: Node.js SDK
        source: "import Nylas from \"nylas\";\n\nconst nylas = new Nylas({\n  apiKey: \"<NYLAS_API_KEY>\",\n  apiUri: \"<NYLAS_API_URI>\",\n});\n\nasync function deleteConfiguration() {\n  try {\n    const result = await nylas.scheduler.configurations.destroy({\n      identifier: \"<NYLAS_GRANT_ID>\",\n      configurationId: \"<CONFIGURATION_ID>\",\n    });\n\n    console.log(\"Deleted configuration:\", result);\n  } catch (error) {\n    console.error(\"Error deleting configuration:\", error);\n  }\n}\n\ndeleteConfiguration();\n"
      - lang: python
        label: Python SDK
        source: "from nylas import Client\n\nnylas = Client(\n    \"<NYLAS_API_KEY>\",\n    \"<NYLAS_API_URI>\",\n)\n\nresponse = nylas.scheduler.configurations.destroy(\n    identifier=\"<NYLAS_GRANT_ID>\",\n    config_id=\"<SCHEDULER_CONFIG_ID>\",\n)\n\nprint(\"Configuration deleted:\", response)\n"
      - lang: ruby
        label: Ruby SDK
        source: "# Load gems\nrequire 'nylas'\n\n# Initialize Nylas client\nnylas = Nylas::Client.new(\n  api_key: \"<NYLAS_API_KEY>\"\n)\n\n_, request_ids = nylas.scheduler.configurations.destroy(identifier: \"<NYLAS_GRANT_ID>\", configuration_id: \"<SCHEDULER_CONFIG_ID>\")\n\nputs request_ids"
      - lang: java
        label: Java SDK
        source: "import com.nylas.NylasClient;\nimport com.nylas.models.DeleteResponse;\nimport com.nylas.models.NylasApiError;\nimport com.nylas.models.NylasSdkTimeoutError;\n\npublic class DeleteConfiguration {\n  public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {\n    NylasClient nylas = new NylasClient.Builder(\"<NYLAS_API_KEY>\").build();\n\n    DeleteResponse result = nylas.scheduler().configurations()\n        .destroy(\"<NYLAS_GRANT_ID>\", \"<CONFIGURATION_ID>\", null);\n\n    System.out.println(\"Deleted configuration: \" + result);\n  }\n}\n"
      - lang: kotlin
        label: Kotlin SDK
        source: "import com.nylas.NylasClient\n\nfun main() {\n  val nylas = NylasClient.Builder(\"<NYLAS_API_KEY>\").build()\n\n  val result = nylas.scheduler().configurations()\n      .destroy(\"<NYLAS_GRANT_ID>\", \"<CONFIGURATION_ID>\")\n\n  println(\"Deleted configuration: $result\")\n}\n"
      responses:
        '200':
          $ref: '#/components/responses/200-delete'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '504':
          $ref: '#/components/responses/504'
      security:
      - NYLAS_API_KEY: []
components:
  responses:
    configurations:
      description: Configuration objects returned
      content:
        application/json:
          schema:
            allOf:
            - $ref: '#/components/schemas/common_response_with_cursor'
            - properties:
                data:
                  type: array
                  items:
                    type: object
                    oneOf:
                    - title: Standard Configuration
                      description: Single-host configuration for one-on-one bookings.
                      properties:
                        appearance:
                          type:
                          - object
                          - 'null'
                          example: null
                        availability:
                          type: object
                          description: The rules that determine available time slots for the event.
                          properties:
                            availability_rules:
                              type: object
                              description: A list of availability rules that apply to all participants.
                              properties:
                                availability_method:
                                  type: string
                                  description: The method Nylas uses to calculate availability for all participants.
                                  example: collective
                                buffer:
                                  type: object
                                  description: A list of rules that set buffer time around events for all participants.
                                  properties:
                                    after:
                                      type: integer
                                      description: 'The amount of buffer time to add after meetings. For example, if

                                        an account has a meeting scheduled from 10:00–11:00a.m., and you

                                        set an after buffer of 15 minutes, Nylas treats 10:00–11:15a.m. as

                                        busy.'
                                      example: 15
                                    before:
                                      type: integer
                                      description: 'The amount of buffer time to add before meetings. For example, if

                                        an account has a meeting scheduled from 10:00–11:00a.m., and you

                                        set a before buffer of 30 minutes, Nylas treats 9:30–11:00a.m. as

                                        busy.'
                                      example: 5
                            duration_minutes:
                              type: integer
                              description: The total duration of the event, in minutes.
                              example: 30
                            interval_minutes:
                              type: integer
                              description: The interval between meetings, in minutes.
                              example: 15
                            round_to:
                              type: integer
                              description: 'Nylas rounds each time slot to the nearest `round_to` value. For example,

                                if a time slot starts at 9:05a.m. and `round_to` is set to 15, Nylas rounds

                                it to 9:15a.m.'
                              example: 5
                        event_booking:
                          type: object
                          description: An object containing details about the booking.
                          properties:
                            booking_type:
                              type: string
                              description: The booking type.
                              example: booking
                            disable_emails:
                              type:
                              - boolean
                              - 'null'
   

# --- truncated at 32 KB (128 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/nylas/refs/heads/main/openapi/nylas-configurations-api-openapi.yml