Meetings

Meetings on their own, with no calendar event: Zoom meetings (list, get, create, change, delete), Microsoft Teams meetings (get, create, change, delete) and Google Meet links (get, create, change settings). To add a meeting to an event, use conferencing on the event.


GET/v2/meetings

List meetings

Lists a Zoom account's meetings, the next ones first. type chooses which: upcoming (the default), scheduled, live or previous. Microsoft Teams and Google Meet have no list of meetings made with no event, so their accounts are rejected: keep the ID the create returns.

Sends the request to your sandbox, never to live data.

Query parameters

  • Name
    accountId
    Type
    string
    Required
    required
    Description

    The Pyas accountId of the connected account.

  • Name
    type
    Type
    string
    Description

    Which meetings: upcoming (the default), scheduled, live or previous. One of upcoming, scheduled, live, previous.

  • Name
    from
    Type
    string (date)
    Description

    The first day (YYYY-MM-DD).

  • Name
    to
    Type
    string (date)
    Description

    The last day (YYYY-MM-DD).

  • Name
    limit
    Type
    integer
    Description

    The maximum number of meetings in one page. Defaults to 30. From 1 to 300.

  • Name
    cursor
    Type
    string
    Description

    The nextCursor from the previous page.

Errors

Request

GET
/v2/meetings
curl 'https://api.pyas.io/v2/meetings?accountId=sbx_fda58c5980_zoom' \  -H "x-api-key: $PYAS_API_KEY"

Response

200 OK
{  "success": true,  "data": [    {      "id": "97474246023",      "provider": "zoom",      "accountId": "sbx_fda58c5980_zoom",      "kind": "recurring",      "title": "Team standup",      "description": null,      "startsAt": "2026-11-15T14:30:00Z",      "durationMinutes": 15,      "timezone": "America/New_York",      "recurrence": null,      "occurrences": [],      "joinUrl": "https://zoom.us/j/97474246023?pwd=9pnByLlPi43xeCouDVOGZ3GJK8RNuRWi",      "passcode": null,      "dialIn": [],      "settings": {},      "createdAt": "2026-11-14T20:00:23Z"    },    {      "id": "67556028668",      "provider": "zoom",      "accountId": "sbx_fda58c5980_zoom",      "kind": "scheduled",      "title": "Customer onboarding (Zoom)",      "description": null,      "startsAt": "2026-11-15T16:00:00Z",      "durationMinutes": 60,      "timezone": "America/New_York",      "recurrence": null,      "occurrences": [],      "joinUrl": "https://zoom.us/j/67556028668?pwd=k1NV6aHSXvDYLT96s3yhRedsmHRIroO0",      "passcode": null,      "dialIn": [],      "settings": {},      "createdAt": "2026-11-14T20:00:24Z"    },    {      "id": "40824382962",      "provider": "zoom",      "accountId": "sbx_fda58c5980_zoom",      "kind": "scheduled",      "title": "Product demo",      "description": "Walk through the new scheduling flow.",      "startsAt": "2026-11-18T20:00:00Z",      "durationMinutes": 45,      "timezone": "America/New_York",      "recurrence": null,      "occurrences": [],      "joinUrl": "https://zoom.us/j/40824382962?pwd=uQj_Ps-IiROCfXW0Y-B5v7kTyLW3P6P7",      "passcode": null,      "dialIn": [],      "settings": {},      "createdAt": "2026-11-14T20:00:23Z"    }  ],  "provider": "zoom",  "traceId": "trc_5f2a9c1e7b3d4a6f8e0c2b1d",  "meta": {    "nextCursor": null  }}

POST/v2/meetings

Create a meeting

Creates a meeting with no calendar event: a Zoom meeting on a Zoom account, a Microsoft Teams meeting on a Microsoft work or school account, or a Google Meet link on a Google account. Zoom meetings always have a passcode: set one in settings, or Pyas makes one; Teams makes its own. A Teams meeting with no event happens once and has no description. A Google Meet link has no title or time: send only accountId and settings. It needs the meetingSettings connect feature (Google's meetings.space.created permission). To put a meeting on an event, use conferencing on POST /v2/events instead.

Sends the request to your sandbox, never to live data.

Headers

  • Name
    Idempotency-Key
    Type
    string
    Description

    A unique key that makes the request safe to retry. A retry with the same key returns the original response and doesn't make the change twice.

Body

  • Name
    accountId
    Type
    string
    Required
    required
    Description

    The accountId of a connected Zoom account, a Microsoft work or school account for Microsoft Teams, or a Google account for a Google Meet link.

  • Name
    title
    Type
    string
    Description

    The meeting's topic. Required for Zoom and Microsoft Teams; a Google Meet link has none.

  • Name
    description
    Type
    string
    Description

    The agenda. Zoom only.

  • Name
    startsAt
    Type
    string (date-time)
    Description

    When it starts (ISO 8601). For a recurring meeting, its first occurrence. Required for Zoom and Microsoft Teams; a Google Meet link works at any time.

  • Name
    durationMinutes
    Type
    integer
    Description

    Its length in minutes. 30 if you don't set it. From 1 to 1440.

  • Name
    timezone
    Type
    string
    Description

    An IANA time zone, such as America/New_York. Recurring meetings repeat in it.

  • Name
    recurrence
    Type
    string
    Description

    Zoom only. A recurrence rule (RRULE): FREQ=DAILY, WEEKLY or MONTHLY, INTERVAL, BYDAY or BYMONTHDAY, and COUNT (up to 60) or UNTIL. Zoom needs an end.

  • Name
    attendees
    Type
    array of object
    Description

    People invited by email. On Microsoft Teams, the meeting's attendees. At most 100 items.

  • Name
    settings
    Type
    ConferencingOptions
    Description

    Meeting settings, with the same field names for Zoom, Microsoft Teams and Google Meet. If the conferencing service doesn't support a setting, the request is rejected with the reason.

Errors

Request

POST
/v2/meetings
curl -X POST 'https://api.pyas.io/v2/meetings' \  -H "x-api-key: $PYAS_API_KEY" \  -H "content-type: application/json" \  -d '{  "accountId": "sbx_fda58c5980_zoom",  "title": "Customer kickoff",  "startsAt": "2026-11-16T16:00:00Z",  "durationMinutes": 45,  "timezone": "America/New_York",  "settings": {    "admission": "organizer"  }}'

Response

201 Created
{  "success": true,  "data": {    "id": "70544193435",    "provider": "zoom",    "accountId": "sbx_fda58c5980_zoom",    "kind": "scheduled",    "title": "Customer kickoff",    "description": null,    "startsAt": "2026-11-16T16:00:00Z",    "durationMinutes": 45,    "timezone": "America/New_York",    "recurrence": null,    "occurrences": [],    "joinUrl": "https://zoom.us/j/70544193435?pwd=ULy4JwXVyskJ5qGKo71ayxu4dZsVvoGc",    "passcode": "Cbx2Q611p0",    "dialIn": [      {        "label": "US New York",        "number": "+1 555 0100",        "pin": "661300"      }    ],    "settings": {      "admission": "organizer",      "recording": "none",      "joinBeforeHost": false,      "muteOnEntry": false,      "coHosts": []    },    "createdAt": "2026-11-14T20:00:25Z"  },  "provider": "zoom",  "traceId": "trc_5f2a9c1e7b3d4a6f8e0c2b1d",  "meta": {}}

GET/v2/meetings/{meetingId}

Get a meeting

Gets a meeting, with a recurring Zoom meeting's occurrences.

Sends the request to your sandbox, never to live data.

Path parameters

  • Name
    meetingId
    Type
    string
    Required
    required
    Description

    The meeting ID, as the create or list returned it.

Query parameters

  • Name
    accountId
    Type
    string
    Required
    required
    Description

    The Pyas accountId of the connected account.

Errors

Request

GET
/v2/meetings/{meetingId}
curl 'https://api.pyas.io/v2/meetings/97474246023?accountId=sbx_fda58c5980_zoom' \  -H "x-api-key: $PYAS_API_KEY"

Response

200 OK
{  "success": true,  "data": {    "id": "97474246023",    "provider": "zoom",    "accountId": "sbx_fda58c5980_zoom",    "kind": "recurring",    "title": "Team standup",    "description": null,    "startsAt": "2026-11-15T14:30:00Z",    "durationMinutes": 15,    "timezone": "America/New_York",    "recurrence": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;COUNT=60",    "occurrences": [      {        "id": "1794234600000",        "startsAt": "2026-11-15T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1794321000000",        "startsAt": "2026-11-16T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1794407400000",        "startsAt": "2026-11-17T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1794493800000",        "startsAt": "2026-11-18T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1794580200000",        "startsAt": "2026-11-19T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1794839400000",        "startsAt": "2026-11-22T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1794925800000",        "startsAt": "2026-11-23T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795012200000",        "startsAt": "2026-11-24T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795098600000",        "startsAt": "2026-11-25T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795185000000",        "startsAt": "2026-11-26T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795444200000",        "startsAt": "2026-11-29T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795530600000",        "startsAt": "2026-11-30T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795617000000",        "startsAt": "2026-12-01T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795703400000",        "startsAt": "2026-12-02T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1795789800000",        "startsAt": "2026-12-03T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1796049000000",        "startsAt": "2026-12-06T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1796135400000",        "startsAt": "2026-12-07T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1796221800000",        "startsAt": "2026-12-08T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1796308200000",        "startsAt": "2026-12-09T14:30:00Z",        "durationMinutes": 15,        "status": "available"      },      {        "id": "1796394600000",        "startsAt": "2026-12-10T14:30:00Z",        "durationMinutes": 15,        "status": "available"      }    ],    "joinUrl": "https://zoom.us/j/97474246023?pwd=9pnByLlPi43xeCouDVOGZ3GJK8RNuRWi",    "passcode": "standup1",    "dialIn": [      {        "label": "US New York",        "number": "+1 555 0100",        "pin": "863020"      }    ],    "settings": {      "admission": "everyone",      "recording": "none",      "joinBeforeHost": false,      "muteOnEntry": false,      "coHosts": []    },    "createdAt": "2026-11-14T20:00:23Z"  },  "provider": "zoom",  "traceId": "trc_5f2a9c1e7b3d4a6f8e0c2b1d",  "meta": {}}

PATCH/v2/meetings/{meetingId}

Update a meeting

Changes only the fields you send, and returns the meeting as it is now. A Google Meet link changes only its settings.

Sends the request to your sandbox, never to live data.

Path parameters

  • Name
    meetingId
    Type
    string
    Required
    required
    Description

    The meeting ID, as the create or list returned it.

Query parameters

  • Name
    accountId
    Type
    string
    Required
    required
    Description

    The Pyas accountId of the connected account.

Headers

  • Name
    Idempotency-Key
    Type
    string
    Description

    A unique key that makes the request safe to retry. A retry with the same key returns the original response and doesn't make the change twice.

Body

  • Name
    title
    Type
    string
    Description
  • Name
    description
    Type
    string | null
    Description
  • Name
    startsAt
    Type
    string (date-time)
    Description
  • Name
    durationMinutes
    Type
    integer
    Description

    From 1 to 1440.

  • Name
    timezone
    Type
    string
    Description
  • Name
    recurrence
    Type
    string | null
    Description

    A recurrence rule (RRULE): FREQ=DAILY, WEEKLY or MONTHLY, INTERVAL, BYDAY or BYMONTHDAY, and COUNT (up to 60) or UNTIL. Zoom needs an end. null makes it a single meeting.

  • Name
    attendees
    Type
    array of object
    Description

    At most 100 items.

  • Name
    settings
    Type
    ConferencingOptions
    Description

    Meeting settings, with the same field names for Zoom, Microsoft Teams and Google Meet. If the conferencing service doesn't support a setting, the request is rejected with the reason.

Errors

Request

PATCH
/v2/meetings/{meetingId}
curl -X PATCH 'https://api.pyas.io/v2/meetings/40824382962?accountId=sbx_fda58c5980_zoom' \  -H "x-api-key: $PYAS_API_KEY" \  -H "content-type: application/json" \  -d '{  "title": "Product demo: scheduling flow",  "durationMinutes": 60}'

Response

200 OK
{  "success": true,  "data": {    "id": "40824382962",    "provider": "zoom",    "accountId": "sbx_fda58c5980_zoom",    "kind": "scheduled",    "title": "Product demo: scheduling flow",    "description": "Walk through the new scheduling flow.",    "startsAt": "2026-11-18T20:00:00Z",    "durationMinutes": 60,    "timezone": "America/New_York",    "recurrence": null,    "occurrences": [],    "joinUrl": "https://zoom.us/j/40824382962?pwd=uQj_Ps-IiROCfXW0Y-B5v7kTyLW3P6P7",    "passcode": "demo2026",    "dialIn": [      {        "label": "US New York",        "number": "+1 555 0100",        "pin": "510795"      }    ],    "settings": {      "admission": "organizer",      "recording": "none",      "joinBeforeHost": false,      "muteOnEntry": false,      "coHosts": []    },    "createdAt": "2026-11-14T20:00:24Z"  },  "provider": "zoom",  "traceId": "trc_5f2a9c1e7b3d4a6f8e0c2b1d",  "meta": {}}

DELETE/v2/meetings/{meetingId}

Delete a meeting

Deletes the meeting. With notify=true, Zoom emails the host and the people invited that it was canceled. Microsoft Teams sends no cancellation for a meeting with no event, so notify=true is rejected there. Google Meet links can't be deleted, so a Google account is rejected.

Sends the request to your sandbox, never to live data.

Path parameters

  • Name
    meetingId
    Type
    string
    Required
    required
    Description

    The meeting ID, as the create or list returned it.

Query parameters

  • Name
    accountId
    Type
    string
    Required
    required
    Description

    The Pyas accountId of the connected account.

  • Name
    notify
    Type
    boolean
    Description

    Zoom only. Whether Zoom emails a cancellation. false if you don't set it.

Headers

  • Name
    Idempotency-Key
    Type
    string
    Description

    A unique key that makes the request safe to retry. A retry with the same key returns the original response and doesn't make the change twice.

Errors

Request

DELETE
/v2/meetings/{meetingId}
curl -X DELETE 'https://api.pyas.io/v2/meetings/40824382962?accountId=sbx_fda58c5980_zoom&notify=false' \  -H "x-api-key: $PYAS_API_KEY"

Response

200 OK
{  "success": true,  "data": null,  "provider": "zoom",  "traceId": "trc_5f2a9c1e7b3d4a6f8e0c2b1d",  "meta": {}}