Delete Action is not removing the user's account

Description

We are migrating from using AD groups to API for zoom provisioning. While testing deprovisioning using the api, we are able to delete the account. However, when we do a import Job from zoom, an exact duplicate of the deleted account is created with a different userid.

Error

There is no error message visible.

Which App Type (OAuth / Chatbot / JWT / Webhook)?

OAuth

Which Endpoint/s?
Knowing the API endpoint/s can help us to identify your issue faster. Please link the ones you need help/have a question with.

https://api.zoom.us/v2/users

How To Reproduce (If applicable)
Steps to reproduce the behavior:

  1. Request URL / Headers (without credentials) / Body
  2. See error

Screenshots (If applicable)
It is difficult to explain using screenshots. an online meeting would be much appreciated and easier to explain if there are any more questions.

Additional context
We are testing the API while the AD group provisioning is still active. Both are in the Prod environment

Hi @surajan,

Thanks for reaching out!

When you reference importing a job from Zoom, are you referring to doing so through the UI using Azure AD?

The reason I ask, is because our Technical Support team will be best suited to look into this further for you, if you’re seeing duplicate accounts, and they can take a closer look at how your Azure AD integration is provisioned.

Let me know if I’m misunderstanding, though!

Thanks,
Will

Hi Will,

We are using Saviynt as our centralized identity store. The Import job is run through Saviynt as JSON requests. these requests were created using the Zoom API Postman Collection. I don’t believe we are using Azure AD to run these imports.

Hi @surajan,

Is it possible to share an example request (minus any PII) so that we can better understand how you’re running this job?

Thanks,
Will

Will,

Here is The JSON used for the import Job.

{
"accountParams": {
	"createUsers": false,
	"adminName": "admin",
	"connection": "acctAuth",
	"processingType": "SequentialAndIterative",
	"statusAndThresholdConfig": {
		"statusColumn": "customproperty13",
		"activeStatus": [
			"active"
		],
		"deleteLinks": false,
		"accountThresholdValue": 30,
		"correlateInactiveAccounts": false,
		"inactivateAccountsNotInFile": false,
		"deleteAccEntForActiveAccounts": true
	},
	"call": {
		"call1": {
			"callOrder": 0,
			"stageNumber": 0,
			"http": {
				"url": "https://api.zoom.us/v2/users?status=inactive",
				"httpHeaders": {
					"Authorization": "${access_token}"
				},
				"httpContentType": "application/json",
				"httpMethod": "GET"
			},
			"listField": "users",
			"keyField": "accountID",
			"colsToPropsMap": {
				"accountID": "id~#~char",
				"name": "email~#~char",
				"displayName": "first_name~#~char",
				"status": "status~#~char",
				"customproperty1": "first_name~#~char",
				"customproperty2": "last_name~#~char",
				"customproperty3": "type~#~char",
				"customproperty4": "pmi~#~char",
				"customproperty5": "timezone~#~char",
				"customproperty6": "verified~#~char",
				"customproperty7": "dept~#~char",
				"customproperty8": "created_at~#~char",
				"customproperty9": "last_login_time~#~char",
				"customproperty10": "last_client_version~#~char",
				"customproperty11": "language~#~char",
				"customproperty12": "phone_number~#~char",
				"customproperty13": "status~#~char"
			},
			"pagination": {
				"page": {
					"pageSizeParam": "page_size",
					"pageSize": 300,
					"pageRecordCount": "completeResponseMap.page_size",
					"pageNumberParam": "page_number",
					"totalCountPath": "completeResponseMap.total_records",
					"firstPageNumber": 1
				}
			}
		},
		"call2": {
			"callOrder": 1,
			"stageNumber": 0,
			"http": {
				"url": "https://api.zoom.us/v2/users?status=pending",
				"httpHeaders": {
					"Authorization": "${access_token}"
				},
				"httpContentType": "application/json",
				"httpMethod": "GET"
			},
			"listField": "users",
			"keyField": "accountID",
			"colsToPropsMap": {
				"accountID": "id~#~char",
				"name": "email~#~char",
				"displayName": "first_name~#~char",
				"status": "status~#~char",
				"customproperty1": "first_name~#~char",
				"customproperty2": "last_name~#~char",
				"customproperty3": "type~#~char",
				"customproperty4": "pmi~#~char",
				"customproperty5": "timezone~#~char",
				"customproperty6": "verified~#~char",
				"customproperty7": "dept~#~char",
				"customproperty8": "created_at~#~char",
				"customproperty9": "last_login_time~#~char",
				"customproperty10": "last_client_version~#~char",
				"customproperty11": "language~#~char",
				"customproperty12": "phone_number~#~char",
				"customproperty13": "status~#~char"
			},
			"pagination": {
				"page": {
					"pageSizeParam": "page_size",
					"pageSize": 300,
					"pageRecordCount": "completeResponseMap.page_size",
					"pageNumberParam": "page_number",
					"totalCountPath": "completeResponseMap.total_records",
					"firstPageNumber": 1
				}
			}
		},
		"call3": {
			"callOrder": 2,
			"stageNumber": 0,
			"http": {
				"url": "https://api.zoom.us/v2/users?status=active",
				"httpHeaders": {
					"Authorization": "${access_token}"
				},
				"httpContentType": "application/json",
				"httpMethod": "GET"
			},
			"listField": "users",
			"keyField": "accountID",
			"colsToPropsMap": {
				"accountID": "id~#~char",
				"name": "email~#~char",
				"displayName": "first_name~#~char",
				"status": "status~#~char",
				"customproperty1": "first_name~#~char",
				"customproperty2": "last_name~#~char",
				"customproperty3": "type~#~char",
				"customproperty4": "pmi~#~char",
				"customproperty5": "timezone~#~char",
				"customproperty6": "verified~#~char",
				"customproperty7": "dept~#~char",
				"customproperty8": "created_at~#~char",
				"customproperty9": "last_login_time~#~char",
				"customproperty10": "last_client_version~#~char",
				"customproperty11": "language~#~char",
				"customproperty12": "phone_number~#~char",
				"customproperty13": "status~#~char"
			},
			"pagination": {
				"page": {
					"pageSizeParam": "page_size",
					"pageSize": 300,
					"pageRecordCount": "completeResponseMap.page_size",
					"pageNumberParam": "page_number",
					"totalCountPath": "completeResponseMap.total_records",
					"firstPageNumber": 1
				}
			}
		}
	}
},
"entitlementParams": {
	"connection": "acctAuth",
	"processingType": "SequentialAndIterative",
	"entTypes": {
		"Groups": {
			"entTypeOrder": 0,
			"entTypeLabels": {
				"customproperty1": "total_members"
			},
			"call": {
				"call1": {
					"callOrder": 0,
					"stageNumber": 0,
					"showJobHistory": true,
					"http": {
						"url": "https://api.zoom.us/v2/groups",
						"httpHeaders": {
							"Authorization": "${access_token}",
							"Accept": "application/json"
						},
						"httpContentType": "application/json",
						"httpMethod": "GET"
					},
					"listField": "groups",
					"keyField": "entitlementID",
					"colsToPropsMap": {
						"entitlementID": "id~#~char",
						"entitlement_value": "id~#~char",
						"customproperty1": "total_members~#~char",
						"description": "name~#~char",
						"displayname": "name~#~char",
						"entitlement_glossary": "name~#~char"
					},
					"disableDeletedEntitlements": true
				}

			}
		}
	}
},
"acctEntParams": {
	"connection": "acctAuth",
	"entTypes": {
		"Groups": {
			"call": {
				"call1": {
					"callOrder": 0,
					"stageNumber": 0,
					"showJobHistory": true,
					"processingType": "httpEntToAcct",
					"http": {
						"httpHeaders": {
							"Authorization": "${access_token}",
							"Accept": "application/json"
						},
						"url": "https://api.zoom.us/v2/groups/${id}/members",
						"httpContentType": "application/json",
						"httpMethod": "GET"
					},
					"listField": "members",
					"entKeyField": "entitlementID",
					"acctIdPath": "id",
					"acctKeyField": "accountID",
					"pagination": {
						"page": {
							"pageSizeParam": "page_size",
							"pageSize": 100,
							"pageRecordCount": "completeResponseMap.page_size",
							"pageNumberParam": "page_number",
							"totalCountPath": "completeResponseMap.total_records",
							"firstPageNumber": 1
						}
					}
				}
			}
		}
	}
}

}

Hey @surajan,

Thanks for providing more info. Looking at those calls, I’m not seeing anything that would deprovision a user. Are you making a call to our Delete a User API or something else?

Are you able to provide the JSON request and endpoint that you use when you see this issue?

Further, if you follow the same process outside of Azure, do you see the same issue?

Thanks,
Max

Hi @MaxM ,

We are calling the Delete User request first, then once we get a 204 response, we run that import job. The account gets removed when the delete user request is run, then a duplicate account with a different userid but same credentials gets created when the import job runs.

Hey @surajan,

Got it, thanks for clarifying. Please send an email to developersupport@zoom.us with a link to this thread. In that email, please include the User ID where you last saw this issue and the name of the app that you are using to authenticate.

I’ll check our logs.

Thanks,
Max