diff --git a/allgo/__init__.py b/allgo/__init__.py
index 9bb84f11afe5120543dc294466092a828a97b648..b8e347527d5a73a8d000654cfd08bfb6b23b40dc 100644
--- a/allgo/__init__.py
+++ b/allgo/__init__.py
@@ -1,5 +1,5 @@
-import os, logging
-
+import logging
+import os
 import time
 
 try:
@@ -13,8 +13,16 @@ except ImportError:
 import requests
 
 log = logging.getLogger('allgo')
-__version__ = '0.1.4'
+__version__ = '0.1.7'
+
 
+def local_token():
+    from os.path import expanduser
+    home = expanduser("~")
+    filetoken = os.path.join(home, '.allgo_token')
+    if os.path.exists(filetoken):
+        with open(filetoken) as f:
+            return f.read()
 
 class App:
     """
@@ -28,7 +36,14 @@ class App:
         :param token: if not provided, we check ALLGO_TOKEN env variable and notebook parameters
         """
         self.name = name
-        self.token = token if token else os.environ.get('ALLGO_TOKEN', None)
+        if token:
+            self.token = token
+        elif 'ALLGO_TOKEN' in os.environ.keys():
+            self.token = os.environ.get('ALLGO_TOKEN')
+        elif local_token():
+            self.token = local_token()
+        else:
+            raise Exception("You must provide a token in parameter or define an environment variable 'ALLGO_TOKEN'")
 
     def run(self, files, outputdir='.', params=''):
         """
@@ -38,12 +53,14 @@ class App:
         :param params: a string parameters see the application documentation
         :return:
         """
-        headers = {'Authorization': 'Token token={}'.format(_token)}
+        headers = {'Authorization': 'Token token={}'.format(self.token)}
         data = {"job[webapp_name]": self.name,
+                "job[webapp_id]": self.name,
                 "job[param]": params}
         ALLGO_URL = os.environ.get('ALLGO_URL', "https://allgo.inria.fr")
-        r = requests.post('%s/api/v1/jobs' % ALLGO_URL, headers=headers, files=files, data=data)
+        r = requests.post('%s/api/v1/jobs/' % ALLGO_URL, headers=headers, files=files, data=data)
         r.raise_for_status()
+        r = r.json()
         jobid = r['id']
         results = None
         while True:
@@ -60,7 +77,7 @@ class App:
             raise Exception('Job %s failed with status %s', (jobid, status))
 
         elif status == 'done' and results:
-            for filename, url in results[jobid].items:
+            for filename, url in results[str(jobid)].items():
                 filepath = os.path.join(outputdir, filename)
                 with open(filepath, 'wb') as fb:
                     fb.write(requests.get(url, stream=True).content)