diff --git a/packages/api/src/api/rest/titres.queries.ts b/packages/api/src/api/rest/titres.queries.ts
index 26bb917f8587b279a5530c016868ec38c616685e..2ba314256f6473be76423c66dc6a2d6d146d88ca 100644
--- a/packages/api/src/api/rest/titres.queries.ts
+++ b/packages/api/src/api/rest/titres.queries.ts
@@ -2,7 +2,7 @@ import { sql } from '@pgtyped/runtime'
 import { getMostRecentValuePropFromEtapeFondamentaleValide, TitreGet, TitreGetDemarche } from 'camino-common/src/titres'
 import { EffectDbQueryAndValidateErrors, Redefine, dbQueryAndValidate, effectDbQueryAndValidate } from '../../pg-database'
 import {
-    IAddUtilisateurTitreDbQuery,
+  IAddUtilisateurTitreDbQuery,
   IDeleteUtilisateurTitreDbQuery,
   IGetAdministrationsLocalesByTitreIdDbQuery,
   IGetDemarchesByTitreIdQueryDbQuery,
@@ -517,13 +517,16 @@ export const getTitres = (pool: Pool): Effect.Effect<GetTitre[], CaminoError<Eff
 const getTitresDb = sql<Redefine<IGetTitresDbQuery, {}, GetTitre>>`
   select t.id from titres t where t.archive is false`
 
+export const updateUtilisateurTitre = (pool: Pool, abonne: boolean, titreId: TitreId, utilisateurId: UtilisateurId): Effect.Effect<void, CaminoError<EffectDbQueryAndValidateErrors>> =>
+  Effect.if(abonne, {
+    onTrue: () => effectDbQueryAndValidate(addUtilisateurTitreDb, { titreId, utilisateurId }, pool, z.void()),
+    onFalse: () => effectDbQueryAndValidate(deleteUtilisateurTitreDb, { titreId, utilisateurId }, pool, z.void()),
+  })
 
-export const updateUtilisateurTitre = (pool: Pool, abonne: boolean, titreId: TitreId, utilisateurId: UtilisateurId): Effect.Effect<void, CaminoError<EffectDbQueryAndValidateErrors>> => Effect.if(abonne, {
-  onTrue: () => effectDbQueryAndValidate(addUtilisateurTitreDb, {titreId, utilisateurId}, pool, z.void()),
-  onFalse: () => effectDbQueryAndValidate(deleteUtilisateurTitreDb, {titreId, utilisateurId}, pool, z.void()),
-})
-
-const addUtilisateurTitreDb = sql<Redefine<IAddUtilisateurTitreDbQuery, {utilisateurId: UtilisateurId, titreId: TitreId}, void>>`INSERT INTO utilisateurs__titres (utilisateur_id, titre_id) VALUES ($utilisateurId!, $titreId)`
-
+const addUtilisateurTitreDb = sql<
+  Redefine<IAddUtilisateurTitreDbQuery, { utilisateurId: UtilisateurId; titreId: TitreId }, void>
+>`INSERT INTO utilisateurs__titres (utilisateur_id, titre_id) VALUES ($utilisateurId!, $titreId)`
 
-const deleteUtilisateurTitreDb = sql<Redefine<IDeleteUtilisateurTitreDbQuery, {utilisateurId: UtilisateurId, titreId: TitreId}, void>>`DELETE FROM utilisateurs__titres WHERE utilisateur_id=$utilisateurId! and titre_id=$titreId`
+const deleteUtilisateurTitreDb = sql<
+  Redefine<IDeleteUtilisateurTitreDbQuery, { utilisateurId: UtilisateurId; titreId: TitreId }, void>
+>`DELETE FROM utilisateurs__titres WHERE utilisateur_id=$utilisateurId! and titre_id=$titreId`
diff --git a/packages/common/src/rest.ts b/packages/common/src/rest.ts
index d7b96e78cd32fe44c05b8c55b85638231ba456b4..b2117f08ea3113e7fdc41df42a2371a110941686 100644
--- a/packages/common/src/rest.ts
+++ b/packages/common/src/rest.ts
@@ -175,8 +175,17 @@ export const CaminoRestRoutes = {
   '/rest/statistiques/datagouv': { params: noParamsValidator, get: { output: z.array(statistiquesDataGouvValidator) } },
   '/rest/quickAccess': { params: noParamsValidator, newGet: { searchParams: quickAccessSearchParamsValidator, output: quickAccessArrayResultValidator } },
   '/rest/titres': { params: noParamsValidator, newPost: { input: titreDemandeValidator, output: titreDemandeOutputValidator } },
-  '/rest/titres/:titreId': { params: z.object({ titreId: titreIdOrSlugValidator }), get: { output: titreGetValidator }, delete: true, newPost: { output: z.object({ id: titreIdValidator }), input: editableTitreValidator } },
-  '/rest/titres/:titreId/abonne': { params: z.object({ titreId: titreIdValidator }), newPost: { input: utilisateurTitreAbonneValidator, output: z.object({id: titreIdValidator, abonne: z.boolean() }) }, newGet: { output: z.boolean() } },
+  '/rest/titres/:titreId': {
+    params: z.object({ titreId: titreIdOrSlugValidator }),
+    get: { output: titreGetValidator },
+    delete: true,
+    newPost: { output: z.object({ id: titreIdValidator }), input: editableTitreValidator },
+  },
+  '/rest/titres/:titreId/abonne': {
+    params: z.object({ titreId: titreIdValidator }),
+    newPost: { input: utilisateurTitreAbonneValidator, output: z.object({ id: titreIdValidator, abonne: z.boolean() }) },
+    newGet: { output: z.boolean() },
+  },
   '/rest/titresAdministrations': { params: noParamsValidator, get: { output: z.array(titreAdministrationValidator) } },
   '/rest/titresSuper': { params: noParamsValidator, newGet: { output: z.array(superTitreValidator) } },
   '/rest/titres/:id/titreLiaisons': { params: z.object({ id: titreIdValidator }), newGet: { output: titreLinksValidator }, newPost: { input: z.array(titreIdValidator), output: titreLinksValidator } },
diff --git a/packages/ui/src/components/titre.stories.tsx b/packages/ui/src/components/titre.stories.tsx
index eb97d0f19493d117468857d36a52b14ce7136314..4ea689d83953680e8da401a34001c8085b40b35b 100644
--- a/packages/ui/src/components/titre.stories.tsx
+++ b/packages/ui/src/components/titre.stories.tsx
@@ -216,10 +216,10 @@ const titre = {
 } as const satisfies TitreGet
 
 const apiClient: PropsApiClient = {
-  editTitre: (params) => {
+  editTitre: params => {
     editTitreAction(params)
 
-    return Promise.resolve({id: params.id})
+    return Promise.resolve({ id: params.id })
   },
   deleteDemarche: (...params) => {
     deleteDemarcheAction(params)
@@ -249,7 +249,7 @@ const apiClient: PropsApiClient = {
   titreUtilisateurAbonne: (params, abonne) => {
     titreUtilisateurAbonneAction(params, abonne)
 
-    return Promise.resolve({id: params, abonne})
+    return Promise.resolve({ id: params, abonne })
   },
   loadLinkableTitres:
     (...params) =>
diff --git a/packages/ui/src/components/titre/edit-popup.stories.tsx b/packages/ui/src/components/titre/edit-popup.stories.tsx
index 5d2159d0c50f5a06327fd24cf6b7a972e3a50bb5..bc9bd047a4a6b0913c049efdac9f6b9d07573cc0 100644
--- a/packages/ui/src/components/titre/edit-popup.stories.tsx
+++ b/packages/ui/src/components/titre/edit-popup.stories.tsx
@@ -29,10 +29,10 @@ export const DefaultNoReference: StoryFn = () => (
     }}
     close={close}
     apiClient={{
-      editTitre: (params) => {
+      editTitre: params => {
         editTitreAction(params)
 
-        return Promise.resolve({id: params.id})
+        return Promise.resolve({ id: params.id })
       },
     }}
   />
@@ -48,10 +48,10 @@ export const OneReference: StoryFn = () => (
     }}
     close={close}
     apiClient={{
-      editTitre: (params) => {
+      editTitre: params => {
         editTitreAction(params)
 
-        return Promise.resolve({id: params.id})
+        return Promise.resolve({ id: params.id })
       },
     }}
   />
diff --git a/packages/ui/src/components/titre/titre-abonner-button.stories.tsx b/packages/ui/src/components/titre/titre-abonner-button.stories.tsx
index 8007b50192d5d0b62b5eb3ffd5bc8774622ee2dc..403a416bef650adaed33a762cfca8836808d65d5 100644
--- a/packages/ui/src/components/titre/titre-abonner-button.stories.tsx
+++ b/packages/ui/src/components/titre/titre-abonner-button.stories.tsx
@@ -24,7 +24,7 @@ const apiClient: Pick<TitreApiClient, 'getTitreUtilisateurAbonne' | 'titreUtilis
   titreUtilisateurAbonne: (...params) => {
     titreUtilisateurAbonneAction(params)
 
-    return Promise.resolve({id: params[0], abonne: params[1]})
+    return Promise.resolve({ id: params[0], abonne: params[1] })
   },
 }
 const titreId = titreIdValidator.parse('titreId')
diff --git a/packages/ui/src/components/titre/titre-abonner-button.tsx b/packages/ui/src/components/titre/titre-abonner-button.tsx
index 3c49a312a217c8d6d878fbfb4ebd0d49c1f01db7..7a9f19c4999190919658731c3468b02eea700bc1 100644
--- a/packages/ui/src/components/titre/titre-abonner-button.tsx
+++ b/packages/ui/src/components/titre/titre-abonner-button.tsx
@@ -1,4 +1,4 @@
-import { HTMLAttributes, defineComponent, onMounted, } from 'vue'
+import { HTMLAttributes, defineComponent, onMounted } from 'vue'
 import { TitreId } from 'camino-common/src/validators/titres'
 import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools'
 import { User } from 'camino-common/src/roles'
@@ -22,9 +22,9 @@ export const TitreAbonnerButton = defineComponent<Props>(props => {
     if (data.value.status === 'LOADED') {
       const result = await props.apiClient.titreUtilisateurAbonne(props.titreId, !data.value.value)
       if ('message' in result) {
-        setData({status: 'NEW_ERROR', error: result})
+        setData({ status: 'NEW_ERROR', error: result })
       } else {
-        setData({status: 'LOADED', value: !data.value.value})
+        setData({ status: 'LOADED', value: !data.value.value })
       }
     }
   }
diff --git a/packages/ui/src/components/titre/titre-api-client.ts b/packages/ui/src/components/titre/titre-api-client.ts
index b09c196a1a0e47287673d69ae0de4a0708651d63..b34c9827bc81d789de659581a865abb014a424f5 100644
--- a/packages/ui/src/components/titre/titre-api-client.ts
+++ b/packages/ui/src/components/titre/titre-api-client.ts
@@ -42,9 +42,9 @@ type TitreForTitresRerchercherByNom = {
 
 export interface TitreApiClient {
   removeTitre: (titreId: TitreId) => Promise<void>
-  titreUtilisateurAbonne: (titreId: TitreId, abonne: boolean) => Promise<{id: TitreId, abonne: boolean} | CaminoError<string>>
+  titreUtilisateurAbonne: (titreId: TitreId, abonne: boolean) => Promise<{ id: TitreId; abonne: boolean } | CaminoError<string>>
   getTitreUtilisateurAbonne: (titreId: TitreId) => Promise<boolean | CaminoError<string>>
-  editTitre: (titre: EditableTitre) => Promise<{id: TitreId} | CaminoError<string>>
+  editTitre: (titre: EditableTitre) => Promise<{ id: TitreId } | CaminoError<string>>
   getTitreById: (titreId: TitreIdOrSlug) => Promise<TitreGet>
   getTitresForTable: (params: {
     page?: number
@@ -111,13 +111,13 @@ export const titreApiClient: TitreApiClient = {
   removeTitre: async (titreId: TitreId): Promise<void> => {
     return deleteWithJson('/rest/titres/:titreId', { titreId })
   },
-  titreUtilisateurAbonne: async (titreId: TitreId, abonne: boolean): Promise<{id: TitreId, abonne: boolean} | CaminoError<string>> => {
+  titreUtilisateurAbonne: async (titreId: TitreId, abonne: boolean): Promise<{ id: TitreId; abonne: boolean } | CaminoError<string>> => {
     return newPostWithJson('/rest/titres/:titreId/abonne', { titreId }, { abonne })
   },
   getTitreUtilisateurAbonne: async (titreId: TitreId): Promise<boolean | CaminoError<string>> => {
     return newGetWithJson('/rest/titres/:titreId/abonne', { titreId })
   },
-  editTitre: (titre: EditableTitre): Promise<{id: TitreId} | CaminoError<string>> => {
+  editTitre: (titre: EditableTitre): Promise<{ id: TitreId } | CaminoError<string>> => {
     return newPostWithJson('/rest/titres/:titreId', { titreId: titre.id }, titre)
   },
   getTitreById: (titreId: TitreIdOrSlug): Promise<TitreGet> => {