Properties
| Name | Type | Description |
|---|---|---|
| appearance | object | An object that defines the appearance settings for the Scheduling Page. This field may be `null` if no appearance customization has been set. |
| availability | object | |
| event_booking | object | |
| name | string | The name of the Scheduling Page. If not defined, Nylas defaults to the organizer's name. |
| participants | array | A list of participants to be included in the scheduled event. Participants that provide availability (through an `availability` or `booking` block) must be associated with a valid Nylas grant, or the |
| requires_session_auth | booleannull | When `true`, the scheduling [Availability](/docs/reference/api/availability/) and [Bookings](/docs/reference/api/bookings/) endpoints require a valid session ID to authenticate requests using the spec |
| scheduler | object | |
| slug | stringnull | The slug for the Configuration object. This is an optional, unique identifier. You can use the slug instead of the `configuration_id` when making requests to the Nylas Scheduling endpoints. Slugs are |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/nylas/main/json-schema/nylas-configuration-schema.json",
"title": "configuration",
"x-generated": "2026-10-02",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/nylas-configurations-api-openapi.yml#/components/schemas/configuration",
"type": "object",
"required": [
"participants",
"availability",
"event_booking"
],
"properties": {
"appearance": {
"description": "An object that defines the appearance settings for the Scheduling Page. This field\nmay be `null` if no appearance customization has been set.",
"anyOf": [
{
"$ref": "#/$defs/configuration_appearance"
},
{
"type": "null"
}
]
},
"availability": {
"$ref": "#/$defs/configuration_availability"
},
"event_booking": {
"$ref": "#/$defs/configuration_event_booking"
},
"name": {
"type": "string",
"description": "The name of the Scheduling Page. If not defined, Nylas defaults to the organizer's name."
},
"participants": {
"type": "array",
"description": "A list of participants to be included in the scheduled event.\n\nParticipants that provide availability (through an `availability` or `booking` block) must be\nassociated with a valid Nylas grant, or the request fails. Participants supplied by email only\ndon't require a grant. They're notification-only invitees who receive scheduling emails but don't\naffect availability calculation and can't be selected as a round-robin host.\n\nThis field isn't accepted for group or round-robin configurations, which are anchored to the\norganizer's own grant and calendar instead.",
"items": {
"$ref": "#/$defs/configuration_participants"
}
},
"requires_session_auth": {
"type": [
"boolean",
"null"
],
"description": "When `true`, the scheduling [Availability](/docs/reference/api/availability/) and\n[Bookings](/docs/reference/api/bookings/) endpoints require a valid session ID to\nauthenticate requests using the specified Configuration. This field may be `null`\nif not explicitly set on the configuration; treat `null` the same as `false`\n(the default behavior).",
"default": false
},
"scheduler": {
"$ref": "#/$defs/configuration_scheduler"
},
"slug": {
"type": [
"string",
"null"
],
"description": "The slug for the Configuration object. This is an optional, unique identifier. You can use the\nslug instead of the `configuration_id` when making requests to the Nylas Scheduling endpoints.\nSlugs are unique to each Nylas application. This field may be `null` if no slug has been set."
}
},
"$defs": {
"availability_buffer": {
"title": "buffer",
"type": "object",
"properties": {
"before": {
"type": "integer",
"description": "The amount of buffer time to add before meetings, in increments of five minutes. For example,\nif an account has a meeting scheduled from 10:00–11:00a.m., and you set a `before` buffer of\n30 minutes, Nylas treats 9:30–11:00a.m. as busy.\n\nThis value must be between 0 and 120, and must be divisible by 5.",
"default": 0,
"minimum": 0,
"maximum": 120
},
"after": {
"type": "integer",
"description": "The amount of buffer time to add after meetings, in increments of five minutes. For example, if\nan account has a meeting scheduled from 10:00–11:00a.m., and you set an `after` buffer of 15\nminutes, Nylas treats 10:00–11:15a.m. as busy.\n\nThis value must be between 0 and 120, and must be divisible by 5.",
"default": 0,
"minimum": 0,
"maximum": 120
}
}
},
"configuration_appearance": {
"title": "appearance",
"type": "object",
"description": "Appearance settings definitions for the Scheduling Page.",
"properties": {
"your-key": {
"type": "string",
"description": "A key-value pair. For pre-defined keys for hosted Scheduling Pages, see [Styling options for hosted Scheduling Pages](/docs/v3/scheduler/customize-scheduler/#styling-options-for-hosted-scheduling-pages).",
"maxLength": 550
}
}
},
"configuration_availability": {
"type": "object",
"description": "The rules that determine the available time slots for the event.",
"required": [
"duration_minutes"
],
"properties": {
"duration_minutes": {
"type": "integer",
"description": "The total number of minutes the event should last."
},
"interval_minutes": {
"type": "integer",
"description": "The interval between meetings. Nylas checks from the nearest interval of the passed `start_time`. For example, you schedule 30-minute meetings (`duration_minutes`) with 15 minutes between them (`interval_minutes`). If you have a meeting starting at 9:59, the API returns times starting at 10:00 (10:00-10:30, 10:15-10:45)."
},
"round_to": {
"type": "integer",
"default": 15,
"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. Must be a multiple of 5 minutes."
},
"availability_rules": {
"$ref": "#/$defs/configuration_availability_rules"
}
}
},
"configuration_availability_open_hours": {
"description": "Open hours settings for a participant.",
"type": "object",
"title": "Open Hours",
"properties": {
"days": {
"type": "array",
"description": "The days of the week that the open hour settings are applied to. Sunday corresponds to `0`, and Saturday corresponds to `6`.",
"items": {
"type": "integer"
}
},
"start": {
"type": "string",
"minLength": 1,
"description": "The start time in 24-hour time format. Single-digit hours doesn't have a leading zero. The earliest start time is `0:00`, and the latest start time is `23:49`."
},
"end": {
"type": "string",
"minLength": 1,
"description": "The end time in a 24-hour time format. Single-digit hours doesn't have a leading zero."
},
"timezone": {
"type": "string",
"minLength": 1,
"description": "The timezone for this open-hours block, as an [IANA-formatted](https://en.wikipedia.org/wiki/Tz_database) string.\n\nFor participant `open_hours`, this value applies only to the open-hours block where you define it and overrides the participant's `timezone`. If you omit it, Scheduler uses the participant's `timezone`, then `event_booking.timezone`.\n\nFor `default_open_hours` in Scheduler configurations, set `event_booking.timezone` to control the timezone that Scheduler uses when evaluating default open hours."
},
"exdates": {
"type": "array",
"description": "A list of dates that are excluded from the open hours. Dates should be formatted as `YYYY-MM-DD`.",
"items": {
"type": "string"
}
}
}
},
"configuration_availability_rules": {
"description": "Availability rules for the scheduling configuration. These rules define how Nylas calculates availability for all participants.",
"type": "object",
"properties": {
"availability_method": {
"description": "The method that Nylas uses to calculate availability for all participants. For one-on-one\nmeetings, the `availability_method` is always `collective`.\n\nThe round-robin methods, `max-fairness` and `max-availability`, don't support\n[Agent Account](/docs/v3/scheduler/agent-accounts/) participants. Use connected grants for\nround-robin pools.",
"type": "string",
"default": "collective",
"enum": [
"collective",
"max-fairness",
"max-availability"
]
},
"buffer": {
"type": "object",
"description": "The amount of buffer time to add around existing meetings, in minutes. For example, if an account has a meeting scheduled from 10–11a.m., and you set a buffer of 30 minutes, Nylas treats 9:30–11:30a.m. as busy.",
"$ref": "#/$defs/availability_buffer"
},
"default_open_hours": {
"type": "array",
"description": "A default set of open hours to apply to participants that don't define participant-level `open_hours`. You can overwrite these open hours for individual participants by specifying `open_hours` on the participant object. In Scheduler configurations, set `event_booking.timezone` to control the timezone used when Scheduler evaluates default open hours.",
"items": {
"$ref": "#/$defs/configuration_availability_open_hours"
}
},
"default_specific_time_availability": {
"type": "array",
"description": "Default specific date and time availability that applies to ALL participants in this configuration.\nThese are merged with participant-specific entries, with participant entries taking precedence\nfor the same date. Use this to define organization-wide special hours (e.g., holidays, events).",
"items": {
"type": "object",
"required": [
"date",
"start",
"end"
],
"properties": {
"date": {
"type": "string",
"description": "The date in YYYY-MM-DD format."
},
"start": {
"type": "string",
"description": "The start time in HH:MM format (24-hour clock).\nUse \"00:00\" with end \"00:00\" to mark the date as closed/unavailable."
},
"end": {
"type": "string",
"description": "The end time in HH:MM format (24-hour clock)."
},
"timezone": {
"type": "string",
"description": "The timezone for this specific date entry (e.g., \"America/New_York\").\nRequired when using default_specific_time_availability to ensure proper timezone conversion\nacross participants. When specified, `event_booking.timezone` must also be set."
}
}
}
},
"only_specific_time_availability": {
"type": "boolean",
"description": "When `true`, ALL participants will ONLY be available at times defined in `default_specific_time_availability`\nand their individual `specific_time_availability` entries. Regular `open_hours` and `default_open_hours`\nare completely ignored.\n\nThis is useful for:\n- Temporary availability windows (e.g., hiring events, special booking periods)\n- Disabling all availability by setting to `true` with no specific dates defined\n\n**Note**: When set at the config level, individual participants cannot override this to `false`.",
"default": false
}
}
},
"configuration_event_booking": {
"type": "object",
"required": [
"title"
],
"properties": {
"booking_type": {
"type": "string",
"description": "The booking type. If set to `booking`, Scheduler follows the\n[standard booking flow](/docs/v3/scheduler/customize-booking-flows/).\n\nIf set to `organizer-confirmation`, Scheduler creates an event marked \"Pending\" in the organizer's\ncalendar and sends a confirmation request email to the organizer. The confirmation request email\nincludes a link to a page where the organizer can confirm or cancel the booking.",
"enum": [
"booking",
"organizer-confirmation"
],
"default": "booking"
},
"conferencing": {
"$ref": "#/$defs/event_conferencing_request"
},
"description": {
"type": "string",
"description": "The description of the event."
},
"disable_emails": {
"type": [
"boolean",
"null"
],
"description": "When `true`, Nylas doesn't send email notifications when an event is booked, cancelled, or\nrescheduled. When `null`, the default behavior applies (emails are sent).",
"default": false
},
"hide_participants": {
"type": [
"boolean",
"null"
],
"description": "When `true`, Nylas creates the event with `hide_participants=true`, so the host can see who's on the event but the guests cannot. When `null`, the default behavior applies (participants are visible).",
"default": false
},
"location": {
"type": "string",
"description": "The location of the event."
},
"notify_participants": {
"type": [
"boolean",
"null"
],
"description": "When `true`, the calendar provider sends notifications to participants when the\nevent is created, updated, or deleted. Microsoft grants ignore this flag and\nalways notify participants. This field may be `null` if not explicitly set on\nthe configuration; treat `null` the same as `false` (the default behavior).",
"default": false
},
"reminders": {
"type": "array",
"required": [
"minutes_before_event",
"type"
],
"items": {
"type": "object",
"properties": {
"email_subject": {
"type": "string",
"description": "(Email reminders only) The subject line of the email reminder."
},
"minutes_before_event": {
"type": "integer",
"description": "The number of minutes before the event to send the reminder.",
"minimum": 1
},
"recipient": {
"type": "string",
"description": "(Email reminders only) Who should receive the reminder.",
"enum": [
"all",
"host",
"guest"
],
"default": "all"
},
"type": {
"type": "string",
"description": "The reminder type.",
"enum": [
"email",
"webhook"
]
}
}
}
},
"timezone": {
"type": "string",
"description": "The timezone Nylas uses to display times in confirmation messages and reminders. This must be\nan [IANA-formatted string](https://en.wikipedia.org/wiki/Tz_database).",
"minLength": 1
},
"title": {
"type": "string",
"description": "The title of the event."
}
}
},
"configuration_participants": {
"type": "object",
"description": "List of participants for the scheduling Configuration.",
"required": [
"availability",
"booking",
"email"
],
"properties": {
"availability": {
"$ref": "#/$defs/configuration_participants_availability"
},
"booking": {
"$ref": "#/$defs/configuration_participants_booking"
},
"email": {
"type": "string",
"description": "The participant's email address.\n\nIf the participant provides an `availability` or `booking` block, this email address must be\nassociated with a valid Nylas grant, or the request fails. Participants supplied by email only\n(no `availability` or `booking` block) don't require a grant. They're treated as notification-only\ninvitees: they still receive scheduling emails, but they don't affect availability or free-busy\ncalculation and can't be selected as a round-robin host."
},
"grant_id": {
"type": "string",
"description": "The participant's grant ID."
},
"is_organizer": {
"type": "boolean",
"description": "When `true`, indicates that the participant is the organizer of the event.\n\nFor non-round-robin meetings, one of the participants must be specified as the organizer. For\nround-robin meetings, remove the `is_organizer` key/value pair or set `is_organizer` to `false`\nfor all participants.",
"default": false
},
"name": {
"type": "string",
"description": "The participant's name."
},
"specific_time_availability": {
"$ref": "#/$defs/configuration_participants_specific_time_availability"
},
"only_specific_time_availability": {
"type": "boolean",
"description": "When `true`, this participant will ONLY be available at times defined in their\n`specific_time_availability` entries. Their regular `open_hours` are ignored.\n\nIf the config-level `availability_rules.only_specific_time_availability` is `true`,\nthis participant-level setting cannot override it to `false`.\n\nSetting to `true` with an empty `specific_time_availability` array results in\nzero availability for this participant (useful for temporarily disabling someone).",
"default": false
},
"timezone": {
"type": "string",
"description": "The timezone in which the participant is located, as an\n[IANA-formatted](https://en.wikipedia.org/wiki/Tz_database) string. Nylas uses this when\ncalculating the participant's open hours, and in email notifications.\n\nIf a participant `open_hours` block includes its own `timezone`, the open-hours timezone\noverrides this participant timezone for that block. If participant `open_hours` doesn't include\na `timezone`, Scheduler uses this participant timezone, then `event_booking.timezone`."
}
}
},
"configuration_participants_availability": {
"description": "The availability data for the participant. If omitted, the participant is considered to be available at all times. At least one participant must have availability data.",
"type": "object",
"required": [
"calendar_ids"
],
"properties": {
"calendar_ids": {
"type": "array",
"description": "A list of calendar IDs associated with the participant's email address. These calendars are\nused to check the participant's availability.\n\nFor an [Agent Account](/docs/v3/scheduler/agent-accounts/) participant, set this to\n`[\"primary\"]`. Scheduler reads busy time from an Agent Account's primary calendar only.",
"items": {
"type": "string"
}
},
"open_hours": {
"type": "array",
"description": "An array of objects for the participant's open hours. Nylas searches for free time slots within these open hours.",
"items": {
"$ref": "#/$defs/configuration_availability_open_hours"
}
}
}
},
"configuration_participants_booking": {
"description": "The booking data for the participant. If omitted, the participant is not included in the booked event. At least one participant must have booking data.",
"type": "object",
"required": [
"calendar_id"
],
"properties": {
"calendar_id": {
"type": "string",
"description": "The calendar ID that the event is created in.\n\nFor an [Agent Account](/docs/v3/scheduler/agent-accounts/) participant, set this to\n`primary`. Scheduler creates booking events on an Agent Account's primary calendar only."
}
}
},
"configuration_participants_specific_time_availability": {
"description": "A specific date and time range when the participant is available.\nUse \"00:00\" for both start and end to explicitly mark a date as unavailable.",
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"start",
"end"
],
"properties": {
"date": {
"type": "string",
"description": "The date in YYYY-MM-DD format."
},
"start": {
"type": "string",
"description": "The start time in HH:MM format (24-hour clock).\nUse \"00:00\" with end \"00:00\" to explicitly mark this date as unavailable."
},
"end": {
"type": "string",
"description": "The end time in HH:MM format (24-hour clock)."
},
"timezone": {
"type": "string",
"description": "The timezone for this specific date (e.g., \"America/New_York\").\nOptional for participant-level entries. Uses the participant's timezone if not specified."
}
}
}
},
"configuration_scheduler": {
"type": "object",
"properties": {
"additional_fields": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/configuration_scheduler_additional_fields"
}
},
"available_days_in_future": {
"type": "integer",
"description": "The number of days in the future that Scheduler is available for scheduling events.",
"default": 30
},
"min_booking_notice": {
"type": [
"integer",
"null"
],
"description": "The minimum number of minutes in the future that a user can make a new booking. This field may be `null` if not explicitly set on the configuration; treat `null` the same as `60` (the default behavior).",
"default": 60
},
"min_cancellation_notice": {
"type": "integer",
"description": "The minimum number of minutes before a booking can be cancelled.",
"default": 0
},
"cancellation_policy": {
"type": "string",
"description": "A message about the cancellation policy to display to users when booking an event."
},
"rescheduling_url": {
"type": "string",
"description": "The URL used to reschedule bookings. This URL is included in confirmation messages."
},
"cancellation_url": {
"type": "string",
"description": "The URL used to cancel bookings. This URL is included in confirmation messages."
},
"organizer_confirmation_url": {
"type": "string",
"description": "The URL used to confirm or cancel pending bookings. This URL is included in booking request\nmessages."
},
"confirmation_redirect_url": {
"type": "string",
"description": "The URL that Nylas redirects the user to when the booking is confirmed."
},
"hide_rescheduling_options": {
"type": "boolean",
"description": "If `true`, the option to reschedule an event is hidden in booking confirmations and email notifications.",
"default": false
},
"hide_cancellation_options": {
"type": "boolean",
"description": "If `true`, the option to cancel an event is hidden in booking confirmations and email notifications.",
"default": false
},
"hide_additional_guests": {
"type": "boolean",
"description": "Whether to hide the **Additional guests** field on the Scheduling Page. If `true`, guests cannot invite additional guests to the event.",
"default": false
},
"notetaker_settings": {
"type": "object",
"description": "Settings for automatically adding a Notetaker bot to bookings created with this configuration.\nWhen enabled, Notetaker joins the meeting to record, transcribe, and optionally generate\nsummaries and action items. Requires `event_booking.conferencing` to be configured.",
"properties": {
"enabled": {
"type": "boolean",
"description": "When `true`, automatically creates a Notetaker bot for bookings made with this configuration.\nThe bot joins the meeting at the scheduled time to record and transcribe.",
"default": false
},
"show_ui_consent_message": {
"type": "boolean",
"description": "When `true`, displays a consent message in the Scheduler UI informing guests that the\nmeeting will be recorded.",
"default": true
},
"notetaker_name": {
"type": "string",
"description": "The display name for the Notetaker bot that joins the meeting.\nMaximum 255 characters.",
"default": "Nylas Notetaker"
},
"meeting_settings": {
"$ref": "#/$defs/meeting_settings"
}
}
},
"email_template": {
"$ref": "#/$defs/configuration_scheduler_email_template"
}
}
},
"configuration_scheduler_additional_fields": {
"description": "The definitions for additional fields to be displayed in the Scheduler UI. Guest will see the additional fields on the Scheduling Page when they book an event.",
"type": "object",
"required": [
"label",
"type",
"required"
],
"properties": {
"label": {
"type": "string",
"description": "The text label to be displayed in the Scheduler UI."
},
"type": {
"type": "string",
"description": "The field type. If set to `metadata`, the field does not appear on email notifications and booking forms.",
"enum": [
"text",
"multi_line_text",
"email",
"phone_number",
"dropdown",
"date",
"checkbox",
"radio_button",
"metadata"
]
},
"required": {
"type": "boolean",
"description": "Whether the field is required to be filled out by the guest when booking an event."
},
"default": {
"type": "string",
"description": "The default value for the field. \n\n- For the `metadata` type, this field stores the default metadata value.\n- For other types, this field sets the default value in the form, which is pre-filled when a guest books an event."
},
"pattern": {
"type": "string",
"description": "A regular expression pattern that the value of the field must match."
},
"order": {
"type": "integer",
"description": "The order in which the field will be displayed in the Scheduler UI. Fields with lower order values will be displayed first."
},
"options": {
"type": "array",
"description": "A list of options for the `dropdown` or `radio_button` types. This field is required for the `dropdown` and `radio_button` types.",
"items": {
"type": "string"
}
}
}
},
"configuration_scheduler_email_template": {
"type": "object",
"description": "Configurable settings for booking emails.",
"properties": {
"booking_confirmed": {
"$ref": "#/$defs/configuration_scheduler_email_template_booking_confirmed"
},
"logo": {
"type": "string",
"description": "The URL of a custom logo that is displayed at the top of the booking email. Replaces the default\nNylas logo. The URL needs to be publicly accessible."
},
"show_nylas_branding": {
"type": "boolean",
"default": true,
"description": "When `true`, displays Nylas branding in the booking email."
}
}
},
"configuration_scheduler_email_template_booking_confirmed": {
"description": "Configurable settings specifically for booking confirmed emails.",
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The title to replace the default 'Booking Confirmed' title. This doesn't change the email subject line. Only visible in emails sent to guests."
},
"body": {
"type": "string",
"description": "The additional body to be appended after the default body. Only visible in emails sent to guests."
}
}
},
"event_conferencing_request": {
"title": "Event with conferencing",
"type": "object",
"description": "An object that lets you automatically create a conference, or enter conferencing details manually.\n\nYou can't use `autocreate` and `details` in the same request. If you do, Nylas returns an error.\n\nNylas stores conference information in the event description. To remove conference details, set\n`conferencing` to `{}` and remove the corresponding conference information from the description in\nthe same request.",
"oneOf": [
{
"title": "Auto-conferencing",
"type": "object",
"description": "Let Nylas autocreate the conference link.",
"properties": {
"provider": {
"type": "string",
"description": "The conferencing provider that Nylas uses to create the conference.",
"enum": [
"Google Meet",
"Zoom Meeting",
"Microsoft Teams"
]
},
"autocreate": {
"type": "object",
"description": "When you include `autocreate` in your request, Nylas automatically creates the conference\nfor the event and appends the conferencing details to the event description.\n\nIf the `provider` is `Zoom Meeting`, your Zoom OAuth app must include the following\n[granular scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-granular/)\nfor Nylas to manage meetings on behalf of the user:\n\n- `meeting:write:meeting` — required to **create** Zoom meetings.\n- `meeting:update:meeting` — required to **update** Zoom meetings (for example, when event time or title changes).\n- `meeting:delete:meeting` — required to **delete** Zoom meetings (when events are removed).\n\nIf any of these scopes are missing, the Zoom API rejects the request. After adding scopes\nto your Zoom app, affected users must re-authenticate their grant so their access tokens\ninclude the new scopes.",
"properties": {
"conf_grant_id": {
"type": "string",
"description": "The grant ID of the account that hosts the conference. The user that belongs to this\ngrant acts as the conference host: they join the conference at the scheduled time and\nadmit other participants during the meeting.\n\nInclude `conf_grant_id` when the conferencing `provider` isn't available on the user's\nown account — for example, when the `provider` is `Google Meet` but the user\nauthenticated with a Microsoft account (cross-provider autocreation). When the\n`provider` is `Zoom Meeting`, `conf_grant_id` is always required."
},
"conf_settings": {
"type": "object",
"additionalProperties": true,
"description": "Optional provider-specific settings that Nylas passes through when it creates the\nconference. For `Zoom Meeting`, each key is sent as a top-level parameter to\n[Zoom's Create a Meeting API](https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#operation/meetingCreate)\n— for example, `agenda`, `password`, or Zoom's own `settings` object. Nylas does _not_\nvalidate these values. They can make your Zoom integration more accessible but\npotentially less secure, so review your organization's security requirements."
}
}
}
}
},
{
"title": "Google Meet",
"type": "object",
"description": "Manually attach Google Meet details to the event.",
"properties": {
"provider": {
"type": "string",
"enum": [
"Google Meet"
],
"description": "The conferencing provider for the event."
},
"details": {
"type": "object",
"descr
# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/nylas/refs/heads/main/json-schema/nylas-configuration-schema.json
Work with this as data
Every JSON Schema 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 schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.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.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/nylas-configuration"
All schemas
curl "https://apis.io/api/v1/json-schemas?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.