Un endpoint, cuatro listas oficiales
Integre 28,172 registros de sanciones y control de exportaciones de la OFAC de EE. UU., la ONU, la UE y el MOFCOM chino en sus propios sistemas de ERP, riesgos o KYC. Envíe un nombre y reciba si hay coincidencia, con qué registros y un enlace al documento oficial para verificarlo.
Cuatro fuentes, cuatro formatos: la OFAC publica CSV, la ONU XML, la UE tiene su propia base de datos y el MOFCOM chino no ofrece API alguna, solo páginas de anuncios.
Y las listas cambian a diario: en nuestra última actualización la OFAC quedó con 97 registros menos (las exclusiones también hay que sincronizarlas o se generan falsos positivos).
Ese coste de mantenimiento es continuo, no puntual.
La API requiere el plan API (US$19.9/mes, incluye todo lo de la membresía).
Inicie sesión, contrate en la pestaña de membresía y luego cree una clave en el apartado de claves API. Las claves tienen la forma tp_xxxxxxxx.
La clave en texto plano solo se muestra una vez, al crearla: guárdela de inmediato en su gestor de secretos.
curl -H "Authorization: Bearer tp_YOUR_KEY" "https://tradeprotected.com/api/v1/screen?name=GAZPROM"
{
"matched": true,
"count": 2,
"rows": [
{
"source": "OFAC",
"name": "GAZPROM NEFT",
"type": "entity",
"programs": "RUSSIA-EO14024",
"listed_on": "2022-02-24",
"url": "https://sanctionssearch.ofac.treas.gov/..."
}
]
}
matched es un booleano sobre el que puede ramificar directamente; rows[].url apunta al registro oficial: archívelo como evidencia de la verificación.
Cribado de un solo nombre. Parámetro name (obligatorio, máx. 200 caracteres). Un número de 7 dígitos se interpreta como IMO de buque y se coteja de forma exacta.
Cribado por lotes, hasta 100 nombres por llamada. Práctico para revisar comprador, vendedor, armador y consignatario de una vez antes de una operación.
Consulta y descarga completa de las listas, para quien mantiene su propia copia. Parámetros: q, source, type, limit (por defecto 100, máx. 500), offset.
Número de registros y fecha de última actualización por fuente. Una tarea de sincronización puede consultarlo antes y evitar una descarga completa innecesaria.
name | Nombre a cribar o IMO de 7 dígitos. Obligatorio en GET /screen |
|---|---|
names | Array de nombres para cribado por lotes, en el cuerpo POST, máx. 100 |
source | OFAC / UN / EU / EUX / CN; vacío significa todas |
type | entity / individual / vessel / aircraft |
format | json (por defecto) / xlsx (Excel) / csv / ndjson |
limit | Filas por página, por defecto 100, máx. 500 |
offset | Desplazamiento, junto con limit para paginar |
Los mismos datos, tres formas de consumirlos, de menos a más código:
Pegue el fragmento siguiente en cualquier página de su web corporativa y aparecerá un buscador de listas de sanciones con nuestros datos, de aspecto sobrio y fácil de integrar en su maquetación. Encaja bien en transitarios, despachos y asociaciones que ofrecen a sus clientes una comprobación autoservicio.
<iframe src="https://tradeprotected.com/embed?key=tp_YOUR_KEY&lang=es"
style="width:100%;height:420px;border:1px solid #e4eaf1;border-radius:12px"
loading="lazy"></iframe>
La clave incluida en el código de integración es visible públicamente: cualquiera que vea el código fuente de su página puede leerla. Por eso configure los dominios permitidos para esa clave en Membresía → claves API (p. ej. yourcompany.com); aunque la copien, no funcionará en otro sitio. Es el mismo enfoque que usan claves de front-end como las de Google Maps.
Recomendamos separar la clave de integración de la de llamadas desde servidor: la primera restringida a su dominio, la segunda sin restricción pero alojada solo en su servidor. Una cuenta puede tener cinco claves a la vez, suficiente para separar entornos.
Basta con añadir el parámetro format; todos los endpoints de consulta lo admiten.
?format=xlsx. Un archivo .xlsx real con encabezados bilingües, anchos de columna ajustados y fila de cabecera oscura en negrita: doble clic y directo al anexo del informe, sin reformatear.?format=csv. Con BOM UTF-8 para que Excel abra correctamente el texto no latino; cómodo para scripts.?format=ndjson. Un objeto JSON independiente por línea, ideal para tuberías en streaming: una descarga completa nunca ha de caber entera en memoria.matched y count para decisiones automáticas.# exportar la lista del MOFCOM chino a Excel
curl -H "Authorization: Bearer tp_YOUR_KEY" "https://tradeprotected.com/api/v1/sanctions?source=CN&limit=500&format=xlsx" -o cn-list.xlsx
# guardar el resultado de un cribado como hoja de cálculo para el expediente
curl -H "Authorization: Bearer tp_YOUR_KEY" "https://tradeprotected.com/api/v1/screen?name=GAZPROM&format=xlsx" -o gazprom.xlsx
# buscar un buque por IMO
curl -H "Authorization: Bearer tp_YOUR_KEY" "https://tradeprotected.com/api/v1/screen?name=9209508"
import requests
KEY = "tp_YOUR_KEY"
r = requests.get(
"https://tradeprotected.com/api/v1/screen",
params={"name": "GAZPROM"},
headers={"Authorization": "Bearer " + KEY},
timeout=20,
)
r.raise_for_status()
data = r.json()
if data["matched"]:
print("MATCH", data["count"], "coincidencia(s) — requiere revisión manual")
for row in data["rows"]:
print(row["source"], row["name"], row["url"])
const KEY = process.env.TP_API_KEY;
async function screen(name) {
const url = new URL("https://tradeprotected.com/api/v1/screen");
url.searchParams.set("name", name);
const r = await fetch(url, { headers: { authorization: "Bearer " + KEY } });
if (!r.ok) throw new Error("screen failed: " + r.status);
return r.json();
}
const out = await screen("SOVCOMFLOT");
console.log(out.matched ? "MATCH " + out.count : "clear");
names = ["GAZPROM", "ACSL", "SOVCOMFLOT"]
r = requests.post(
"https://tradeprotected.com/api/v1/screen",
json={"names": names},
headers={"Authorization": "Bearer " + KEY},
timeout=60,
)
for item in r.json()["results"]:
flag = "MATCH" if item["matched"] else "clear"
print(flag, item["query"], item["count"])
1000 llamadas por clave y día, con reinicio a las 00:00 UTC. Cada respuesta lleva estas dos cabeceras:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
Una cuenta admite hasta cinco claves activas. Separarlas por entorno (producción / pruebas / un compañero concreto) permite revocar una sin afectar al resto de consumidores.
Los errores siempre devuelven {"error":{"code":"...","message":"..."}}. Ramifique según code, no según el texto del mensaje.
| 401 | missing_key no se envió clave · invalid_key clave no válida o revocada |
|---|---|
| 403 | membership_required sin contratar o caducado: las claves dejan de funcionar en cuanto vence el plan y vuelven a hacerlo al renovar, sin reemitirlas |
| 429 | quota_exceeded cuota diaria agotada |
| 400 | missing_name / name_too_long / too_many_names problemas de parámetros |
El cotejo se basa en subcadenas y frases normalizadas, de modo que una coincidencia es una señal de diligencia debida, no una conclusión jurídica. Los homónimos y las diferencias de transliteración pueden producir falsos positivos y negativos; decida en última instancia sobre el registro oficial al que apunta url.
El plan API incluye todo lo de la membresía, más la API de datos, el widget integrable y la exportación a Excel.
Las API de cribado equivalentes suelen venderse por contrato anual a partir de varios miles de dólares. La nuestra es mensual y cancelable en cualquier momento. Haga unas consultas gratis y evalúe los datos antes de integrarla.