TagMangoTagMango Docs
Workshop

Get Recurring Workshop Series

GET
/api/v1/external/workshops/video-calls/groups/{groupId}

Read a recurring series in the same terms Update Recurring Video Calls accepts, so it can be modified and sent straight back.

Returns recurringType, startDate, endDate, repeatingDays, fromTime and duration — the recurrence definition a replace accepts — plus every occurrence in occurrences (earliest first, including completed ones).

startDateendDate is the replaceable range, not the whole series. A replace only rewrites occurrences that have not happened yet, so startDate is the first upcoming occurrence while endDate is the last occurrence overall. Completed occurrences fall before startDate; they stay untouched by a replace and are not described by this range. Read occurrences for the full history.

The recurrence rule is not stored, only its expansion, so recurringType and repeatingDays are inferred from the occurrences that exist: a series running every weekday reads back as daily, anything else as weekly.

isEditable reports whether a replace is still allowed; when false, notEditableReason says why. nextOccurrenceAt is the start of the next occurrence that has not begun, or null.

AuthorizationBearer <token>

In: header

Path Parameters

groupId*string

ID of the recurring video-call group

Header Parameters

x-whitelabel-host*string

Host name of the dashboard, ex: mydomain.tagmango.com

x-timezone-offset*string

Timezone offset (in number) example-> 330

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api-prod-new.tagmango.com/api/v1/external/workshops/video-calls/groups/66c4964c11e7fef26751f3a6" \  -H "x-whitelabel-host: string" \  -H "x-timezone-offset: string"
{
  "groupId": "66c4964c11e7fef26751f3a6",
  "recurringType": "weekly",
  "startDate": "2025-06-01",
  "endDate": "2025-06-30",
  "repeatingDays": [
    0,
    1,
    1,
    1,
    1,
    1,
    0
  ],
  "fromTime": "10:00",
  "duration": 60,
  "timezoneName": "Asia/Calcutta",
  "upcomingCount": 6,
  "completedCount": 2,
  "nextOccurrenceAt": "2025-06-03T04:30:00.000Z",
  "isEditable": true,
  "notEditableReason": "This group has an occurrence starting within 30 minutes",
  "occurrences": [
    {
      "_id": "66c4964c11e7fef26751f3a7",
      "title": "Weekly Marketing Call",
      "description": "Discussion about Q2 campaigns",
      "thumbnail": "https://cdn.example.com/thumb.jpg",
      "fromTime": "2025-06-01T04:30:00.000Z",
      "toTime": "2025-06-01T05:30:00.000Z",
      "startDate": "2025-06-01",
      "fromTime24h": "10:00",
      "duration": 60,
      "timezoneName": "Asia/Calcutta",
      "timezone": "+05:30",
      "status": "upcoming",
      "isEditable": true,
      "notEditableReason": "A call can only be edited up to 30 minutes before it starts",
      "isScheduleLocked": false,
      "platform": "tagmango",
      "meetingUrl": "https://meet.google.com/abc-xyz",
      "zoomMeetingType": "webinar",
      "ongoingCallType": "webinar",
      "zoomMeetingLink": "https://zoom.us/j/98765432101?pwd=abc123",
      "zoomMeetingLinkCreator": "https://zoom.us/s/98765432101?zak=abc123",
      "mango": [
        {
          "_id": "66a1390268a76f2f5c9f39a3",
          "title": "Introduction to Coding"
        }
      ],
      "excludeMangoes": [
        {
          "_id": "66a1390268a76f2f5c9f39a3",
          "title": "Introduction to Coding"
        }
      ],
      "mangoToSell": {
        "_id": "66a1390268a76f2f5c9f39a3",
        "title": "Introduction to Coding"
      },
      "zoomWaitingList": false,
      "zoomRegistration": false,
      "enableRecordingZoomCall": false,
      "autoUploadRecordingsEnabled": false,
      "autoUploadRecordingsConfig": [
        {
          "target": "course",
          "courseId": "66c4964c11e7fef26751f3a7",
          "courseTitle": "Advanced Marketing",
          "sectionIds": [
            "string"
          ]
        }
      ],
      "recordings": [
        {
          "recordingType": "shared_screen_with_speaker_view",
          "url": "https://cdn.example.com/recordings/abc.mp4",
          "isZoomHostedUrl": false,
          "recordingStartTime": "2025-06-01T04:31:12.000Z",
          "recordingEndTime": "2025-06-01T05:28:40.000Z",
          "fileSize": 148372221,
          "fileExtension": "MP4"
        }
      ],
      "recordingReceivedAt": "2025-06-01T06:12:00.000Z",
      "isRecordingDeleted": false,
      "recordingDeletedAt": "2025-09-01T00:00:00.000Z",
      "callType": "recurring",
      "groupId": "66c4964c11e7fef26751f3a6",
      "occurrence": 2,
      "totalOccurrence": 8,
      "showGroupLinkForRecurringCall": false,
      "participantCount": 42,
      "videoCallRescheduledAt": "2025-05-28T09:00:00.000Z",
      "createdAt": "2025-05-01T09:00:00.000Z"
    }
  ]
}
{
  "code": 400,
  "type": "Bad Request",
  "statusMessage": "BAD_REQUEST",
  "success": false,
  "message": "Invalid request",
  "result": "Invalid request"
}
{
  "code": 401,
  "type": "Unauthorized",
  "statusMessage": "UNAUTHORIZED",
  "message": "Invalid token",
  "result": "Invalid token",
  "success": false
}
{
  "code": 403,
  "type": "Forbidden",
  "statusMessage": "FORBIDDEN",
  "errorCode": "WORKSHOP_MANGO_FORBIDDEN",
  "message": "You can not access this api with a TagMango account, only available for whitelabel hosts",
  "result": "You can not access this api with a TagMango account, only available for whitelabel hosts",
  "success": false
}
{
  "code": 404,
  "type": "Not Found",
  "statusMessage": "NOT_FOUND",
  "errorCode": "WORKSHOP_GROUP_NOT_FOUND",
  "message": "No recurring group with this id belongs to this creator, or every occurrence in it has been deleted.",
  "result": "No recurring group with this id belongs to this creator, or every occurrence in it has been deleted.",
  "success": false
}
{
  "code": 429,
  "type": "Too Many Requests",
  "statusMessage": "TOO_MANY_REQUESTS",
  "message": "Request limit exceeded. try after 10 seconds",
  "result": "Request limit exceeded. try after 10 seconds",
  "success": false
}