v1.0.0 OpenAPI 3.1.0
MeetAgain API
Acceso programático a eventos públicos, acciones de las personas miembros (asistencia, comentarios, subida de imágenes) y las secciones de contenido, supervisión y registros de la plataforma. Los endpoints no públicos requieren autenticación con un token de acceso personal (PAT).
Autenticación
Token de acceso personal
Autentícate ante la API con un token de acceso personal: un token de portador de larga duración vinculado a tu cuenta.
Para tus propias CLI, scripts o tareas de operaciones. Genera un token de portador de larga duración en tu página de tokens de acceso y revócalo en cualquier momento desde la misma página.
Cabecera:
Authorization: Bearer mapat_...
Actúa como: tú (el emisor del token)
cms
Edición de páginas y bloques del CMS. Reservada a personas usuarias con ROLE_ADMIN.
GET /api/v1/cms/pages Listar todas las páginas CMS con su grupo propietario y el número de bloques por idioma
Listar todas las páginas CMS con su grupo propietario y el número de bloques por idioma
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Todas las páginas CMS, las más recientes primero | CmsPageSummaryList |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes |
Solicitud de ejemplo
curl '/api/v1/cms/pages' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/cms/block-types Catálogo de tipos de bloque y los campos que acepta cada uno
Catálogo de tipos de bloque y los campos que acepta cada uno
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Definiciones de campos que validan los endpoints de escritura | CmsBlockTypeCatalog |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes |
Solicitud de ejemplo
curl '/api/v1/cms/block-types' \
-H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/cms/blocks/{blockId} Eliminar un bloque
Eliminar un bloque
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
blockId
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Bloque eliminado | |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
Bloque no encontrado |
Solicitud de ejemplo
curl -X DELETE '/api/v1/cms/blocks/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
PATCH /api/v1/cms/blocks/{blockId} Superponer campos sobre un bloque almacenado
Superponer campos sobre un bloque almacenado
La carga se fusiona sobre la almacenada, por lo que un cuerpo parcial solo cambia los campos que nombra.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
blockId
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
type |
any
|
Nombre del tipo de bloque o id numérico; por defecto el tipo almacenado |
payload |
object
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El bloque almacenado, tras la hidratación y la sanitización | CmsBlockSummary |
400 |
Cuerpo de la petición mal formado | |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
Bloque no encontrado | |
422 |
Tipo de bloque inutilizable o falta un campo obligatorio | ValidationErrorResponse |
Solicitud de ejemplo
curl -X PATCH '/api/v1/cms/blocks/1' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"Text","payload":"value"}'
GET /api/v1/cms/pages/{id}/blocks Bloques ordenados de una página en un idioma
Bloques ordenados de una página en un idioma
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
|
locale
|
query |
string
|
Código de idioma de dos letras; por defecto el idioma predeterminado configurado |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Bloques en orden de prioridad | CmsBlockList |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
Página no encontrada | |
422 |
Idioma desconocido |
Solicitud de ejemplo
curl '/api/v1/cms/pages/1/blocks?locale=en' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/cms/pages/{id}/blocks Añadir un bloque a una página en un idioma
Añadir un bloque a una página en un idioma
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
locale |
string
|
|
type |
any
|
Nombre del tipo de bloque o id numérico del catálogo de tipos de bloque |
payload |
object
|
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
El bloque almacenado, tras la hidratación y la sanitización | CmsBlockSummary |
400 |
Cuerpo de la petición mal formado | |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
Página no encontrada | |
422 |
Idioma desconocido, tipo de bloque inutilizable o falta un campo obligatorio | ValidationErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/cms/pages/1/blocks' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locale":"en","type":"Text","payload":"value"}'
POST /api/v1/cms/blocks/{blockId}/move Mover un bloque una posición arriba o abajo dentro de su página e idioma
Mover un bloque una posición arriba o abajo dentro de su página e idioma
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
blockId
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
direction |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Los bloques de la página en su nuevo orden | CmsBlockList |
400 |
Cuerpo de la petición mal formado | |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
Bloque no encontrado | |
422 |
Dirección distinta de up o down |
Solicitud de ejemplo
curl -X POST '/api/v1/cms/blocks/1/move' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"direction":"value"}'
images
Texto alternativo de imágenes por idioma. Reservado a personas usuarias con ROLE_ADMIN.
PUT /api/v1/images/{id}/alt Guardar el texto alternativo de una imagen por idioma
Guardar el texto alternativo de una imagen por idioma
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
alt |
object
|
Idioma => texto alternativo; una cadena vacía lo elimina |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Elemento actualizado con los idiomas requeridos y ausentes recalculados | MissingAltImageItem |
400 |
Cuerpo de la petición mal formado | |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
Imagen no encontrada | |
422 |
Un idioma fuera del conjunto requerido para la imagen |
Solicitud de ejemplo
curl -X PUT '/api/v1/images/1/alt' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"alt":"value"}'
GET /api/v1/images/missing-alt Listar imágenes sin texto alternativo por idioma (keyset)
Listar imágenes sin texto alternativo por idioma (keyset)
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
after_id
|
query |
integer
|
Cursor keyset: recorrer solo las imágenes con un identificador mayor |
limit
|
query |
integer
|
Candidatas revisadas por página (las coincidencias pueden ser menos)
predeterminado: 50
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Página de imágenes a las que aún les falta el texto alternativo en al menos un idioma requerido | MissingAltImageList |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes |
Solicitud de ejemplo
curl '/api/v1/images/missing-alt?after_id=1&limit=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/images/{id}/content Servir una vista previa reducida de la imagen original
Servir una vista previa reducida de la imagen original
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Bytes de la vista previa (normalmente image/webp; el tipo de medio original si falla la conversión) | |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
No se encuentra la imagen ni su archivo original |
Solicitud de ejemplo
curl '/api/v1/images/1/content' \
-H "Authorization: Bearer $ACCESS_TOKEN"
security
Flujo de incidentes de seguridad. Solo lectura, reservado a personas usuarias con ROLE_ADMIN.
GET /api/v1/security/incidents Listar incidentes de seguridad recientes
Listar incidentes de seguridad recientes
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
limit
|
query |
integer
|
predeterminado: 100
|
since
|
query |
string
(date-time)
|
Fecha y hora ISO-8601 como límite inferior de endedAt |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista de incidentes | IncidentList |
401 |
Token bearer ausente o no válido | |
403 |
Rol insuficiente |
Solicitud de ejemplo
curl '/api/v1/security/incidents?limit=1&since=value' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/security/incidents/{id} Obtener un incidente de seguridad con sus informes
Obtener un incidente de seguridad con sus informes
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Detalle del incidente | IncidentDetail |
401 |
Token bearer ausente o no válido | |
403 |
Rol insuficiente | |
404 |
Incidente no encontrado |
Solicitud de ejemplo
curl '/api/v1/security/incidents/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
seo
Supervisión de buscadores: estado, incidencias y acciones. Reservada a personas usuarias con ROLE_ADMIN.
GET /api/v1/seo/status Estado SEO con las variaciones desde la última recogida
Estado SEO con las variaciones desde la última recogida
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
property
|
query |
integer
|
Identificador de la propiedad; por defecto, la primera activada |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Estado actual resumido | SeoStatus |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
No hay ninguna propiedad monitorizada |
Solicitud de ejemplo
curl '/api/v1/seo/status?property=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/seo/issues Listar los problemas de SEO detectados
Listar los problemas de SEO detectados
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
property
|
query |
integer
|
|
filter
|
query |
string
|
predeterminado: open
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista de problemas | SeoIssueList |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
404 |
No hay ninguna propiedad monitorizada |
Solicitud de ejemplo
curl '/api/v1/seo/issues?property=1&filter=value' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/seo/actions Listar las acciones de SEO registradas recientemente
Listar las acciones de SEO registradas recientemente
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
limit
|
query |
integer
|
predeterminado: 100
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista de acciones | SeoActionList |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes |
Solicitud de ejemplo
curl '/api/v1/seo/actions?limit=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/seo/actions Registrar una acción de SEO para atribuirla más adelante
Registrar una acción de SEO para atribuirla más adelante
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
kind |
string
|
|
title |
string
|
|
detail |
string | null
|
|
git_sha |
string | null
|
|
issue_id |
integer | null
|
|
occurred_at |
string | null
(date-time)
|
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
La acción guardada | SeoAction |
400 |
Cuerpo de la petición mal formado | |
401 |
Token bearer ausente o no válido | |
403 |
Rol o alcance insuficientes | |
422 |
Tipo de acción desconocido o marca de tiempo ilegible |
Solicitud de ejemplo
curl -X POST '/api/v1/seo/actions' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"kind":"value","title":"value","detail":"value","git_sha":"value","issue_id":"value","occurred_at":"value"}'
logs
Registros de cron y de envío de correo. Solo lectura, reservados a personas usuarias con ROLE_ADMIN.
GET /api/v1/logs/cron Listar entradas recientes del registro de tareas
Listar entradas recientes del registro de tareas
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
limit
|
query |
integer
|
predeterminado: 100
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista paginada del registro de tareas programadas | CronLogList |
401 |
Token bearer ausente o no válido | |
403 |
Rol insuficiente |
Solicitud de ejemplo
curl '/api/v1/logs/cron?limit=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/logs/sendlog Listar las entradas del registro de envío de correo
Listar las entradas del registro de envío de correo
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
limit
|
query |
integer
|
predeterminado: 100
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista paginada del registro de envío | SendlogList |
401 |
Token bearer ausente o no válido | |
403 |
Rol insuficiente |
Solicitud de ejemplo
curl '/api/v1/logs/sendlog?limit=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/logs/cron/{id} Obtener una entrada del registro de tareas programadas
Obtener una entrada del registro de tareas programadas
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Detalle de la entrada del registro de tareas programadas | CronLogDetail |
401 |
Token bearer ausente o no válido | |
403 |
Rol insuficiente | |
404 |
Entrada del registro de tareas programadas no encontrada |
Solicitud de ejemplo
curl '/api/v1/logs/cron/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/logs/sendlog/{id} Obtener una entrada del registro de envío
Obtener una entrada del registro de envío
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Detalle de la entrada del registro de envío | SendlogDetail |
401 |
Token bearer ausente o no válido | |
403 |
Rol insuficiente | |
404 |
Entrada del registro de envío no encontrada |
Solicitud de ejemplo
curl '/api/v1/logs/sendlog/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
auth
Iniciar sesión con correo y contraseña para obtener un token de acceso personal
POST /api/v1/auth/login Iniciar sesión y recibir un token de acceso personal
Iniciar sesión y recibir un token de acceso personal
Emite un nuevo token de acceso personal para este dispositivo y revoca el que emitió un inicio de sesión anterior con el mismo nombre de dispositivo. Envíalo como token Bearer en cada llamada y vuelve a iniciar sesión ante un 401.
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
email |
string
(email)
|
|
password |
string
(password)
|
|
deviceName |
string
|
Nombre estable de esta instalación, que el miembro ve en su lista de tokens |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Sesión iniciada | LoginResult |
400 |
Cuerpo mal formado o nombre de dispositivo no válido (bad_request, invalid_device_name) | ErrorResponse |
401 |
Correo o contraseña incorrectos (invalid_credentials) | ErrorResponse |
403 |
La cuenta aún no puede o ya no puede iniciar sesión (account_blocked, email_not_verified, pending_approval); el miembro lo resuelve en el sitio web | ErrorResponse |
429 |
Demasiados intentos (too_many_attempts, con Retry-After) o protección de inicio de sesión activa (login_restricted); inicia sesión en el sitio web | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/auth/login' \
-H "Content-Type: application/json" \
-d '{"email":"value","password":"value","deviceName":"value"}'
POST /api/v1/auth/logout Cerrar sesión y revocar el token que hace la llamada
Cerrar sesión y revocar el token que hace la llamada
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Token revocado | |
401 |
Token bearer ausente o no válido |
Solicitud de ejemplo
curl -X POST '/api/v1/auth/logout' \
-H "Authorization: Bearer $ACCESS_TOKEN"
community
GET /api/v1/community/blocks Listar los miembros bloqueados por quien llama
Listar los miembros bloqueados por quien llama
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Miembros bloqueados | MemberList |
401 |
Token bearer ausente o no válido |
Solicitud de ejemplo
curl '/api/v1/community/blocks' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/community/members Listar los miembros de la plataforma
Listar los miembros de la plataforma
Los miembros que el miembro que llama puede ver, excluidos los bloqueados. Quien se dio de baja del directorio tampoco aparece aquí, igual que en la web; su perfil sigue siendo accesible por id.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
limit
|
query |
integer
|
predeterminado: 20
|
offset
|
query |
integer
|
predeterminado: 0
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Miembros | MemberList |
401 |
Token bearer ausente o no válido |
Solicitud de ejemplo
curl '/api/v1/community/members?limit=1&offset=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/community/blocks/{id} Bloquear a un miembro
Bloquear a un miembro
Bloquear elimina cualquier seguimiento en ambos sentidos y oculta la conversación en ambas bandejas. Repetir la llamada es seguro.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Bloqueado | |
401 |
Token bearer ausente o no válido | |
404 |
El miembro no existe (not_found) | ErrorResponse |
422 |
Bloquearse a uno mismo (self_target) | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/community/blocks/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/community/blocks/{id} Desbloquear a un miembro
Desbloquear a un miembro
Repetir la llamada es seguro. Desbloquear no restaura un seguimiento que el bloqueo eliminó.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
No bloqueado | |
401 |
Token bearer ausente o no válido | |
404 |
El miembro no existe (not_found) | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/community/blocks/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/community/members/{id} Leer el perfil de un miembro
Leer el perfil de un miembro
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El perfil del miembro | MemberProfile |
401 |
Token bearer ausente o no válido | |
403 |
El miembro ha bloqueado a quien llama (forbidden) | ErrorResponse |
404 |
El miembro no existe (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/community/members/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/community/conversations Listar las conversaciones del miembro que llama
Listar las conversaciones del miembro que llama
Una entrada por persona, la más reciente primero. Las personas bloqueadas en cualquiera de los dos sentidos quedan fuera.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
limit
|
query |
integer
|
predeterminado: 20
|
offset
|
query |
integer
|
predeterminado: 0
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Conversaciones | ConversationList |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el ámbito community:read (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/community/conversations?limit=1&offset=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
PATCH /api/v1/community/messages/{id} Editar un mensaje dentro de la ventana de edición
Editar un mensaje dentro de la ventana de edición
Un mensaje puede editarse durante diez minutos después de enviarlo. La web responde 403 aquí; esta interfaz responde 409, porque la ventana es un conflicto de estado y no un fallo de autorización.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
content |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El mensaje guardado | ThreadMessage |
401 |
Token bearer ausente o no válido | |
404 |
El mensaje no existe o lo envió otra persona (not_found) | ErrorResponse |
409 |
La ventana de diez minutos ha pasado (edit_window_expired) | ErrorResponse |
422 |
content_required o content_too_long | ErrorResponse |
Solicitud de ejemplo
curl -X PATCH '/api/v1/community/messages/1' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"value"}'
POST /api/v1/community/members/{id}/follow Seguir a un miembro
Seguir a un miembro
Repetir la llamada es seguro: declara el estado final deseado en lugar de alternar.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Siguiendo | |
401 |
Token bearer ausente o no válido | |
404 |
El miembro no existe (not_found) | ErrorResponse |
409 |
Un bloqueo en cualquiera de los dos sentidos (blocked) | ErrorResponse |
422 |
Seguirse a uno mismo (self_target) | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/community/members/1/follow' \
-H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/community/members/{id}/follow Dejar de seguir a un miembro
Dejar de seguir a un miembro
Repetir la llamada es seguro.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
No siguiendo | |
401 |
Token bearer ausente o no válido | |
404 |
El miembro no existe (not_found) | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/community/members/1/follow' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/community/groups/{slug}/members Listar los miembros de un grupo
Listar los miembros de un grupo
La misma lista, acotada a un grupo. Un grupo inaccesible para quien llama devuelve el mismo 404 que un slug desconocido; alcanzar un grupo privado u oculto requiere un token que además lleve me:read, porque la pertenencia se resuelve mediante ese ámbito.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
|
limit
|
query |
integer
|
predeterminado: 20
|
offset
|
query |
integer
|
predeterminado: 0
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Miembros de ese grupo | MemberList |
401 |
Token bearer ausente o no válido | |
404 |
Grupo no encontrado o inaccesible (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/community/groups/slug/members?limit=1&offset=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/community/conversations/{userId} Leer un hilo
Leer un hilo
Del más antiguo al más reciente. Esta lectura no tiene efectos: no marca el hilo como leído, a diferencia de abrir la página en la web. Para eso está POST /api/v1/community/conversations/{userId}/read.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
userId
*
|
path |
integer
|
|
limit
|
query |
integer
|
predeterminado: 20
|
offset
|
query |
integer
|
predeterminado: 0
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El hilo | MessageThread |
401 |
Token bearer ausente o no válido | |
404 |
El miembro no existe (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/community/conversations/1?limit=1&offset=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/community/conversations/{userId} Enviar un mensaje directo
Enviar un mensaje directo
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
userId
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
content |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
El mensaje guardado | ThreadMessage |
401 |
Token bearer ausente o no válido | |
404 |
El miembro no existe (not_found) | ErrorResponse |
409 |
Un bloqueo en cualquiera de los dos sentidos (blocked) | ErrorResponse |
422 |
content_required, content_too_long o self_target | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/community/conversations/1' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"value"}'
POST /api/v1/community/conversations/{userId}/read Marcar un hilo como leído
Marcar un hilo como leído
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
userId
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Marcado como leído | |
401 |
Token bearer ausente o no válido | |
404 |
El miembro no existe (not_found) | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/community/conversations/1/read' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/community/groups/{slug}/town-hall/topics Listar los temas del Town Hall de un grupo
Listar los temas del Town Hall de un grupo
El árbol completo del foro del grupo, en profundidad primero, tal como lo carga el sitio web. Sin paginar. Un grupo sin Town Hall, o cuyo Town Hall está cerrado para quien llama, responde 404 - la misma respuesta que un slug desconocido.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El árbol de temas | TopicList |
401 |
Token bearer ausente o no válido | |
404 |
Grupo no encontrado, no accesible o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/community/groups/slug/town-hall/topics' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/community/groups/{slug}/town-hall/topics Iniciar un tema o un subtema
Iniciar un tema o un subtema
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
title |
string
|
|
parentId |
integer | null
|
Iniciar un subtema de este tema. |
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
Tema creado | Topic |
401 |
Token bearer ausente o no válido | |
404 |
Grupo o tema padre no encontrado, o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
422 |
empty_title, title_too_long o too_deep | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/community/groups/slug/town-hall/topics' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"value","parentId":"value"}'
GET /api/v1/community/groups/{slug}/town-hall/gallery Listar la galería del Town Hall de un grupo
Listar la galería del Town Hall de un grupo
Las fotos subidas a los eventos del grupo, las más recientes primero, cada una con su evento. Las fotos denunciadas por un miembro se omiten, como en la página del evento.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
|
limit
|
query |
integer
|
predeterminado: 20
|
offset
|
query |
integer
|
predeterminado: 0
|
locale
|
query |
string
|
Idioma de los títulos de los eventos |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Una página de fotos | GalleryList |
401 |
Token bearer ausente o no válido | |
404 |
Grupo no encontrado, no accesible o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/community/groups/slug/town-hall/gallery?limit=1&offset=1&locale=en' \
-H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/community/groups/{slug}/town-hall/topics/{id} Eliminar un tema
Eliminar un tema
El autor puede eliminar un tema mientras no tenga subtemas ni respuestas; un admin lo elimina con todo su subárbol.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Tema eliminado | |
401 |
Token bearer ausente o no válido | |
403 |
No se permite eliminarlo (forbidden) | ErrorResponse |
404 |
Grupo o tema no encontrado, o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/community/groups/slug/town-hall/topics/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
PATCH /api/v1/community/groups/{slug}/town-hall/topics/{id} Renombrar un tema (autor o admin)
Renombrar un tema (autor o admin)
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
title |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Tema renombrado | Topic |
401 |
Token bearer ausente o no válido | |
403 |
Ni el autor ni admin (forbidden) | ErrorResponse |
404 |
Grupo o tema no encontrado, o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
422 |
empty_title o title_too_long | ErrorResponse |
Solicitud de ejemplo
curl -X PATCH '/api/v1/community/groups/slug/town-hall/topics/1' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"value"}'
GET /api/v1/community/groups/{slug}/town-hall/topics/{id}/replies Listar las respuestas a un tema
Listar las respuestas a un tema
Las más recientes primero, paginadas hacia atrás como los comentarios de eventos: pasa el nextBefore de la página anterior.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
|
id
*
|
path |
integer
|
|
before
|
query |
integer
|
Solo respuestas más antiguas que este id de respuesta |
limit
|
query |
integer
|
predeterminado: 20
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Una página de respuestas | CommentList |
401 |
Token bearer ausente o no válido | |
404 |
Grupo o tema no encontrado, o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/community/groups/slug/town-hall/topics/1/replies?before=1&limit=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/community/groups/{slug}/town-hall/topics/{id}/replies Responder a un tema
Responder a un tema
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
content |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
Respuesta creada | CommentCreated |
401 |
Token bearer ausente o no válido | |
404 |
Grupo o tema no encontrado, o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
422 |
content_required o content_too_long | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/community/groups/slug/town-hall/topics/1/replies' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"value"}'
DELETE /api/v1/community/groups/{slug}/town-hall/topics/{id}/replies/{replyId} Eliminar una respuesta (propia o como admin)
Eliminar una respuesta (propia o como admin)
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
|
id
*
|
path |
integer
|
|
replyId
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Respuesta eliminada | |
401 |
Token bearer ausente o no válido | |
403 |
No es tu respuesta y no eres admin (forbidden) | ErrorResponse |
404 |
Grupo, tema o respuesta no encontrados, una respuesta a otro tema, o Town Hall cerrado para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/community/groups/slug/town-hall/topics/1/replies/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
event-actions
Acciones de personas usuarias autenticadas sobre eventos: asistencia, comentarios, subida de imágenes
PUT /api/v1/events/{id}/rsvp Fijar la asistencia y los acompañantes de un evento
Fijar la asistencia y los acompañantes de un evento
Idempotente: fija la asistencia y el número de acompañantes en una llamada y devuelve el estado resultante.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
going |
boolean
|
|
guests |
integer
|
Acompañantes que trae el miembro, de 0 a 5; se ignora si no asiste |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Estado de asistencia resultante | RsvpResult |
401 |
Token bearer ausente o no válido | |
403 |
No permitido (not_a_member) | ErrorResponse |
404 |
Evento no encontrado | ErrorResponse |
409 |
Evento cancelado o ya comenzado (event_canceled, event_started) | ErrorResponse |
400 |
El cuerpo no es un objeto, o going no es un booleano (bad_request) | ErrorResponse |
422 |
Número de acompañantes fuera de rango (validation_failed) | ErrorResponse |
Solicitud de ejemplo
curl -X PUT '/api/v1/events/1/rsvp' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"going":"value","guests":"value"}'
POST /api/v1/events/{id}/rsvp Confirmar asistencia a un evento
Confirmar asistencia a un evento
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Asistencia registrada (o ya existente) | RsvpResult |
401 |
Token bearer ausente o no válido | |
403 |
No permitido (pertenencia al grupo / cuenta bloqueada) | ErrorResponse |
404 |
Evento no encontrado | ErrorResponse |
409 |
Evento cancelado o ya comenzado | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/events/1/rsvp' \
-H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/events/{id}/rsvp Retirar la asistencia a un evento
Retirar la asistencia a un evento
Retirarse nunca se rechaza: un evento cancelado, uno que ya ha empezado y una membresía perdida permiten igualmente salir de la lista de asistentes.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Asistencia retirada (o ya inexistente) | RsvpResult |
401 |
Token bearer ausente o no válido | |
404 |
Evento no encontrado | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/events/1/rsvp' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/events/{id}/images Listar las fotos de un evento
Listar las fotos de un evento
Las fotos del evento en todos los tamaños generados. Las fotos denunciadas por un miembro se omiten, como en la página del evento.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Las fotos del evento | ImageList |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance event-actions:read (insufficient_scope) | ErrorResponse |
404 |
Evento no encontrado o no visible para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/events/1/images' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/events/{id}/images Subir una imagen a un evento
Subir una imagen a un evento
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: multipart/form-data
| Nombre | Tipo | Descripción |
|---|---|---|
file |
string
(binary)
|
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
Imagen subida | ImageUploaded |
400 |
file_required, file_rejected o upload_failed | ErrorResponse |
401 |
Token bearer ausente o no válido | |
403 |
No permitido | ErrorResponse |
404 |
Evento no encontrado | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/events/1/images' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-F "file=@/path/to/file"
GET /api/v1/events/{id}/comments Listar los comentarios de un evento
Listar los comentarios de un evento
Los más recientes primero, como en la página del evento. Pasa el nextBefore de la página anterior para obtener la siguiente.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
|
before
|
query |
integer
|
Solo los comentarios anteriores a este identificador de comentario |
limit
|
query |
integer
|
predeterminado: 25
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Una página de comentarios | CommentList |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance event-actions:read (insufficient_scope) | ErrorResponse |
404 |
Evento no encontrado o no visible para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/events/1/comments?before=1&limit=1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/events/{id}/comments Publicar un comentario en un evento
Publicar un comentario en un evento
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
content |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
Comentario creado | CommentCreated |
400 |
content_required o content_too_long | ErrorResponse |
401 |
Token bearer ausente o no válido | |
403 |
No permitido | ErrorResponse |
404 |
Evento no encontrado | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/events/1/comments' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"value"}'
GET /api/v1/events/{id}/attendees Listar quién asiste a un evento
Listar quién asiste a un evento
Quién asiste, tal como la página del evento lo muestra a un miembro con sesión iniciada: las personas inscritas con sus invitados, más el recuento externo que mantiene la organización.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Las personas que asisten | AttendeeList |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance event-actions:read (insufficient_scope) | ErrorResponse |
404 |
Evento no encontrado o no visible para quien llama (not_found) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/events/1/attendees' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/events/{id}/occurrences Listar las otras fechas de un encuentro recurrente
Listar las otras fechas de un encuentro recurrente
Los próximos eventos visibles de la misma serie, cada uno con la asistencia de quien llama. Un evento sin serie responde consigo mismo.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Próximas fechas de la serie | EventList |
401 |
Token bearer ausente o no válido | |
404 |
Evento no encontrado | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/events/1/occurrences' \
-H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/events/{id}/images/{imageId} Eliminar una imagen de un evento (propia o admin)
Eliminar una imagen de un evento (propia o admin)
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
|
imageId
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Imagen eliminada | |
401 |
Token bearer ausente o no válido | |
403 |
La imagen no es tuya y no tienes permisos de administración | ErrorResponse |
404 |
Imagen o evento no encontrado | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/events/1/images/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/events/{id}/comments/{commentId} Eliminar un comentario de un evento (propio o admin)
Eliminar un comentario de un evento (propio o admin)
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
|
commentId
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Comentario eliminado | |
401 |
Token bearer ausente o no válido | |
403 |
El comentario no es tuyo y no tienes permisos de administración | ErrorResponse |
404 |
Comentario o evento no encontrado | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/events/1/comments/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
events
Listados y detalle de eventos públicos
GET /api/v1/events Listar los próximos eventos públicos
Listar los próximos eventos públicos
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
locale
|
query |
string
|
|
from
|
query |
string
(date-time)
|
Límite inferior ISO-8601 (por defecto: ahora) |
to
|
query |
string
(date-time)
|
Límite superior ISO-8601 |
limit
|
query |
integer
|
predeterminado: 20
|
offset
|
query |
integer
|
predeterminado: 0
|
group
|
query |
string
|
Slug del grupo; un slug desconocido devuelve una lista vacía |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista paginada de eventos | EventList |
Solicitud de ejemplo
curl '/api/v1/events?locale=en&from=value&to=value&limit=1&offset=1&group=weiqi-club'
GET /api/v1/events/{id} Obtener un evento por su identificador
Obtener un evento por su identificador
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
|
locale
|
query |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Detalle del evento | EventDetail |
404 |
Evento no encontrado o no visible en el contexto actual | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/events/1?locale=value'
group-admin
Acciones de administración limitadas a un grupo. Requieren el rol de propietario u organizador en el grupo indicado, o ROLE_ADMIN en la plataforma.
GET /api/v1/groups/{groupSlug}/admin/members Listar las personas miembros de un grupo
Listar las personas miembros de un grupo
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
groupSlug
*
|
path |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista de miembros | GroupMemberList |
401 |
Token bearer ausente o no válido | |
403 |
Quien llama no es propietario ni organizador de este grupo | |
404 |
Grupo no encontrado | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/groups/groupSlug/admin/members' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/groups/{groupSlug}/admin/settings Leer la configuración de un grupo
Leer la configuración de un grupo
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
groupSlug
*
|
path |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Configuración del grupo | GroupSettings |
401 |
Token bearer ausente o no válido | |
403 |
Quien llama no es propietario ni organizador de este grupo | |
404 |
Grupo no encontrado | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/groups/weiqi-club/admin/settings' \
-H "Authorization: Bearer $ACCESS_TOKEN"
groups
Grupos cliente (multisite)
GET /api/v1/groups Listar los grupos activos
Listar los grupos activos
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista de resúmenes de grupos | GroupList |
Solicitud de ejemplo
curl '/api/v1/groups'
GET /api/v1/groups/{groupSlug} Obtener un grupo por su slug
Obtener un grupo por su slug
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
groupSlug
*
|
path |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Detalle del grupo | GroupDetail |
404 |
Grupo no encontrado | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/groups/groupSlug'
GET /api/v1/groups/{groupSlug}/cms Listar las páginas CMS de un grupo
Listar las páginas CMS de un grupo
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
groupSlug
*
|
path |
string
|
|
language
|
query |
string
|
Código de idioma de dos letras. Si se omite, se usa el primer idioma disponible de cada elemento. Si se indica pero la página no tiene ese idioma, se recurre a "en" (o al primero disponible). |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista de páginas CMS | CmsPageList |
404 |
Grupo no encontrado | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/groups/weiqi-club/cms?language=en'
GET /api/v1/groups/{groupSlug}/cms/{cmsSlug} Metadatos de una página CMS por grupo y slug
Metadatos de una página CMS por grupo y slug
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
groupSlug
*
|
path |
string
|
|
cmsSlug
*
|
path |
string
|
|
language
|
query |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Metadatos de la página CMS | CmsPage |
404 |
Grupo no encontrado, o página no encontrada / no visible en este grupo | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/groups/platform/cms/about?language=value'
me
Persona usuaria autenticada (lecturas limitadas al alcance del token)
GET /api/v1/me Obtener el perfil de la persona usuaria autenticada
Obtener el perfil de la persona usuaria autenticada
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Perfil de usuario | MeProfile |
401 |
Token bearer ausente o no válido |
Solicitud de ejemplo
curl '/api/v1/me' \
-H "Authorization: Bearer $ACCESS_TOKEN"
PATCH /api/v1/me Editar el perfil del miembro autenticado
Editar el perfil del miembro autenticado
Solo cambian los campos presentes en el cuerpo. El nombre sigue la regla del sitio: un nombre ya guardado por encima del límite sigue funcionando, pero un cambio debe respetarlo.
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
name |
string
|
|
bio |
string | null
|
|
locale |
string
|
Uno de los idiomas habilitados en esta plataforma |
public |
boolean
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El perfil guardado | MeProfile |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:write (insufficient_scope) | ErrorResponse |
422 |
Un campo fue rechazado (validation_failed); errors los nombra: name_required, name_too_long, locale_not_enabled, bio_invalid, public_invalid | ValidationErrorResponse |
Solicitud de ejemplo
curl -X PATCH '/api/v1/me' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"value","bio":"value","locale":"value","public":"value"}'
GET /api/v1/me/rsvps Listar las próximas asistencias del usuario autenticado
Listar las próximas asistencias del usuario autenticado
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
locale
|
query |
string
|
Código de idioma; tiene prioridad sobre Accept-Language |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista de los próximos eventos a los que la persona usuaria ha confirmado asistencia | MeRsvpList |
401 |
Token bearer ausente o no válido |
Solicitud de ejemplo
curl '/api/v1/me/rsvps?locale=en' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/me/avatar Sustituir la foto de perfil del miembro autenticado
Sustituir la foto de perfil del miembro autenticado
Sustituye la foto de perfil del miembro. La imagen anterior permanece en su propia galería, como en el sitio.
Cuerpo de la solicitud
obligatorio
Tipo de contenido: multipart/form-data
| Nombre | Tipo | Descripción |
|---|---|---|
file |
string
(binary)
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El perfil con su nueva foto | MeProfile |
400 |
file_required, file_rejected o upload_failed | ErrorResponse |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:write (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/me/avatar' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-F "file=@/path/to/file"
GET /api/v1/me/groups Listar los grupos del miembro autenticado
Listar los grupos del miembro autenticado
Cada grupo al que el miembro pertenece o ha pedido unirse, incluidos los que lo han bloqueado, con el rol y el estado de la membresía.
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Las membresías del miembro autenticado | MembershipList |
401 |
Token bearer ausente o no válido |
Solicitud de ejemplo
curl '/api/v1/me/groups' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/me/events Listar los próximos encuentros del miembro autenticado
Listar los próximos encuentros del miembro autenticado
Los próximos eventos de los grupos del miembro más los eventos visibles a los que confirmó asistencia en otro sitio; los cancelados incluidos y marcados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
from
|
query |
string
(date-time)
|
Límite inferior ISO-8601 (por defecto: ahora) |
limit
|
query |
integer
|
predeterminado: 20
|
offset
|
query |
integer
|
predeterminado: 0
|
locale
|
query |
string
|
Código de idioma; tiene prioridad sobre Accept-Language |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Lista paginada de eventos | EventList |
401 |
Token bearer ausente o no válido |
Solicitud de ejemplo
curl '/api/v1/me/events?from=value&limit=1&offset=1&locale=en' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/me/signal-token Emitir el token de señal de notificaciones para este dispositivo
Emitir el token de señal de notificaciones para este dispositivo
Emite para el dispositivo de la aplicación que llama un segundo token que solo puede leer GET /api/v1/signal, válido durante 90 días. Pedirlo de nuevo lo reemplaza, y revocar el token de la aplicación del dispositivo también lo revoca.
Respuestas
| Código | Descripción | |
|---|---|---|
201 |
El token de señal | SignalTokenResult |
400 |
El token que llama no fue emitido por el inicio de sesión de la API (not_an_app_token) | ErrorResponse |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:write (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/me/signal-token' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/me/notifications Listar las notificaciones del miembro autenticado
Listar las notificaciones del miembro autenticado
La campana de notificaciones del sitio, como datos. Cada elemento se calcula en vivo a partir de los mismos proveedores que usa el sitio; no se almacena nada, por lo que no hay estado de lectura, ni historial, ni cursor. Las etiquetas vuelven en el idioma solicitado.
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
La campana | NotificationList |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:read (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/me/notifications' \
-H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/me/push-subscriptions Listar los dispositivos push registrados
Listar los dispositivos push registrados
Devuelve además la clave pública VAPID que un cliente necesita para suscribirse, y si el push está configurado en esta plataforma.
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Los dispositivos registrados | PushSubscriptionList |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:read (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/me/push-subscriptions' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/me/push-subscriptions Registrar un dispositivo push
Registrar un dispositivo push
Registra un punto de conexión de Web Push asociado al token que llama, de modo que revocar el dispositivo en /profile/access-tokens también detiene sus notificaciones. Volver a enviar un punto de conexión conocido lo traslada al dispositivo que llama y responde 200.
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
endpoint |
string
|
|
p256dh |
string
|
|
auth |
string
|
|
transport |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Se ha actualizado un punto de conexión conocido | PushSubscriptionEntry |
201 |
El punto de conexión se ha registrado | PushSubscriptionEntry |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:write (insufficient_scope) | ErrorResponse |
422 |
validation_failed, endpoint_rejected o too_many_subscriptions | ValidationErrorResponse |
503 |
No hay ninguna clave VAPID configurada en esta plataforma (push_unavailable) | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/me/push-subscriptions' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"endpoint":"value","p256dh":"value","auth":"value","transport":"value"}'
GET /api/v1/me/notification-settings Leer las preferencias de notificación del miembro autenticado
Leer las preferencias de notificación del miembro autenticado
El mismo interruptor principal y los mismos seis conmutadores que el miembro edita en /profile/config.
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Las preferencias almacenadas | MeNotificationSettings |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:read (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/me/notification-settings' \
-H "Authorization: Bearer $ACCESS_TOKEN"
PATCH /api/v1/me/notification-settings Editar las preferencias de notificación del miembro autenticado
Editar las preferencias de notificación del miembro autenticado
Solo cambian las claves presentes en el cuerpo de la petición. La escritura pasa por el mismo servicio que el sitio, así que un cambio aquí aparece en /profile/config.
Cuerpo de la solicitud
obligatorio
Tipo de contenido: application/json
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Las preferencias guardadas | MeNotificationSettings |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:write (insufficient_scope) | ErrorResponse |
422 |
Un campo fue rechazado (validation_failed); errors los nombra: name_required, name_too_long, locale_not_enabled, bio_invalid, public_invalid | ValidationErrorResponse |
Solicitud de ejemplo
curl -X PATCH '/api/v1/me/notification-settings' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
DELETE /api/v1/me/push-subscriptions/{id} Eliminar un dispositivo push
Eliminar un dispositivo push
Elimina un dispositivo registrado. El registro de otro miembro responde 404 en lugar de 403, para que el punto de conexión no confirme que un identificador existe.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
El identificador de suscripción del endpoint de listado |
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Eliminado | |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance me:write (insufficient_scope) | ErrorResponse |
404 |
No existe ese dispositivo para este miembro | |
503 |
No hay ninguna clave VAPID configurada en esta plataforma (push_unavailable) | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/me/push-subscriptions/1' \
-H "Authorization: Bearer $ACCESS_TOKEN"
memberships
Las membresías de grupo del miembro que llama: invitaciones, entrada y salida
GET /api/v1/memberships/invitations Listar las invitaciones de grupo pendientes
Listar las invitaciones de grupo pendientes
Las invitaciones dirigidas al miembro que llama, sin las que oculta un bloqueo en cualquiera de los dos sentidos.
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
Las invitaciones pendientes | InvitationList |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance memberships:read (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/memberships/invitations' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/memberships/groups/{slug} Unirse a un grupo listado, o solicitarlo
Unirse a un grupo listado, o solicitarlo
Aquí solo puede unirse a un grupo que aparezca en el directorio. A un grupo oculto se entra en su propio dominio y a uno privado por invitación, así que ambos responden group_not_joinable. Si el grupo exige aprobación, la membresía vuelve como pendiente.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
Cuerpo de la solicitud
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
platformMailConsent |
boolean
|
Responde a la entrada en la plataforma: si la plataforma puede enviar anuncios y correos de eventos |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
La membresía resultante, aprobada o pendiente | Membership |
401 |
Token bearer ausente o no válido | |
404 |
No hay tal grupo (not_found) | ErrorResponse |
409 |
group_not_joinable, blocked_in_group o platform_crossing_required | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/memberships/groups/slug' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"platformMailConsent":"value"}'
DELETE /api/v1/memberships/groups/{slug} Salir de un grupo
Salir de un grupo
Rigen las mismas reglas del sitio: la última persona propietaria no puede salir, un miembro bloqueado tampoco, y del grupo de la plataforma solo se puede salir cuando ya no hace falta para otra membresía.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
slug
*
|
path |
string
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Membresía finalizada | |
401 |
Token bearer ausente o no válido | |
404 |
No hay tal grupo, o no hay membresía en él (not_found) | ErrorResponse |
409 |
last_owner, blocked_in_group o may_not_leave_platform | ErrorResponse |
Solicitud de ejemplo
curl -X DELETE '/api/v1/memberships/groups/slug' \
-H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/memberships/invitations/{id}/accept Aceptar una invitación de grupo
Aceptar una invitación de grupo
Al aceptar, la membresía queda establecida con el rol invitado. Mientras el miembro aún deba unirse al grupo de la plataforma, esto responde 409 platform_crossing_required; reinténtalo con platformMailConsent para responder antes esa pregunta.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Cuerpo de la solicitud
Tipo de contenido: application/json
| Nombre | Tipo | Descripción |
|---|---|---|
platformMailConsent |
boolean
|
Responde a la entrada en la plataforma: si la plataforma puede enviar anuncios y correos de eventos |
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
La membresía resultante | Membership |
401 |
Token bearer ausente o no válido | |
404 |
No hay tal invitación para este miembro (invitation_not_found) | ErrorResponse |
409 |
blocked_in_group, membership_rejected o platform_crossing_required | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/memberships/invitations/1/accept' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"platformMailConsent":"value"}'
POST /api/v1/memberships/invitations/{id}/decline Rechazar una invitación de grupo
Rechazar una invitación de grupo
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
id
*
|
path |
integer
|
Respuestas
| Código | Descripción | |
|---|---|---|
204 |
Invitación rechazada | |
401 |
Token bearer ausente o no válido | |
404 |
No hay tal invitación para este miembro (invitation_not_found) | ErrorResponse |
Solicitud de ejemplo
curl -X POST '/api/v1/memberships/invitations/1/decline' \
-H "Authorization: Bearer $ACCESS_TOKEN"
signal
Si algo ha cambiado para el miembro, sin decir qué
GET /api/v1/signal Si algo ha cambiado para el miembro
Si algo ha cambiado para el miembro
Un valor opaco que cambia cuando cambia la campana, cuando un evento al que el miembro dijo que sí se cancela, se mueve de hora o de lugar, y cuando vence su recordatorio. No revela nada más, así que un token que solo puede leer esta sección puede guardarse donde la aplicación no puede protegerlo.
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El valor actual | SignalState |
401 |
Token bearer ausente o no válido | |
403 |
Token sin el alcance signal:read (insufficient_scope) | ErrorResponse |
Solicitud de ejemplo
curl '/api/v1/signal' \
-H "Authorization: Bearer $ACCESS_TOKEN"
status
Estado
GET /api/status Endpoint de comprobación de estado
Endpoint de comprobación de estado
Respuestas
| Código | Descripción | |
|---|---|---|
200 |
El servicio funciona correctamente | HealthStatus |
Solicitud de ejemplo
curl '/api/status'