Pages annexes, exemples et details techniques dans une mise en page plus lisible.
Documentation complète de tous les endpoints de l'API Militant. Vous pouvez également consulter la liste JSON dynamique des endpoints sur /api/v1/index.php.
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/auth.php | POST | Login et obtention du token |
| /api/v1/auth.php?action=register | POST | Créer un compte |
| /api/v1/auth.php?action=forgot_password | POST | Demander un email de réinitialisation du mot de passe |
| /api/v1/auth.php?action=reset_password | POST | Définir un nouveau mot de passe avec le token reçu par email |
| /api/v1/auth.php?action=refresh | POST | Renouveler un token |
| /api/v1/auth.php?action=revoke | POST | Révoquer un token |
Notes :
username ou email dans le champ usernametotp au bodyforgot_password attend {"email": "user@example.org"} et répond toujours par un message générique pour éviter l'énumération des comptesreset_password attend {"token": "...", "password": "nouveau_mot_de_passe"} ; le mot de passe doit contenir au moins 8 caractères| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/users.php | GET | Obtenir son propre profil |
| /api/v1/users.php?id={id} | GET | Obtenir un profil par identifiant |
| /api/v1/users.php | PUT | Mettre à jour son profil |
| /api/v1/settings.php | GET | Obtenir les paramètres publics de l'API (OneSignal, STUN/TURN WebRTC) |
| /api/v1/change_password.php | POST | Changer son mot de passe |
| /api/v1/user_preferences.php | GET | Obtenir ses préférences |
| /api/v1/user_preferences.php | PUT | Mettre à jour ses préférences |
| /api/v1/delete_account.php | POST | Demander la suppression du compte avec confirmation par e-mail |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/posts.php | GET | Obtenir le fil d'actualité (abonnements par défaut) |
| /api/v1/posts.php?feed_type=global | GET | Obtenir le fil global public |
| /api/v1/posts.php?user_id={id} | GET | Mur d'un utilisateur (posts + partages) |
| /api/v1/posts.php?id={id} | GET | Détails d'une publication |
| /api/v1/posts.php | POST | Créer un post |
| /api/v1/posts.php?id={id} | PUT | Modifier un post |
| /api/v1/posts.php?id={id} | DELETE | Supprimer un post |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/comments.php?post_id={id} | GET | Obtenir les commentaires d'un post |
| /api/v1/comments.php | POST | Créer un commentaire ou une réponse (parent_id optionnel) |
| /api/v1/comments.php?id={id} | PUT | Modifier un commentaire |
| /api/v1/comments.php?id={id} | DELETE | Supprimer un commentaire |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/group_comments.php?post_id={id} | GET | Obtenir les commentaires de groupe |
| /api/v1/group_comments.php | POST | Créer un commentaire de groupe ou une réponse (parent_id optionnel) |
| /api/v1/group_comments.php | PUT | Modifier un commentaire de groupe (body id) |
| /api/v1/group_comments.php?id={id} | DELETE | Supprimer un commentaire de groupe |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/comment_reactions.php?comment_id={id}&comment_type={type} | GET | Obtenir les réactions d'un commentaire |
| /api/v1/comment_reactions.php | POST | Ajouter une réaction à un commentaire |
| /api/v1/comment_reactions.php?comment_id={id}&comment_type={type} | DELETE | Retirer une réaction |
Types de commentaires : post, group, page
Types de réactions : like, love, haha, wow, sad, angry
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/reactions.php?post_id={id} | GET | Obtenir les réactions |
| /api/v1/reactions.php | POST | Ajouter une réaction |
| /api/v1/reactions.php?post_id={id} | DELETE | Retirer une réaction |
Types : like, love, haha, wow, sad, angry
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/group_reactions.php | POST | Ajouter une réaction à un post de groupe |
| /api/v1/group_reactions.php?post_id={id} | DELETE | Retirer une réaction |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/follows.php?user_id={id}&type=followers | GET | Obtenir les abonnés |
| /api/v1/follows.php?user_id={id}&type=following | GET | Obtenir les abonnements |
| /api/v1/follows.php | POST | Suivre un utilisateur |
| /api/v1/follows.php?user_id={id} | DELETE | Ne plus suivre |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/friends.php | GET | Liste combinée des amis et demandes reçues |
| /api/v1/friends.php?type=friends | GET | Liste des amis |
| /api/v1/friends.php?type=pending | GET | Demandes reçues en attente |
| /api/v1/friends.php | POST | Envoyer une demande (action=send) |
| /api/v1/friends.php | POST | Accepter une demande (action=accept) |
| /api/v1/friends.php | POST | Refuser une demande (action=reject) |
| /api/v1/friends.php?user_id={id} | DELETE | Retirer des amis |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/messages.php | GET | Obtenir les conversations |
| /api/v1/messages.php?user_id={id} | GET | Messages avec un utilisateur |
| /api/v1/messages.php | POST | Envoyer un message (parent_id optionnel) |
| /api/v1/messages.php?action=react | POST | Ajouter ou remplacer une reaction a un message prive |
| /api/v1/messages.php?id={id} | PUT | Modifier un message |
| /api/v1/messages.php?id={id} | DELETE | Supprimer un message |
| /api/v1/messages.php?action=react&message_id={id} | DELETE | Retirer sa reaction d'un message prive |
| /api/v1/messages.php?user_id={id} | DELETE | Supprimer une conversation entière |
Champs supplementaires renvoyes dans les listes de messages :
parent_idparent_contentparent_sender_usernamereactions_summaryuser_reaction| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/message_groups.php | GET | Obtenir les groupes |
| /api/v1/message_groups.php?path={id} | GET | Détails d'un groupe |
| /api/v1/message_groups.php?path={id}/messages | GET | Messages du groupe |
| /api/v1/message_groups.php | POST | Créer un groupe |
| /api/v1/message_groups.php?path={id}/messages | POST | Envoyer un message (parent_id optionnel) |
| /api/v1/message_groups.php?path={id}/members | POST | Ajouter un membre |
| /api/v1/message_groups.php?path={id}/requests/{request_id}/approve | POST | Approuver une demande d'accès |
| /api/v1/message_groups.php?path={id}/requests/{request_id}/reject | POST | Refuser une demande d'accès |
| /api/v1/message_groups.php?path=messages/{id}/reactions | POST | Ajouter ou remplacer une reaction a un message de groupe |
| /api/v1/message_groups.php?path=messages/{id} | PUT | Modifier un message de groupe |
| /api/v1/message_groups.php?path={id} | PUT | Mettre à jour un groupe de messagerie |
| /api/v1/message_groups.php?path=messages/{id} | DELETE | Supprimer un message de groupe |
| /api/v1/message_groups.php?path=messages/{id}/reactions | DELETE | Retirer sa reaction d'un message de groupe |
| /api/v1/message_groups.php?path={id}/members/{user_id} | DELETE | Retirer un membre |
| /api/v1/message_groups.php?path={id} | DELETE | Quitter le groupe |
Champs supplementaires renvoyes dans les messages de groupe :
parent_idparent_contentparent_usernamereactions_summaryuser_reaction| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/notifications.php | GET | Obtenir les notifications |
| /api/v1/notifications.php?unread=true | GET | Obtenir uniquement les notifications non lues |
| /api/v1/notifications.php?id={id} | PUT | Marquer comme lu |
| /api/v1/notifications.php | PUT | Tout marquer comme lu (mark_all=true dans le body JSON) |
| /api/v1/notifications.php?action=test | POST | Envoyer une notification de test |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/search.php?q={query} | GET | Rechercher tout |
| /api/v1/search.php?q={query}&type=users | GET | Rechercher des utilisateurs |
| /api/v1/search.php?q={query}&type=posts | GET | Rechercher des posts |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/discover.php | GET | Suggestions (militants, groupes, pages) |
| /api/v1/discover.php?type=users | GET | Suggestions de militants |
| /api/v1/discover.php?type=groups | GET | Suggestions de groupes |
| /api/v1/discover.php?type=pages | GET | Suggestions de pages |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/feature_suggestions.php | GET | Liste des suggestions |
| /api/v1/feature_suggestions.php?filter=popular | GET | Suggestions triees par score |
| /api/v1/feature_suggestions.php?filter=recent | GET | Suggestions recentes |
| /api/v1/feature_suggestions.php?filter=planned | GET | Suggestions planifiees ou en cours |
| /api/v1/feature_suggestions.php?filter=done | GET | Suggestions terminees |
| /api/v1/feature_suggestions.php?id={id} | GET | Detail d'une suggestion avec commentaires |
| /api/v1/feature_suggestions.php?action=stats | GET | Statistiques par statut |
| /api/v1/feature_suggestions.php | POST | Creer une suggestion |
| /api/v1/feature_suggestions.php?action=vote | POST | Voter pour ou contre |
| /api/v1/feature_suggestions.php?action=comment | POST | Commenter une suggestion |
| /api/v1/feature_suggestions.php?action=update_status | POST | Mettre a jour le statut et la reponse admin |
| /api/v1/feature_suggestions.php?id={id} | DELETE | Supprimer une suggestion |
Exemples de body JSON :
Creation :
{
"title": "Ajouter un mode hors ligne",
"description": "Permettre la consultation locale de certaines donnees importantes."
}
Vote :
{
"suggestion_id": 12,
"vote": 1
}
Commentaire :
{
"suggestion_id": 12,
"content": "Bonne idee, surtout pour les evenements."
}
Mise a jour moderation :
{
"suggestion_id": 12,
"status": "planned",
"admin_response": "Cette idee est retenue pour la prochaine iteration."
}
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/likes.php | POST | Liker un post |
| /api/v1/likes.php?post_id={id} | DELETE | Retirer son like |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/stories.php | GET | Obtenir les stories actives des comptes suivis et de soi-même |
| /api/v1/stories.php?user_id={id} | GET | Obtenir les stories actives d'un utilisateur |
| /api/v1/stories.php | POST | Créer une story |
| /api/v1/stories.php?id={id} | DELETE | Supprimer une story |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/groups.php | GET | Obtenir les groupes rejoints |
| /api/v1/groups.php?discover=1 | GET | Découvrir des groupes publics |
| /api/v1/groups.php?id={id} | GET | Détails d'un groupe |
| /api/v1/groups.php?id={id}&members=1 | GET | Membres d'un groupe |
| /api/v1/groups.php | POST | Créer un groupe |
| /api/v1/groups.php | POST | Rejoindre un groupe (action=join) |
| /api/v1/groups.php | POST | Inviter un utilisateur (action=invite) |
| /api/v1/groups.php | POST | Approuver une demande (action=approve_request) |
| /api/v1/groups.php | POST | Rejeter une demande (action=reject_request) |
| /api/v1/groups.php | PUT | Mettre à jour un groupe (body id) |
| /api/v1/groups.php?id={id} | DELETE | Quitter un groupe |
| /api/v1/groups.php?id={id}&action=leave | POST | Quitter un groupe (via action) |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/group_posts.php?group_id={id} | GET | Obtenir les publications d'un groupe |
| /api/v1/group_posts.php | POST | Publier dans un groupe |
| /api/v1/group_posts.php | PUT | Modifier une publication de groupe (body id) |
| /api/v1/group_posts.php?id={id} | DELETE | Supprimer une publication de groupe |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/pages.php | GET | Obtenir les pages gérées par l'utilisateur connecté |
| /api/v1/pages.php?id={id} | GET | Détails d'une page |
| /api/v1/pages.php?path={id}/posts | GET | Publications d'une page |
| /api/v1/pages.php?path={id}/comments/{post_id} | GET | Commentaires d'une publication de page |
| /api/v1/pages.php?path={id}/followers | GET | Abonnés d'une page |
| /api/v1/pages.php?path={id}/team | GET | Équipe d'une page |
| /api/v1/pages.php?discover=1 | GET | Découvrir des pages |
| /api/v1/pages.php?followed=1 | GET | Pages suivies par l'utilisateur connecté |
| /api/v1/pages.php | POST | Créer une page |
| /api/v1/pages.php | POST | Suivre une page (action=follow) |
| /api/v1/pages.php | POST | Ne plus suivre une page (action=unfollow) |
| /api/v1/pages.php | POST | Publier sur une page (action=create_post) |
| /api/v1/pages.php | POST | Commenter une publication de page (action=comment) |
| /api/v1/pages.php | POST | Réagir à une publication de page (action=react) |
| /api/v1/pages.php | POST | Ajouter un membre à l'équipe (action=add_team_member) |
| /api/v1/pages.php | POST | Mettre à jour une page (action=update_page) |
| /api/v1/pages.php | PUT | Modifier une publication de page (action=update_post) |
| /api/v1/pages.php | PUT | Modifier un commentaire de page (action=update_comment) |
| /api/v1/pages.php | DELETE | Ne plus suivre une page (action=unfollow ou page_id) |
| /api/v1/pages.php | DELETE | Supprimer une publication de page (action=delete_post) |
| /api/v1/pages.php | DELETE | Retirer un membre de l'équipe (action=remove_team_member) |
| /api/v1/pages.php | DELETE | Retirer un abonné (action=remove_follower) |
| /api/v1/pages.php | DELETE | Supprimer un commentaire de page (action=delete_comment) |
Publication sur une page (POST /api/v1/pages.php)
{
"action": "create_post",
"page_id": 12,
"content": "Bonjour depuis l'API",
"media": null,
"media_type": null
}
Paramètres minimaux :
action: create_postpage_id: identifiant de la pagecontent: texte de la publication, facultatif si media est fournimedia: chemin ou nom de fichier déjà uploadé, facultatifmedia_type: type du média (image, video, etc.), facultatifPermissions :
page_admins sur la page ciblée| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/bookmarks.php | GET | Obtenir les favoris |
| /api/v1/bookmarks.php | POST | Ajouter aux favoris |
| /api/v1/bookmarks.php?post_id={id} | DELETE | Retirer des favoris |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/shares.php | POST | Partager un post (post_id requis) |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/events.php | GET | Obtenir les événements à venir |
| /api/v1/events.php?id={id} | GET | Détails d'un événement |
| /api/v1/events.php | POST | Créer un événement |
| /api/v1/events.php | POST | Participer à un événement (action=join) |
| /api/v1/events.php?id={id} | DELETE | Quitter un événement |
| /api/v1/events.php?id={id}&action=delete | DELETE | Supprimer un événement (auteur uniquement) |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/albums.php | GET | Obtenir ses albums |
| /api/v1/albums.php?user_id={id} | GET | Obtenir les albums d'un utilisateur |
| /api/v1/albums.php?id={id} | GET | Détails d'un album avec ses photos |
| /api/v1/albums.php | POST | Créer un album |
| /api/v1/albums.php | POST | Ajouter une photo (action=add_photo) |
| /api/v1/albums.php?id={id} | DELETE | Supprimer un album |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/lives.php | GET | Obtenir les lives actifs |
| /api/v1/lives.php?path={id} | GET | Détails d'un live |
| /api/v1/lives.php?path={id}/comments | GET | Commentaires du live |
| /api/v1/lives.php?path={id}/guests | GET | Invités du live |
| /api/v1/lives.php | POST | Démarrer un live (Nettoyage auto des anciens lives identiques) |
| /api/v1/lives.php?path=token | POST | Générer un token LiveKit (auth requise) |
| /api/v1/lives.php?path={id}/comments | POST | Commenter |
| /api/v1/lives.php?path={id}/join | POST | Rejoindre comme spectateur |
| /api/v1/lives.php?path={id}/request-guest | POST | Demander à être invité |
| /api/v1/lives.php?path={id}/report | POST | Signaler un live |
| /api/v1/lives.php?path={id}/background | PUT | Mettre a jour l'image de fond persistée du live |
| /api/v1/lives.php?path={id}/end | POST | Terminer un live (action=end dans le body) |
| /api/v1/lives.php?path={id}/end | PUT | Terminer un live (déprécié au profit de POST action=end) |
path=token)POST /api/v1/lives.php?path=token avec en-tete Authorization: Bearer {token} et corps JSON :
roomName (string, obligatoire) : nom de la salle LiveKitidentity (string, obligatoire) : identifiant unique du participantname (string, obligatoire) : pseudo affichecanPublish (bool) : true pour diffuser (createur), false pour spectateurReponse JSON : token (JWT LiveKit), url (serveur wss://), expires_in (secondes).
Configuration serveur : variables LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET, ou fichier config/livekit.local.php (non versionne). Saisie web : /admin/livekit.php apres connexion sur /admin/login.php — acces reserve aux techniciens (meme critere que Millitant : users.is_admin = 1, gerés dans admin.php?tab=technicians ; secours is_technician ou LIVEKIT_TECHNICIAN_USER_IDS).
Configuration TURN/WebRTC : variables WEBRTC_TURN_URLS, WEBRTC_TURN_AUTH_SECRET, WEBRTC_TURN_TTL, WEBRTC_TURN_REALM, ou fichier config/turn.local.php (non versionne). Saisie web : /admin/turn.php. GET /api/v1/settings.php renvoie stun_servers, turn_servers et webrtc_ice_servers; si WEBRTC_TURN_AUTH_SECRET est configure, les credentials TURN sont temporaires (HMAC, compatible coturn use-auth-secret).
path={id}/background)PUT /api/v1/lives.php?path={id}/background avec en-tete Authorization: Bearer {token} et corps JSON :
background_image (string ou null) : chemin/URL de l'image de fond a associer au liveComportement :
null supprime l'image de fond persistéesuccess et background_imageGET /api/v1/lives.php?path={id} peut renvoyer background_image pour les nouveaux spectateurs| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/reports.php | GET | Obtenir les signalements (status=pending par défaut) |
| /api/v1/reports.php?status=resolved | GET | Obtenir les signalements résolus |
| /api/v1/reports.php | POST | Créer un signalement |
| /api/v1/reports.php | POST | Voter sur un signalement (report_id, vote) |
| /api/v1/reports.php | POST | Appliquer une action de modération directe (moderator_action) |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/moderators.php | GET | Obtenir modérateurs, candidats et actions |
| /api/v1/moderators.php?type=candidates | GET | Obtenir uniquement les candidats |
| /api/v1/moderators.php?type=moderators | GET | Obtenir uniquement les modérateurs |
| /api/v1/moderators.php?type=actions | GET | Obtenir l'historique des actions |
| /api/v1/moderators.php | POST | Se porter candidat |
| /api/v1/moderators.php | POST | Voter pour ou contre un candidat (candidate_id, vote) |
| /api/v1/moderators.php | DELETE | Retirer sa candidature |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/sanctions.php | GET | Obtenir ses sanctions |
| /api/v1/sanctions.php?type=all | GET | Obtenir les avertissements et bans publics |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/upload.php | POST | Upload un fichier en multipart/form-data (max 100MB) |
Types supportés : jpg, png, gif, webp, mp4, webm, mov, mp3, wav, m4a
Champs attendus :
mediatype parmi posts, stories, messages, avatar, banner, group, groups, group_post, page, pages, event, album| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/export.php | GET | Exporter toutes ses données (GDPR) |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/two_factor.php | GET | Statut 2FA et secret de configuration si la 2FA n'est pas encore activée |
| /api/v1/two_factor.php?action=enable | POST | Activer la 2FA (TOTP) |
| /api/v1/two_factor.php | DELETE | Désactiver la 2FA |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/user_preferences.php | PUT | Gérer les préférences de notifications push et confidentialité |
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/translate.php | POST | Traduire un texte (LibreTranslate) |
Paramètres (POST) :
text : Texte à traduire (max 5000 car.)target_lang : Langue cible (ex: 'fr', 'en')MILITANT est compatible avec le protocole ActivityPub — le standard du réseau social décentralisé (Mastodon, Pleroma, Misskey, PeerTube…).
Les utilisateurs MILITANT peuvent être trouvés depuis n'importe quelle instance Fediverse avec leur adresse :
@username@votre-domaine.com
Ce mécanisme utilise le protocole WebFinger exposé sur :
GET /.well-known/webfinger?resource=acct:username@votre-domaine.com
Chaque utilisateur possède un profil ActivityPub (Person) accessible via :
GET /fediverse/actor.php?username={username}
Accept: application/activity+json
Réponse JSON-LD incluant : l'identité, la bio, l'avatar, la bannière, l'inbox, l'outbox, la clé publique RSA.
Les 20 dernières publications publiques d'un utilisateur sont disponibles au format ActivityPub :
GET /fediverse/outbox.php?username={username}
Accept: application/activity+json
GET /fediverse/followers.php?username={username} → Collection principale (total)
GET /fediverse/followers.php?username={username}&page=1 → Page 1 des abonnés
---
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/fediverse.php?action=profile | GET | Son propre profil Fediverse |
| /api/v1/fediverse.php?action=profile&user_id={id} | GET | Profil Fediverse d'un autre utilisateur |
| /api/v1/fediverse.php?action=followers | GET | Ses abonnés Fediverse (paginé) |
| /api/v1/fediverse.php?action=followers&user_id={id} | GET | Abonnés Fediverse d'un autre utilisateur |
| /api/v1/fediverse.php?action=following | GET | Ses abonnements Fediverse distants (paginé) |
| /api/v1/fediverse.php?action=following&user_id={id} | GET | Abonnements Fediverse distants d'un autre utilisateur |
| /api/v1/fediverse.php?action=feed | GET | Flux des publications des comptes Fediverse distants suivis |
| /api/v1/fediverse.php?action=feed&refresh=1 | GET | Rafraîchit les outbox distantes suivies avant de renvoyer le flux |
| /api/v1/fediverse.php?action=search_remote&q={handle} | GET | Résoudre ou rechercher un compte Fediverse distant |
| /api/v1/fediverse.php?action=remote_profile&q={handle_ou_actor_url} | GET | Résoudre un profil Fediverse distant unique avec ses posts récents |
| /api/v1/fediverse.php?action=follow_remote | POST | Suivre un compte Fediverse distant |
| /api/v1/fediverse.php?action=unfollow_remote | DELETE | Ne plus suivre un compte Fediverse distant |
#### Réponse action=profile
{
"user_id": 42,
"username": "anar",
"actor_id": "https://domaine.com/users/anar",
"fediverse_handle": "@anar@domaine.com",
"fediverse_active": true,
"followers_count": 17,
"following_count": 9,
"is_remote": false,
"account_type": "local"
}
#### Réponse action=followers
{
"followers": [
{
"actor_url": "https://mastodon.social/users/john",
"username": "john",
"domain": "mastodon.social",
"handle": "@john@mastodon.social",
"is_remote": true,
"account_type": "remote",
"followed_at": "2026-04-14 10:30:00"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 17,
"total_pages": 1
}
}
#### Réponse action=following
{
"following": [
{
"actor_url": "https://mastodon.social/users/alex",
"username": "alex",
"display_name": "Alex",
"domain": "mastodon.social",
"handle": "@alex@mastodon.social",
"avatar": "https://mastodon.social/system/accounts/avatars/...",
"summary": "Syndicaliste et développeur",
"is_following": true,
"is_remote": true,
"account_type": "remote",
"followed_at": "2026-04-15 09:20:00"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 9,
"total_pages": 1
}
}
#### Réponse action=feed
{
"posts": [
{
"id": 12,
"remote_post_id": "https://mastodon.social/@alex/1143596789",
"original_url": "https://mastodon.social/@alex/1143596789",
"actor_url": "https://mastodon.social/users/alex",
"username": "alex",
"display_name": "Alex",
"domain": "mastodon.social",
"handle": "@alex@mastodon.social",
"avatar": "https://mastodon.social/system/accounts/avatars/...",
"content": "Bonjour le Fediverse
",
"media_url": null,
"media_type": null,
"published_at": "2026-04-19 10:10:00",
"created_at": "2026-04-19 10:12:00",
"profile_url": "https://mastodon.social/@alex",
"is_remote": true,
"account_type": "remote"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 1,
"total_pages": 1
},
"synced_posts": 3
}
#### Réponse action=search_remote
{
"items": [
{
"actor_url": "https://mastodon.social/users/alex",
"username": "alex",
"display_name": "Alex",
"domain": "mastodon.social",
"handle": "@alex@mastodon.social",
"avatar": "https://mastodon.social/system/accounts/avatars/...",
"summary": "Syndicaliste et développeur",
"is_following": false,
"is_remote": true,
"account_type": "remote"
}
],
"meta": {
"current_page": 1,
"per_page": 1,
"total": 1,
"total_pages": 1
}
}
#### Réponse action=remote_profile
{
"actor_url": "https://mastodon.social/users/alex",
"username": "alex",
"display_name": "Alex",
"domain": "mastodon.social",
"handle": "@alex@mastodon.social",
"avatar": "https://mastodon.social/system/accounts/avatars/...",
"summary": "Syndicaliste et développeur",
"profile_url": "https://mastodon.social/@alex",
"is_following": true,
"is_remote": true,
"account_type": "remote",
"recent_posts": [
{
"remote_post_id": "https://mastodon.social/@alex/1143596789",
"content": "Bonjour le Fediverse
",
"published_at": "2026-04-19 10:10:00"
}
]
}
Pour POST /api/v1/fediverse.php?action=follow_remote et DELETE /api/v1/fediverse.php?action=unfollow_remote, le corps JSON peut contenir l'un de ces champs :
{
"handle": "@alex@mastodon.social"
}
ou :
{
"actor_url": "https://mastodon.social/users/alex"
}
> Note : Le profil utilisateur (GET /api/v1/users.php) inclut aussi fediverse_actor_id, fediverse_followers_count, fediverse_following_count, fediverse_handle, is_remote et account_type.
| Fonctionnalité | Statut | |---|---| | Découverte WebFinger | ✅ Implémenté | | Profil Actor JSON-LD | ✅ Implémenté | | Clés RSA auto-générées | ✅ Implémenté | | Publications lisibles (Outbox) | ✅ Implémenté | | Inbox (réception d'activités) | ✅ Implémenté | | Signatures HTTP sortantes | ✅ Implémenté | | Vérification signatures entrantes | ✅ Implémenté | | Accept(Follow) signé | ✅ Implémenté | | Abonnés Fediverse persistés en BDD | ✅ Implémenté |
Toutes les requêtes sont limitées par endpoint :
| Endpoint | Limite | |----------|--------| | Auth | 50 req/h | | Posts | 100 req/h | | Comments | 150 req/h | | Comment Reactions | 200 req/h | | Messages | 200 req/h | | Likes/Reactions | 200 req/h | | Group Reactions | 200 req/h | | Upload | 50 req/h | | Export | 5 req/h | | Autres | 100 req/h |
Attention : Exclusif application mobile Flutter - Requiert le header X-Flutter-App: militant-flutter-v1
| Endpoint | Méthode | Description |
|----------|---------|-------------|
| /api/v1/calls.php?action=initiate_talk | POST | Inviter un groupe dans un salon Nextcloud Talk |
| /api/v1/calls.php?action=initiate | POST | Initier un appel 1-to-1 ou de groupe |
| /api/v1/calls.php?action=answer | POST | Répondre à un appel |
| /api/v1/calls.php?action=join | POST | Rejoindre un appel de groupe |
| /api/v1/calls.php?action=peer_offer | POST | Envoyer une offre WebRTC (groupe) |
| /api/v1/calls.php?action=peer_answer | POST | Envoyer une réponse WebRTC (groupe) |
| /api/v1/calls.php?action=ice_candidate | POST | Échanger des ICE candidates |
| /api/v1/calls.php?action=ice_restart | POST | Redémarrer ICE (changement réseau) |
| /api/v1/calls.php?action=reject | POST | Rejeter un appel |
| /api/v1/calls.php?action=leave | POST | Quitter un appel de groupe sans le terminer |
| /api/v1/calls.php?action=end | POST | Terminer un appel |
| /api/v1/calls.php?action=poll | GET | Polling pour mises à jour |
| /api/v1/calls.php?action=history | GET | Historique des appels |
Initier un appel privé:
POST /api/v1/calls.php?action=initiate
Headers:
Authorization: Bearer {token}
X-Flutter-App: militant-flutter-v1
Body:
{
"recipient_id": 123,
"call_type": "audio",
"offer": "v=0\r\no=- 123456..."
}
Initier un appel de groupe:
POST /api/v1/calls.php?action=initiate
Headers:
Authorization: Bearer {token}
X-Flutter-App: militant-flutter-v1
Body:
{
"group_id": 456,
"call_type": "video",
"offer": "v=0\r\no=- 123456..."
}
Polling pour mises à jour:
GET /api/v1/calls.php?action=poll&call_id=abc123&last_poll=2024-01-01%2012:00:00
Headers:
Authorization: Bearer {token}
X-Flutter-App: militant-flutter-v1
/api/v1/settings.php| Endpoint | Limite | |----------|--------| | Calls | 100 req/h |