v1.0 • REST API

API REST Pública de Minerva

API gratuita, abierta y en tiempo real para bots de Discord, aplicaciones web y herramientas de Fallout 76.

URL Basehttps://whereisminerva.info
AutenticaciónNinguna (100% Gratis)
CORSHabilitado (*)
FormatoJSON (UTF-8)
GET

/api/v1/minerva

Estado y Stock

Devuelve el estado en tiempo real de Minerva en Fallout 76: si está presente, su ubicación exacta en Appalachia, fechas UTC y Unix de llegada/salida, inventario y próxima visita.

Probar Endpoint

GEThttps://whereisminerva.info/api/v1/minerva

Ejemplos de Código

curl -X GET "https://whereisminerva.info/api/v1/minerva" \
  -H "Accept: application/json"
🤖

¿Creando un Bot de Discord?

La API es 100% pública, con CORS abierto y sin claves de API. Las fechas incluyen marcas de tiempo Unix en segundos (startsAtUnix, endsAtUnix) para cuentas atrás automáticas en Discord. (<t:TIMESTAMP:R>).

// Slash Command: /minerva (Discord.js v14)
import { SlashCommandBuilder, EmbedBuilder } from 'discord.js';

export const data = new SlashCommandBuilder()
  .setName('minerva')
  .setDescription('Check Minerva live location, countdown, and stock in Fallout 76');

export async function execute(interaction) {
  const res = await fetch('https://whereisminerva.info/api/v1/minerva');
  const { data } = await res.json();

  const embed = new EmbedBuilder()
    .setTitle(data.isActive ? `Minerva is at ${data.location.nameEn}!` : 'Minerva is currently away')
    .setColor(data.isActive ? 0x8ba358 : 0x555555);

  if (data.isActive) {
    embed
      .setDescription(`📍 **Location:** ${data.location.nameEn} (${data.location.coordinates})\n⏳ **Leaves:** <t:${data.endsAtUnix}:R> (<t:${data.endsAtUnix}:f>)`)
      .setImage(data.location.imageUrl)
      .addFields({
        name: `Featured Plans (${data.inventory.totalItems} total)`,
        value: data.inventory.preview.map(i => `• **${i.name}** — ${i.priceGold} Gold`).join('\n') || 'None'
      });
  } else if (data.nextVisit) {
    embed.setDescription(`📍 **Next Visit:** ${data.nextVisit.location.nameEn}\n⏳ **Arrives:** <t:${data.nextVisit.startsAtUnix}:R> (<t:${data.nextVisit.startsAtUnix}:f>)`);
  }

  await interaction.reply({ embeds: [embed] });
}