openapi: 3.0.3 info: title: 'Wave API Documentation' description: '' version: 1.0.0 servers: - url: 'https://hotpink-hedgehog-420087.hostingersite.com' tags: - name: Endpoints description: '' paths: /api/v1/companies: get: summary: 'Muestra una lista paginada de compañías.' operationId: muestraUnaListaPaginadaDeCompaas description: 'Corresponde al endpoint GET /api/companies' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 name: 'Compañía Test' logoUrl: null description: 'Esta es una compañía de prueba creada desde Postman' phone: '3001234567' catalogUrl: null schedule: null address: null city: Bogotá location: null gameRoomUrl: null links: first: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies?page=1' last: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies' per_page: 15 to: 1 total: 1 properties: data: type: array example: - id: 1 name: 'Compañía Test' logoUrl: null description: 'Esta es una compañía de prueba creada desde Postman' phone: '3001234567' catalogUrl: null schedule: null address: null city: Bogotá location: null gameRoomUrl: null items: type: object properties: id: type: integer example: 1 name: type: string example: 'Compañía Test' logoUrl: type: string example: null description: type: string example: 'Esta es una compañía de prueba creada desde Postman' phone: type: string example: '3001234567' catalogUrl: type: string example: null schedule: type: string example: null address: type: string example: null city: type: string example: Bogotá location: type: string example: null gameRoomUrl: type: string example: null links: type: object properties: first: type: string example: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies?page=1' last: type: string example: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/companies' per_page: type: integer example: 15 to: type: integer example: 1 total: type: integer example: 1 tags: - Endpoints security: [] post: summary: 'Crea una nueva compañía y asigna al usuario actual como su administrador.' operationId: creaUnaNuevaCompaaYAsignaAlUsuarioActualComoSuAdministrador description: 'Corresponde al endpoint: POST /api/companies' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 100 characters.' example: vmqeopfuudtdsufvyvddq nullable: false description: type: string description: '' example: 'Dolores dolorum amet iste laborum eius est dolor.' nullable: true city: type: string description: 'Must not be greater than 100 characters.' example: dtdsufvyvddqamniihfqc nullable: false phone: type: string description: 'Must not be greater than 20 characters.' example: oynlazghdtqtqxbaj nullable: true required: - name - city security: [] '/api/v1/companies/{company_id}': get: summary: 'Muestra los detalles de una compañía específica.' operationId: muestraLosDetallesDeUnaCompaaEspecfica description: 'Corresponde al endpoint GET /api/companies/{id}' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 name: 'Compañía Test' logoUrl: null description: 'Esta es una compañía de prueba creada desde Postman' phone: '3001234567' catalogUrl: null schedule: null address: null city: Bogotá location: null gameRoomUrl: null branches: [] properties: data: type: object properties: id: type: integer example: 1 name: type: string example: 'Compañía Test' logoUrl: type: string example: null description: type: string example: 'Esta es una compañía de prueba creada desde Postman' phone: type: string example: '3001234567' catalogUrl: type: string example: null schedule: type: string example: null address: type: string example: null city: type: string example: Bogotá location: type: string example: null gameRoomUrl: type: string example: null branches: type: array example: [] tags: - Endpoints security: [] parameters: - in: path name: company_id description: 'The ID of the company.' example: 1 required: true schema: type: integer /api/v1/minigames: get: summary: 'Muestra la lista maestra de todos los minijuegos disponibles.' operationId: muestraLaListaMaestraDeTodosLosMinijuegosDisponibles description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 name: Pesca description: 'Un minijuego de pesca donde debes evitar las anguilas eléctricas.' gamePath: pesca costInCoins: 10 costInTickets: 10 properties: data: type: array example: - id: 1 name: Pesca description: 'Un minijuego de pesca donde debes evitar las anguilas eléctricas.' gamePath: pesca costInCoins: 10 costInTickets: 10 items: type: object properties: id: type: integer example: 1 name: type: string example: Pesca description: type: string example: 'Un minijuego de pesca donde debes evitar las anguilas eléctricas.' gamePath: type: string example: pesca costInCoins: type: integer example: 10 costInTickets: type: integer example: 10 tags: - Endpoints security: [] /api/v1/events: get: summary: 'Muestra una lista pública de todos los eventos activos.' operationId: muestraUnaListaPblicaDeTodosLosEventosActivos description: 'Corresponde al endpoint: GET /api/events' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 description: 'Evento de prueba desde Postman' city: Bogotá isActive: true duration: 3h createdAt: '2025-09-16T19:15:22+00:00' company: id: 1 name: 'Compañía Test' logoUrl: null description: 'Esta es una compañía de prueba creada desde Postman' phone: '3001234567' catalogUrl: null schedule: null address: null city: Bogotá location: null gameRoomUrl: null links: first: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events?page=1' last: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events' per_page: 15 to: 1 total: 1 properties: data: type: array example: - id: 1 description: 'Evento de prueba desde Postman' city: Bogotá isActive: true duration: 3h createdAt: '2025-09-16T19:15:22+00:00' company: id: 1 name: 'Compañía Test' logoUrl: null description: 'Esta es una compañía de prueba creada desde Postman' phone: '3001234567' catalogUrl: null schedule: null address: null city: Bogotá location: null gameRoomUrl: null items: type: object properties: id: type: integer example: 1 description: type: string example: 'Evento de prueba desde Postman' city: type: string example: Bogotá isActive: type: boolean example: true duration: type: string example: 3h createdAt: type: string example: '2025-09-16T19:15:22+00:00' company: type: object properties: id: type: integer example: 1 name: type: string example: 'Compañía Test' logoUrl: type: string example: null description: type: string example: 'Esta es una compañía de prueba creada desde Postman' phone: type: string example: '3001234567' catalogUrl: type: string example: null schedule: type: string example: null address: type: string example: null city: type: string example: Bogotá location: type: string example: null gameRoomUrl: type: string example: null links: type: object properties: first: type: string example: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events?page=1' last: type: string example: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'https://hotpink-hedgehog-420087.hostingersite.com/api/v1/events' per_page: type: integer example: 15 to: type: integer example: 1 total: type: integer example: 1 tags: - Endpoints security: [] post: summary: 'Crea un nuevo evento para la compañía del administrador.' operationId: creaUnNuevoEventoParaLaCompaaDelAdministrador description: 'Corresponde al endpoint: POST /api/events' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: '' example: 'Dolores dolorum amet iste laborum eius est dolor.' nullable: false city: type: string description: 'Must not be greater than 100 characters.' example: dtdsufvyvddqamniihfqc nullable: false is_active: type: boolean description: '' example: false nullable: false duration: type: string description: '' example: consequatur nullable: true minigame_ids: type: array description: 'Esperamos un array de IDs de minijuegos. The id of an existing record in the minigames table.' example: - 17 items: type: integer required: - description - city security: [] '/api/v1/events/{event_id}': get: summary: 'Muestra los detalles completos de un evento específico.' operationId: muestraLosDetallesCompletosDeUnEventoEspecfico description: 'Corresponde al endpoint: GET /api/events/{event}' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 description: 'Evento de prueba desde Postman' city: Bogotá isActive: true duration: 3h createdAt: '2025-09-16T19:15:22+00:00' company: id: 1 name: 'Compañía Test' logoUrl: null description: 'Esta es una compañía de prueba creada desde Postman' phone: '3001234567' catalogUrl: null schedule: null address: null city: Bogotá location: null gameRoomUrl: null minigames: - id: 1 name: Pesca description: 'Un minijuego de pesca donde debes evitar las anguilas eléctricas.' gamePath: pesca costInCoins: 10 costInTickets: 10 properties: data: type: object properties: id: type: integer example: 1 description: type: string example: 'Evento de prueba desde Postman' city: type: string example: Bogotá isActive: type: boolean example: true duration: type: string example: 3h createdAt: type: string example: '2025-09-16T19:15:22+00:00' company: type: object properties: id: type: integer example: 1 name: type: string example: 'Compañía Test' logoUrl: type: string example: null description: type: string example: 'Esta es una compañía de prueba creada desde Postman' phone: type: string example: '3001234567' catalogUrl: type: string example: null schedule: type: string example: null address: type: string example: null city: type: string example: Bogotá location: type: string example: null gameRoomUrl: type: string example: null minigames: type: array example: - id: 1 name: Pesca description: 'Un minijuego de pesca donde debes evitar las anguilas eléctricas.' gamePath: pesca costInCoins: 10 costInTickets: 10 items: type: object properties: id: type: integer example: 1 name: type: string example: Pesca description: type: string example: 'Un minijuego de pesca donde debes evitar las anguilas eléctricas.' gamePath: type: string example: pesca costInCoins: type: integer example: 10 costInTickets: type: integer example: 10 tags: - Endpoints security: [] put: summary: 'Actualiza un evento existente.' operationId: actualizaUnEventoExistente description: 'Corresponde al endpoint: PUT /api/events/{event}' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: '' example: 'Dolores dolorum amet iste laborum eius est dolor.' nullable: false city: type: string description: 'Must not be greater than 100 characters.' example: dtdsufvyvddqamniihfqc nullable: false is_active: type: boolean description: '' example: false nullable: false duration: type: string description: '' example: consequatur nullable: true minigame_ids: type: array description: 'The id of an existing record in the minigames table.' example: - 17 items: type: integer required: - description - city security: [] parameters: - in: path name: event_id description: 'The ID of the event.' example: 1 required: true schema: type: integer /api/v1/login: post: summary: 'Maneja la solicitud de inicio de sesión del usuario.' operationId: manejaLaSolicitudDeInicioDeSesinDelUsuario description: 'Corresponde al endpoint POST /api/login' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'Must be a valid email address.' example: qkunze@example.com nullable: false password: type: string description: '' example: consequatur nullable: false device_name: type: string description: '' example: consequatur nullable: false required: - email - password - device_name security: [] /api/v1/register: post: summary: 'Registra un nuevo usuario y devuelve un token de Sanctum.' operationId: registraUnNuevoUsuarioYDevuelveUnTokenDeSanctum description: 'Corresponde al endpoint: POST /api/register' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: first_name: type: string description: 'Must not be greater than 100 characters.' example: vmqeopfuudtdsufvyvddq nullable: false last_name: type: string description: 'Must not be greater than 100 characters.' example: amniihfqcoynlazghdtqt nullable: false username: type: string description: 'Must not be greater than 100 characters.' example: qxbajwbpilpmufinllwlo nullable: false email: type: string description: 'Must be a valid email address. Must not be greater than 100 characters.' example: schmitt.beulah@example.org nullable: false password: type: string description: '' example: consequatur nullable: false phone: type: string description: 'Must not be greater than 20 characters.' example: mqeopfuudtdsufvyv nullable: false required: - first_name - last_name - username - email - password - phone security: [] /api/v1/logout: post: summary: 'Maneja la solicitud de cierre de sesión del usuario.' operationId: manejaLaSolicitudDeCierreDeSesinDelUsuario description: 'Corresponde al endpoint POST /api/logout' parameters: [] responses: { } tags: - Endpoints security: [] /api/v1/user: get: summary: '' operationId: getApiV1User description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] /api/v1/user/profile: post: summary: 'Actualiza la información del perfil del usuario autenticado.' operationId: actualizaLaInformacinDelPerfilDelUsuarioAutenticado description: 'Corresponde al endpoint: POST /api/user/profile' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: first_name: type: string description: 'Must not be greater than 100 characters.' example: vmqeopfuudtdsufvyvddq nullable: false last_name: type: string description: 'Must not be greater than 100 characters.' example: amniihfqcoynlazghdtqt nullable: false username: type: string description: 'Must not be greater than 100 characters.' example: qxbajwbpilpmufinllwlo nullable: false email: type: string description: 'Must be a valid email address. Must not be greater than 100 characters.' example: schmitt.beulah@example.org nullable: false birthdate: type: string description: 'Must be a valid date.' example: '2025-09-27T03:01:54' nullable: true gender: type: string description: 'Must not be greater than 20 characters.' example: smsjuryvojcybzvrb nullable: true phone: type: string description: 'Must not be greater than 20 characters.' example: yickznkygloigmkwx nullable: true current_city: type: string description: 'Must not be greater than 100 characters.' example: phlvazjrcnfbaqywuxhgj nullable: true required: - first_name - last_name - username - email security: [] /api/v1/user/balances: get: summary: 'Devuelve los saldos actuales del usuario autenticado.' operationId: devuelveLosSaldosActualesDelUsuarioAutenticado description: 'Corresponde al endpoint GET /api/user/balances' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] /api/v1/user/transactions: get: summary: 'Devuelve un historial paginado de las transacciones del usuario.' operationId: devuelveUnHistorialPaginadoDeLasTransaccionesDelUsuario description: 'Corresponde al endpoint GET /api/user/transactions' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] '/api/v1/minigames/{minigame_id}/play': post: summary: 'Inicia una partida para el usuario autenticado.' operationId: iniciaUnaPartidaParaElUsuarioAutenticado description: 'Corresponde al endpoint: POST /api/minigames/{minigame}/play' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: payment_method: type: string description: '' example: consequatur nullable: false event_id: type: string description: 'The id of an existing record in the events table.' example: consequatur nullable: false required: - payment_method - event_id security: [] parameters: - in: path name: minigame_id description: 'The ID of the minigame.' example: 1 required: true schema: type: integer /api/v1/scores: post: summary: 'Guarda la puntuación del usuario al finalizar una partida.' operationId: guardaLaPuntuacinDelUsuarioAlFinalizarUnaPartida description: 'Corresponde al endpoint: POST /api/scores' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: minigame_id: type: string description: 'The id of an existing record in the minigames table.' example: consequatur nullable: false event_id: type: string description: 'The id of an existing record in the events table.' example: consequatur nullable: false score: type: integer description: 'Must be at least 0.' example: 45 nullable: false required: - minigame_id - event_id - score security: [] /api/v1/my-company/events: get: summary: "Muestra la lista de eventos (activos e inactivos) de la compañía\ndel usuario administrador autenticado." operationId: muestraLaListaDeEventosactivosEInactivosDeLaCompaadelUsuarioAdministradorAutenticado description: 'Corresponde al endpoint: GET /api/my-company/events' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] /api/v1/admin/users: get: summary: 'Muestra una lista de todos los usuarios.' operationId: muestraUnaListaDeTodosLosUsuarios description: 'Este método corresponde al endpoint GET /api/users.' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] post: summary: 'Almacena un nuevo usuario en la base de datos.' operationId: almacenaUnNuevoUsuarioEnLaBaseDeDatos description: 'Este método corresponde al endpoint POST /api/users.' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: first_name: type: string description: 'Must not be greater than 100 characters.' example: vmqeopfuudtdsufvyvddq nullable: false last_name: type: string description: 'Must not be greater than 100 characters.' example: amniihfqcoynlazghdtqt nullable: false username: type: string description: 'Must not be greater than 100 characters.' example: qxbajwbpilpmufinllwlo nullable: false email: type: string description: 'Must be a valid email address. Must not be greater than 100 characters.' example: schmitt.beulah@example.org nullable: false password: type: string description: '' example: consequatur nullable: false special: type: string description: '' example: consequatur nullable: true role: type: string description: '' example: consequatur nullable: false company_id: type: string description: 'The id of an existing record in the companies table.' example: null nullable: true birthdate: type: string description: 'Must be a valid date.' example: '2025-09-27T03:01:54' nullable: true gender: type: string description: 'Must not be greater than 20 characters.' example: mqeopfuudtdsufvyv nullable: true phone: type: string description: 'Must not be greater than 20 characters.' example: ddqamniihfqcoynla nullable: true required: - first_name - last_name - username - email - password - role security: [] /api/v1/admin/minigames: post: summary: 'Crea un nuevo minijuego en la lista maestra.' operationId: creaUnNuevoMinijuegoEnLaListaMaestra description: 'Corresponde al endpoint: POST /api/admin/minigames' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 100 characters.' example: vmqeopfuudtdsufvyvddq nullable: false description: type: string description: '' example: 'Dolores dolorum amet iste laborum eius est dolor.' nullable: true game_path: type: string description: '' example: consequatur nullable: false cost_in_coins: type: integer description: 'Must be at least 0.' example: 45 nullable: true cost_in_tickets: type: integer description: 'Must be at least 0.' example: 56 nullable: true required: - name - game_path security: [] /api/v1/receive-data: post: summary: 'Handle incoming data from an external service.' operationId: handleIncomingDataFromAnExternalService description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: order_id: type: string description: '' example: consequatur nullable: false customer: type: object description: '' example: [] nullable: false properties: name: type: string description: '' example: consequatur nullable: false email: type: string description: 'Must be a valid email address.' example: carolyne.luettgen@example.org nullable: false required: - name - email products: type: array description: '' example: - [] items: type: object properties: id: type: integer description: '' example: 17 nullable: false quantity: type: integer description: 'Must be at least 1.' example: 45 nullable: false required: - id - quantity required: - order_id - products security: [] /api/login: post: summary: '' operationId: postApiLogin description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/register: post: summary: '' operationId: postApiRegister description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: first_name: type: string description: 'Must not be greater than 100 characters.' example: vmqeopfuudtdsufvyvddq nullable: false last_name: type: string description: 'Must not be greater than 100 characters.' example: amniihfqcoynlazghdtqt nullable: false username: type: string description: 'Must not be greater than 100 characters.' example: qxbajwbpilpmufinllwlo nullable: false email: type: string description: 'Must be a valid email address. Must not be greater than 255 characters.' example: schmitt.beulah@example.org nullable: false password: type: string description: 'Must be at least 8 characters.' example: 'LcDi`wmUB)z&~na%' nullable: false phone: type: string description: 'Must not be greater than 20 characters.' example: yickznkygloigmkwx nullable: false required: - first_name - last_name - username - email - password - phone security: [] /api/logout: post: summary: '' operationId: postApiLogout description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/refresh: post: summary: '' operationId: postApiRefresh description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/token: post: summary: '' operationId: postApiToken description: '' parameters: [] responses: { } tags: - Endpoints security: [] '/api/{datatype}': get: summary: '' operationId: getApiDatatype description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] post: summary: '' operationId: postApiDatatype description: '' parameters: [] responses: { } tags: - Endpoints security: [] parameters: - in: path name: datatype description: '' example: consequatur required: true schema: type: string '/api/{datatype}/{id}': get: summary: '' operationId: getApiDatatypeId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] put: summary: '' operationId: putApiDatatypeId description: '' parameters: [] responses: { } tags: - Endpoints security: [] delete: summary: '' operationId: deleteApiDatatypeId description: '' parameters: [] responses: { } tags: - Endpoints security: [] parameters: - in: path name: datatype description: '' example: consequatur required: true schema: type: string - in: path name: id description: 'The ID of the {datatype}.' example: consequatur required: true schema: type: string