Cómo usar la API
Sigue estos pasos para integrar consultas anti-cheat en tu proyecto.
Pasos rápidos
- 1
Inicia sesión en FiveMExposed
- 2
Crea una API key en Mis API keys
- 3
Copia la key (solo se muestra una vez)
- 4
Haz peticiones desde tu servidor con el header Authorization
- 5
Interpreta la respuesta JSON según la referencia de datos
Especificación OpenAPI (para scripts e IAs)
Descarga el esquema completo en JSON: métodos, headers, body y respuestas tipadas.
Pásale esta URL a tu script, bot o asistente de IA. Contiene toda la estructura que espera el backend:
https://fivemexposed.com/api/v1/openapi.jsonAutenticación
Incluye tu key en cada petición (excepto /stats, que es pública):
Authorization: Bearer fme_live_tu_key_aqui # Alternativa equivalente: X-API-Key: fme_live_tu_key_aqui # Formato válido de la key: fme_live_ + 32-48 caracteres [A-Za-z0-9_-] # La key va SOLO en headers. Nunca en la URL, query params ni body (excepto bulk body con "ids").
Nunca pongas la API key en una web, Discord embed o cliente FiveM. Solo en backend, bot o script privado.
Rutas disponibles
Base URL: https://fivemexposed.com. Cada endpoint indica método HTTP, headers, parámetros y JSON de respuesta.
https://fivemexposed.com/api/v1/lookup/discord/{id}/summaryAuth
Obligatoria — header Authorization o X-API-Key
La API key va en el header, nunca en la URL ni en query params.
Headers
- Authorization: Bearer fme_live_TU_KEY
- Accept: application/json
Path params
id — Discord ID numérico (17-20 dígitos). Ej: 520282435880091658
Query params
Ninguno
Response 200 (JSON)
{
"discordId": "520282435880091658",
"exposed": true,
"count": 1,
"servers": ["Servidor comunitario (Discord)"],
"importSources": [],
"lastSeen": "2026-07-03T15:11:49.205Z"
}Ideal para whitelist: devuelve sí/no, count, servidores y última fecha.
https://fivemexposed.com/api/v1/lookup/discord/{id}Auth
Obligatoria — header Authorization o X-API-Key
La API key va en el header, nunca en la URL ni en query params.
Headers
- Authorization: Bearer fme_live_TU_KEY
- Accept: application/json
Path params
id — Discord ID numérico (17-20 dígitos). Ej: 520282435880091658
Query params
Ninguno
Response 200 (JSON)
{
"discordId": "520282435880091658",
"exposed": true,
"count": 1,
"records": [
{
"id": "uuid-interno",
"discordName": "usuario",
"discordId": "520282435880091658",
"steamName": null,
"server": "Mi servidor FiveM",
"details": "Descripción del reporte…",
"importSource": null,
"sourceUrl": null,
"hasProof": true,
"createdAt": "2026-07-03T15:11:49.205Z"
}
]
}Lista los registros encontrados para ese Discord ID.
https://fivemexposed.com/api/v1/lookup/discord/bulkAuth
Obligatoria — plan Partner para bulk
La API key va en el header, nunca en la URL ni en query params.
Headers
- Authorization: Bearer fme_live_TU_KEY
- Content-Type: application/json
- Accept: application/json
Query params
Ninguno
Body (JSON)
{
"ids": [
"520282435880091658",
"987654321098765432"
]
}Response 200 (JSON)
{
"queried": 2,
"results": {
"520282435880091658": {
"exposed": true,
"count": 1,
"records": [ … ]
},
"987654321098765432": {
"exposed": false,
"count": 0,
"records": []
}
}
}Solo Partner. Body JSON: { "ids": ["…", "…"] } hasta 50 IDs.
https://fivemexposed.com/api/v1/statsAuth
No requerida
Headers
- Accept: application/json
Query params
Ninguno
Response 200 (JSON)
{
"totalApproved": 1234,
"updatedAt": "2026-07-04T12:00:00.000Z"
}Total de registros aprobados. No requiere API key.
Ejemplos
Consulta de resumen con curl:
curl -s -X GET \ -H "Authorization: Bearer fme_live_TU_KEY" \ -H "Accept: application/json" \ "https://fivemexposed.com/api/v1/lookup/discord/520282435880091658/summary"
Bulk lookup (Partner):
curl -s -X POST \
-H "Authorization: Bearer fme_live_TU_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"ids":["520282435880091658","987654321098765432"]}' \
"https://fivemexposed.com/api/v1/lookup/discord/bulk"Ejemplo en Python
Copia y adapta: sustituye fme_live_TU_KEY por tu key real. El Discord ID va en la URL (GET) o en el body ids (POST bulk).
import requests
API_KEY = "fme_live_TU_KEY"
BASE_URL = "https://fivemexposed.com"
DISCORD_ID = "520282435880091658"
# --- Resumen (GET, ideal para whitelist) ---
response = requests.get(
f"{BASE_URL}/api/v1/lookup/discord/{DISCORD_ID}/summary",
headers={
"Authorization": f"Bearer {API_KEY}",
"Accept": "application/json",
},
timeout=15,
)
if response.status_code == 401:
raise SystemExit(response.json().get("error", "API key inválida"))
response.raise_for_status()
data = response.json()
if data["exposed"]:
print(f"EXPUESTO — {data['count']} registro(s) en: {', '.join(data['servers'])}")
else:
print("No expuesto en FiveMExposed")
# --- Bulk (POST, solo Partner) ---
# bulk = requests.post(
# f"{BASE_URL}/api/v1/lookup/discord/bulk",
# headers={
# "Authorization": f"Bearer {API_KEY}",
# "Content-Type": "application/json",
# },
# json={"ids": [DISCORD_ID, "987654321098765432"]},
# timeout=30,
# )
# bulk.raise_for_status()
# print(bulk.json()["results"])Errores comunes
Todas las respuestas de error usan JSON con campo error (string):
{ "error": "Mensaje descriptivo en español" }
# 429 incluye además:
{ "error": "Límite diario de la API alcanzado.", "retryAfter": 3600 }
# 403 bulk en plan Free:
{ "error": "Bulk lookup disponible solo en plan Partner…", "upgrade": "partner" }Límites de uso
Si superas el límite recibirás error 429. Revisa los headers X-RateLimit-*.
Free
- 100 peticiones/día
- 10 peticiones/min
- Sin bulk lookup
Partner
- 10.000 peticiones/día
- 120 peticiones/min
- Bulk hasta 50 IDs
Headers útiles: X-RateLimit-Remaining-Day, X-RateLimit-Remaining-Minute, Retry-After.
¿Quieres saber qué significa cada campo de la respuesta?
Ver referencia de datos →