Looking up BINs by issuing bank

Use SmartBinDB.get_bins_by_bank() to discover every BIN whose issuer name matches a case-insensitive substring.

Basic usage

import asyncio
from smartbindb import SmartBinDB

db = SmartBinDB()

async def main():
    result = await db.aget_bins_by_bank("Chase", limit=10)
    for entry in result["data"]:
        print(entry["bin"], "-", entry["issuer"], "-", entry["country_code"])

asyncio.run(main())

How matching works

The needle is lowercased and substring-matched against the issuer field of every BIN entry. "chase", "Chase" and "CHASE BANK" all match records whose issuer contains the case-folded fragment "chase".

Capping result size

Pass limit to bound the number of returned records. SmartBinDB stops scanning the in-memory database as soon as the limit is satisfied, so this also reduces CPU work.

await db.aget_bins_by_bank("Standard Chartered", limit=50)

Pagination pattern

The library does not maintain server-side cursors. To paginate, fetch a larger window and slice client-side:

import asyncio
from smartbindb import SmartBinDB

db = SmartBinDB()
PAGE = 25

async def page(bank: str, n: int):
    full = await db.aget_bins_by_bank(bank, limit=PAGE * (n + 1))
    if full["status"] != "SUCCESS":
        return []
    return full["data"][n * PAGE : (n + 1) * PAGE]

print(asyncio.run(page("HSBC", 0)))
print(asyncio.run(page("HSBC", 1)))

Aggregating across banks

import asyncio
from collections import Counter
from smartbindb import SmartBinDB

db = SmartBinDB()

async def by_country(bank: str):
    result = await db.aget_bins_by_bank(bank, limit=10_000)
    if result["status"] != "SUCCESS":
        return Counter()
    return Counter(e["country_code"] for e in result["data"])

print(asyncio.run(by_country("Citi")).most_common(10))