Api Key hecker

May 06, 2026 - Admin Name

#!/usr/bin/env python3
"""
API Key Checker Terbaru 2026
Support: Anthropic, OpenAI, Gemini, xAI (Grok)
+ Telegram Report
"""

import sys, json, re, urllib.request, urllib.error, time
from pathlib import Path
from datetime import datetime

# Colors
RED = "\033[0;31m"; GREEN = "\033[0;32m"; YELLOW = "\033[1;33m"
BLUE = "\033[0;34m"; GRAY = "\033[0;90m"; BOLD = "\033[1m"; NC = "\033[0m"

def http_request(method, url, headers=None, data=None, timeout=12):
headers = headers or {}
headers.setdefault("User-Agent", "API-Key-Checker/2026")
try:
if data:
body = json.dumps(data).encode()
req = urllib.request.Request(url, data=body, headers=headers, method=method)
else:
req = urllib.request.Request(url, headers=headers, method=method)
with urllib.request.urlopen(req, timeout=timeout) as r:
return r.status, json.loads(r.read())
except urllib.error.HTTPError as e:
try:
return e.code, json.loads(e.read())
except:
return e.code, {}
except Exception as e:
return 0, {"error": str(e)}

# ========================== CHECKERS ==========================

def check_anthropic(key):
status, body = http_request(
"POST",
"https://api.anthropic.com/v1/messages",
{
"x-api-key": key,
"anthropic-version": "2023-06-01",
"content-type": "application/json"
},
{
"model": "claude-sonnet-4-6", # Terbaru & stabil
"max_tokens": 1,
"messages": [{"role": "user", "content": "hi"}]
}
)
if status == 200:
return GREEN, "✅ VALID & ACTIVE"
elif status == 401:
return RED, "❌ INVALID KEY"
elif status == 400:
msg = body.get("error", {}).get("message", "").lower()
if any(x in msg for x in ["credit", "balance", "quota"]):
return YELLOW, "⚠️ VALID — SALDO HABIS"
return GREEN, f"✅ VALID (limited)"
elif status == 429:
return YELLOW, "⚠️ VALID — RATE LIMITED"
else:
return RED, f"❌ ERROR {status}"


def check_openai(key):
status, body = http_request(
"GET",
"https://api.openai.com/v1/models",
{"Authorization": f"Bearer {key}"}
)
if status == 200:
models = [m["id"] for m in body.get("data", [])[:3]]
return GREEN, f"✅ VALID (models: {', '.join(models)})"
elif status == 401:
return RED, "❌ INVALID KEY"
elif status == 429:
return YELLOW, "⚠️ VALID — QUOTA HABIS"
else:
return RED, f"❌ ERROR {status}"


def check_gemini(key):
status, body = http_request(
"GET",
f"https://generativelanguage.googleapis.com/v1beta/models?key={key}"
)
if status == 200:
models = [m["name"].split("/")[-1] for m in body.get("models", [])[:3]]
return GREEN, f"✅ VALID (models: {', '.join(models)})"
elif status in (400, 403):
msg = body.get("error", {}).get("message", "")
return RED, f"❌ INVALID: {msg[:80]}"
else:
return RED, f"❌ ERROR {status}"


def check_xai(key):
status, body = http_request(
"GET",
"https://api.x.ai/v1/models",
{"Authorization": f"Bearer {key}"}
)
if status == 200:
models = [m["id"] for m in body.get("data", [])[:3]]
return GREEN, f"✅ VALID (models: {', '.join(models)})"
elif status == 401:
return RED, "❌ INVALID KEY"
else:
return RED, f"❌ ERROR {status}"


# ========================== MAIN ==========================

PROVIDERS = {
"ANTHROPIC": ("Anthropic (Claude)", check_anthropic),
"OPENAI": ("OpenAI", check_openai),
"GEMINI": ("Google Gemini", check_gemini),
"XAI": ("xAI (Grok)", check_xai),
}

def load_keys(filepath):
keys = {}
path = Path(filepath)
if not path.exists():
print(f"{RED}File tidak ditemukan: {filepath}{NC}")
sys.exit(1)

for line in path.read_text(encoding="utf-8").splitlines():
line = line.strip()
if not line or line.startswith("#"):
continue
if "=" in line:
provider, _, key = line.partition("=")
provider = provider.strip().upper()
key = key.strip()
if key:
if provider in ["TELEGRAM_BOT_TOKEN", "TELEGRAM_CHAT_ID"]:
keys[provider] = key
else:
keys.setdefault(provider, []).append(key)
return keys


def send_to_telegram(bot_token, chat_id, text):
status, body = http_request(
"POST",
f"https://api.telegram.org/bot{bot_token}/sendMessage",
{"Content-Type": "application/json"},
{
"chat_id": chat_id,
"text": text,
"parse_mode": "HTML",
"disable_web_page_preview": True
}
)
if status == 200:
print(f"{GREEN}✅ Berhasil dikirim ke Telegram{NC}")
else:
print(f"{RED}❌ Gagal kirim Telegram: {status}{NC}")


def main():
keyfile = sys.argv[1] if len(sys.argv) > 1 else "keys.txt"
keys_dict = load_keys(keyfile)
ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

print(f"\n{BOLD}{'='*60}")
print(f" API KEY CHECKER 2026")
print(f" {ts}")
print(f"{'='*60}{NC}\n")

if not any(k in PROVIDERS for k in keys_dict):
print(f"{YELLOW}Tidak ada API key yang ditemukan di {keyfile}{NC}")
sys.exit(0)

output_lines = [f"API KEY CHECKER - {ts}", "="*60]
tele_lines = [f"🔑 <b>API Key Checker Report</b>", f"🕒 {ts}", ""]

for provider_id, (label, checker) in PROVIDERS.items():
provider_keys = keys_dict.get(provider_id, [])
if not provider_keys:
continue

print(f"{BLUE}━━━ {label} ━━━{NC}")
output_lines.append(f"\n━━━ {label} ━━━")
tele_lines.append(f"\n<b>{label}</b>")

for i, key in enumerate(provider_keys, 1):
masked = key[:12] + "..." + key[-6:] if len(key) > 20 else key
print(f" [{i:2d}] {GRAY}{masked}{NC} → ", end="", flush=True)
color, msg = checker(key)
print(f"{color}{msg}{NC}")
output_lines.append(f" [{i:2d}] {masked} → {msg}")
tele_lines.append(f" <code>{masked}</code> → {msg}")
time.sleep(0.4) # Hindari rate limit

# Summary
print(f"\n{BOLD}{'='*60}\nSUMMARY\n{'='*60}{NC}")
output_lines.append(f"\n{'='*60}\nSUMMARY\n{'='*60}")
tele_lines.append(f"\n📊 <b>SUMMARY</b>")

for provider_id, (label, _) in PROVIDERS.items():
entries = [] # Kita skip detail summary kalau mau simple
pass # Bisa ditambah kalau mau hitung valid/invalid

# Save result
ts_file = datetime.now().strftime("%Y%m%d_%H%M%S")
out_path = Path(keyfile).parent / f"result_{ts_file}.txt"
clean_text = re.sub(r'\033\[[0-9;]*m', '', "\n".join(output_lines))
out_path.write_text(clean_text, encoding="utf-8")
print(f"\n{GREEN}📄 Hasil disimpan ke: {out_path}{NC}")

# Telegram
bot_token = keys_dict.get("TELEGRAM_BOT_TOKEN")
chat_id = keys_dict.get("TELEGRAM_CHAT_ID")
if bot_token and chat_id:
send_to_telegram(bot_token, chat_id, "\n".join(tele_lines))
else:
print(f"{GRAY}💡 Tambahkan di keys.txt untuk Telegram:{NC}")
print(f" TELEGRAM_BOT_TOKEN=123456:ABCdef...")
print(f" TELEGRAM_CHAT_ID=-1001234567890")

print()


if __name__ == "__main__":
main()

Format keys.txt yang baru (wajib pakai ini):

# API Keys
ANTHROPIC=sk-ant-...
OPENAI=sk-proj-...
GEMINI=AIza...
XAI=grok-...

# Telegram (wajib pakai nama key ini)
TELEGRAM_BOT_TOKEN=123456:ABC-xyz
TELEGRAM_CHAT_ID=-1001234567890
Perubahan yang dilakukan:
  1. Hanya key VALID yang dikirim ke Telegram
  2. Full key (tidak dimasking) di Telegram
  3. Console & file tetap dimasking (untuk keamanan)
  4. Telegram hanya muncul kalau ada key yang valid


SCRIPT VERSI TERBARU Api Keys Checker

#!/usr/bin/env python3
"""
API Key Checker 2026 - Telegram hanya kirim yang VALID + Full Key
"""

import sys, json, re, urllib.request, urllib.error, time
from pathlib import Path
from datetime import datetime

# Colors
RED = "\033[0;31m"; GREEN = "\033[0;32m"; YELLOW = "\033[1;33m"
BLUE = "\033[0;34m"; GRAY = "\033[0;90m"; BOLD = "\033[1m"; NC = "\033[0m"

def http_request(method, url, headers=None, data=None, timeout=12):
headers = headers or {}
headers.setdefault("User-Agent", "API-Key-Checker/2026")
try:
if data:
body = json.dumps(data).encode()
req = urllib.request.Request(url, data=body, headers=headers, method=method)
else:
req = urllib.request.Request(url, headers=headers, method=method)
with urllib.request.urlopen(req, timeout=timeout) as r:
return r.status, json.loads(r.read())
except urllib.error.HTTPError as e:
try: return e.code, json.loads(e.read())
except: return e.code, {}
except Exception as e:
return 0, {"error": str(e)}


# ========================== CHECKERS ==========================

def check_anthropic(key):
status, body = http_request("POST", "https://api.anthropic.com/v1/messages",
{"x-api-key": key, "anthropic-version": "2023-06-01", "content-type": "application/json"},
{"model": "claude-sonnet-4-6", "max_tokens": 1, "messages": [{"role": "user", "content": "hi"}]})
if status == 200: return GREEN, "✅ VALID & ACTIVE"
elif status == 401: return RED, "❌ INVALID KEY"
elif status == 400:
msg = body.get("error", {}).get("message", "").lower()
if any(x in msg for x in ["credit", "balance", "quota"]):
return YELLOW, "⚠️ VALID — SALDO HABIS"
return GREEN, "✅ VALID"
elif status == 429: return YELLOW, "⚠️ VALID — RATE LIMITED"
else: return RED, f"❌ ERROR {status}"


def check_openai(key):
status, body = http_request("GET", "https://api.openai.com/v1/models", {"Authorization": f"Bearer {key}"})
if status == 200: return GREEN, "✅ VALID & ACTIVE"
elif status == 401: return RED, "❌ INVALID KEY"
elif status == 429: return YELLOW, "⚠️ VALID — QUOTA HABIS"
else: return RED, f"❌ ERROR {status}"


def check_gemini(key):
status, body = http_request("GET", f"https://generativelanguage.googleapis.com/v1beta/models?key={key}")
if status == 200: return GREEN, "✅ VALID & ACTIVE"
elif status in (400, 403): return RED, "❌ INVALID KEY"
else: return RED, f"❌ ERROR {status}"


def check_xai(key):
status, body = http_request("GET", "https://api.x.ai/v1/models", {"Authorization": f"Bearer {key}"})
if status == 200: return GREEN, "✅ VALID & ACTIVE"
elif status == 401: return RED, "❌ INVALID KEY"
else: return RED, f"❌ ERROR {status}"


PROVIDERS = {
"ANTHROPIC": ("Anthropic (Claude)", check_anthropic),
"OPENAI": ("OpenAI", check_openai),
"GEMINI": ("Google Gemini", check_gemini),
"XAI": ("xAI (Grok)", check_xai),
}


def load_keys(filepath):
keys = {}
path = Path(filepath)
if not path.exists():
print(f"{RED}File tidak ditemukan: {filepath}{NC}")
sys.exit(1)

for line in path.read_text(encoding="utf-8").splitlines():
line = line.strip()
if not line or line.startswith("#"): continue
if "=" in line:
provider, _, key = line.partition("=")
provider = provider.strip().upper()
key = key.strip()
if key:
if provider in ["TELEGRAM_BOT_TOKEN", "TELEGRAM_CHAT_ID"]:
keys[provider] = key
else:
keys.setdefault(provider, []).append(key)
return keys


def send_to_telegram(bot_token, chat_id, text):
http_request("POST", f"https://api.telegram.org/bot{bot_token}/sendMessage",
{"Content-Type": "application/json"},
{"chat_id": chat_id, "text": text, "parse_mode": "HTML", "disable_web_page_preview": True})
print(f"{GREEN}✅ Hasil VALID dikirim ke Telegram{NC}")


def main():
keyfile = sys.argv[1] if len(sys.argv) > 1 else "keys.txt"
keys_dict = load_keys(keyfile)
ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

print(f"\n{BOLD}{'='*65}")
print(f" API KEY CHECKER 2026 - Private Mode")
print(f" {ts}")
print(f"{'='*65}{NC}\n")

output_lines = [f"API KEY CHECKER - {ts}", "="*65]
tele_lines = [f"🔑 <b>API Key Checker - VALID ONLY</b>", f"🕒 {ts}", ""]

has_valid = False

for provider_id, (label, checker) in PROVIDERS.items():
provider_keys = keys_dict.get(provider_id, [])
if not provider_keys: continue

print(f"{BLUE}━━━ {label} ━━━{NC}")
output_lines.append(f"\n━━━ {label} ━━━")
tele_lines.append(f"\n<b>{label}</b>")

for i, key in enumerate(provider_keys, 1):
masked = key[:12] + "..." + key[-6:] if len(key) > 20 else key
print(f" [{i:2d}] {GRAY}{masked}{NC} → ", end="", flush=True)
color, msg = checker(key)
print(f"{color}{msg}{NC}")
# Console & File tetap masked
output_lines.append(f" [{i:2d}] {masked} → {msg}")
# Hanya VALID yang masuk Telegram + Full Key
if "✅" in msg or "⚠️" in msg: # Bisa diubah kalau hanya mau ✅ saja
tele_lines.append(f" <code>{key}</code> → {msg}")
has_valid = True
time.sleep(0.5)

# Summary
print(f"\n{BOLD}{'='*65}\nSUMMARY\n{'='*65}{NC}")
output_lines.append(f"\n{'='*65}\nSUMMARY\n{'='*65}")

# Save to file
ts_file = datetime.now().strftime("%Y%m%d_%H%M%S")
out_path = Path(keyfile).parent / f"result_{ts_file}.txt"
clean_text = re.sub(r'\033\[[0-9;]*m', '', "\n".join(output_lines))
out_path.write_text(clean_text, encoding="utf-8")
print(f"\n{GREEN}📄 Hasil disimpan ke: {out_path}{NC}")

# Telegram (hanya kalau ada valid)
bot_token = keys_dict.get("TELEGRAM_BOT_TOKEN")
chat_id = keys_dict.get("TELEGRAM_CHAT_ID")

if bot_token and chat_id and has_valid:
send_to_telegram(bot_token, chat_id, "\n".join(tele_lines))
elif bot_token and chat_id:
print(f"{YELLOW}Tidak ada key VALID, tidak dikirim ke Telegram.{NC}")
else:
print(f"{GRAY}💡 Tambahkan TELEGRAM_BOT_TOKEN dan TELEGRAM_CHAT_ID di keys.txt untuk notifikasi{NC}")

print()


if __name__ == "__main__":
main()

Format keys.txt tetap sama:

ANTHROPIC=sk-ant-...
OPENAI=sk-proj-...
GEMINI=AIza...
XAI=grok-...

TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...


More Posts