Using API v1? See what changes in v2, or the v1 docs
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.
The examples use IDs from a sample sandbox. Your sandbox has the same people, calendars and events with its own IDs, which GET /v2/sandbox returns. When you're signed in to the dashboard, Try it fills in your IDs and sends the request to your sandbox, never to live data.
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.
Query parameters
- Name
accountId- Type
- string
- Required
- required
- Description
The Pyas
accountIdof the connected account.
- Name
type- Type
- string
- Description
Which meetings:
upcoming(the default),scheduled,liveorprevious. One ofupcoming,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
nextCursorfrom the previous page.
Errors
VALIDATION_INVALID_QUERY(400): A query parameter is not valid.AUTH_INVALID_KEY(401): The API key is missing, unknown or revoked.AUTH_EXPIRED_KEY(401): The API key has expired.AUTH_INSUFFICIENT_SCOPE(403): The API key or session does not have permission to make this request.CONNECTION_NOT_FOUND(404): No connected account was found for this request.CONNECTION_REVOKED(422): The user revoked access, or the provider no longer accepts the stored credentials.CONNECTION_SCOPE_INSUFFICIENT(422): The connected account did not grant a permission that this operation requires.VALIDATION_UNSUPPORTED_OPERATION(422): This provider does not support this operation.PROVIDER_RATE_LIMITED(429): The calendar provider is rate limiting requests for this account.RATE_LIMIT_EXCEEDED(429): The request rate exceeds this plan's rate limit.RATE_LIMIT_BURST(429): Too many requests were sent in a short period.INTERNAL_ERROR(500): Something went wrong on our end.PROVIDER_UNAVAILABLE(503): The calendar provider is not responding normally.
Request
curl 'https://api.pyas.io/v2/meetings?accountId=sbx_fda58c5980_zoom' \ -H "x-api-key: $PYAS_API_KEY"Response
{ "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 }}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.
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
accountIdof 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
VALIDATION_INVALID_BODY(400): The request body is not valid.AUTH_INVALID_KEY(401): The API key is missing, unknown or revoked.AUTH_EXPIRED_KEY(401): The API key has expired.AUTH_INSUFFICIENT_SCOPE(403): The API key or session does not have permission to make this request.CONNECTION_NOT_FOUND(404): No connected account was found for this request.CONNECTION_REVOKED(422): The user revoked access, or the provider no longer accepts the stored credentials.CONNECTION_SCOPE_INSUFFICIENT(422): The connected account did not grant a permission that this operation requires.VALIDATION_UNSUPPORTED_OPERATION(422): This provider does not support this operation.VALIDATION_REJECTED_BY_PROVIDER(422): The calendar provider rejected this input.VALIDATION_IDEMPOTENCY_CONFLICT(422): This idempotency key was already used with a different request.PROVIDER_RATE_LIMITED(429): The calendar provider is rate limiting requests for this account.RATE_LIMIT_EXCEEDED(429): The request rate exceeds this plan's rate limit.RATE_LIMIT_BURST(429): Too many requests were sent in a short period.INTERNAL_ERROR(500): Something went wrong on our end.PROVIDER_UNAVAILABLE(503): The calendar provider is not responding normally.
Request
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
{ "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 a meeting
Gets a meeting, with a recurring Zoom meeting's occurrences.
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
accountIdof the connected account.
Errors
VALIDATION_INVALID_QUERY(400): A query parameter is not valid.AUTH_INVALID_KEY(401): The API key is missing, unknown or revoked.AUTH_EXPIRED_KEY(401): The API key has expired.AUTH_INSUFFICIENT_SCOPE(403): The API key or session does not have permission to make this request.CONNECTION_NOT_FOUND(404): No connected account was found for this request.RESOURCE_NOT_FOUND(404): The calendar or event was not found.CONNECTION_REVOKED(422): The user revoked access, or the provider no longer accepts the stored credentials.CONNECTION_SCOPE_INSUFFICIENT(422): The connected account did not grant a permission that this operation requires.VALIDATION_UNSUPPORTED_OPERATION(422): This provider does not support this operation.PROVIDER_RATE_LIMITED(429): The calendar provider is rate limiting requests for this account.RATE_LIMIT_EXCEEDED(429): The request rate exceeds this plan's rate limit.RATE_LIMIT_BURST(429): Too many requests were sent in a short period.INTERNAL_ERROR(500): Something went wrong on our end.PROVIDER_UNAVAILABLE(503): The calendar provider is not responding normally.
Request
curl 'https://api.pyas.io/v2/meetings/97474246023?accountId=sbx_fda58c5980_zoom' \ -H "x-api-key: $PYAS_API_KEY"Response
{ "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": {}}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.
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
accountIdof 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.
nullmakes 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
VALIDATION_INVALID_BODY(400): The request body is not valid.AUTH_INVALID_KEY(401): The API key is missing, unknown or revoked.AUTH_EXPIRED_KEY(401): The API key has expired.AUTH_INSUFFICIENT_SCOPE(403): The API key or session does not have permission to make this request.CONNECTION_NOT_FOUND(404): No connected account was found for this request.RESOURCE_NOT_FOUND(404): The calendar or event was not found.CONNECTION_REVOKED(422): The user revoked access, or the provider no longer accepts the stored credentials.CONNECTION_SCOPE_INSUFFICIENT(422): The connected account did not grant a permission that this operation requires.VALIDATION_UNSUPPORTED_OPERATION(422): This provider does not support this operation.VALIDATION_REJECTED_BY_PROVIDER(422): The calendar provider rejected this input.PROVIDER_RATE_LIMITED(429): The calendar provider is rate limiting requests for this account.RATE_LIMIT_EXCEEDED(429): The request rate exceeds this plan's rate limit.RATE_LIMIT_BURST(429): Too many requests were sent in a short period.INTERNAL_ERROR(500): Something went wrong on our end.PROVIDER_UNAVAILABLE(503): The calendar provider is not responding normally.
Request
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
{ "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 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.
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
accountIdof the connected account.
- Name
notify- Type
- boolean
- Description
Zoom only. Whether Zoom emails a cancellation.
falseif 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
VALIDATION_INVALID_QUERY(400): A query parameter is not valid.AUTH_INVALID_KEY(401): The API key is missing, unknown or revoked.AUTH_EXPIRED_KEY(401): The API key has expired.AUTH_INSUFFICIENT_SCOPE(403): The API key or session does not have permission to make this request.CONNECTION_NOT_FOUND(404): No connected account was found for this request.RESOURCE_NOT_FOUND(404): The calendar or event was not found.CONNECTION_REVOKED(422): The user revoked access, or the provider no longer accepts the stored credentials.CONNECTION_SCOPE_INSUFFICIENT(422): The connected account did not grant a permission that this operation requires.VALIDATION_UNSUPPORTED_OPERATION(422): This provider does not support this operation.PROVIDER_RATE_LIMITED(429): The calendar provider is rate limiting requests for this account.RATE_LIMIT_EXCEEDED(429): The request rate exceeds this plan's rate limit.RATE_LIMIT_BURST(429): Too many requests were sent in a short period.INTERNAL_ERROR(500): Something went wrong on our end.PROVIDER_UNAVAILABLE(503): The calendar provider is not responding normally.
Request
curl -X DELETE 'https://api.pyas.io/v2/meetings/40824382962?accountId=sbx_fda58c5980_zoom¬ify=false' \ -H "x-api-key: $PYAS_API_KEY"Response
{ "success": true, "data": null, "provider": "zoom", "traceId": "trc_5f2a9c1e7b3d4a6f8e0c2b1d", "meta": {}}