Skip to main content
A meeting is a bookable scheduling link. In the API this resource is called a scheduling link. Meetings are identified by a short id (sid).

List meetings

neetocal meetings list
neetocal meetings list --search "demo" --host-email host@example.com
FlagTypeRequiredDefaultDescription
--host-emailstringFilter by host email
--pageint0Page number
--page-sizeint0Items per page (max 100)
--searchstringSearch meetings
Sample output (--json)
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sid": "mtg_a1b2c3",
      "name": "Product demo",
      "slug": "demo",
      "kind": "one_on_one",
      "duration": 30,
      "disabled": false,
      "spot": "zoom",
      "hosts": [{ "name": "Oliver Smith", "email": "oliver@example.com" }]
    },
    {
      "id": "b2c3d4e5-f6a7-8901-bcde-f01234567890",
      "sid": "mtg_d4e5f6",
      "name": "Intro call",
      "slug": "intro",
      "kind": "round_robin",
      "duration": 15,
      "disabled": false,
      "spot": "google_meet",
      "hosts": [{ "name": "Sam Smith", "email": "sam@example.com" }]
    }
  ],
  "breadcrumbs": [
    { "label": "Show details", "command": "neetocal meetings show <sid>" }
  ],
  "pagination": { "total_records": 2, "total_pages": 1, "current_page_number": 1, "page_size": 30 }
}
Mirrors List scheduling links in the API.

Show a meeting

neetocal meetings show <sid>
Sample output (--json)
{
  "data": {
    "meeting": {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sid": "mtg_a1b2c3",
      "name": "Product demo",
      "slug": "demo",
      "description": "Discuss project updates",
      "kind": "one_on_one",
      "duration": 30,
      "disabled": false,
      "spot": "zoom",
      "is_multiple_durations_allowed": false,
      "is_multiple_spots_allowed": false,
      "hosts": [{ "name": "Oliver Smith", "email": "oliver@example.com" }]
    }
  },
  "breadcrumbs": [
    { "label": "List all meetings", "command": "neetocal meetings list" },
    { "label": "Delete meeting", "command": "neetocal meetings delete mtg_a1b2c3" }
  ]
}
Mirrors Get scheduling link in the API.

Create a meeting

neetocal meetings create \
  --name "Product demo" --slug demo \
  --hosts host@example.com --kind one_on_one \
  --spot zoom --duration 30
FlagTypeRequiredDefaultDescription
--descriptionstringMeeting description
--durationint0Meeting duration in minutes
--hostsstringComma-separated host emails
--json-filestringPath to JSON file with meeting data
--kindstringMeeting kind
--namestringMeeting name
--slugstringMeeting slug
--spotstringMeeting spot
Sample output (--json)
{
  "data": {
    "meeting": {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sid": "mtg_a1b2c3",
      "name": "Product demo",
      "slug": "demo",
      "kind": "one_on_one",
      "duration": 30,
      "disabled": false,
      "spot": "zoom",
      "hosts": [{ "name": "Oliver Smith", "email": "oliver@example.com" }]
    }
  }
}
In --quiet mode this prints the new meeting sid.
Mirrors Create scheduling link in the API.

Update a meeting

neetocal meetings update <sid> --name "Updated demo" --duration 45
FlagTypeRequiredDefaultDescription
--descriptionstringMeeting description
--durationint0Meeting duration in minutes
--hostsstringComma-separated host emails (optional; omit to keep current hosts)
--json-filestringPath to JSON file with meeting data
--kindstringMeeting kind
--namestringMeeting name
--slugstringMeeting slug
--spotstringMeeting spot
Sample output (--json)
{
  "data": {
    "meeting": {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sid": "mtg_a1b2c3",
      "name": "Updated demo",
      "slug": "demo",
      "kind": "one_on_one",
      "duration": 45,
      "disabled": false,
      "spot": "zoom",
      "hosts": [{ "name": "Oliver Smith", "email": "oliver@example.com" }]
    }
  }
}
Only the fields you pass are changed. Omit --hosts to keep the current hosts. Mirrors Update scheduling link in the API.

Delete a meeting

neetocal meetings delete <sid>
Sample output
Meeting deleted successfully.
In --quiet mode this prints success. Mirrors Delete scheduling link in the API.
neetocal meetings one-off-link <sid>
Sample output (--json)
{
  "data": {
    "one_off_link": {
      "slug": "one-off-c5530bc7c9ab",
      "url": "https://spinkart.neetocal.com/one-off-c5530bc7c9ab"
    }
  }
}
Returns a single-use booking URL. Mirrors Create one-off link in the API.

List available slots

neetocal meetings slots <sid> --year 2026 --month 5 --day 15 --time-zone "America/New_York"
FlagTypeRequiredDefaultDescription
--dayint0Day of month
--monthintYes0Month (1-12)
--time-zonestringYesTime zone (e.g., America/New_York)
--yearintYes0Year
Sample output (--json)
{
  "data": [
    {
      "date": "2026-05-15",
      "day": 15,
      "slots": {
        "10:00-10:30": { "start_time": "10:00", "count": 1 },
        "10:30-11:00": { "start_time": "10:30", "count": 1 }
      }
    }
  ]
}
Omit --day to get slots for the whole month. Mirrors List slots in the API.

Durations

Each meeting can offer multiple durations.

List durations

neetocal meetings durations list <meeting-sid>
Sample output (--json)
{
  "data": [
    {
      "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"
    },
    {
      "id": "5fdf7c7c-5c6f-5d26-a233-b96bf29a2a9d",
      "duration": 45,
      "is_default": false,
      "created_at": "2025-08-18T07:43:16.775Z",
      "updated_at": "2025-08-18T08:03:58.019Z"
    }
  ]
}
Mirrors List meeting durations in the API.

Show a duration

neetocal meetings durations show <meeting-sid> <id>
Sample output (--json)
{
  "data": {
    "duration": {
      "id": "4ece6b6b-4b5f-4c15-9122-a85af189198c",
      "duration": 45,
      "is_default": false,
      "created_at": "2025-08-18T07:43:16.775Z",
      "updated_at": "2025-08-18T08:03:58.019Z"
    }
  }
}
Mirrors Get meeting duration in the API.

Create a duration

neetocal meetings durations create <meeting-sid> --duration 45 --is-default
FlagTypeRequiredDefaultDescription
--durationintYes0Duration in minutes
--is-defaultboolfalseSet as default duration
Sample output (--json)
{
  "data": {
    "duration": {
      "id": "4ece6b6b-4b5f-4c15-9122-a85af189198c",
      "duration": 45,
      "is_default": true,
      "created_at": "2025-08-18T07:43:16.775Z",
      "updated_at": "2025-08-18T08:03:58.019Z"
    }
  }
}
Mirrors Create meeting duration in the API.

Update a duration

neetocal meetings durations update <meeting-sid> <id> --duration 60
FlagTypeRequiredDefaultDescription
--durationint0Duration in minutes
--is-defaultboolfalseSet as default duration
Sample output (--json)
{
  "data": {
    "duration": {
      "id": "4ece6b6b-4b5f-4c15-9122-a85af189198c",
      "duration": 60,
      "is_default": true,
      "created_at": "2025-08-18T07:43:16.775Z",
      "updated_at": "2025-08-18T08:03:58.019Z"
    }
  }
}
Mirrors Update meeting duration in the API.

Delete a duration

neetocal meetings durations delete <meeting-sid> <id>
Sample output
Duration deleted successfully.
In --quiet mode this prints success. Mirrors Delete meeting duration in the API.

Spots

A spot is a meeting place (Zoom, phone, in person, and so on). In the API this resource is called a meeting place.

List spots

neetocal meetings spots list <meeting-sid>
Sample output (--json)
{
  "data": [
    {
      "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"
    },
    {
      "id": "cdd91453-0456-5e90-0255-e36e8d8c4632",
      "spot": "in_person",
      "is_default": false,
      "phone_call_number": null,
      "in_person_location": "Room 4B",
      "custom_text": null,
      "created_at": "2025-08-18T07:19:28.341Z",
      "updated_at": "2025-08-18T07:35:32.822Z"
    }
  ]
}
Mirrors List meeting places in the API.

Show a spot

neetocal meetings spots show <meeting-sid> <id>
Sample output (--json)
{
  "data": {
    "spot": {
      "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"
    }
  }
}
Mirrors Get meeting place in the API.

Create a spot

neetocal meetings spots create <meeting-sid> --spot zoom --is-default
FlagTypeRequiredDefaultDescription
--custom-textstringCustom text for the spot
--is-defaultboolfalseSet as default spot
--locationstringLocation for in-person spots
--phone-numberstringPhone number for phone spots
--spotstringYesSpot type
Sample output (--json)
{
  "data": {
    "spot": {
      "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"
    }
  }
}
Mirrors Create meeting place in the API.

Update a spot

neetocal meetings spots update <meeting-sid> <id> --location "Room 4B"
FlagTypeRequiredDefaultDescription
--custom-textstringCustom text for the spot
--is-defaultboolfalseSet as default spot
--locationstringLocation for in-person spots
--phone-numberstringPhone number for phone spots
--spotstringSpot type
Sample output (--json)
{
  "data": {
    "spot": {
      "id": "bcc90342-9345-4d89-9144-d25d7c7b3521",
      "spot": "in_person",
      "is_default": false,
      "phone_call_number": null,
      "in_person_location": "Room 4B",
      "custom_text": null,
      "created_at": "2025-08-18T07:19:28.341Z",
      "updated_at": "2025-08-18T07:35:32.822Z"
    }
  }
}
Mirrors Update meeting place in the API.

Delete a spot

neetocal meetings spots delete <meeting-sid> <id>
Sample output
Spot deleted successfully.
In --quiet mode this prints success. Mirrors Delete meeting place in the API.

Availability

Attach or update the availability schedule a meeting uses.

Create meeting availability

neetocal meetings availabilities create <meeting-sid> --json-file periods.json
FlagTypeRequiredDefaultDescription
--emailstringEmail address
--json-filestringPath to JSON file with periods/overrides
--namestringAvailability name
--time-zonestringTime zone
Sample output (--json)
{
  "data": {
    "availability": {
      "availability_id": "01ea5ddf-ed00-4bed-bfa3-ba8ea80a856a",
      "member_id": "b6d02dfa-8ef6-453d-b9f7-67a6f20bcaa6",
      "meeting_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "id": "01ea5ddf-ed00-4bed-bfa3-ba8ea80a856a",
      "sid": "2nq7q5c",
      "name": "Custom Work Hours",
      "default": false,
      "periods": [
        {
          "id": "21c812a7-3859-4f01-b214-850e6f11caad",
          "wday": "monday",
          "start_time": "09:00 AM",
          "end_time": "05:00 PM"
        }
      ],
      "overrides": []
    }
  }
}
Mirrors Create meeting availability in the API.

Update meeting availability

neetocal meetings availabilities update <meeting-sid> --json-file periods.json
FlagTypeRequiredDefaultDescription
--json-filestringPath to JSON file with update data
Sample output (--json)
{
  "data": {
    "availabilities": [
      {
        "availability_id": "01ea5ddf-ed00-4bed-bfa3-ba8ea80a856a",
        "member_id": "b6d02dfa-8ef6-453d-b9f7-67a6f20bcaa6",
        "id": "01ea5ddf-ed00-4bed-bfa3-ba8ea80a856a",
        "sid": "2nq7q5c",
        "name": "Custom Work Hours",
        "default": false,
        "periods": [
          {
            "id": "21c812a7-3859-4f01-b214-850e6f11caad",
            "wday": "monday",
            "start_time": "09:00 AM",
            "end_time": "05:00 PM"
          }
        ],
        "overrides": []
      }
    ]
  }
}
Mirrors Update meeting availability in the API.