Get a free API key
Sign up for the free BIN lookup API. It takes about 15 seconds.
The free tier includes 100 lookups for the first month. After that, top up your balance to keep the service running. Already have an account? Sign in.
BIN lookup API
A free REST API that returns the scheme, card type, category, issuing bank and country for a card BIN / IIN. One endpoint, JSON in and out, no SDK required. Get a free key to start.
- Base URL
- https://api.bintable.com/v1
- Auth
api_keyquery parameter- Methods
- GET or POST
- BIN length
- 6 to 11 digits
Authentication
Pass your key as the api_key query parameter on every request. There
are no other headers to set.
Your key appears here once you are signed in.
Each successful /v1/{BIN} call spends one lookup from your balance.
/v1/balance is free. Keep your key server side.
Make a request
GET https://api.bintable.com/v1/{BIN}?api_key=…
curl "https://api.bintable.com/v1/403244?api_key=YOUR_API_KEY"
const res = await fetch(
"https://api.bintable.com/v1/403244?api_key=YOUR_API_KEY"
);
const { data } = await res.json();
console.log(data.bank.name, data.country.name);
$res = file_get_contents("https://api.bintable.com/v1/403244?api_key=YOUR_API_KEY");
$data = json_decode($res, true)["data"];
import requests
r = requests.get("https://api.bintable.com/v1/403244", params={"api_key": "YOUR_API_KEY"})
data = r.json()["data"]
Response
A successful lookup returns HTTP 200 with:
{
"result": 200,
"message": "SUCCESS",
"data": {
"card": { "scheme": "Visa", "type": "Debit", "category": "Classic", "length": 16, "checkluhn": 1, "cvvlen": 3 },
"country": { "name": "Egypt", "code": "eg", "flag": "🇪🇬", "currency": "Egyptian pound", "currency_code": "EGP" },
"bank": { "name": "ARAB INTERNATIONAL BANK", "website": "http://www.aib.com.eg", "phone": "23918794" }
}
}
| Field | Type | Notes |
|---|---|---|
| card.scheme | string | Visa, Mastercard, Mada, and so on. |
| card.type | string | Debit, Credit, Charge card. Empty if unknown. |
| card.category | string | Classic, Gold, Corporate. Empty if unknown. |
| card.length | int | Full PAN length. -1 when not known. |
| card.checkluhn | int | 1 if the PAN is Luhn checked, else -1. |
| card.cvvlen | int | CVV length, or -1. |
| country.name | string | Issuing country. |
| country.code | string | Lowercase ISO 3166-1 alpha-2. |
| country.flag | string | Emoji flag, or empty. |
| country.currency | string | Currency name. |
| country.currency_code | string | ISO 4217 code. |
| bank.name | string | Issuing bank. |
| bank.website | string | Lowercased, may be empty. |
| bank.phone | string | May be empty. |
Balance endpoint
GET https://api.bintable.com/v1/balance?api_key=…
returns your remaining lookups and key expiry. It does not spend a lookup.
{ "result": 200, "message": "SUCCESS", "data": { "balance": 4870, "expiry_date": "2026-10-01" } }
Errors
result mirrors the HTTP status. The body always has
result, message and data.
| HTTP | message | When |
|---|---|---|
| 401 | Invalid API Key | Key is wrong or unknown. |
| 401 | Your balance is exhausted | No lookups left. Top up on the boost page. |
| 401 | Your package has expired | Key is past its expiry date. |
| 401 | Your account has been blocked due to suspicious activity | Contact support. |
| 404 | NOT FOUND | BIN is not in the database. |
| 422 | API key is missing | No api_key parameter. |
| 422 | Missing BIN value | No BIN in the path. |