Ir al contenido

Documentación API

Integra TraceMapper en tus aplicaciones con nuestra API REST. Disponible para usuarios Pro.

Autenticación

Todas las solicitudes a la API requieren una clave API enviada en la cabecera Authorization como token Bearer. Las claves en la cadena de consulta se rechazan. Genera tu clave API desde el panel.

Encabezado Authorization (recomendado)

Authorization: Bearer tm_your_api_key

Las claves API expiran después de 1 año. Puedes regenerarlas desde el Panel de control.

Endpoints

GET/api/v1/trace

Ejecuta un traceroute hacia un destino y devuelve todos los saltos con geolocalización, ASN, latencia, jitter y pérdida de paquetes.

Parámetros

ParámetroTipoRequeridoDescripción
keystringrequeridoTu clave API (comienza con tm_)
deststringrequeridoDirección IP o nombre de dominio de destino
maxHopsintegeropcionalNúmero máximo de saltos (1-64, por defecto: 30)
protocolstringopcionalProtocolo: icmp, udp o tcp (por defecto: icmp)

Ejemplo de respuesta

{
  "dest": "8.8.8.8",
  "protocol": "icmp",
  "totalHops": 12,
  "hops": [
    {
      "hopNumber": 1,
      "ip": "192.168.1.1",
      "hostname": "router.local",
      "asn": null,
      "asnOrg": null,
      "city": null,
      "country": null,
      "lat": null,
      "lon": null,
      "latencyAvg": 1.2,
      "latencyMin": 0.8,
      "latencyMax": 1.5,
      "jitter": 0.3,
      "packetLoss": 0.0,
      "isTimeout": false
    }
  ]
}

Códigos de error

401Clave API faltante o inválida
403Usuario no Pro o clave inválida
429Límite de solicitudes excedido
GET/api/v1/traces

Lista tus traceroutes guardados con paginación. Soporta filtrado por destino.

ParámetroTipoDescripción
limitintegerResultados por página (1-100, por defecto: 20)
offsetintegerNúmero de resultados a omitir (por defecto: 0)
deststringFiltrar por IP o nombre de dominio de destino
GET/api/v1/status

Obtener el estado de la API, fuentes disponibles e información de límites. Sin autenticación requerida.

GET/api/v1/ping

Hacer ping a un host y devolver estadísticas de latencia, pérdida de paquetes y tiempos de ida y vuelta individuales.

Parámetros

ParámetroTipoRequeridoDescripción
hoststringrequeridoDirección IP o nombre de host a hacer ping
countintegeropcionalNúmero de paquetes ping a enviar (1-20, por defecto: 4)

Ejemplo de respuesta

{
  "host": "8.8.8.8",
  "resolvedIp": "8.8.8.8",
  "count": 4,
  "sent": 4,
  "received": 4,
  "packetLoss": 0,
  "latency": {
    "min": 1.23,
    "avg": 2.45,
    "max": 3.67,
    "jitter": 0.89
  },
  "rtts": [1.23, 2.45, 3.67, 2.45]
}
GET/api/v1/dns

Realizar una consulta DNS para un dominio y devolver los registros resueltos con el tiempo de consulta.

Parámetros

ParámetroTipoRequeridoDescripción
domainstringrequeridoNombre de dominio a consultar
typestringopcionalTipo de registro: A, AAAA, MX, NS, CNAME, TXT o SOA (por defecto: A)

Ejemplo de respuesta

{
  "domain": "example.com",
  "type": "A",
  "records": [
    { "address": "93.184.216.34", "ttl": 300 }
  ],
  "queryTime": 12.34,
  "server": "system"
}
GET/api/v1/http-check

Verificar una URL HTTP(S) y devolver el código de estado, tiempo de respuesta, cadena de redirecciones, encabezados y detalles del certificado SSL.

Parámetros

ParámetroTipoRequeridoDescripción
urlstringrequeridoURL a verificar (se añade https:// si se omite)

Ejemplo de respuesta

{
  "url": "https://example.com",
  "statusCode": 200,
  "statusText": "OK",
  "responseTime": 145,
  "redirects": [],
  "headers": {
    "content-type": "text/html; charset=UTF-8",
    "server": "nginx"
  },
  "ssl": {
    "valid": true,
    "issuer": "DigiCert Inc",
    "validFrom": "2024-01-01",
    "validTo": "2025-01-01",
    "daysRemaining": 180,
    "protocol": "TLSv1.3",
    "sans": ["example.com", "www.example.com"]
  }
}
GET/api/v1/port-check

Verificar si un puerto TCP está abierto en un host y devolver el tiempo de respuesta y el nombre del servicio.

Parámetros

ParámetroTipoRequeridoDescripción
hoststringrequeridoDirección IP o nombre de host a verificar
portintegerrequeridoNúmero de puerto a verificar (1-65535)
portsstringopcionalUsar "common" para escanear puertos comunes (21, 22, 25, 53, 80, 443, ...)

Ejemplo de respuesta

{
  "host": "example.com",
  "resolvedIp": "93.184.216.34",
  "family": 4,
  "port": 443,
  "state": "open",
  "open": true,
  "responseTime": 23,
  "service": "HTTPS"
}
GET/api/v1/ip-reputation

Verificar la reputación de una dirección IP contra listas negras DNS y AbuseIPDB, con datos de geolocalización.

Parámetros

ParámetroTipoRequeridoDescripción
ipstringrequeridoDirección IPv4 o IPv6 a verificar

Ejemplo de respuesta

{
  "ip": "8.8.8.8",
  "reputation": "clean",
  "score": 0,
  "listsAnswered": 5,
  "listsQueried": 5,
  "abuseipdb": {
    "status": "ok",
    "score": 0,
    "totalReports": 12,
    "lastReported": "2026-06-01T10:00:00Z"
  },
  "blacklists": [
    { "name": "Spamhaus ZEN", "status": "clean", "listed": false },
    { "name": "SpamCop", "status": "clean", "listed": false },
    { "name": "Barracuda", "status": "unavailable", "listed": false, "reason": "no_answer" }
  ],
  "geo": {
    "country": "US",
    "isp": "Google LLC",
    "org": "Google LLC",
    "as": "AS15169 Google LLC"
  }
}
GET/api/v1/whois

Datos de registro de una dirección IP pública mediante RDAP: organización, rango de red, país, contacto de abuso y nombre DNS inverso.

Parámetros

ParámetroTipoRequeridoDescripción
ipstringrequeridoDirección IPv4 o IPv6 pública a consultar

Ejemplo de respuesta

{
  "ip": "8.8.8.8",
  "hostname": "dns.google",
  "org": "Google LLC",
  "netName": "GOGL",
  "netRange": "8.8.8.0/24",
  "country": "US",
  "countrySource": "geoip",
  "abuse": null,
  "registry": "whois.arin.net",
  "asn": "AS15169 Google LLC",
  "reserved": false
}
GET/api/v1/subdomains

Lista los nombres que un dominio ha certificado, leídos de los registros públicos de transparencia de certificados. La respuesta indica qué fuente respondió y si la vista es parcial.

Parámetros

ParámetroTipoRequeridoDescripción
domainstringrequeridoNombre de dominio registrable a buscar (p. ej. ejemplo.com)

Ejemplo de respuesta

{
  "domain": "tracemapper.com",
  "source": "crtsh",
  "sources": [{ "id": "crtsh", "status": "ok" }],
  "partial": false,
  "subdomains": [
    {
      "name": "tracemapper.com",
      "firstSeen": "2026-08-07T00:00:00.000Z",
      "lastSeen": "2026-11-05T01:22:00.000Z",
      "certificates": 1,
      "wildcard": false
    }
  ],
  "certificates": [],
  "totals": { "subdomains": 3, "wildcards": 1, "certificates": 13 },
  "stale": false,
  "fetchedAt": "2026-09-11T07:20:00.000Z"
}
GET/api/v1/email-check

SPF, DKIM, DMARC y MX de un dominio, interpretados. El campo spf.lookups cuenta los términos que consultan DNS de forma recursiva a través de cada include, el límite que los registros cruzan en silencio.

Parámetros

ParámetroTipoRequeridoDescripción
domainstringrequeridoDominio de correo a comprobar (p. ej. ejemplo.com)
selectorsstringopcionalHasta cinco selectores DKIM, separados por comas. Si se omite, se prueban los comunes.

Ejemplo de respuesta

{
  "domain": "example.com",
  "verdict": "warning",
  "spf": {
    "status": "warning",
    "record": "v=spf1 include:_spf.example.net ~all",
    "lookups": 9,
    "lookupLimit": 10,
    "truncated": false,
    "allQualifier": "~",
    "includes": [{ "domain": "_spf.example.net", "depth": 0, "cost": 9 }],
    "findings": [
      { "code": "spf_lookups_near_limit", "severity": "warning",
        "params": { "count": 9, "limit": 10 } }
    ]
  },
  "dmarc": { "status": "warning", "policy": "none", "rua": ["mailto:d@example.com"], "findings": [] },
  "dkim": { "status": "unknown", "found": [], "selectorsTried": ["default", "google"] },
  "mx": { "status": "ok", "hosts": [{ "host": "mx.example.com", "priority": 10, "resolves": true }] },
  "checkedAt": "2026-09-11T09:30:00.000Z"
}
GET/api/v1/outages

Los cortes y perturbaciones de Internet observados por Cloudflare Radar: países y sistemas autónomos afectados, causa declarada, inicio y fin. Filtra por ASN para saber si una red que atraviesa tu tráfico informa de un problema. Devuelve 503 con un estado unconfigured o unavailable cuando el propio flujo no pudo responder, lo que nunca es lo mismo que una lista vacía.

Parámetros

ParámetroTipoRequeridoDescripción
rangestringopcionalPeriodo consultado: 1d, 7d (por defecto), 14d o 28d
asnstringopcionalConservar solo los cortes que afectan a este sistema autónomo, por ejemplo 3215 o AS3215

Ejemplo de respuesta

{
  "status": "ok",
  "events": [
    {
      "id": "1234",
      "locations": [{ "code": "IQ", "name": "Iraq" }],
      "networks": [{ "asn": 203214, "name": "HulumTele" }],
      "cause": "GOVERNMENT_DIRECTED",
      "outageType": "NATIONWIDE",
      "scope": null,
      "description": "Exam Shutdown",
      "startDate": "2026-09-10T03:30:00.000Z",
      "endDate": "2026-09-10T03:45:00.000Z",
      "ongoing": false,
      "linkedUrl": null
    }
  ],
  "totals": { "ongoing": 0, "ended": 5 },
  "dateRange": "7d",
  "stale": false,
  "fetchedAt": "2026-09-11T07:20:00.000Z"
}
GET/api/v1/bgp

Consultar información de enrutamiento BGP para una dirección IP o prefijo, incluyendo ASN de origen, rutas AS y proveedores upstream.

Parámetros

ParámetroTipoRequeridoDescripción
targetstringrequeridoDirección IP o prefijo (ej.: 8.8.8.0/24)

Ejemplo de respuesta

{
  "prefix": "8.8.8.0/24",
  "origin": { "asn": 15169, "holder": "Google LLC" },
  "paths": [
    {
      "collector": "rrc00",
      "asPath": [13335, 15169],
      "communities": ["13335:10000"]
    }
  ],
  "pathCount": 245,
  "collectorCount": 24,
  "upstreamAsns": [
    { "asn": 13335, "holder": "Cloudflare Inc", "count": 45 }
  ]
}

Límites de solicitudes

Las solicitudes a la API están limitadas a 60 por minuto por clave API en el plan Pro y a 300 por minuto en el plan Business. Si superas el límite recibirás un código 429 con una cabecera Retry-After.

Ejemplos de código

cURL

# Con encabezado Authorization
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/trace?dest=8.8.8.8"

# Listar trazas guardadas
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/traces?limit=10"

# Ping
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/ping?host=8.8.8.8&count=4"

# DNS
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/dns?domain=_dmarc.example.com&type=TXT&resolver=authoritative"

# HTTP Check
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/http-check?url=https://example.com"

# Port Check
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/port-check?host=example.com&port=443"

# IP Reputation
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/ip-reputation?ip=8.8.8.8"

# BGP: an address, a prefix, or an AS number
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/bgp?target=AS15169"

# WHOIS / RDAP
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/whois?ip=8.8.8.8"

# Subdominios de los registros de transparencia de certificados
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/subdomains?domain=example.com"

# Cortes declarados en un sistema autonomo
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/outages?range=7d&asn=AS3215"

# SPF, DKIM, DMARC y MX de un dominio
curl -H "Authorization: Bearer tm_your_api_key" \
  "https://tracemapper.com/api/v1/email-check?domain=example.com&selectors=resend"

JavaScript / Node.js

const API_KEY = "tm_your_api_key";
const headers = { Authorization: `Bearer ${API_KEY}` };

// Traceroute
const trace = await fetch(
  "https://tracemapper.com/api/v1/trace?dest=8.8.8.8",
  { headers }
).then(r => r.json());
console.log(trace.hops);

// Ping
const ping = await fetch(
  "https://tracemapper.com/api/v1/ping?host=8.8.8.8",
  { headers }
).then(r => r.json());
console.log(ping.latency);

// DNS
const dns = await fetch(
  "https://tracemapper.com/api/v1/dns?domain=example.com&type=A",
  { headers }
).then(r => r.json());
console.log(dns.records);

Python

import requests

headers = {"Authorization": "Bearer tm_your_api_key"}

# Traceroute
r = requests.get(
    "https://tracemapper.com/api/v1/trace",
    params={"dest": "8.8.8.8"},
    headers=headers,
)
print(r.json()["hops"])

# Ping
r = requests.get(
    "https://tracemapper.com/api/v1/ping",
    params={"host": "8.8.8.8", "count": 4},
    headers=headers,
)
print(r.json()["latency"])

# DNS
r = requests.get(
    "https://tracemapper.com/api/v1/dns",
    params={"domain": "example.com", "type": "MX"},
    headers=headers,
)
print(r.json()["records"])