API pública de JuguemosRol
Para sitios que quieran mostrar partidas, eventos y espacios, e inscribir jugadores.
Este documento es para quien programa. Si lo que querés es entender qué se puede hacer en JuguemosRol y cómo, la que necesitás es la guía de uso, no esta.
1. Para qué sirve
JuguemosRol expone una API REST pública para que otros sitios de rol puedan mostrar su contenido y operar contra él. No es de solo lectura: un portal externo puede inscribir jugadores y crear cuentas.
Hoy la consume Territorio de Rol, que lista las partidas de su comunidad y permite inscribirse sin salir de su propio sitio. El jugador queda registrado en JuguemosRol.
| Querés… | Usá |
|---|---|
| Mostrar en tu sitio las partidas de tu comunidad | GET /partidas?comunidad_id= |
| Publicar un calendario de eventos roleros | GET /eventos |
| Armar un mapa de lugares donde se juega | GET /espacios |
| Que la gente se inscriba desde tu web | POST /inscripciones/externa |
2. Pedir las credenciales
Las claves se generan del lado de JuguemosRol y se entregan por pedido. Escribí desde /contacto contando qué sitio sos y qué querés hacer. Vas a recibir:
| Credencial | Para qué |
|---|---|
| API key de lectura | Consultar partidas, eventos, comunidades, espacios y catálogos |
| Community token | Acceder a los datos de tu propia comunidad |
| API key de escritura | Inscribir jugadores y crear cuentas. Se entrega solo si la necesitás |
Cada clave de escritura está atada a una comunidad. La comunidad no viaja en el cuerpo del pedido: sale de la clave, así que no podés operar sobre una comunidad que no es tuya.
3. Autenticación
Base: https://juguemosrol.com/api/v1
Todo va por headers. No hay claves en la URL.
X-Api-Key: tu-clave (todos los endpoints)
X-Community-Token: tu-token-comunidad (solo endpoints de comunidad)
Content-Type: application/json (en POST)
4. Formato de respuesta
Todas las respuestas tienen la misma forma, así que alcanza con un solo manejador:
{"ok": true, "data": [...]}
{"ok": false, "error": "mensaje explicando qué pasó"}
5. Endpoints de lectura
| Método | Endpoint | Qué devuelve |
|---|---|---|
| GET | /partidas | Partidas publicadas. Filtros: comunidad_id, pais_id |
| GET | /partidas/{hash} | Detalle de una partida por su código |
| GET | /eventos | Eventos. Filtros: tipo, comunidad, fechas, pais_id |
| GET | /comunidades | Comunidades verificadas |
| GET | /comunidades/{id} | Detalle. Requiere community token |
| GET | /espacios | Espacios del mapa, con coordenadas |
| GET | /tipo-espacios | Catálogo de tipos de espacio |
| GET | /proyectos | Emprendimientos publicados |
| GET | /catalogos | Todos los catálogos de referencia. Ver sección 7 |
| GET | /cuentas/mis-inscripciones?email= | Inscripciones de un usuario en tu comunidad |
Filtro geográfico con cascada. Cuando filtrás por pais_id, el país se resuelve buscando en orden: el del propio registro, el de su espacio físico, el de su comunidad, y el del creador de la comunidad. Así una partida sin país propio igual aparece en el filtro del país de su comunidad.
6. Endpoints de escritura
Requieren la API key de escritura.
| Método | Endpoint | Qué hace |
|---|---|---|
| POST | /inscripciones/externa | Inscribe a un jugador. Si no tiene cuenta, la crea |
| POST | /cuentas | Crea una cuenta sin inscribirla a nada |
6.1 Inscribir un jugador
POST /api/v1/inscripciones/externa
{
"email": "jugador@ejemplo.com", // requerido
"partida_hash": "a599954d64358e73", // requerido
"nota_jugador": "Texto libre para el master",
"nombre": "Nombre del jugador", // requerido si hay que crear la cuenta
"pais_codigo": "ES", // requerido si hay que crear la cuenta (ISO-2)
"language_code": "es", // requerido si hay que crear la cuenta
"es_suscriptor": false,
"extra_params": {}
}
Lo más importante de este endpoint. El comportamiento cambia según si el email ya existe en JuguemosRol:
- Si la cuenta ya existe, se reutiliza y no se toca ninguno de sus datos. nombre, pais_codigo y language_code se ignoran: el dueño del dato es el usuario, no tu sitio. Esto importa cuando la misma persona participa en varias comunidades.
- Si hay que crear la cuenta, esos tres campos son obligatorios. Si falta alguno, la respuesta es 422 y nombra cuáles. La cuenta que se crea tiene que poder usar la plataforma; la API no inventa datos para completarla.
6.2 Crear una cuenta
POST /api/v1/cuentas
{
"email": "jugador@ejemplo.com", // todos requeridos
"password": "mínimo 8 caracteres",
"nickname": "identificador-unico",
"nombre": "Nombre del jugador",
"pais_codigo": "ES",
"language_code": "es"
}
La cuenta queda pendiente hasta que la persona verifique su email, igual que en el registro web.
7. Catálogos
GET /catalogos devuelve de una sola vez todos los valores válidos que esperan los endpoints de escritura. Consultalo en vez de hardcodear listas:
{
"ok": true,
"data": {
"juegos": [ { "id": 1, "titulo": "..." } ],
"tipos_participacion": [ ... ],
"tipos_partida": [ ... ],
"tipos_experiencia": [ ... ],
"herramientas": [ ... ],
"advertencias": [ ... ],
"plataformas": [ ... ],
"paises": [ { "id": 59, "nombre": "España", "codigo": "ES" } ],
"languages": [ { "id": 112, "language_code": "es", "language_name": "Spanish - español" } ]
}
}
De ahí salen los valores de pais_codigo (el campo codigo, ISO-2) y de language_code.
8. Errores
| Código | Qué significa | Qué hacer |
|---|---|---|
| 401 | Falta la API key o no es válida | Revisar el header X-Api-Key |
| 403 | La clave no tiene permiso de escritura, o el community token no corresponde | Pedir la clave adecuada |
| 404 | No existe lo que pediste | Verificar el código de partida o el id |
| 409 | Conflicto: partida cerrada, sin cupo, fecha pasada, o ya inscripto | El mensaje aclara cuál de todos |
| 422 | Faltan campos o traen valores inválidos | Leer error: nombra los campos faltantes |
Los mensajes de 422 están escritos para ser accionables:
{
"ok": false,
"error": "Para crear una cuenta nueva faltan estos campos obligatorios: nombre,
pais_codigo, language_code. Consultá GET /api/v1/catalogos para los
valores válidos de pais_codigo y language_code."
}
9. Ejemplo completo
Listar las partidas de tu comunidad e inscribir a alguien:
# 1. Traer las partidas de la comunidad
curl -H "X-Api-Key: TU_CLAVE_LECTURA" \
"https://juguemosrol.com/api/v1/partidas?comunidad_id=4"
# 2. Averiguar los codigos de pais e idioma validos
curl -H "X-Api-Key: TU_CLAVE_LECTURA" \
"https://juguemosrol.com/api/v1/catalogos"
# 3. Inscribir a un jugador
curl -X POST "https://juguemosrol.com/api/v1/inscripciones/externa" \
-H "X-Api-Key: TU_CLAVE_ESCRITURA" \
-H "Content-Type: application/json" \
-d @inscripcion.json
Con inscripcion.json:
{
"email": "jugador@ejemplo.com",
"partida_hash": "a599954d64358e73",
"nota_jugador": "Juego desde 2015, disponible fines de semana",
"nombre": "Ana García",
"pais_codigo": "ES",
"language_code": "es"
}
Recomendación para consumidores. Guardá el país y el idioma de tus propios usuarios, o pedilos en tu formulario de registro. Si no los tenés, la primera inscripción de un usuario nuevo va a devolver 422 — y es mejor descubrirlo al integrar que en producción, con un jugador esperando.