Plugins update automation.

-
- Registered Posts: 2

Hello,

I'm trying to automate plugins upgrade through REST API. However, I'm facing some issues you might help with.

First, I cannot filter plugins based on their Origin. In the web UI, Origin appears either as Builtin, Store or Local dev, for instance :

image.png

I've filtered out Local dev using the "isDev" field. But I cannot find a corresponding field for Origin. Do you know a way to list only plugins coming from the store, either through REST API or a field I could filter reponse on ?

Second, according to documentation (https://doc.dataiku.com/dss/api/14/rest/#plugins-plugin-post-1), calling updateFromStore should return 204 on success. However, I only get 200 while performing some manual tests :

$ curl -i -s -H "Authorization: Bearer REDACTED" -H "Content-Type: application/json" -X POST https://REDACTED/public/api/plugins/document-question-answering/actions/updateFromStore
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Wed, 03 Dec 2025 11:34:11 GMT
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
DSS-Version: 14.2.2
DSS-API-Version: 1
version-id: 14.2.2
DKU-Call-BackendTime: 60

Which one should be the expected behavior ?

Thank you for your help.

Kind regards,

Cédric

Tagged:

Best Answer

  • Alexandru
    Alexandru Dataiker, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 1,384 Dataiker
    Answer ✓

    Hi Cedric,

    Indeed, the public API doesn't currently show the origin field. This is only available via the internal API.

    Using 'isDev': False is your best option. Note that doing an update "update_from_store"
    https://developer.dataiku.com/latest/api-reference/python/plugins.html#dataikuapi.dss.plugin.DSSPlugin.update_from_store
    On a built-in plugin would have no impact it should just return :

    Updated plugin: default-samples | Result: {'success': False, 'needsReload': False, 'needsRestart': False, 'installationError': {'errorType': 'com.dataiku.dip.exceptions.CodedException', 'message': 'Plugin has since been removed from the store.', 'detailedMessage': 'Plugin has since been removed from the store.'…

    The list of built-in plugins is pretty static, so you could hard-code it if needed to skip these.

    import dataiku
    
    
    client = dataiku.api_client()
    
    
    for plugin in client.list_plugins():
    
    
        plugin_obj = client.get_plugin(plugin['id'])
        is_dev = plugin.get('isDev', False)
        if not is_dev:
            future = plugin_obj.update_from_store()
            result = future.wait_for_result()
            print("Updated plugin:", plugin['id'], "| Result:", result)
    

Answers

Setup Info
    Tags
      Help me…