diff --git a/rust-libs/modules/gva/dbs-reader/src/endpoints.rs b/rust-libs/modules/gva/dbs-reader/src/endpoints.rs
deleted file mode 100644
index 47eae2d47252741a58ed69f08cba4f274792e80e..0000000000000000000000000000000000000000
--- a/rust-libs/modules/gva/dbs-reader/src/endpoints.rs
+++ /dev/null
@@ -1,120 +0,0 @@
-//  Copyright (C) 2020 Éloïs SANCHEZ.
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
-use crate::*;
-use duniter_dbs::databases::dunp_v1::DunpV1DbReadable;
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use duniter_dbs::databases::dunp_v1::DunpV1DbWritable;
-    use duniter_dbs::PeerCardDbV1;
-
-    #[test]
-    fn test_empty_endpoints() -> KvResult<()> {
-        // Populate DB
-        let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?;
-        let db_reader = DbsReaderImpl::mem();
-        let pk = PublicKey::default();
-
-        dunp_db
-            .peers_old_write()
-            .upsert(PubKeyKeyV2(pk), PeerCardDbV1::default())?;
-
-        // Request Data
-        let api_list = vec!["GVA".to_owned()];
-        assert_eq!(
-            db_reader.endpoints_(&dunp_db, api_list)?,
-            Vec::<String>::new()
-        );
-
-        Ok(())
-    }
-    #[test]
-    fn test_endpoints_with_empty_api_list() -> KvResult<()> {
-        let dummy_endpoint = "GVA S domain.tld 443 gva";
-
-        // Populate DB
-        let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?;
-        let db_reader = DbsReaderImpl::mem();
-        let pk = PublicKey::default();
-        let peer = PeerCardDbV1 {
-            endpoints: vec![dummy_endpoint.to_owned()],
-            ..Default::default()
-        };
-
-        dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?;
-
-        // Request Data
-        let api_list = vec![];
-        assert_eq!(
-            db_reader.endpoints_(&dunp_db, api_list)?,
-            Vec::<String>::new()
-        );
-
-        Ok(())
-    }
-    #[test]
-    fn test_single_peer_endpoints() -> KvResult<()> {
-        let dummy_endpoint = "GVA S domain.tld 443 gva";
-
-        // Populate DB
-        let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?;
-        let db_reader = DbsReaderImpl::mem();
-        let pk = PublicKey::default();
-        let peer = PeerCardDbV1 {
-            endpoints: vec![dummy_endpoint.to_owned()],
-            ..Default::default()
-        };
-
-        dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?;
-
-        // Request Data
-        let api_list = vec!["GVA".to_owned()];
-        assert_eq!(
-            db_reader.endpoints_(&dunp_db, api_list)?,
-            vec![dummy_endpoint.to_owned()]
-        );
-
-        Ok(())
-    }
-}
-
-impl DbsReaderImpl {
-    pub(super) fn endpoints_<DB: DunpV1DbReadable>(
-        &self,
-        network_db: &DB,
-        mut api_list: Vec<String>,
-    ) -> KvResult<Vec<String>> {
-        if api_list.is_empty() {
-            return Ok(vec![]);
-        }
-        for api in &mut api_list {
-            api.push(' ');
-        }
-        network_db.peers_old().iter(.., |it| {
-            it.values()
-                .map_ok(|peer| {
-                    peer.endpoints.into_iter().filter(|endpoint| {
-                        api_list
-                            .iter()
-                            .any(|api| endpoint.starts_with(api.as_str()))
-                    })
-                })
-                .flatten_ok()
-                .collect::<Result<Vec<String>, _>>()
-        })
-    }
-}
diff --git a/rust-libs/modules/gva/dbs-reader/src/lib.rs b/rust-libs/modules/gva/dbs-reader/src/lib.rs
index 8e15fea48877b8f56d234506c7cadc15e251c332..f297f8d09b79e4ae90b091fcf5d8092d54d1eaf0 100644
--- a/rust-libs/modules/gva/dbs-reader/src/lib.rs
+++ b/rust-libs/modules/gva/dbs-reader/src/lib.rs
@@ -24,7 +24,6 @@
 
 pub mod block;
 pub mod current_frame;
-pub mod endpoints;
 pub mod find_inputs;
 pub mod idty;
 pub mod network;
diff --git a/rust-libs/modules/gva/dbs-reader/src/network.rs b/rust-libs/modules/gva/dbs-reader/src/network.rs
index 05f3b7c333c79e617e304b490f48bc311f3d5e85..b540e505fe0e168177eb5424d511583f0c962282 100644
--- a/rust-libs/modules/gva/dbs-reader/src/network.rs
+++ b/rust-libs/modules/gva/dbs-reader/src/network.rs
@@ -15,11 +15,34 @@
 
 use crate::*;
 use dubp::crypto::keys::PublicKey as _;
-use duniter_dbs::databases::dunp_v1::DunpV1DbReadable;
-use duniter_dbs::{DunpHeadDbV1, PeerCardDbV1};
+use duniter_dbs::{databases::dunp_v1::DunpV1DbReadable, DunpHeadDbV1, PeerCardDbV1};
 
 #[allow(clippy::unnecessary_wraps)]
 impl DbsReaderImpl {
+    pub(super) fn endpoints_<DB: DunpV1DbReadable>(
+        &self,
+        network_db: &DB,
+        mut api_list: Vec<String>,
+    ) -> KvResult<Vec<String>> {
+        if api_list.is_empty() {
+            return Ok(vec![]);
+        }
+        for api in &mut api_list {
+            api.push(' ');
+        }
+        network_db.peers_old().iter(.., |it| {
+            it.values()
+                .map_ok(|peer| {
+                    peer.endpoints.into_iter().filter(|endpoint| {
+                        api_list
+                            .iter()
+                            .any(|api| endpoint.starts_with(api.as_str()))
+                    })
+                })
+                .flatten_ok()
+                .collect::<Result<Vec<String>, _>>()
+        })
+    }
     pub(super) fn peers_and_heads_<DB: DunpV1DbReadable>(
         &self,
         dunp_db: &DB,
@@ -53,6 +76,76 @@ impl DbsReaderImpl {
 mod tests {
     use super::*;
     use duniter_dbs::databases::dunp_v1::DunpV1DbWritable;
+    use duniter_dbs::PeerCardDbV1;
+
+    #[test]
+    fn test_empty_endpoints() -> KvResult<()> {
+        // Populate DB
+        let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?;
+        let db_reader = DbsReaderImpl::mem();
+        let pk = PublicKey::default();
+
+        dunp_db
+            .peers_old_write()
+            .upsert(PubKeyKeyV2(pk), PeerCardDbV1::default())?;
+
+        // Request Data
+        let api_list = vec!["GVA".to_owned()];
+        assert_eq!(
+            db_reader.endpoints_(&dunp_db, api_list)?,
+            Vec::<String>::new()
+        );
+
+        Ok(())
+    }
+    #[test]
+    fn test_endpoints_with_empty_api_list() -> KvResult<()> {
+        let dummy_endpoint = "GVA S domain.tld 443 gva";
+
+        // Populate DB
+        let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?;
+        let db_reader = DbsReaderImpl::mem();
+        let pk = PublicKey::default();
+        let peer = PeerCardDbV1 {
+            endpoints: vec![dummy_endpoint.to_owned()],
+            ..Default::default()
+        };
+
+        dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?;
+
+        // Request Data
+        let api_list = vec![];
+        assert_eq!(
+            db_reader.endpoints_(&dunp_db, api_list)?,
+            Vec::<String>::new()
+        );
+
+        Ok(())
+    }
+    #[test]
+    fn test_single_peer_endpoints() -> KvResult<()> {
+        let dummy_endpoint = "GVA S domain.tld 443 gva";
+
+        // Populate DB
+        let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?;
+        let db_reader = DbsReaderImpl::mem();
+        let pk = PublicKey::default();
+        let peer = PeerCardDbV1 {
+            endpoints: vec![dummy_endpoint.to_owned()],
+            ..Default::default()
+        };
+
+        dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?;
+
+        // Request Data
+        let api_list = vec!["GVA".to_owned()];
+        assert_eq!(
+            db_reader.endpoints_(&dunp_db, api_list)?,
+            vec![dummy_endpoint.to_owned()]
+        );
+
+        Ok(())
+    }
 
     #[test]
     fn test_peers_and_heads() -> KvResult<()> {
diff --git a/rust-libs/modules/gva/gql/src/queries.rs b/rust-libs/modules/gva/gql/src/queries.rs
index a23e8ad7c3b11770cc5f99a47b47cad9c0849b6e..7357f49373867fc0e5759df44df905254b2a1d06 100644
--- a/rust-libs/modules/gva/gql/src/queries.rs
+++ b/rust-libs/modules/gva/gql/src/queries.rs
@@ -17,7 +17,6 @@ pub mod account_balance;
 pub mod block;
 pub mod current_block;
 pub mod current_frame;
-pub mod endpoints;
 pub mod first_utxos_of_scripts;
 pub mod gen_tx;
 pub mod idty;
@@ -35,7 +34,6 @@ pub struct QueryRoot(
     queries::block::BlockQuery,
     queries::current_block::CurrentBlockQuery,
     queries::current_frame::CurrentFrameQuery,
-    queries::endpoints::EndpointsQuery,
     queries::first_utxos_of_scripts::FirstUtxosQuery,
     queries::gen_tx::GenTxsQuery,
     queries::idty::IdtyQuery,
diff --git a/rust-libs/modules/gva/gql/src/queries/endpoints.rs b/rust-libs/modules/gva/gql/src/queries/endpoints.rs
deleted file mode 100644
index 38dd6595a482363b1fe36adc2389c8ba7360309e..0000000000000000000000000000000000000000
--- a/rust-libs/modules/gva/gql/src/queries/endpoints.rs
+++ /dev/null
@@ -1,80 +0,0 @@
-//  Copyright (C) 2020 Éloïs SANCHEZ.
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
-use crate::*;
-
-// e2e requester pour obtenir la fiche de peer et un tableau de heads pour une pubKey donnée
-
-// e2e requester pour obtenir la list des endpoints connu filtrable par type (gva, bma, ws2p, es?data-pod)
-// ? e2e list endpoints type
-// ? renomer dunp_v1 en network_v1 & DunpV1Db & co
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::tests::*;
-    use duniter_dbs::databases::dunp_v1::DunpV1Db;
-
-    #[tokio::test]
-    async fn endpoints_gva_resolver() -> anyhow::Result<()> {
-        let mock_cm = MockAsyncAccessor::new();
-        let mut mock_dbs_reader = MockDbsReader::new();
-        mock_dbs_reader
-            .expect_endpoints::<DunpV1Db<FileBackend>>()
-            .times(1)
-            .returning(|_, _| {
-                Ok(vec![
-                    "GVA S g1.librelois.fr 443 gva".to_owned(),
-                    "GVA S domain.tld 443 gva".to_owned(),
-                ])
-            });
-        let schema = create_schema(mock_cm, mock_dbs_reader)?;
-        assert_eq!(
-            exec_graphql_request(&schema, r#"{ endpoints(apiList:["GVA"]) }"#).await?,
-            serde_json::json!({
-                "data": {
-                    "endpoints": [
-                        "GVA S g1.librelois.fr 443 gva",
-                        "GVA S domain.tld 443 gva"
-                        ]
-                }
-            })
-        );
-        Ok(())
-    }
-}
-
-#[derive(Default)]
-pub(crate) struct EndpointsQuery;
-#[async_graphql::Object]
-impl EndpointsQuery {
-    /// Get endpoints known by the node
-    async fn endpoints(
-        &self,
-        ctx: &async_graphql::Context<'_>,
-        #[graphql(
-            desc = "filter endpoints by api (exact match endpoint first word, case sensitive)"
-        )]
-        api_list: Vec<String>,
-    ) -> async_graphql::Result<Vec<String>> {
-        let data = ctx.data::<GvaSchemaData>()?;
-        let dbs_reader = data.dbs_reader();
-
-        Ok(data
-            .dbs_pool
-            .execute(move |dbs| dbs_reader.endpoints(&dbs.dunp_db, api_list))
-            .await??)
-    }
-}
diff --git a/rust-libs/modules/gva/gql/src/queries/network.rs b/rust-libs/modules/gva/gql/src/queries/network.rs
index 39d104aab48244944b440c24e1384b8a414b3d41..25cb150d0325c1336836b2671e35106629ce9a91 100644
--- a/rust-libs/modules/gva/gql/src/queries/network.rs
+++ b/rust-libs/modules/gva/gql/src/queries/network.rs
@@ -25,6 +25,23 @@ pub(crate) struct NetworkQueryInner;
 
 #[async_graphql::Object]
 impl NetworkQueryInner {
+    /// Get endpoints known by the node
+    async fn endpoints(
+        &self,
+        ctx: &async_graphql::Context<'_>,
+        #[graphql(
+            desc = "filter endpoints by api (exact match endpoint first word, case sensitive)"
+        )]
+        api_list: Vec<String>,
+    ) -> async_graphql::Result<Vec<String>> {
+        let data = ctx.data::<GvaSchemaData>()?;
+        let dbs_reader = data.dbs_reader();
+
+        Ok(data
+            .dbs_pool
+            .execute(move |dbs| dbs_reader.endpoints(&dbs.dunp_db, api_list))
+            .await??)
+    }
     /// Get peers and heads
     async fn nodes(
         &self,
@@ -54,6 +71,36 @@ mod tests {
     use duniter_dbs::databases::dunp_v1::DunpV1Db;
     use pretty_assertions::assert_eq;
 
+    #[tokio::test]
+    async fn test_endpoints() -> anyhow::Result<()> {
+        let mock_cm = MockAsyncAccessor::new();
+        let mut mock_dbs_reader = MockDbsReader::new();
+        mock_dbs_reader
+            .expect_endpoints::<DunpV1Db<FileBackend>>()
+            .times(1)
+            .returning(|_, _| {
+                Ok(vec![
+                    "GVA S g1.librelois.fr 443 gva".to_owned(),
+                    "GVA S domain.tld 443 gva".to_owned(),
+                ])
+            });
+        let schema = create_schema(mock_cm, mock_dbs_reader)?;
+        assert_eq!(
+            exec_graphql_request(&schema, r#"{ network { endpoints(apiList:["GVA"]) } }"#).await?,
+            serde_json::json!({
+                "data": {
+                    "network": {
+                        "endpoints": [
+                            "GVA S g1.librelois.fr 443 gva",
+                            "GVA S domain.tld 443 gva"
+                        ]
+                    }
+                }
+            })
+        );
+        Ok(())
+    }
+
     #[tokio::test]
     async fn test_peers_and_heads() -> anyhow::Result<()> {
         let mut dbs_reader = MockDbsReader::new();