diff --git a/gargantext.cabal b/gargantext.cabal
index 42a28d924b064f94fd7066308faefdd28305b98b..95ca455b03d8fca8af0deca76e2221f8c0efd1a8 100644
--- a/gargantext.cabal
+++ b/gargantext.cabal
@@ -1,11 +1,11 @@
-cabal-version: 0.0.5.8.8.1
+cabal-version: 1.12
 
 -- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
 
 name:           gargantext
-version: 0.0.5.8.8.1
+version:        0.0.5.8.8.1
 synopsis:       Search, map, share
 description:    Please see README.md
 category:       Data
@@ -106,6 +106,7 @@ library
       Gargantext.API.EKG
       Gargantext.API.Flow
       Gargantext.API.GraphQL
+      Gargantext.API.GraphQL.Annuaire
       Gargantext.API.GraphQL.AsyncTask
       Gargantext.API.GraphQL.IMT
       Gargantext.API.GraphQL.Node
diff --git a/src/Gargantext/API/GraphQL.hs b/src/Gargantext/API/GraphQL.hs
index 8ed69ca9bc09a8ca29d981ee2f8669439644c11f..5bbe94670ecb12b56d839d7108a35e214ac446f1 100644
--- a/src/Gargantext/API/GraphQL.hs
+++ b/src/Gargantext/API/GraphQL.hs
@@ -33,6 +33,7 @@ import Data.Proxy
 import Gargantext.API.Admin.Auth.Types (AuthenticatedUser)
 import Gargantext.API.Admin.Orchestrator.Types (JobLog)
 import Gargantext.API.Prelude (HasJobEnv')
+import qualified Gargantext.API.GraphQL.Annuaire as GQLA
 import qualified Gargantext.API.GraphQL.AsyncTask as GQLAT
 import qualified Gargantext.API.GraphQL.IMT as GQLIMT
 import qualified Gargantext.API.GraphQL.Node as GQLNode
@@ -64,7 +65,8 @@ import Gargantext.API.Admin.Types (HasSettings)
 -- | Represents possible GraphQL queries.
 data Query m
   = Query
-    { imt_schools :: GQLIMT.SchoolsArgs -> m [GQLIMT.School]
+    { annuaire_contacts :: GQLA.AnnuaireContactArgs -> m [GQLA.AnnuaireContact]
+    , imt_schools :: GQLIMT.SchoolsArgs -> m [GQLIMT.School]
     , job_logs    :: GQLAT.JobLogArgs -> m (Map Int JobLog)
     , nodes       :: GQLNode.NodeArgs -> m [GQLNode.Node]
     , node_parent :: GQLNode.NodeParentArgs -> m [GQLNode.Node]
@@ -100,13 +102,14 @@ rootResolver
   => RootResolver (GargM env GargError) e Query Mutation Undefined
 rootResolver =
   RootResolver
-    { queryResolver = Query { imt_schools = GQLIMT.resolveSchools
-                            , job_logs    = GQLAT.resolveJobLogs
-                            , nodes       = GQLNode.resolveNodes
-                            , node_parent = GQLNode.resolveNodeParent
-                            , user_infos  = GQLUserInfo.resolveUserInfos
-                            , users       = GQLUser.resolveUsers
-                            , tree        = GQLTree.resolveTree }
+    { queryResolver = Query { annuaire_contacts = GQLA.resolveAnnuaireContacts
+                            , imt_schools       = GQLIMT.resolveSchools
+                            , job_logs          = GQLAT.resolveJobLogs
+                            , nodes             = GQLNode.resolveNodes
+                            , node_parent       = GQLNode.resolveNodeParent
+                            , user_infos        = GQLUserInfo.resolveUserInfos
+                            , users             = GQLUser.resolveUsers
+                            , tree              = GQLTree.resolveTree }
     , mutationResolver = Mutation { update_user_info = GQLUserInfo.updateUserInfo }
     , subscriptionResolver = Undefined }
 
diff --git a/src/Gargantext/API/GraphQL/Annuaire.hs b/src/Gargantext/API/GraphQL/Annuaire.hs
new file mode 100644
index 0000000000000000000000000000000000000000..701e0fad93888c03101c474db21f46ebef406712
--- /dev/null
+++ b/src/Gargantext/API/GraphQL/Annuaire.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+
+module Gargantext.API.GraphQL.Annuaire where
+
+import Control.Lens
+import Data.Morpheus.Types
+  ( GQLType
+  , Resolver
+  , QUERY
+  , lift
+  )
+import Data.Proxy
+import Data.Text (Text)
+import Gargantext.API.Prelude (GargM, GargError)
+import Gargantext.Core.Mail.Types (HasMail)
+import Gargantext.Database.Admin.Types.Hyperdata.Contact
+  ( HyperdataContact
+  , ContactWho
+  , cw_firstName
+  , cw_lastName
+  , hc_who)
+import Gargantext.Database.Admin.Types.Node (NodeId(..))
+import Gargantext.Database.Prelude (HasConnectionPool, HasConfig)
+import Gargantext.Database.Query.Table.Context (getContextWith)
+import Gargantext.Database.Schema.Node (node_hyperdata)
+import Gargantext.Prelude
+import GHC.Generics (Generic)
+
+data AnnuaireContact = AnnuaireContact
+  { ac_id        :: Int
+  , ac_firstName :: Maybe Text
+  , ac_lastName  :: Maybe Text
+  }
+  deriving (Generic, GQLType, Show)
+
+-- | Arguments to the "user info" query.
+data AnnuaireContactArgs
+  = AnnuaireContactArgs
+    { contact_id :: Int
+    } deriving (Generic, GQLType)
+
+type GqlM e env = Resolver QUERY e (GargM env GargError)
+
+-- | Function to resolve user from a query.
+resolveAnnuaireContacts
+  :: (HasConnectionPool env, HasConfig env, HasMail env)
+  => AnnuaireContactArgs -> GqlM e env [AnnuaireContact]
+resolveAnnuaireContacts AnnuaireContactArgs { contact_id } = dbAnnuaireContacts contact_id
+
+-- | Inner function to fetch the user from DB.
+dbAnnuaireContacts
+  :: (HasConnectionPool env, HasConfig env, HasMail env)
+  => Int -> GqlM e env [AnnuaireContact]
+dbAnnuaireContacts contact_id = do
+  -- lift $ printDebug "[dbUsers]" user_id
+--  user <- getUsersWithId user_id
+--  hyperdata <- getUserHyperdata user_id
+--  lift (map toUser <$> zip user hyperdata)
+  c <- lift $ getContextWith (NodeId contact_id) (Proxy :: Proxy HyperdataContact)
+  pure [toAnnuaireContact (contact_id, c ^. node_hyperdata)]
+
+toAnnuaireContact :: (Int, HyperdataContact) -> AnnuaireContact
+toAnnuaireContact (c_id, c_hyperdata) =
+  AnnuaireContact { ac_id = c_id
+                  , ac_firstName = c_hyperdata ^. ac_firstNameL
+                  , ac_lastName = c_hyperdata ^. ac_lastNameL }
+
+contactWhoL :: Traversal' HyperdataContact ContactWho
+contactWhoL = hc_who . _Just
+ac_firstNameL :: Traversal' HyperdataContact (Maybe Text)
+ac_firstNameL = contactWhoL . cw_firstName
+ac_lastNameL :: Traversal' HyperdataContact (Maybe Text)
+ac_lastNameL = contactWhoL . cw_lastName
+