Detectar la marca de una tarjeta
Un formulario de pago que muestra el logo equivocado, o un checkout que no distingue una tarjeta de débito de un rango corporativo de Amex, pierde confianza en los primeros segundos. Este endpoint lee los primeros dígitos de cualquier número de tarjeta y le dice a qué red pertenece, para que su interfaz y su lógica de riesgo reaccionen antes de siquiera intentar el cobro.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Los primeros seis u ocho dígitos dicen más de lo que parece
Todo número de tarjeta comienza con un rango de identificación de emisor, conocido históricamente como BIN. Esos dígitos no son arbitrarios: están asignados a una red específica y, dentro de ella, a un banco o programa emisor concreto. Leerlos correctamente es lo que permite que una página de pago muestre el ícono de Mastercard en vez de un ícono genérico, o que un motor de riesgo decida revisar una transacción con más cuidado.
Qué recibe en la respuesta
Envía un número de tarjeta o solo sus primeros dígitos, y la tarea resuelve con la red detectada — Visa, Mastercard, American Express, Discover, JCB, Diners Club, UnionPay y otras según los rangos publicados — junto con datos de formato como la longitud esperada del número y si los dígitos cumplen el algoritmo de verificación estándar usado por todas las redes principales. Le dice qué dice ser el número; no contacta a ningún banco ni confirma que la tarjeta esté activa.
Un sistema de rangos anterior al comercio en línea
Los rangos de identificación bancaria existen desde antes que el comercio electrónico: se crearon para que las terminales de banda magnética pudieran enrutar un cobro a la red correcta sin necesidad de una consulta en vivo. Ese mismo diseño pensado para funcionar sin conexión es lo que permite que la detección de marca hoy corra al instante, solo a partir de los dígitos que ya tiene.
Cómo encaja en su flujo
Al llamar el endpoint recibe un task_id de inmediato; el resultado llega por su webhook firmado o por un enlace firmado válido durante 24 horas, según lo que mejor se ajuste a su integración. La mayoría de los equipos lo invocan justo cuando el comprador termina de escribir el número, antes de enviar la autorización real a su procesador.
Nada se guarda, y lo que falla no se cobra
Los números de tarjeta son datos sensibles por naturaleza, así que los resultados se eliminan al cerrarse la ventana de retención y jamás se usan para entrenar nada. Además, como las fallas no se facturan — tres reintentos y luego un error claro — nunca paga por una solicitud mal formada que no produjo respuesta.
Qué puede hacer con ella
Branding en tiempo real durante el checkout
Muestre el logo correcto de la red mientras el comprador escribe, en vez de un ícono genérico que hace ver el formulario incompleto.
Enrutamiento antes de autorizar
Dirija la transacción hacia el adquirente más adecuado para esa red antes de enviarla, reduciendo rechazos evitables.
Filtro previo de riesgo
Marque combinaciones inusuales de BIN, país y red para revisión manual antes de despachar un pedido.
Reportes segmentados por marca
Clasifique transacciones históricas por marca de tarjeta para contabilidad o para negociar mejores tarifas con su adquirente.
Preguntas frecuentes
¿Esta api para detectar tipo de tarjeta es gratis?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Verifica si la tarjeta es real o tiene fondos?
No. Solo lee el rango BIN para identificar la red y valida el formato y el algoritmo de verificación del número. Confirmar si la tarjeta está activa o tiene fondos ocurre en su procesador de pagos al autorizar.
¿Qué marcas puede detectar?
Visa, Mastercard, American Express, Discover, JCB, Diners Club y UnionPay, entre otras, según los rangos BIN publicados.
¿Necesito el número completo o solo los primeros dígitos?
Con los primeros seis u ocho dígitos basta para una detección precisa; enviar el número completo también funciona y no cambia el resultado.
¿Cómo recibo el resultado?
La llamada devuelve un task_id de inmediato, y la respuesta llega por su webhook firmado o mediante un enlace firmado válido por 24 horas.
¿Puedo procesar muchos números en bloque?
Cada solicitud maneja un número; para volumen alto, llame al endpoint una vez por número y deje que el modelo asíncrono absorba el flujo.
¿Se guardan los datos de la tarjeta después?
No. Los resultados se eliminan al terminar el periodo de retención y nunca se usan para entrenar modelos ni para ningún otro fin.
¿Qué cuesta una solicitud que falla?
Nada. Las tareas fallidas se reintentan automáticamente hasta tres veces, y solo se cobra una solicitud que efectivamente se completa.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/verify/card-type \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/verify/card-type", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/verify/card-type",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/verify/card-type", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/verify/card-type", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"items": [
"valor-1",
"valor-2"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "verify.card_type",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |