diff --git a/agt/ballotagent/ballotagent.go b/agt/ballotagent/ballotagent.go
index 33f6b8896ae1a2c03797731b3d87444385774d5d..bde5aec9fafa36f27befbec19b86bdfaa75a1252 100644
--- a/agt/ballotagent/ballotagent.go
+++ b/agt/ballotagent/ballotagent.go
@@ -34,7 +34,7 @@ func (rsa *BallotServerAgent) checkMethod(method string, w http.ResponseWriter,
 	return true
 }
 
-func (*BallotServerAgent) decodeRequest[R any](r *http.Request) (req rad.BallotRequest, err error) {
+func decodeRequest[Req rad.Request](r *http.Request) (req Req, err error) {
 	buf := new(bytes.Buffer)
 	buf.ReadFrom(r.Body)
 	err = json.Unmarshal(buf.Bytes(), &req)
diff --git a/agt/ballotagent/new_ballot.go b/agt/ballotagent/new_ballot.go
index ea07bf669654038684f38f95002c577467518cb1..7cd1756b66677f417bb03430af44be9e3c52449e 100644
--- a/agt/ballotagent/new_ballot.go
+++ b/agt/ballotagent/new_ballot.go
@@ -31,7 +31,7 @@ func (rsa *BallotServerAgent) createBallot(w http.ResponseWriter, r *http.Reques
 	}
 
 	// décodage de la requête
-	req, err := rsa.decodeRequest(r)
+	req, err := decodeRequest[rad.BallotRequest](r)
 	if err != nil {
 		w.WriteHeader(http.StatusBadRequest)
 		fmt.Fprint(w, err.Error())
diff --git a/types.go b/types.go
index 30acadfa020d12485cd49f9d336d8b50fdd248e9..387efff38ec8d42122cbe2a54b86cca02e2fa589 100644
--- a/types.go
+++ b/types.go
@@ -23,3 +23,7 @@ type ResultResponse struct {
 	Winner  int   `json:"winner"`
 	Ranking []int `json:"ranking"`
 }
+
+type Request interface {
+	BallotRequest | Ballot | Vote
+}