Bot-Detect API

ตรวจสอบว่า IP และ User-Agent เป็นของ Googlebot, Bingbot, OpenAI SearchBot, Yahoo, Seznam, Meta (Facebook), Qwant, DuckDuckGo และ crawler หลักอื่น ๆ จริงหรือไม่

รับ API Key ซื้อเครดิต
คุณสามารถทำอะไรได้บ้าง?
ผู้ให้บริการ search bot 7 ราย

Google, Bing, OpenAI, Yandex, DuckDuckGo, Qwant & Seznam

ตรวจสอบ IP ตาม CIDR

ช่วง IPv4/IPv6 ของผู้ให้บริการถูกดึงและแคชทุก 12 ชั่วโมง

ตรวจสอบ Flood vs Bot

ระบุว่าคำขอเป็น crawler ที่ถูกต้องหรือ flood/scraper

ทดลองใช้งาน
99.9 % เวลาทำงาน
369.5ms การตอบกลับ
20 req/s
0.003 เครดิต / คำขอ

Auto Detect – Which crawler is it?

POST https://api.yeb.to/v1/bot/detect/detect
Parameter Type Required Description
api_keystringyesYour API key
ipstringyesIPv4 / IPv6 to verify (defaults to caller IP)
uastringoptUser-Agent header (defaults to caller UA)

Example

curl -X POST https://api.yeb.to/v1/bot/detect/detect \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"66.249.66.1","ua":"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}'

Response Example

{
  "result": { "vendor": "google", "ip_match": true }
}
{
  "error": "Unknown action 'foo'",
  "code": 422
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Detect (auto)

bot/detect/detect 0.0030 credits

Parameters

API Key
query · string · required
IP address
query · string
User-Agent
query · string
Verify rDNS (FCrDNS)
query · boolean

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check Googlebot

POST https://api.yeb.to/v1/bot/detect/google
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/google \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"66.249.66.1","ua":"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}'

Response

{
  "result": { "vendor": "google", "ip_match": true }
}
{
  "result": { "vendor": "google", "ip_match": false }
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Is Googlebot?

bot/detect/google 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check Bingbot

POST https://api.yeb.to/v1/bot/detect/bing
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/bing \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"157.55.39.250","ua":"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"}'

Response

{
  "result": { "vendor": "bing", "ip_match": true }
}
{
  "result": { "vendor": "bing", "ip_match": false }
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Is Bingbot?

bot/detect/bing 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check OpenAI Search Bot

POST https://api.yeb.to/v1/bot/detect/openai
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/openai \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"20.15.240.186","ua":"Mozilla/5.0 (compatible; ChatGPT-User/1.0; +https://openai.com/bot)"}'

Response

{
  "result": { "vendor": "openai", "ip_match": true }
}
{
  "result": { "vendor": "openai", "ip_match": false }
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Is OpenAI bot?

bot/detect/openai 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check YandexBot

POST https://api.yeb.to/v1/bot/detect/yandex
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/yandex \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"5.45.207.1","ua":"Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"}'

Response

{
  "result": { "vendor": "yandex", "ip_match": true }
}
{
  "result": { "vendor": "yandex", "ip_match": false }
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Is YandexBot?

bot/detect/yandex 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check DuckDuckBot

POST https://api.yeb.to/v1/bot/detect/duck
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/duck \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"20.191.45.1","ua":"DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)"}'

Response

{
  "result": { "vendor": "duck", "ip_match": true }
}
{
  "result": { "vendor": "duck", "ip_match": false }
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Is DuckDuckBot?

bot/detect/duck 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check QwantBot

POST https://api.yeb.to/v1/bot/detect/qwant
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/qwant \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"51.158.38.1","ua":"Mozilla/5.0 (compatible; QwantBot/2.1; +https://help.qwant.com/bot)"}'

Response

{
  "result": { "vendor": "qwant", "ip_match": true }
}
{
  "result": { "vendor": "qwant", "ip_match": false }
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Is QwantBot?

bot/detect/qwant 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check SeznamBot

POST https://api.yeb.to/v1/bot/detect/seznam
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/seznam \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"77.75.76.3","ua":"Mozilla/5.0 (compatible; SeznamBot/4.0; +https://napoveda.seznam.cz/cz/search/bot/)"}'

Response

{
  "result": { "vendor": "seznam", "ip_match": true }
}
{
  "result": { "vendor": "seznam", "ip_match": false }
}

รหัสตอบกลับ

รหัสคำอธิบาย
200 Successคำขอดำเนินการสำเร็จ
400 Bad Requestการตรวจสอบข้อมูลนำเข้าล้มเหลว
401 UnauthorizedAPI Key หายไปหรือไม่ถูกต้อง
403 ForbiddenKey ไม่ทำงานหรือไม่ได้รับอนุญาต
429 Rate Limitคำขอมากเกินไป
500 Server Errorข้อผิดพลาดที่ไม่คาดคิด

Is SeznamBot?

bot/detect/seznam 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Bot-Detect API — Practical Guide

A hands-on guide to using Bot-Detect API in production: what each endpoint does, when to use it, the parameters that truly matter, and how to interpret responses to make the right decision.

#What Bot-Detect solves

This API verifies whether an IP truly belongs to an official crawler (e.g., Googlebot, Bingbot) instead of someone claiming to be a bot via User-Agent. It’s designed for abuse prevention, SEO safety (don’t block real bots), and traffic classification (bill bots differently, slow them down, or allow them).

#Endpoints and when to use them

#POST /v1/bot/detect — Auto-detect

  • Best for: General checks when you don’t know the vendor in advance.
  • How it works: If a ua is provided, we try to infer a vendor from it; otherwise we test your IP against all supported vendors’ ranges.
  • Typical use: Single integration point for all traffic (edge/middleware).

#POST /v1/bot/detect/{vendor} — Vendor-specific

  • Best for: When routing already knows a suspected vendor (e.g., URLs dedicated to Google).
  • Vendors: google, bing, duck, qwant, meta, yandex, seznam, openai.
  • Note: UA is informative; the final decision is IP-based (with optional reverse-DNS/ASN checks).

#Quick start

curl -X POST "https://api.yeb.to/v1/bot/detect" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{ "ip": "66.249.66.1", "ua": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" }'
# Vendor-specific (Google)
curl -X POST "https://api.yeb.to/v1/bot/detect/google" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{ "ip": "66.249.66.1" }'
// JS Fetch example
fetch('https://api.yeb.to/v1/bot/detect/bing', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <YOUR_API_KEY>',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ ip: '40.77.167.129' })
})
.then(r => r.json())
.then(console.log)
.catch(console.error);

#Parameters that actually matter

ParamRequiredWhat to pass in practiceWhy it matters
ip Yes Client IPv4/IPv6 you’re checking (edge-extracted, not X-Forwarded-For if you’re not sure). Final decision is IP-based. UA can be spoofed; IP ranges aren’t.
ua No Send it if you have it. We'll infer vendor and annotate ua_match, but IP stays decisive. Helps explain “why” (was the UA consistent with the result?).
verify_rdns No true if you want reverse-DNS → forward match (Google/Bing). Extra safety when you need to be 100% sure even if IP is inside a large range.
strict_rdns No true to fail if rDNS check doesn’t pass (only effective when verify_rdns is true). Force “OK = false” unless DNS proves it.
verify_asn No true to cross-check by ASN (if enabled server-side). Useful for vendors without official JSON ranges (e.g., Meta).
strict_asn No true to fail if ASN check doesn’t confirm. Pairs with verify_asn for stricter policies.
asn No Override vendor ASN when you know it (e.g., 32934 for Meta). Handy for custom policies or fast vendor updates.

#Reading and acting on responses

You mostly care about result.ok, result.vendor, and result.reason.

{
  "result": {
    "vendor": "google",
    "ok": true,
    "reason": "ip_match",                // or "ip_and_ua_match", etc.
    "ua_present": true,                  // UA was sent explicitly as param
    "ua_source": "param",                // "param" | "header" | null
    "ua_match": true,                    // UA pattern fit the vendor
    "ip_match": true,                    // IP fell inside vendor ranges
    "dns_verified": false,               // set true if verify_rdns passed
    "rdns_checked": false,
    "asn_verified": false,
    "asn_checked": false,
    "cidr_empty": false,                 // true if no ranges were available
    "ip_kind": "search_bot",             // Google only: search_bot | special_crawler | user_triggered_google | user_triggered_user | cdn_proxy | unknown
    "ip_kind_source": "json",            // "json" | "dns_ptr" | null
    "ptr": "crawl-66-249-66-1.googlebot.com"
  }
}

#Typical reason values

  • ip_and_ua_match — Best case: UA matched the vendor pattern and IP belongs to the vendor.
  • ip_match — Good: IP belongs to vendor ranges; UA was missing or didn’t match (still OK to treat as vendor).
  • ip_match_but_ua_not_matched — Likely a legitimate bot with a non-standard UA; don’t block.
  • ua_not_matched — UA said “I’m X”, but we couldn’t confirm it; check ip_match.
  • ip_not_in_vendor_ranges — Treat as non-vendor; consider bot throttling or block rules.

#Recommended actions

  • ok = true → Allow, skip WAF challenges, crawl-budget friendly rate-limit.
  • ok = false and UA claims vendor → 403 or serve simplified page; log for audit.
  • Need absolute certainty → Call with verify_rdns=true (+ strict_rdns=true if you want hard fail).

#Troubleshooting & field notes

  1. “UA says Googlebot but ok=false” → You saw a spoofed UA. Key is ip_match. Consider returning 403 or a lightweight page.
  2. Rapid vendor changes → Prefer vendor JSON ranges (handled automatically). If you need hard proof, enable verify_rdns.
  3. IPv6 traffic → Fully supported. If your edge strips IPv6, fix that first.
  4. False negatives for Meta → Use verify_asn=true (and asn=32934 if relevant) for stronger confirmation.
  5. Rate-limits → Respect 429 with exponential backoff. Keep request IDs in your logs.

#API Changelog

2025-10-20
Added Google IP classification (ip_kind, ip_kind_source, ptr) and improved vendor JSON ingestion (Google “special crawlers” and user-triggered fetchers).
2025-10-15
Introduced verify_rdns/strict_rdns and verify_asn/strict_asn flags for stricter verification flows.
2025-10-05
Vendor-specific endpoints stabilized (/google, /bing, /meta, /yandex, etc.). Response schema unified across vendors.

คำถามที่พบบ่อย

ฟีด JSON ของผู้ให้บริการถูกแคช 12 ชั่วโมง; Yandex & Seznam ใช้ CIDR อย่างเป็นทางการแบบคงที่

หลักฐานที่แท้จริงคือที่อยู่ IP: crawler จะถูกเชื่อถือก็ต่อเมื่อ IP ของมันอยู่ในช่วง CIDR อย่างเป็นทางการที่เผยแพร่โดยผู้ให้บริการ User-Agent อาจช่วยได้ แต่ปลอมแปลงง่าย; scraper มักคัดลอกสตริง UA ขณะมาจากเครือข่ายสุ่ม หาก IP ไม่อยู่ในช่วงของผู้ให้บริการ เราจะแฟล็กคำขอโดยไม่คำนึงว่า UA บอกอะไร

ใช่ ทั้งเครือข่าย IPv4 และ IPv6 ได้รับการสนับสนุนอย่างเต็มที่

ใช่ ทุกคำขอ แม้แต่ที่เกิดข้อผิดพลาด จะใช้เครดิต เครดิตของคุณผูกกับจำนวนคำขอ ไม่ว่าจะสำเร็จหรือล้มเหลว หากข้อผิดพลาดเกิดจากปัญหาของแพลตฟอร์มฝั่งเราอย่างชัดเจน เราจะคืนเครดิตที่ได้รับผลกระทบ (ไม่มีการคืนเงินสด)

ติดต่อเราที่ [email protected] เรารับฟังความคิดเห็นอย่างจริงจัง—หากรายงานข้อบกพร่องหรือคำขอฟีเจอร์ของคุณมีความหมาย เราสามารถแก้ไขหรือปรับปรุง API ได้อย่างรวดเร็วและมอบเครดิตฟรี 50 เครดิตเป็นการขอบคุณ

ขึ้นอยู่กับ API และบางครั้งรวมถึง endpoint ด้วย บาง endpoint ใช้ข้อมูลจากแหล่งภายนอกซึ่งอาจมีขีดจำกัดที่เข้มงวดกว่า เรายังบังคับใช้ขีดจำกัดเพื่อป้องกันการใช้ในทางที่ผิดและรักษาเสถียรภาพของแพลตฟอร์ม ตรวจสอบเอกสารสำหรับขีดจำกัดเฉพาะของแต่ละ endpoint

เราใช้ระบบเครดิต เครดิตเป็นหน่วยจ่ายล่วงหน้าที่ไม่สามารถคืนเงินได้ ใช้สำหรับการเรียก API และเครื่องมือ เครดิตถูกใช้แบบ FIFO (เก่าสุดก่อน) และมีอายุ 12 เดือนนับจากวันที่ซื้อ แดชบอร์ดแสดงวันที่ซื้อแต่ละครั้งและวันหมดอายุ

ใช่ เครดิตที่ซื้อทั้งหมด (รวมถึงยอดคงเหลือเศษส่วน) มีอายุ 12 เดือนนับจากการซื้อ เครดิตที่ไม่ได้ใช้จะหมดอายุโดยอัตโนมัติและถูกลบอย่างถาวรเมื่อสิ้นสุดระยะเวลาที่มีผล เครดิตที่หมดอายุไม่สามารถกู้คืนหรือแปลงเป็นเงินสดหรือมูลค่าอื่นได้ กฎเปลี่ยนผ่าน: เครดิตที่ซื้อก่อน 22 ก.ย. 2025 ถือว่าซื้อเมื่อ 22 ก.ย. 2025 และหมดอายุ 22 ก.ย. 2026 (เว้นแต่ระบุวันหมดอายุที่เร็วกว่าตอนซื้อ)

ใช่—ภายในระยะเวลาที่มีผล เครดิตที่ไม่ได้ใช้ยังคงใช้ได้และยกยอดจากเดือนต่อเดือนจนกว่าจะหมดอายุ 12 เดือนหลังการซื้อ

เครดิตไม่สามารถคืนเงินได้ ซื้อเฉพาะที่คุณต้องการ—คุณสามารถเติมได้ภายหลังเสมอ หากข้อผิดพลาดของแพลตฟอร์มทำให้การเรียกเก็บเงินล้มเหลว เราอาจคืนเครดิตที่ได้รับผลกระทบหลังจากการตรวจสอบ ไม่มีการคืนเงินสด

ราคากำหนดเป็นเครดิต ไม่ใช่ดอลลาร์ แต่ละ endpoint มีราคาของตัวเอง—ดูป้าย "เครดิต / คำขอ" ด้านบน คุณจะรู้ค่าใช้จ่ายที่แน่นอนเสมอ
← กลับไปที่ API