App approval and url verification

We are in process of approval. We gather all required documentations and trying to submit the app for approval. Running into few issues:

  1. Trying to validate oauth-callback endpoint. Getting “URL validation failed. Try again later”. In my logs I see Zoom is trying to send a message “{“payload”:{“plainToken”:“OWEIQRXcR-O730meXbC4Eg”},“event_ts”:1744729362254,“event”:“endpoint.url_validation”}” and in my code I am returning OK(); Strange thing is that when I use ngrok link to same code then Zoom approves the verification when I point to dev server to exactly same code then it fails. Any ideas?
  2. Also, I have requested from Zoom temporary Share of the app outside our organization that was granted until 05/13/2025. When I try to accept the app outside of the organization I am getting a temporary code that I been using exactly same way inside our organization to swap for access token and it fails now. I tried using dev and prod ClientId/secret to[https://zoom.us/oauth/token] with “grant_type”: “authorization_code” and “code”:”temp_code_obtained_from_zoom” and getting : { reason": “Invalid authorization code”, “error”: “invalid_grant” }. Inside our organization swapping temp code access token works without any issue.

Hi @Sebastian3
Thanks for reaching out to us!
For the first issue, are you not able to validate your Event notification endpoint URL in your production environment? Can you confirm if you are receiving the payload in your endpoint? if so, I will like to take a closer look into this

Elisa,

For the first issue I figured out. The way i was converting to Hex format was not accepted by Zoom. Finally this way worked for me and zoom approved it:
return BitConverter.ToString(hash).Replace("-", "").ToLower();

I am still having issue with item #2.

Hi @Sebastian3
Happy to hear you were able to fix the first issue. For the second one, was the temporary code working with no issues for dev and prod in the past?

Elisa,

temporary code only works in Dev, Never worked in Prod. Do i need to do anything different in Prod vs Dev?

Elisa,

I am using following call in curl or postman as well in code using DEV information and i get access token/refresh token back that i use to create a Zoom meeting

curl --request POST "https://zoom.us/oauth/token" \
  --user "{Dev Client Id}:{Dev Client Secret}" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=authorization_code" \
  --data-urlencode "code={temporaryCode}"

Elisa,

Slight correction. It does work in Prod within our organization however does not work in “Share App” with “Authorization URL” that we been approved by Zoom until 05/13 that we are trying to use with another organization. The temporary code we getting results in
{"reason":"Invalid authorization code","error":"invalid_grant"}

Thanks @Sebastian3
Let me reach out to the Marketplace team about this

Thank you. How long does it take to hear back from that team? Any advice will be appreciated.

I will try to get you an answer today

Hey @Sebastian3, can I get the name of the app so I can take a look and see what’s going on?

Regards, Kwaku

1 Like

Kwaku,
General App (Account Level) - " Andor Health App"

Sebastian

Hello @Sebastian3 Authorization URL’s only give the Production credentials the ability for external installs not the Dev credentials, these can only be used internally within your Zoom account and at the moment we do not have a way to use those credentials externally.

Regards, Kwaku

Kwaku,

I am using Production credentials in “Zoom Production” environment within my organization and that works. I am trying. to test our app outside our organization by sharing the url with our client by giving the client the Shared App link that was approved by zoom . Are you telling me this will not work? If not, then how possibly can i test the App before I publish to app marketplace?

Sebastian

Kwaku,

Is it possible to get on a call for like 10-15 minutes to resolve this?

Sebastian

I just regenerated the url, and gave it a try it does work as long as the external account installing the app has the correct role. Can you provide the error the external customers are receiving?

I attached the error I receive but this is because I don’t have the required role. But it doesn’t give me an error in relation to my account being unable to install the app.

You can also make those Master scopes optional so that it doesn’t prevent most accounts from installing. Most users even admins do not have access to Sub account scopes

Regard,s Kwaku

When I provide my client with the Share App link they do see the valid screen:

As soon as the client(ouside my organization) clicks Allow, I am getting a callback with temporary code that I am trying to swap for access token/refresh token by calling

  curl --request POST "https://zoom.us/oauth/token" \
    --user "{Prod Client Id}:{Prod Client Secret}" \
    --header "Content-Type: application/x-www-form-urlencoded" \
    --data-urlencode "grant_type=authorization_code" \
    --data-urlencode "code={temporaryCode}" \
	 --data-urlencode "redirect_uri={redirect_uri whitelisted on zoom}"

However I am getting this in response.

{"reason":"Invalid authorization code","error":"invalid_grant"}

When i try exact same Prod credentials and same call with a user within my organization then it works fine.

Hello,

Yeah, I am not sure, but you cannot use the internal account to justify it working, it will work internally even if the Authorization URL was not approved. Do you have another account you can use? There might be a limitation on the account. I just tried with one of our Zoom test accounts and I received this https://dev-apim.andor.app/api/virtual-health/zoom/oauth-callback?code=ouJO5vcAPKsI8t4XsAZTcGkrDY92uu-Ag

Regards, Kwaku

Correct, you will get that and on the backend I am getting a callback triggered by zoom with a temporary code that fails to be swapped for access token/refresh token. It only works when you are logged in with an account that is inside Andor organization.

I have couple of paid Pro accounts not affiliated with each other. Should this work?

What is the purpose of the Share App link then?