Проверка карт.
Максимально просто.
Card checking.
Radically simple.
Отправляешь батч по HTTP — получаешь вердикты по категориям. 50 потоков на каждый чек, стабильный движок, честный биллинг с автоматическим возвратом за технические ошибки.
Submit a batch over HTTP — get categorized verdicts back. 50 dedicated threads per check, a battle-tested engine, fair billing with automatic refunds for technical errors.
Быстрый старт
Quick start
Получи ключ у администратора (@Zewa_Support) и отправь первый батч:
Get a key from the admin (@Zewa_Support) and submit your first batch:
curl -X POST https://api.zewa.mom/v1/checks \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{"cards": ["4187596639593908|03/27|314|Mia|Quinn|66 Red Oak Way|Boise|83702|ID"]}'Затем опрашивай результат раз в 5–10 секунд:
Then poll for the result every 5–10 seconds:
curl https://api.zewa.mom/v1/checks/1042 -H "X-API-Key: sk_live_..."Аутентификация
Authentication
Ключ выдаёт саппорт: он создаёт ключ и привязывает его к твоему аккаунту в нашем Telegram-боте. Баланс один — твой профиль в боте: пополняешь его там (крипта/промокод), а API списывает прямо с него по твоей персональной ставке за принятую карту. Статус партнёра и ставка видны прямо в меню бота.
Каждый запрос — с заголовком X-API-Key. Полный ключ показывается один раз при создании — сохрани его. Если ключ скомпрометирован, админ перевыпустит: старый умирает мгновенно.
The key is issued by support: they create it and bind it to your account in our Telegram bot. One balance — your bot profile: you top it up in the bot (crypto/promo), and the API charges it directly at your personal rate per accepted card. Your partner status and rate are shown right in the bot menu.
Every request carries the X-API-Key header. The full key is shown once upon creation — store it safely. If compromised, the admin rotates it: the old key dies instantly.
Форматы карт
Card formats
Строки с разделителем |, минимум 9 полей:
Pipe-delimited lines, 9+ fields:
NUM|MM/YY|CVV|FIRST|LAST|STREET|CITY|ZIP|STATE[|US|PHONE|EMAIL]
4187596639593908|03/27|314|Mia|Quinn|66 Red Oak Way|Boise|83702|ID- Срок:
MM/YY— такжеMM.YY,MMYY, год 4 цифрами. CVV и срок идут в любом порядке. - ZIP и штат — в любом порядке. Штат кодом (
FL) или словом (Florida), регистр не важен. - Имя можно одним полем:
FIRST LAST. Хвост (страна/телефон/email) опционален. - Дубликаты по номеру и несуществующие штаты отбрасываются на входе — видно в
dropped. - Просроченные карты отклоняются локально →
invalid_card, списание идёт.
- Expiry:
MM/YY— alsoMM.YY,MMYY, 4-digit year. CVV and expiry can swap positions. - ZIP and state — any order. State as code (
FL) or full name (Florida). - Name can be a single field:
FIRST LAST. Trailing fields (country/phone/email) are optional. - Duplicates by card number and non-existent states are dropped on input — see
dropped. - Expired cards are rejected locally →
invalid_card, still charged.
Эндпоинты
Endpoints
/v1/checksсоздать чек — любой размер батчаcreate a check — any batch sizeТело запроса и ответ 201:
Request body and 201 response:
// POST /v1/checks — request
{ "cards": ["NUM|MM/YY|CVV|FIRST|LAST|STREET|CITY|ZIP|STATE", "..."] }
// 201 — response
{
"check_id": 1042,
"accepted": 2,
"dropped": { "duplicates": 0, "bad_state": 0, "bad_format": 0 },
"charged_cents": 50,
"price_cents": 25,
"balance_cents": 9950
}/v1/checks/{id}статус и результатstatus & resultsПока чек идёт — только прогресс. Когда status станет done — появляется results с картами по категориям (строка карты, категория = ключ):
While running — progress only. Once status becomes done, results appears with cards grouped by category:
// GET /v1/checks/1042 — 200
{
"check_id": 1042,
"status": "done",
"total": 2, "done": 2,
"stats": { "valid": 1, "invalid_card": 0, "billing_mismatch": 1, "timeout": 0, "error": 0 },
"charged_cents": 50,
"refunded_cents": 0,
"created_at": "2026-09-10 12:00:00",
"finished_at": "2026-09-10 12:02:41",
"results": {
"valid": [{ "line": "4187596639593908|03/27|314|…|ID" }],
"invalid_card": [],
"billing_mismatch": [{ "line": "5677011276076500|05/29|203|…|UT" }],
"timeout": [],
"error": []
}
}/v1/meпрофиль: цена, балансprofile: price, balance// GET /v1/me — 200
{
"partner_id": 3,
"name": "ShopX",
"price_cents": 25,
"balance_cents": 9950,
"enabled": true
}Категории результата
Result categories
Карта принята
Card accepted
Невалидная карта / неверный CVV или срок
Invalid card / wrong CVV or expiry
Биллинг-данные не совпали
Billing details did not match
Сайт не ответил вовремя
Site timed out
Тех-ошибка — деньги возвращаются
Technical error — automatically refunded
Биллинг
Billing
- Цена за карту — индивидуальная для твоего ключа (
GET /v1/me). - Списание при создании чека:
цена × принятые карты. - Возврат за
error-карты — автоматически по завершении чека. - Пополнение баланса — через администратора.
- Per-card price is individual for your key (
GET /v1/me). - Charged on check creation:
price × accepted cards. - Refunds for
errorcards — automatic on completion. - Balance top-ups — via the admin.
Лимиты
Limits
- Размер батча — без ограничений.
- Одновременных активных чеков — сколько угодно.
- Технический предохранитель: 600 запросов/мин (поллинг результата — 1200/мин).
- Batch size — unlimited.
- Concurrently running checks — unlimited.
- Safety breaker: 600 requests/min (result polling — 1200/min).
Ошибки
Errors
{ "error": { "code": "insufficient_balance", "message": "need 2500 cents, have 9950" } }| Код | Code | Причина | Reason |
|---|---|---|---|
unauthorized | Нет/неверный ключ | Missing/invalid key | |
forbidden | Ключ отключён | Key disabled | |
empty_batch | Все строки отброшены | All lines dropped | |
insufficient_balance | Не хватает баланса | Not enough balance | |
maintenance | Техработы — попробуй позже (503, Retry-After) | Under maintenance — retry later (503, Retry-After) | |
rate_limited | Превышен технический лимит | Safety rate limit hit | |
not_found | Чужой/несуществующий чек | Unknown/foreign check |
Примеры кода
Code examples
import requests, time
API = "https://api.zewa.mom"
H = {"X-API-Key": "sk_live_..."}
r = requests.post(f"{API}/v1/checks", headers=H, json={
"cards": ["4187596639593908|03/27|314|Mia|Quinn|66 Red Oak Way|Boise|83702|ID"]
}).json()
while True:
s = requests.get(f"{API}/v1/checks/{r['check_id']}", headers=H).json()
if s["status"] in ("done", "stopped"):
break
time.sleep(7)
for c in s["results"].get("valid", []):
print("VALID:", c["line"])body := strings.NewReader(`{"cards":["4187596639593908|03/27|314|..."]}`)
req, _ := http.NewRequest("POST", "https://api.zewa.mom/v1/checks", body)
req.Header.Set("X-API-Key", "sk_live_...")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)const r = await fetch("https://api.zewa.mom/v1/checks", {
method: "POST",
headers: { "X-API-Key": "sk_live_...", "Content-Type": "application/json" },
body: JSON.stringify({ cards })
}).then(r => r.json());$ch = curl_init("https://api.zewa.mom/v1/checks");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-API-Key: sk_live_...", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["cards" => $cards]),
]);
$res = json_decode(curl_exec($ch), true);