POST
/
meetings
Create a scheduling link
curl --request POST \
  --url https://{your-workspace}.neetocal.com/api/external/v1/meetings \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <x-api-key>' \
  --data '{
  "template_id": "cc98d282-4cf6-414d-ba58-53fa94b9bca3",
  "slug": "meeting-with-oliver-smith",
  "name": "Meeting with Oliver Smith",
  "description": "Discuss project updates",
  "hosts": [
    "oliver@example.com",
    "jane@example.com"
  ],
  "kind": "one_on_one",
  "duration": 30,
  "start_time_increment": 30,
  "is_multiple_durations_allowed": false,
  "is_multiple_spots_allowed": false,
  "spot_phone_call_number": "+1-555-0123",
  "spot_custom_text": "Custom meeting instructions",
  "spot_in_person_location": "123 Main St, Suite 100",
  "durations": [
    {
      "id": "4ece6b6b-4b5f-4c15-9122-a85af189198c",
      "duration": 30,
      "is_default": true,
      "created_at": "2025-08-18T07:43:16.775Z",
      "updated_at": "2025-08-18T08:03:58.019Z"
    }
  ],
  "spots": [
    {
      "id": "bcc90342-9345-4d89-9144-d25d7c7b3521",
      "spot": "zoom",
      "is_default": true,
      "phone_call_number": null,
      "in_person_location": null,
      "custom_text": null,
      "created_at": "2025-08-18T07:19:28.341Z",
      "updated_at": "2025-08-18T07:35:32.822Z"
    }
  ]
}'
{
  "message": "Meeting created successfully",
  "meeting": {
    "id": "<string>",
    "sid": "<string>",
    "name": "<string>",
    "slug": "<string>",
    "description": "<string>",
    "kind": "one_on_one",
    "duration": 123,
    "disabled": true,
    "spot": "custom",
    "spot_in_person_location": "<string>",
    "spot_custom_text": "<string>",
    "spot_phone_call_number": "<string>",
    "is_template": true,
    "schedulable_range_type": "number_of_days_into_the_future",
    "schedulable_range_value": "<string>",
    "lead_time": 123,
    "start_time_increment": 123,
    "created_at": "2025-12-23T05:05:27.037Z",
    "updated_at": "2025-03-31T13:22:19.832Z",
    "deleted_at": null,
    "is_multiple_spots_allowed": true,
    "is_multiple_durations_allowed": true,
    "conditional_pricing_enabled": true,
    "is_email_reminders_enabled": true,
    "is_sms_reminders_enabled": true,
    "organization_id": "<string>",
    "rescheduling_lead_time": 123,
    "cancellation_lead_time": 123,
    "booking_modification_allowed": true,
    "cancellation_too_late_notice": "<string>",
    "cancellation_policy": "<string>",
    "rescheduling_too_late_notice": "<string>",
    "pre_booking_allowed": true,
    "original_price_enabled": true,
    "original_price": 123,
    "fees": [
      {}
    ],
    "durations_possible": [
      123
    ],
    "durations": [
      {
        "id": "4ece6b6b-4b5f-4c15-9122-a85af189198c",
        "duration": 30,
        "is_default": false,
        "created_at": "2025-08-18T07:43:16.775Z",
        "updated_at": "2025-08-18T08:03:58.019Z"
      }
    ],
    "spots": [
      {
        "id": "bcc90342-9345-4d89-9144-d25d7c7b3521",
        "spot": "jitsi",
        "is_default": false,
        "phone_call_number": null,
        "in_person_location": null,
        "custom_text": null,
        "created_at": "2025-08-18T07:19:28.341Z",
        "updated_at": "2025-08-18T07:35:32.822Z"
      }
    ]
  }
}
Replace {your-workspace} with your workspace’s subdomain.
Learn how to find your subdomain in Identifying your subdomain.

Creating from scratch

Provide all the required configuration values directly in your request.

Creating from a template

To create a scheduling link from an existing template, include the template_id field in your request. When a template is used:
  • All template configuration values are automatically copied.
  • Values you provide in the same request override the template values.
Note: You can find available template IDs using the List all meeting templates endpoint. Example with template:
{
  "template_id": "cc98d282-4cf6-414d-ba58-53fa94b9bca3",
  "slug": "testing-meeting",
  "name": "Testing",
  "hosts": ["oliver@example.com"],
  "duration": 45
}

Headers

X-Api-Key
string
required

X-Api-Key is used to authenticate requests using an API key. Provide your API key in this header to access protected endpoints. Refer to Authentication for more information.

Body

application/json
slug
string
required

Slug of the scheduling link. This value should be unique.

Example:

"meeting-with-oliver-smith"

name
string
required

Name of the scheduling link.

Example:

"Meeting with Oliver Smith"

hosts
string[]
required

Emails of the hosts of scheduling link in array format.

Example:
["oliver@example.com", "jane@example.com"]
duration
integer
required

Duration of the scheduling link in minutes.

Example:

30

template_id
string

ID of an existing meeting template to use as a base. When provided, all template values will be copied to the new scheduling link. Values passed in the same request will override template values.

Example:

"cc98d282-4cf6-414d-ba58-53fa94b9bca3"

description
string

Description of the scheduling link.

Example:

"Discuss project updates"

kind
enum<string>
default:one_on_one

Kind of scheduling link.

Available options:
one_on_one,
round_robin,
multihost,
grouped
start_time_increment
integer

Start time increment for the scheduling link in minutes. Defaults to 30.

Example:

30

is_multiple_durations_allowed
boolean

Whether users can select from multiple meeting duration options.

Example:

false

is_multiple_spots_allowed
boolean

Whether users can select from multiple meeting platforms/locations.

Example:

false

spot_phone_call_number
string

Phone number for the meeting when spot is set to phone_call.

Example:

"+1-555-0123"

spot_custom_text
string

Custom meeting instructions or details when spot is set to custom.

Example:

"Custom meeting instructions"

spot_in_person_location
string

Physical location details when spot is set to in_person.

Example:

"123 Main St, Suite 100"

durations
object[]

Array of duration options when multiple durations are allowed.

spots
object[]

Array of spot options when multiple spots are allowed.

Response

200 - application/json

OK - Request succeeded

message
string
Example:

"Meeting created successfully"

meeting
object