Paginas auxiliares, ejemplos y detalles tecnicos en una maquetacion mas limpia.
Documentación completa de todos los endpoints de l'API Militant. También puede consultar la lista dinámica de endpoints en formato JSON en /api/v1/index.php.
La API distingue entre diferentes roles, especialmente para la moderación y la transmisión en vivo:
is_admin = 1. Tiene acceso al panel admin/ y herramientas técnicas.LIVEKIT_TECHNICIAN_USER_IDS o is_admin = 1.| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/auth.php | POST | Iniciar sesión y obtener un token |
| /api/v1/auth.php?action=register | POST | Crear una cuenta |
| /api/v1/auth.php?action=forgot_password | POST | Solicitar un correo de restablecimiento de contraseña |
| /api/v1/auth.php?action=reset_password | POST | Definir una nueva contraseña con el token recibido por correo |
| /api/v1/auth.php?action=refresh | POST | Renovar un token |
| /api/v1/auth.php?action=revoke | POST | Revocar un token |
Notas:
username o email en el campo usernametotp al bodyforgot_password espera {"email": "user@example.org"} y siempre devuelve un mensaje genérico para evitar la enumeración de cuentasreset_password espera {"token": "...", "password": "nueva_contraseña"}; la contraseña debe tener al menos 8 caracteres| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/users.php | GET | Obtener tu propio perfil |
| /api/v1/users.php?id={id} | GET | Obtener un perfil por identificador |
| /api/v1/users.php | PUT | Actualizar tu perfil |
| /api/v1/settings.php | GET | Obtener la configuración pública de la API (OneSignal, STUN/TURN WebRTC) |
| /api/v1/change_password.php | POST | Cambiar tu contraseña |
| /api/v1/user_preferences.php | GET | Obtener tus preferencias |
| /api/v1/user_preferences.php | PUT | Actualizar tus preferencias |
| /api/v1/delete_account.php | POST | Solicitar la eliminación de la cuenta con confirmación por correo |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/posts.php | GET | Obtener el feed de noticias (seguidos por defecto) |
| /api/v1/posts.php?feed_type=global | GET | Obtener el feed global público |
| /api/v1/posts.php?user_id={id} | GET | Muro de un usuario (posts + compartidos) |
| /api/v1/posts.php?id={id} | GET | Detalles de una publicación |
| /api/v1/posts.php | POST | Crear un post |
| /api/v1/posts.php?id={id} | PUT | Editar un post |
| /api/v1/posts.php?id={id} | DELETE | Eliminar un post |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/comments.php?post_id={id} | GET | Obtener los comentarios de un post |
| /api/v1/comments.php | POST | Crear un comentario o una respuesta (parent_id opcional) |
| /api/v1/comments.php?id={id} | PUT | Editar un comentario |
| /api/v1/comments.php?id={id} | DELETE | Eliminar un comentario |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/group_comments.php?post_id={id} | GET | Obtener los comentarios de grupo |
| /api/v1/group_comments.php | POST | Crear un comentario de grupo o una respuesta (parent_id opcional) |
| /api/v1/group_comments.php | PUT | Editar un comentario de grupo (body id) |
| /api/v1/group_comments.php?id={id} | DELETE | Eliminar un comentario de grupo |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/comment_reactions.php?comment_id={id}&comment_type={type} | GET | Obtener las reacciones de un comentario |
| /api/v1/comment_reactions.php | POST | Añadir una reacción a un comentario |
| /api/v1/comment_reactions.php?comment_id={id}&comment_type={type} | DELETE | Retirar una reacción |
Tipos de comentario: post, group, page
Tipos de reacción: like, love, haha, wow, sad, angry
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/reactions.php?post_id={id} | GET | Obtener las reacciones |
| /api/v1/reactions.php | POST | Añadir una reacción |
| /api/v1/reactions.php?post_id={id} | DELETE | Retirar una reacción |
Tipos: like, love, haha, wow, sad, angry
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/group_reactions.php | POST | Añadir una reacción a un post de grupo |
| /api/v1/group_reactions.php?post_id={id} | DELETE | Retirar una reacción |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/follows.php?user_id={id}&type=followers | GET | Obtener los seguidores |
| /api/v1/follows.php?user_id={id}&type=following | GET | Obtener los seguidos |
| /api/v1/follows.php | POST | Seguir a un usuario |
| /api/v1/follows.php?user_id={id} | DELETE | Dejar de seguir |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/friends.php | GET | Lista combinada de amigos y solicitudes recibidas |
| /api/v1/friends.php?type=friends | GET | Lista de amigos |
| /api/v1/friends.php?type=pending | GET | Solicitudes recibidas pendientes |
| /api/v1/friends.php | POST | Enviar una solicitud (action=send) |
| /api/v1/friends.php | POST | Aceptar una solicitud (action=accept) |
| /api/v1/friends.php | POST | Rechazar una solicitud (action=reject) |
| /api/v1/friends.php?user_id={id} | DELETE | Eliminar un amigo |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/messages.php | GET | Obtener las conversaciones |
| /api/v1/messages.php?user_id={id} | GET | Mensajes con un usuario |
| /api/v1/messages.php | POST | Enviar un mensaje (parent_id opcional) |
| /api/v1/messages.php?action=react | POST | Anadir o reemplazar una reaccion en un mensaje privado |
| /api/v1/messages.php?id={id} | PUT | Editar un mensaje |
| /api/v1/messages.php?id={id} | DELETE | Eliminar un mensaje |
| /api/v1/messages.php?action=react&message_id={id} | DELETE | Quitar tu reaccion de un mensaje privado |
| /api/v1/messages.php?user_id={id} | DELETE | Eliminar una conversación completa |
Campos adicionales devueltos en las listas de mensajes:
parent_idparent_contentparent_sender_usernamereactions_summaryuser_reaction| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/message_groups.php | GET | Obtener los grupos |
| /api/v1/message_groups.php?path={id} | GET | Detalles de un grupo |
| /api/v1/message_groups.php?path={id}/messages | GET | Mensajes del grupo |
| /api/v1/message_groups.php | POST | Crear un grupo |
| /api/v1/message_groups.php?path={id}/messages | POST | Enviar un mensaje (parent_id opcional) |
| /api/v1/message_groups.php?path={id}/members | POST | Añadir un miembro |
| /api/v1/message_groups.php?path={id}/requests/{request_id}/approve | POST | Aprobar una solicitud de acceso |
| /api/v1/message_groups.php?path={id}/requests/{request_id}/reject | POST | Rechazar una solicitud de acceso |
| /api/v1/message_groups.php?path=messages/{id}/reactions | POST | Anadir o reemplazar una reaccion en un mensaje de grupo |
| /api/v1/message_groups.php?path=messages/{id} | PUT | Editar un mensaje de grupo |
| /api/v1/message_groups.php?path={id} | PUT | Actualizar un grupo de mensajería |
| /api/v1/message_groups.php?path=messages/{id} | DELETE | Eliminar un mensaje de grupo |
| /api/v1/message_groups.php?path=messages/{id}/reactions | DELETE | Quitar tu reaccion de un mensaje de grupo |
| /api/v1/message_groups.php?path={id}/members/{user_id} | DELETE | Retirar un miembro |
| /api/v1/message_groups.php?path={id} | DELETE | Salir del grupo |
Campos adicionales devueltos en los mensajes de grupo:
parent_idparent_contentparent_usernamereactions_summaryuser_reaction| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/notifications.php | GET | Obtener las notificaciones |
| /api/v1/notifications.php?unread=true | GET | Obtener solo las notificaciones no leídas |
| /api/v1/notifications.php?id={id} | PUT | Marcar como leída |
| /api/v1/notifications.php | PUT | Marcar todo como leído (mark_all=true en el body JSON) |
| /api/v1/notifications.php?action=test | POST | Enviar una notificación de prueba |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/search.php?q={query} | GET | Buscar en todo |
| /api/v1/search.php?q={query}&type=users | GET | Buscar usuarios |
| /api/v1/search.php?q={query}&type=posts | GET | Buscar publicaciones |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/discover.php | GET | Sugerencias (usuarios, grupos, páginas) |
| /api/v1/discover.php?type=users | GET | Sugerencias de usuarios |
| /api/v1/discover.php?type=groups | GET | Sugerencias de grupos |
| /api/v1/discover.php?type=pages | GET | Sugerencias de páginas |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/feature_suggestions.php | GET | Lista de sugerencias |
| /api/v1/feature_suggestions.php?filter=popular | GET | Sugerencias ordenadas por puntuacion |
| /api/v1/feature_suggestions.php?filter=recent | GET | Sugerencias recientes |
| /api/v1/feature_suggestions.php?filter=planned | GET | Sugerencias planificadas o en curso |
| /api/v1/feature_suggestions.php?filter=done | GET | Sugerencias completadas |
| /api/v1/feature_suggestions.php?id={id} | GET | Detalle de una sugerencia con comentarios |
| /api/v1/feature_suggestions.php?action=stats | GET | Estadisticas por estado |
| /api/v1/feature_suggestions.php | POST | Crear una sugerencia |
| /api/v1/feature_suggestions.php?action=vote | POST | Votar a favor o en contra |
| /api/v1/feature_suggestions.php?action=comment | POST | Comentar una sugerencia |
| /api/v1/feature_suggestions.php?action=update_status | POST | Actualizar el estado y la respuesta admin |
| /api/v1/feature_suggestions.php?id={id} | DELETE | Eliminar una sugerencia |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/likes.php | POST | Dar like a un post |
| /api/v1/likes.php?post_id={id} | DELETE | Retirar tu like |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/stories.php | GET | Obtener las stories activas de cuentas seguidas y propias |
| /api/v1/stories.php?user_id={id} | GET | Obtener las stories activas de un usuario |
| /api/v1/stories.php | POST | Crear una story |
| /api/v1/stories.php?id={id} | DELETE | Eliminar una story |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/groups.php | GET | Obtener los grupos unidos |
| /api/v1/groups.php?discover=1 | GET | Descubrir grupos públicos |
| /api/v1/groups.php?id={id} | GET | Detalles de un grupo |
| /api/v1/groups.php?id={id}&members=1 | GET | Miembros de un grupo |
| /api/v1/groups.php | POST | Crear un grupo |
| /api/v1/groups.php | POST | Unirse a un grupo (action=join) |
| /api/v1/groups.php | POST | Invitar a un usuario (action=invite) |
| /api/v1/groups.php | POST | Aprobar/Rechazar solicitud (action=approve_request/reject_request) |
| /api/v1/groups.php | PUT | Actualizar un grupo (cuerpo id) |
| /api/v1/groups.php?id={id} | DELETE | Salir de un grupo |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/group_posts.php?group_id={id} | GET | Obtener las publicaciones de un grupo |
| /api/v1/group_posts.php | POST | Publicar en un grupo |
| /api/v1/group_posts.php | PUT | Editar una publicación de grupo (body id) |
| /api/v1/group_posts.php?id={id} | DELETE | Eliminar una publicación de grupo |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/pages.php | GET | Obtener las páginas gestionadas por el usuario conectado |
| /api/v1/pages.php?id={id} | GET | Detalles de una página |
| /api/v1/pages.php?path={id}/posts | GET | Publicaciones de una página |
| /api/v1/pages.php?path={id}/comments/{post_id} | GET | Comentarios de una publicación de página |
| /api/v1/pages.php?path={id}/followers | GET | Seguidores de una página |
| /api/v1/pages.php?path={id}/team | GET | Equipo de una página |
| /api/v1/pages.php?discover=1 | GET | Descubrir páginas |
| /api/v1/pages.php?followed=1 | GET | Páginas seguidas por el usuario conectado |
| /api/v1/pages.php | POST | Crear una página |
| /api/v1/pages.php | POST | Seguir una página (action=follow) |
| /api/v1/pages.php | POST | Dejar de seguir una página (action=unfollow) |
| /api/v1/pages.php | POST | Publicar en una página (action=create_post) |
| /api/v1/pages.php | POST | Comentar una publicación de página (action=comment) |
| /api/v1/pages.php | POST | Reaccionar a una publicación de página (action=react) |
| /api/v1/pages.php | POST | Añadir un miembro al equipo (action=add_team_member) |
| /api/v1/pages.php | POST | Actualizar una página (action=update_page) |
| /api/v1/pages.php | PUT | Editar una publicación de página (action=update_post) |
| /api/v1/pages.php | PUT | Editar un comentario de página (action=update_comment) |
| /api/v1/pages.php | DELETE | Dejar de seguir una página (action=unfollow o page_id) |
| /api/v1/pages.php | DELETE | Eliminar una publicación de página (action=delete_post) |
| /api/v1/pages.php | DELETE | Retirar un miembro del equipo (action=remove_team_member) |
| /api/v1/pages.php | DELETE | Retirar un seguidor (action=remove_follower) |
| /api/v1/pages.php | DELETE | Eliminar un comentario de página (action=delete_comment) |
Publicar en una página (POST /api/v1/pages.php)
{
"action": "create_post",
"page_id": 12,
"content": "Hola desde la API",
"media": null,
"media_type": null
}
Parámetros mínimos:
action: create_postpage_id: identificador de la páginacontent: texto de la publicación, opcional si se proporciona mediamedia: ruta o nombre de un archivo ya subido, opcionalmedia_type: tipo de medio (image, video, etc.), opcionalPermisos:
page_admins de la página objetivo| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/bookmarks.php | GET | Obtener los favoritos |
| /api/v1/bookmarks.php | POST | Añadir a favoritos |
| /api/v1/bookmarks.php?post_id={id} | DELETE | Retirar de favoritos |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/shares.php | POST | Compartir un post (post_id obligatorio) |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/events.php | GET | Obtener los eventos próximos |
| /api/v1/events.php?id={id} | GET | Detalles de un evento |
| /api/v1/events.php | POST | Crear un evento |
| /api/v1/events.php | POST | Participar en un evento (action=join) |
| /api/v1/events.php?id={id} | DELETE | Salir de un evento |
| /api/v1/events.php?id={id}&action=delete | DELETE | Eliminar un evento (solo autor) |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/albums.php | GET | Obtener tus álbumes |
| /api/v1/albums.php?user_id={id} | GET | Obtener los álbumes de un usuario |
| /api/v1/albums.php?id={id} | GET | Detalles de un álbum con sus fotos |
| /api/v1/albums.php | POST | Crear un álbum |
| /api/v1/albums.php | POST | Añadir una foto (action=add_photo) |
| /api/v1/albums.php?id={id} | DELETE | Eliminar un álbum |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/lives.php | GET | Obtener los directos activos |
| /api/v1/lives.php?path={id} | GET | Detalles de un directo |
| /api/v1/lives.php?path={id}/comments | GET | Comentarios del directo |
| /api/v1/lives.php?path={id}/guests | GET | Invitados del directo |
| /api/v1/lives.php | POST | Iniciar un directo |
| /api/v1/lives.php?path=token | POST | Generar un token LiveKit (requiere auth) |
| /api/v1/lives.php?path={id}/comments | POST | Comentar |
| /api/v1/lives.php?path={id}/join | POST | Unirse como espectador |
| /api/v1/lives.php?path={id}/request-guest | POST | Solicitar ser invitado |
| /api/v1/lives.php?path={id}/report | POST | Reportar un directo |
| /api/v1/lives.php?path={id}/background | PUT | Actualizar la imagen de fondo persistida del directo |
| /api/v1/lives.php?path={id}/end | POST | Finalizar un directo (action=end en el cuerpo) |
| /api/v1/lives.php?path={id}/end | PUT | Finalizar un directo (depreciado) |
path=token)POST /api/v1/lives.php?path=token con cabecera Authorization: Bearer {token} y cuerpo JSON:
roomName (string, obligatorio): nombre de la sala LiveKitidentity (string, obligatorio): id unico del participantename (string, obligatorio): nombre mostradocanPublish (bool): true para emitir, false para espectadorRespuesta JSON: token (JWT LiveKit), url (servidor wss://), expires_in (segundos).
Configuracion: variables LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET, o archivo config/livekit.local.php (no versionado). Panel web: /admin/livekit.php tras iniciar sesion en /admin/login.php — solo tecnicos (igual que la web: users.is_admin = 1, gestionado en admin.php?tab=technicians; respaldo is_technician o LIVEKIT_TECHNICIAN_USER_IDS).
Configuracion TURN/WebRTC: variables WEBRTC_TURN_URLS, WEBRTC_TURN_AUTH_SECRET, WEBRTC_TURN_TTL, WEBRTC_TURN_REALM, o archivo config/turn.local.php (no versionado). Panel web: /admin/turn.php. GET /api/v1/settings.php devuelve stun_servers, turn_servers y webrtc_ice_servers; si WEBRTC_TURN_AUTH_SECRET esta configurado, las credenciales TURN son temporales (HMAC, compatibles con coturn use-auth-secret).
path={id}/background)PUT /api/v1/lives.php?path={id}/background con cabecera Authorization: Bearer {token} y cuerpo JSON:
background_image (string o null): ruta/URL de la imagen de fondo asociada al directoComportamiento:
null elimina la imagen de fondo persistidasuccess y background_imageGET /api/v1/lives.php?path={id} puede devolver background_image para quienes entren mas tarde| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/reports.php | GET | Obtener los reportes (status=pending por defecto) |
| /api/v1/reports.php?status=resolved | GET | Obtener los reportes resueltos |
| /api/v1/reports.php | POST | Crear un reporte |
| /api/v1/reports.php | POST | Votar sobre un reporte (report_id, vote) |
| /api/v1/reports.php | POST | Aplicar una acción de moderación directa (moderator_action) |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/moderators.php | GET | Obtener moderadores, candidatos y acciones |
| /api/v1/moderators.php?type=candidates | GET | Obtener solo los candidatos |
| /api/v1/moderators.php?type=moderators | GET | Obtener solo los moderadores |
| /api/v1/moderators.php?type=actions | GET | Obtener el historial de acciones |
| /api/v1/moderators.php | POST | Presentarse como candidato |
| /api/v1/moderators.php | POST | Votar a favor o en contra de un candidato (candidate_id, vote) |
| /api/v1/moderators.php | DELETE | Retirar tu candidatura |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/sanctions.php | GET | Obtener tus sanciones |
| /api/v1/sanctions.php?type=all | GET | Obtener avisos y baneos públicos |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/upload.php | POST | Subir un archivo en multipart/form-data (máx. 100MB) |
Tipos soportados: jpg, png, gif, webp, mp4, webm, mov, mp3, wav, m4a
Campos esperados:
mediatype entre posts, stories, messages, avatar, banner, group, groups, group_post, page, pages, event, album| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/export.php | GET | Exportar todos tus datos (GDPR) |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/two_factor.php | GET | Estado de la 2FA y secreto de configuración si aún no está activada |
| /api/v1/two_factor.php?action=enable | POST | Activar la 2FA (TOTP) |
| /api/v1/two_factor.php | DELETE | Desactivar la 2FA |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/user_preferences.php | PUT | Gestionar las preferencias de notificaciones push y privacidad |
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/translate.php | POST | Traducir un texto (LibreTranslate) |
Parámetros (POST):
text: texto a traducir (máx. 5000 caracteres)target_lang: idioma de destino (por ejemplo fr, en)Ver guía completa de Traducción
Todas las solicitudes tienen limitación por endpoint:
| Endpoint | Límite | |----------|--------| | 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 | | Otros | 100 req/h |
Atención: Exclusivo para la app móvil Flutter - Requiere la cabecera X-Flutter-App: militant-flutter-v1
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/calls.php?action=initiate_talk | POST | Invitar a un grupo a una sala Nextcloud Talk |
| /api/v1/calls.php?action=initiate | POST | Iniciar una llamada 1 a 1 o de grupo |
| /api/v1/calls.php?action=answer | POST | Responder una llamada |
| /api/v1/calls.php?action=join | POST | Unirse a una llamada de grupo |
| /api/v1/calls.php?action=peer_offer | POST | Enviar una oferta WebRTC (grupo) |
| /api/v1/calls.php?action=peer_answer | POST | Enviar una respuesta WebRTC (grupo) |
| /api/v1/calls.php?action=ice_candidate | POST | Intercambiar candidatos ICE |
| /api/v1/calls.php?action=ice_restart | POST | Reiniciar ICE (cambio de red) |
| /api/v1/calls.php?action=reject | POST | Rechazar una llamada |
| /api/v1/calls.php?action=leave | POST | Salir de una llamada de grupo sin finalizarla |
| /api/v1/calls.php?action=end | POST | Finalizar una llamada |
| /api/v1/calls.php?action=poll | GET | Polling para actualizaciones |
| /api/v1/calls.php?action=history | GET | Historial de llamadas |
Iniciar una llamada privada:
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..."
}
Iniciar una llamada de grupo:
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..."
}
MILITANT es compatible con el protocolo ActivityPub — el estándar abierto para redes sociales descentralizadas (Mastodon, Pleroma, Misskey, PeerTube…).
Los usuarios de MILITANT pueden ser encontrados desde cualquier instancia del Fediverso con su dirección:
@username@tu-dominio.com
Esto utiliza el protocolo WebFinger disponible en:
GET /.well-known/webfinger?resource=acct:username@tu-dominio.com
Cada usuario tiene un perfil JSON-LD Person accesible vía:
GET /fediverse/actor.php?username={username}
Accept: application/activity+json
La respuesta incluye: identidad, biografía, avatar, portada, bandeja de entrada, bandeja de salida, clave pública RSA.
GET /fediverse/followers.php?username={username} → Colección principal (total)
GET /fediverse/followers.php?username={username}&page=1 → Página 1 de seguidores
---
| Endpoint | Método | Descripción |
|----------|--------|-------------|
| /api/v1/fediverse.php?action=profile | GET | Propio perfil Fediverso |
| /api/v1/fediverse.php?action=profile&user_id={id} | GET | Perfil Fediverso de otro usuario |
| /api/v1/fediverse.php?action=followers | GET | Propios seguidores Fediverso (paginado) |
| /api/v1/fediverse.php?action=followers&user_id={id} | GET | Seguidores Fediverso de otro usuario |
| /api/v1/fediverse.php?action=following | GET | Lista de cuentas remotas del Fediverso seguidas (paginada) |
| /api/v1/fediverse.php?action=following&user_id={id} | GET | Lista de seguidos remotos de otro usuario |
| /api/v1/fediverse.php?action=feed | GET | Flujo de publicaciones de las cuentas remotas seguidas |
| /api/v1/fediverse.php?action=feed&refresh=1 | GET | Refresca las outbox remotas seguidas antes de devolver el flujo |
| /api/v1/fediverse.php?action=search_remote&q={handle} | GET | Resuelve o busca una cuenta remota del Fediverso |
| /api/v1/fediverse.php?action=remote_profile&q={handle_o_actor_url} | GET | Resuelve un perfil remoto único con sus publicaciones recientes |
| /api/v1/fediverse.php?action=follow_remote | POST | Seguir una cuenta remota del Fediverso |
| /api/v1/fediverse.php?action=unfollow_remote | DELETE | Dejar de seguir una cuenta remota del Fediverso |
#### Respuesta action=profile
{
"user_id": 42,
"username": "anar",
"actor_id": "https://dominio.com/users/anar",
"fediverse_handle": "@anar@dominio.com",
"fediverse_active": true,
"followers_count": 17,
"following_count": 9,
"is_remote": false,
"account_type": "local"
}
#### Respuesta 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": "Hola Fediverso
",
"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
}
#### Respuesta 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": "Organizador sindical y desarrollador",
"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": "Hola Fediverso
",
"published_at": "2026-04-19 10:10:00"
}
]
}
Para POST /api/v1/fediverse.php?action=follow_remote y DELETE /api/v1/fediverse.php?action=unfollow_remote, el cuerpo JSON puede contener uno de estos campos:
{
"handle": "@alex@mastodon.social"
}
o:
{
"actor_url": "https://mastodon.social/users/alex"
}
> Nota: GET /api/v1/users.php también devuelve fediverse_actor_id, fediverse_followers_count, fediverse_following_count, fediverse_handle, is_remote y account_type.
| Funcionalidad | Estado | |---|---| | Descubrimiento WebFinger | ✅ Implementado | | Perfil Actor JSON-LD | ✅ Implementado | | Claves RSA generadas automáticamente | ✅ Implementado | | Publicaciones públicas (Outbox) | ✅ Implementado | | Bandeja de entrada (recepción de actividades) | ✅ Implementado | | Firmas HTTP salientes | ✅ Implementado | | Verificación de firmas entrantes | ✅ Implementado | | Accept(Follow) firmado | ✅ Implementado | | Seguidores remotos guardados en BD | ✅ Implementado | | Seguidos remotos guardados en BD | ✅ Implementado | | Resolución de perfiles remotos | ✅ Implementado | | Seguir / dejar de seguir remoto vía API | ✅ Implementado | | Sincronización y almacenamiento del flujo remoto | ✅ Implementado |