Cloud app does not receive migration events

Cloud app does not receive listener-registered and app-data-uploaded events.

My setup:

  • Start local confluence server, install Tableau for Confluence - Pro app (app key tableau-plugin) from market place. Update Confluence Cloud migration assistant app to latest version
  • Register developer confluence cloud site, install Tableau for Confluence app (app key tableau-for-confluence from marketplace.
  • Start migration from server side following steps from Use the Confluence Cloud Migration Assistant to migrate | Atlassian Support

The migration stucks at app migration, the status is always Running at 0% progress.

I did some debug and found that:

  • server side successfully sends data using gateway.createAppData().write()
  • cloud side successfully register migration Webhook endpoint
  • but there is no request to migration Webhook endpoint and as a consequence cloud side does not update the migration progress.

Note that it works before. Look like migration infrastructure does not fire event to cloud app when app data get uploaded.

Does anyone facing the same issue and any idea on what happen?

Hi @NhanNguyen,

Thanks for your post, and sorry to see you’re having these issues.

Webhooks are being sent to You’re being affected by [MIG-918] Webhook calls are duplicated in Confluence Cloud - Create and track feature requests for Atlassian products. and so you should be receiving duplicate webhooks. There’s no indication that you aren’t receiving them.

For the status updates, I can see your POST request with
ProgressEndpointDto(percent=-100, status=IN_PROGRESS, message=Migrating Tableau macros). The percent value must be between 0 and 100. We’re returning a HTTP 400 status on the invalid requests, and this is why you aren’t seeing updates in the Migration Assistant for the app status. We updated this a little while ago to enforce the correct percent values.

Finally, updates in CCMA are every 10 minutes. If you want a faster update time, you can try Dev Mode which bypasses the App Assessment checks and polls for progress updates every 60 seconds.

I hope this helps.


Hi @jrichards ,

Thank you for your information.

I did some debug by install cloud app from my local system (not from marketplace) and trigger migration from server. The webhook endpoint was not called.

If I send an invalid progress percent value in previous migration, will it cause webhook not called in subsequence migration?

Hi @NhanNguyen,

Short answer, no. The webhook is registered per site. Each migration is linked by a transferId and the failure of one does not affect others, nor the webhook.

I can see a PUT request on the 9th at 2:35 PM (UTC+11), but the calls for the webhook after that are for the same webhook URL at

I can still see two progress updates for -100% and -200%. These will now return an error, so make sure you’re sending values between 0 and 100.

As for the webhook not being called, can you try and use a webhook with ngrok or similar. I’m seeing HTTP 500 errors at our end, but they look the same as what we see in [MIG-918] Webhook calls are duplicated in Confluence Cloud - Create and track feature requests for Atlassian products..

Can you try a different webhook endpoint, e.g. we’ve used ngrok with our example in Bitbucket

Because at this time, you should be getting the calls on


Hi @jrichards

As you point out, issue [MIG-918] Webhook calls are duplicated in Confluence Cloud - Create and track feature requests for Atlassian products. break our progress calculation logic and as a result, we send invalid progress value.

@jrichards, Just want to confirm one thing.

If the cloud app already production go live and support automatic migration. Then I start that app locally using a confluence dev site and ngrok tunnel. Will it cause the migrate endpoint get overwritten by the ngrok tunnel?

Hi @NhanNguyen,

The webhook is registered per cloud site. Every time someone installs your app, you should be calling The App migration platform REST API to register the webhook for that app.

For example, in my atlassian-connect.json I have

"baseUrl": "",
  "lifecycle": {
    "installed": "/installed",
    "uninstalled": "/uninstalled",
    "enabled": "/enabled",
    "disabled": "/disabled"

When I install the app on my, then the endpoint is called,


  "endpoints": [

As you can see, this is registering the dev endpoint for just the dev cloud site. As it’s a PUT it will overwrite the previous endpoint, but only for my dev site.

The other thing to make sure (thanks to @AndreRosot for reminding me) is to have the values of getServerAppKey() and getCloudAppKey() correct otherwise the events won’t be sent.

This won’t affect any running sites.


Hi @NhanNguyen,

A fix for [MIG-918] Webhook calls are duplicated in Confluence Cloud - Create and track feature requests for Atlassian products. has been rolled out. We’re not seeing the error any more.


1 Like