diff --git a/routes/jami.js b/routes/jami.js
index 90b9422..9ba97a7 100644
--- a/routes/jami.js
+++ b/routes/jami.js
@@ -1,4 +1,4 @@
-const express = require('express');
+const express = require('express')
 
 class JamiRestApi {
     constructor(jami) {
@@ -6,38 +6,54 @@
     }
 
     getRouter() {
-        const router = express.Router({mergeParams: true});
+        const router = express.Router({mergeParams: true})
 
         // Accounts
         router.get(['/accounts'], (req, res, next) => {
-            console.log("Request account list")
+            console.log("Get account list")
             res.json(this.jami.getAccountList().map(account => account.getSummary()))
-        });
+        })
 
         router.get(['/accounts/:accountId'], (req, res, next) => {
-            console.log(`Request account ${req.params.accountId}`)
-            const account = this.jami.getAccount(req.params.accountId);
+            console.log(`Get account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
             if (account)
                 res.json(account.getObject())
             else
                 res.sendStatus(404)
-        });
+        })
+
+        // Contacts
+        router.get(['/accounts/:accountId/contacts'], (req, res, next) => {
+            console.log(`Get account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
+            if (account)
+                res.json(account.getContacts())
+            else
+                res.sendStatus(404)
+        })
 
         // Conversations
-        const conversationRouter = express.Router({mergeParams: true});
+        const conversationRouter = express.Router({mergeParams: true})
         conversationRouter.get('/', (req, res, next) => {
-            console.log(`Request conversations for account ${req.params.accountId}`);
-            res.json([]);
+            console.log(`Get conversations for account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
+            if (!account)
+                res.sendStatus(404)
+            res.json(account.getConversationIds())
         })
 
         conversationRouter.get('/:conversationId', (req, res, next) => {
-            console.log(`Request conversation ${req.params.conversationId} for account ${req.params.accountId}`);
-            res.json({});
+            console.log(`Get conversation ${req.params.conversationId} for account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
+            if (!account)
+                res.sendStatus(404)
+            res.json(account.getConversation(req.params.conversationId))
         })
 
-        router.use('/accounts/:accountId/conversations', conversationRouter);
-        return router;
+        router.use('/accounts/:accountId/conversations', conversationRouter)
+        return router
     }
 }
 
-module.exports = JamiRestApi;
+module.exports = JamiRestApi
