<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API]]></title><description><![CDATA[<p dir="auto">There are two existing Cloudrons, A &amp; B, each with their own separate domains and apps, and Cloudron B needs to retire, moving all its apps to A.</p>
<p dir="auto">Since this isn't a full Cloudron <a href="https://docs.cloudron.io/backups/#restore-cloudron" target="_blank" rel="noopener noreferrer nofollow ugc">restore</a>, but a more individual app restore to a different Cloudron, times 100+; it would seem this needs some automating unless there is a better way.</p>
<p dir="auto">Hence the ask, what might be best at this time before we have native Multi-Cloudron ability to flick apps across servers with a few clicks.</p>
<p dir="auto">An alternate idea would be to rewire Cloudron A backup to B's backup location, so it can read and restore directly from there all relevant apps, but that is not exactly how the backup UI works as intended. Individual app backups are only visible from already installed apps, which isn't the case from A.</p>
<p dir="auto">If this was <a href="https://docs.cloudron.io/backups/#import-app-backup" target="_blank" rel="noopener noreferrer nofollow ugc">one app import</a>, I wouldn't be asking, yet this is 2 orders of magnitude more apps.</p>
<p dir="auto">Please advise.</p>
]]></description><link>https://forum.cloudron.io/topic/9347/how-to-automate-migrating-importing-apps-from-cloudron-to-cloudron-via-api</link><generator>RSS for Node</generator><lastBuildDate>Sun, 14 Jun 2026 22:20:02 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/9347.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Jun 2023 03:08:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Tue, 19 Aug 2025 05:40:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> Is this use case covered in Cloudron 9?</p>
]]></description><link>https://forum.cloudron.io/post/111820</link><guid isPermaLink="true">https://forum.cloudron.io/post/111820</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Tue, 19 Aug 2025 05:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Sun, 11 Jun 2023 17:26:09 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/roofboard" aria-label="Profile: roofboard">@<bdi>roofboard</bdi></a> There's an example of how to use a bearer token here: <a href="https://forum.cloudron.io/post/65043">https://forum.cloudron.io/post/65043</a></p>
<p dir="auto">Looks like this in N8N for single use:<br />
<img src="/assets/uploads/files/1686440347568-05b953ab-3962-44e9-815d-69d7fa842c10-image.png" alt="05b953ab-3962-44e9-815d-69d7fa842c10-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">To reuse it in all nodes, this should work:<br />
<a href="https://community.n8n.io/t/how-to-authorize-using-bearer-token/25674" target="_blank" rel="noopener noreferrer nofollow ugc">https://community.n8n.io/t/how-to-authorize-using-bearer-token/25674</a></p>
]]></description><link>https://forum.cloudron.io/post/68048</link><guid isPermaLink="true">https://forum.cloudron.io/post/68048</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Sun, 11 Jun 2023 17:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Fri, 09 Jun 2023 21:15:20 GMT]]></title><description><![CDATA[<p dir="auto">Here is the start of an N8N workflow.<br />
Copy and paste all the JSON into your N8N instance it will detect the JSON and nodes.<br />
We are using query auth here because we do not know how to do the Bearer Token.</p>
<p dir="auto">And we are having trouble figuring out how to tell the destination cloudron to pull a backup from a remote location.</p>
<pre><code>{
  "meta": {
    "instanceId": "8d8e1b7ceae09105ea1231dc6c31045b9d36dc713f8e22970f6eacf9f1f4d996"
  },
  "nodes": [
    {
      "parameters": {},
      "id": "4be687c9-4a4b-4be3-a8fc-d1405a66fa95",
      "name": "When clicking \"Execute Workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        680,
        320
      ]
    },
    {
      "parameters": {
        "url": "https://my.demo.cloudron.io/api/v1/apps",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "options": {}
      },
      "id": "33c66a41-753b-491a-bf03-8683f86b95c5",
      "name": "PullAppsFromSource",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        900,
        320
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "11",
          "name": "RobCloudron-Demo"
        },
        "httpQueryAuth": {
          "id": "12",
          "name": "Query Auth account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n  item.json.myNewField = 1;\n}\n\nreturn $input.all();"
      },
      "id": "a1d203d0-4d01-421a-9d88-7299f8f515ce",
      "name": "ManipulateResponse",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        1120,
        320
      ]
    },
    {
      "parameters": {
        "url": "=https://my.demo.cloudron.io/api/v1/apps/{{ $json.apps[0].id }}/backups",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "options": {}
      },
      "id": "9c925efa-458f-4599-8172-7d9fafc3ce23",
      "name": "PullBackupsFromSource",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        1320,
        320
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "11",
          "name": "RobCloudron-Demo"
        },
        "httpQueryAuth": {
          "id": "12",
          "name": "Query Auth account"
        }
      }
    }
  ],
  "connections": {
    "When clicking \"Execute Workflow\"": {
      "main": [
        [
          {
            "node": "PullAppsFromSource",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PullAppsFromSource": {
      "main": [
        [
          {
            "node": "ManipulateResponse",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ManipulateResponse": {
      "main": [
        [
          {
            "node": "PullBackupsFromSource",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
</code></pre>
]]></description><link>https://forum.cloudron.io/post/68014</link><guid isPermaLink="true">https://forum.cloudron.io/post/68014</guid><dc:creator><![CDATA[roofboard]]></dc:creator><pubDate>Fri, 09 Jun 2023 21:15:20 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Sun, 11 Jun 2023 00:10:50 GMT]]></title><description><![CDATA[<p dir="auto">Here's a draft outline of running this from Cloudron A via N8N:</p>
<p dir="auto">Remote Cloudron B<br />
GET<br />
<a href="https://my.example.com/api/v1/apps" target="_blank" rel="noopener noreferrer nofollow ugc">https://my.example.com/api/v1/apps</a><br />
<a href="https://my.example.com/api/v1/apps/%7Bappid%7D" target="_blank" rel="noopener noreferrer nofollow ugc">https://my.example.com/api/v1/apps/{appid}</a><br />
use appStoreId, subdomain, domain<br />
<a href="https://my.example.com/api/v1/apps/%7Bappid%7D/backups" target="_blank" rel="noopener noreferrer nofollow ugc">https://my.example.com/api/v1/apps/{appid}/backups</a><br />
pick latest<br />
<a href="https://my.example.com/api/v1/backups" target="_blank" rel="noopener noreferrer nofollow ugc">https://my.example.com/api/v1/backups</a><br />
<a href="https://my.example.com/api/v1/settings/backup_config" target="_blank" rel="noopener noreferrer nofollow ugc">https://my.example.com/api/v1/settings/backup_config</a><br />
merge backup config with app backup config??</p>
<p dir="auto">Local Cloudron A<br />
POST<br />
<a href="https://my.example.com/api/v1/apps/install" target="_blank" rel="noopener noreferrer nofollow ugc">https://my.example.com/api/v1/apps/install</a><br />
use appStoreId, subdomain, domain; get id<br />
??? import merged remote backup config<br />
<a href="https://my.example.com/api/v1/apps/%7Bappid%7D/restore" target="_blank" rel="noopener noreferrer nofollow ugc">https://my.example.com/api/v1/apps/{appid}/restore</a><br />
use payload from remote app backup config???</p>
<p dir="auto">What would the import calls looks like? <a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a></p>
]]></description><link>https://forum.cloudron.io/post/68005</link><guid isPermaLink="true">https://forum.cloudron.io/post/68005</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Sun, 11 Jun 2023 00:10:50 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Fri, 09 Jun 2023 02:49:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> Looking at the <a href="https://docs.cloudron.io/api.html#tag/Apps" target="_blank" rel="noopener noreferrer nofollow ugc">Cloudron API docs</a>, there doesn't seem to be an import path as there is in the UI.</p>
<p dir="auto">The <a href="https://docs.cloudron.io/api.html#tag/Apps/paths/~1apps~1%7Bappid%7D~1restore/post" target="_blank" rel="noopener noreferrer nofollow ugc">Restore path</a> doesn't seem to be the right thing to use as it expects a local backup id.</p>
<p dir="auto">How does the UI do the import via the API?</p>
]]></description><link>https://forum.cloudron.io/post/67947</link><guid isPermaLink="true">https://forum.cloudron.io/post/67947</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Fri, 09 Jun 2023 02:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Tue, 06 Jun 2023 20:43:04 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fbartels" aria-label="Profile: fbartels">@<bdi>fbartels</bdi></a> Thanks for your thoughtful response Felix!</p>
<p dir="auto">This brings to mind another idea that Cloudron could have a 3rd party API plugin feature integration that would allow for such customizations just as Wordpress plugins do.</p>
<p dir="auto">For me this does clarify the idea that a tool/script should be run from the destination Cloudron A to <code>pull</code> an app from the App backups of Cloudron B.</p>
<p dir="auto">This would also allow for devs to share their pre-packaged Apps for testing and more (using group/domain visibility), similar to the Github <code>fork</code> feature, by sharing the backup configuration.</p>
<p dir="auto">The next bit would be to iterate that import process for a list of App IDs provided.</p>
<p dir="auto">If this were to be polished later as a plugin/feature, remote clone of an app across Cloudrons would be a few clicks away.</p>
<p dir="auto">Another external option would be to use N8N to automate the process in a more visual workflow.</p>
]]></description><link>https://forum.cloudron.io/post/67816</link><guid isPermaLink="true">https://forum.cloudron.io/post/67816</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Tue, 06 Jun 2023 20:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Tue, 06 Jun 2023 19:32:32 GMT]]></title><description><![CDATA[<p dir="auto">Quite some time ago I did some exploration around the backup part of the Cloudron api in <a href="https://blog.9wd.eu/posts/cloudron-migration/" target="_blank" rel="noopener noreferrer nofollow ugc">https://blog.9wd.eu/posts/cloudron-migration/</a>. I could imagine looking into this. Are you offering a bounty?</p>
]]></description><link>https://forum.cloudron.io/post/67815</link><guid isPermaLink="true">https://forum.cloudron.io/post/67815</guid><dc:creator><![CDATA[fbartels]]></dc:creator><pubDate>Tue, 06 Jun 2023 19:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Tue, 06 Jun 2023 17:33:41 GMT]]></title><description><![CDATA[<p dir="auto">I will also nees to do this soon, so also interested...</p>
]]></description><link>https://forum.cloudron.io/post/67813</link><guid isPermaLink="true">https://forum.cloudron.io/post/67813</guid><dc:creator><![CDATA[jdaviescoates]]></dc:creator><pubDate>Tue, 06 Jun 2023 17:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Tue, 06 Jun 2023 01:25:44 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> :<br />
<a class="plugin-mentions-user plugin-mentions-a" href="/user/jdaviescoates" aria-label="Profile: jdaviescoates">@<bdi>jdaviescoates</bdi></a> is right.. Cloudron A needs preserving.</p>
<p dir="auto">Are you aware of anyone writing such a script?</p>
]]></description><link>https://forum.cloudron.io/post/67776</link><guid isPermaLink="true">https://forum.cloudron.io/post/67776</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Tue, 06 Jun 2023 01:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Mon, 05 Jun 2023 17:35:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> said in <a href="/post/67716">How to automate migrating/importing apps from Cloudron to Cloudron</a>:</p>
<blockquote>
<p dir="auto">maybe you could restore the whole cloudron with dry-run option and then cut over DNS one-by-one? <a href="https://docs.cloudron.io/backups/#dry-run" target="_blank" rel="noopener noreferrer nofollow ugc">https://docs.cloudron.io/backups/#dry-run</a></p>
</blockquote>
<p dir="auto">But how could one restore onto a VPS with an already existing Cloudron with lots of other apps already there? <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f914.png?v=13d69e59554" class="not-responsive emoji emoji-android emoji--thinking_face" style="height:23px;width:auto;vertical-align:middle" title=":thinking_face:" alt="🤔" /></p>
]]></description><link>https://forum.cloudron.io/post/67766</link><guid isPermaLink="true">https://forum.cloudron.io/post/67766</guid><dc:creator><![CDATA[jdaviescoates]]></dc:creator><pubDate>Mon, 05 Jun 2023 17:35:20 GMT</pubDate></item><item><title><![CDATA[Reply to How to automate migrating&#x2F;importing apps from Cloudron to Cloudron via API on Mon, 05 Jun 2023 06:28:30 GMT]]></title><description><![CDATA[<p dir="auto">If the goal is to move mostly everything, but only switch over one-by-one app, maybe you could restore the whole cloudron with dry-run option and then cut over DNS one-by-one? <a href="https://docs.cloudron.io/backups/#dry-run" target="_blank" rel="noopener noreferrer nofollow ugc">https://docs.cloudron.io/backups/#dry-run</a></p>
<p dir="auto">Otherwise, I guess writing a small script against the Cloudron API will come in handy.</p>
]]></description><link>https://forum.cloudron.io/post/67716</link><guid isPermaLink="true">https://forum.cloudron.io/post/67716</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Mon, 05 Jun 2023 06:28:30 GMT</pubDate></item></channel></rss>