diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
index d8185b33841ae6ae949265754f581e3c9b47345f..77b347ba00d2b1f03feb623fce1f67e41f3def5f 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
@@ -3,6 +3,7 @@ package it.inaf.ia2.vospace.ui.client;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import it.inaf.ia2.aa.data.User;
 import it.inaf.ia2.vospace.ui.VOSpaceUiApplication;
+import it.inaf.ia2.vospace.ui.data.Job;
 import it.inaf.ia2.vospace.ui.exception.VOSpaceException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -14,15 +15,19 @@ import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
 import java.net.http.HttpResponse.BodyHandlers;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Scanner;
 import java.util.concurrent.CompletionException;
 import java.util.concurrent.ForkJoinPool;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import javax.xml.bind.JAXB;
 import net.ivoa.xml.uws.v1.JobSummary;
+import net.ivoa.xml.uws.v1.Jobs;
+import net.ivoa.xml.uws.v1.ShortJobDescription;
 import net.ivoa.xml.vospace.v2.Node;
 import net.ivoa.xml.vospace.v2.Protocol;
 import net.ivoa.xml.vospace.v2.Transfer;
@@ -111,6 +116,21 @@ public class VOSpaceClient {
         return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Node.class));
     }
 
+    public List<Job> getJobs() {
+
+        HttpRequest request = getRequest("/transfers?direction=pullToVoSpace")
+                .header("Accept", useJson ? "application/json" : "text/xml")
+                .header("Content-Type", useJson ? "application/json" : "text/xml")
+                .GET()
+                .build();
+
+        return call(request, BodyHandlers.ofInputStream(), 200, res -> {
+            return unmarshal(res, Jobs.class).getJobref().stream()
+                    .map(jobDesc -> new Job(jobDesc))
+                    .collect(Collectors.toList());
+        });
+    }
+
     private <T, U> U call(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, int expectedStatusCode, Function<T, U> responseHandler) {
         try {
             return httpClient.sendAsync(request, responseBodyHandler)
diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/JobController.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/JobController.java
index 520c7031c25965ddf4603fd0a2f0f5f74ef5766b..8d395da57d74d666bd8b9ad402b45b949d1b3b1c 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/JobController.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/JobController.java
@@ -158,7 +158,6 @@ public class JobController extends BaseController {
 
     @GetMapping(value = "/jobs", produces = MediaType.APPLICATION_JSON_VALUE)
     public List<Job> getJobs() {
-        // TODO
-        return new ArrayList<>();
+        return client.getJobs();
     }
 }
diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/Job.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/Job.java
index 4ea2b8c35e809939fe0a1545a057fdc228ba6bd3..180fc322c76945e2f62e6d1fdeac211398972fdb 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/Job.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/Job.java
@@ -1,11 +1,15 @@
 package it.inaf.ia2.vospace.ui.data;
 
+import java.text.SimpleDateFormat;
+import javax.xml.datatype.XMLGregorianCalendar;
 import net.ivoa.xml.uws.v1.ExecutionPhase;
 import net.ivoa.xml.uws.v1.JobSummary;
+import net.ivoa.xml.uws.v1.ShortJobDescription;
 
 public class Job {
 
     private String id;
+    private String creationTime;
     private ExecutionPhase phase;
     private boolean read;
 
@@ -14,9 +18,21 @@ public class Job {
 
     public Job(JobSummary job) {
         this.id = job.getJobId();
+        this.creationTime = formatCreationTime(job.getCreationTime());
         this.phase = job.getPhase();
     }
 
+    public Job(ShortJobDescription job) {
+        this.id = job.getId();
+        this.creationTime = formatCreationTime(job.getCreationTime());
+        this.phase = job.getPhase();
+    }
+
+    private String formatCreationTime(XMLGregorianCalendar calendar) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(calendar.toGregorianCalendar().getTime());
+    }
+
     public String getId() {
         return id;
     }
@@ -25,6 +41,14 @@ public class Job {
         this.id = id;
     }
 
+    public String getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(String creationTime) {
+        this.creationTime = creationTime;
+    }
+
     public ExecutionPhase getPhase() {
         return phase;
     }
diff --git a/vospace-ui-frontend/src/components/Jobs.vue b/vospace-ui-frontend/src/components/Jobs.vue
index b0abb7e7cd7863a3156e8fd2aa09ee5197c48b92..7abb1eae1665dfdb4c2895129124c148ffe2b094 100644
--- a/vospace-ui-frontend/src/components/Jobs.vue
+++ b/vospace-ui-frontend/src/components/Jobs.vue
@@ -1,18 +1,23 @@
 <template>
-<table class="table b-table table-striped table-hover">
-  <thead>
-    <tr>
-      <th>Id</th>
-      <th>Status</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr v-for="job in jobs" :key="job.id">
-      <td>{{job.id}}</td>
-      <td>{{job.status}}</td>
-    </tr>
-  </tbody>
-</table>
+<div>
+  <h3>Async recall jobs</h3>
+  <table class="table b-table table-striped table-hover">
+    <thead>
+      <tr>
+        <th>Creation time</th>
+        <th>Id</th>
+        <th>Phase</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr v-for="job in jobs" :key="job.id">
+        <td>{{job.creationTime}}</td>
+        <td>{{job.id}}</td>
+        <td>{{job.phase}}</td>
+      </tr>
+    </tbody>
+  </table>
+</div>
 </template>
 
 <script>