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_keyLas claves API expiran después de 1 año. Puedes regenerarlas desde el Panel de control.
Endpoints
/api/v1/traceEjecuta un traceroute hacia un destino y devuelve todos los saltos con geolocalización, ASN, latencia, jitter y pérdida de paquetes.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| key | string | requerido | Tu clave API (comienza con tm_) |
| dest | string | requerido | Dirección IP o nombre de dominio de destino |
| maxHops | integer | opcional | Número máximo de saltos (1-64, por defecto: 30) |
| protocol | string | opcional | Protocolo: 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
/api/v1/tracesLista tus traceroutes guardados con paginación. Soporta filtrado por destino.
| Parámetro | Tipo | Descripción |
|---|---|---|
| limit | integer | Resultados por página (1-100, por defecto: 20) |
| offset | integer | Número de resultados a omitir (por defecto: 0) |
| dest | string | Filtrar por IP o nombre de dominio de destino |
/api/v1/statusObtener el estado de la API, fuentes disponibles e información de límites. Sin autenticación requerida.
/api/v1/pingHacer ping a un host y devolver estadísticas de latencia, pérdida de paquetes y tiempos de ida y vuelta individuales.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| host | string | requerido | Dirección IP o nombre de host a hacer ping |
| count | integer | opcional | Nú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]
}/api/v1/dnsRealizar una consulta DNS para un dominio y devolver los registros resueltos con el tiempo de consulta.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| domain | string | requerido | Nombre de dominio a consultar |
| type | string | opcional | Tipo 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"
}/api/v1/http-checkVerificar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| url | string | requerido | URL 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"]
}
}/api/v1/port-checkVerificar si un puerto TCP está abierto en un host y devolver el tiempo de respuesta y el nombre del servicio.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| host | string | requerido | Dirección IP o nombre de host a verificar |
| port | integer | requerido | Número de puerto a verificar (1-65535) |
| ports | string | opcional | Usar "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"
}/api/v1/ip-reputationVerificar la reputación de una dirección IP contra listas negras DNS y AbuseIPDB, con datos de geolocalización.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| ip | string | requerido | Direcció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"
}
}/api/v1/whoisDatos 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| ip | string | requerido | Direcció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
}/api/v1/subdomainsLista 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| domain | string | requerido | Nombre 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"
}/api/v1/email-checkSPF, 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| domain | string | requerido | Dominio de correo a comprobar (p. ej. ejemplo.com) |
| selectors | string | opcional | Hasta 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"
}/api/v1/outagesLos 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| range | string | opcional | Periodo consultado: 1d, 7d (por defecto), 14d o 28d |
| asn | string | opcional | Conservar 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"
}/api/v1/bgpConsultar información de enrutamiento BGP para una dirección IP o prefijo, incluyendo ASN de origen, rutas AS y proveedores upstream.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| target | string | requerido | Direcció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"])