Data API (जिसे यहाँ पहले Server API के नाम से प्रलेखित किया जाता था) आपके बैकएंड को वह पहचान डेटा पढ़ने देता है जो TRACIO आपके वर्कस्पेस के लिए पहले ही एकत्र कर चुका है: किसी विज़िटर का इतिहास, अलग-अलग सेशन, और छोटी विंडो वाले वेलोसिटी काउंटर।
यह Webhooks की जगह नहीं लेता, बल्कि उनका पूरक है:
| Webhooks | Data API | |
|---|---|---|
| दिशा | TRACIO आपके एंडपॉइंट पर भेजता है | आपका बैकएंड मांग पर खींचता है |
| समय | जैसे ही हर पहचान होती है | कभी भी, आपकी अवधारण विंडो के भीतर |
| किसके लिए सर्वोत्तम | किसी इवेंट पर प्रतिक्रिया देने के लिए | निर्णय के दौरान डेटा देखने, बैकफ़िल और जाँच-पड़ताल के लिए |
दोनों सतहें Pro प्लान और उससे ऊपर उपलब्ध हैं।
https://api.tracio.ai/v1यह ब्राउज़र एंडपॉइंट (edge.tracio.ai) और डैशबोर्ड (app.tracio.ai) से अलग होस्ट है।
तीनों अलग-अलग हैं: ब्राउज़र आपकी पब्लिक कुंजी के साथ edge से बात करता है, और आपका
बैकएंड आपकी सीक्रेट कुंजी के साथ Data API से।
हर अनुरोध आपकी सीक्रेट कुंजी को bearer token के रूप में साथ ले जाता है:
curl -H "Authorization: Bearer tracio_sk_XXXX...XXXX" \ "https://api.tracio.ai/v1/visitors/X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y"Data API केवल सर्वर-टू-सर्वर है। CORS हेडर जान-बूझकर नहीं लौटाए जाते, इसलिए कोई ब्राउज़र इसे कॉल नहीं कर सकता — यही आपकी सीक्रेट कुंजी को क्लाइंट-साइड कोड से बाहर रखता है। सीक्रेट कुंजी को ब्राउज़र तक कभी न भेजें।
इसे डैशबोर्ड में API Keys के अंतर्गत बनाएं, secret प्रकार चुनकर।
tracio_sk_ और उसके बाद 43 वर्णों जैसी दिखती है, कुल 53। डैशबोर्ड इसे
इसके पहले कुछ वर्णों से सूचीबद्ध करता है, ताकि आप कुंजियों में फ़र्क कर सकें।रोटेशन एक नई कुंजी जारी करता है और पुरानी को 7 दिन तक काम करने देता है, ताकि आप उसे बिना डाउनटाइम रोल आउट कर सकें। नई कुंजी डिप्लॉय करें, पुष्टि करें कि ट्रैफ़िक उस पर चला गया है, और पुरानी को समाप्त होने दें। पब्लिक कुंजियाँ रोटेट नहीं की जा सकतीं — वे गुप्त नहीं हैं और डिज़ाइन के अनुसार आपके पेज सोर्स में दिखती हैं।
हर रूट GET है। Data API में कोई राइट ऑपरेशन नहीं है: यह डेटा पढ़ता है, और आपका
कॉन्फ़िगरेशन डैशबोर्ड में रहता है।
| मेथड | पथ | क्या लौटाता है |
|---|---|---|
GET | /v1/visitors/{visitorId} | एक विज़िटर का समेकित इतिहास, साथ में उसका नवीनतम सेशन |
GET | /v1/visitors/{visitorId}/sessions | उस विज़िटर के सेशनों की पेजिनेटेड सूची |
GET | /v1/visitors/{visitorId}/sessions/latest | केवल सबसे हालिया सेशन |
GET | /v1/visitors/{visitorId}/velocity | एक छोटी विंडो में गतिविधि काउंटर |
GET | /v1/sessions/{requestId} | अनुरोध पहचानकर्ता से एक सेशन |
GET | /.well-known/webhook-keys | webhook प्लेटफ़ॉर्म सिग्नेचर के लिए सार्वजनिक कुंजियाँ (कोई प्रमाणीकरण नहीं) |
अंत में स्लैश स्वीकार किया जाता है और अनदेखा कर दिया जाता है। अज्ञात पथ या गलत मेथड वही JSON त्रुटि एनवेलप लौटाता है जो बाकी सब कुछ लौटाता है, कभी HTML या सादा-टेक्स्ट पेज नहीं।
हर रीड एक समय विंडो से बंधा होता है, जिसे दो वैकल्पिक क्वेरी पैरामीटर नियंत्रित करते हैं:
| पैरामीटर | स्वीकार करता है |
|---|---|
from | YYYY-MM-DD या पूरा RFC 3339 टाइमस्टैम्प |
to | YYYY-MM-DD या पूरा RFC 3339 टाइमस्टैम्प |
to के रूप में केवल तारीख देने पर वह पूरा दिन शामिल होता है।400 invalid_request और संदेश
time must be YYYY-MM-DD or RFC3339 के साथ अस्वीकार कर दिया जाता है।meta में वापस
बताई जाती है, इसलिए यह मान लेने के बजाय कि आपका अनुरोध अक्षरशः माना गया, meta.from
और meta.to जांचें।curl -H "Authorization: Bearer tracio_sk_XXXX...XXXX" \ "https://api.tracio.ai/v1/visitors/X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y"उत्तर समेकित इतिहास लाता है और नवीनतम सेशन को भी उसी में समाहित कर देता है, इसलिए सामान्य स्थिति में दो के बजाय एक ही अनुरोध चाहिए:
{ "visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y", "firstSeenAt": "2026-05-02T10:11:12Z", "lastSeenAt": "2026-07-25T08:00:00Z", "visits": 42, "incognitoVisits": 3, "uniqueIps": 5, "uniqueCountries": 2, "browsers": ["Chrome"], "os": ["macOS"], "devices": ["desktop"], "risk": { "maxRiskScore": 63, "avgBotScore": 12.5, "botSessions": 7, "lastDecision": "real" }, "network": { "vpnSeen": false, "proxySeen": false, "torSeen": false, "datacenterSeen": true, "proxyDetectedSeen": true, "lastIsp": "Deutsche Telekom", "lastRealIp": "203.0.113.7" }, "lastSession": { "requestId": "9c1f6a2e-3b7d-4c58-a1e2-6f0d8b4a7c31", "visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y", "accountId": "user_8842", "timestamp": "2026-07-25T08:00:00Z", "tag": "checkout", "url": "https://shop.example.com/checkout", "ip": "203.0.113.42", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", "browser": { "name": "Chrome", "version": "126.0" }, "os": { "name": "macOS", "version": "14.5" }, "device": "desktop", "gpu": "Apple M2", "geo": { "country": "DE", "city": "Berlin", "timezone": "Europe/Berlin", "isp": "Deutsche Telekom" }, "network": { "vpn": false, "proxy": false, "tor": false, "datacenter": false, "proxyDetected": true, "realIp": { "address": "203.0.113.7", "country": "NL", "isp": "KPN" }, "asn": 3320 }, "screen": { "width": 2560, "height": 1600, "colorDepth": 30, "pixelRatio": 2 }, "locale": { "languages": ["en-US", "de"], "timezone": "Europe/Berlin" }, "clientHints": { "architecture": "arm", "bitness": "64", "platformVersion": "14.5.0" }, "extensions": [ { "slug": "ublock-origin", "name": "uBlock Origin", "category": "adblock", "risky": false, "storeUrl": "https://chromewebstore.google.com/detail/cjpalhdlnbpafiamejdnhcphjbkeiagm" } ], "bot": { "result": "human", "score": 4.5, "antidetectScore": 2.1 }, "identification": { "confidence": 0.97, "incognito": false, "matchType": "exact", "matchConfidence": 0.99 }, "deviceInfo": { "deviceId": "d_4f9c2e", "crossBrowser": true, "confidence": 0.88, "linkedBrowsers": 2 }, "decision": { "action": "real", "riskScore": 12 } }, "meta": { "plan": "business", "retentionDays": 90, "from": "2026-04-26T00:00:00Z", "to": "2026-07-25T12:00:00Z" }}| फ़ील्ड | अर्थ |
|---|---|
visits, incognitoVisits | विंडो में कुल विज़िट, और उनमें से कितनी निजी विंडो में थीं |
uniqueIps, uniqueCountries | विंडो में दिखे अलग-अलग पते और देश |
browsers, os, devices | वे अलग-अलग परिवेश जिनमें यह विज़िटर दिखाई दिया है |
risk.maxRiskScore | विंडो में दर्ज सबसे ऊँचा जोखिम स्कोर, 0..100 |
risk.lastDecision | सबसे हालिया विज़िट के लिए दर्ज निर्णय |
risk.avgBotScore, risk.botSessions | बॉट-स्कोर का औसत और बॉट सेशनों की संख्या — Business और उससे ऊपर |
network.*Seen | क्या इस विज़िटर के लिए कभी VPN, प्रॉक्सी, Tor एग्ज़िट नोड या डेटासेंटर पता देखा गया |
network.proxyDetectedSeen | क्या विंडो में कम से कम एक विज़िट ब्राउज़र के आगे मौजूद प्रॉक्सी या VPN से होकर बाहर निकली — "डिवाइस के तथ्य" खंड में network.proxyDetected देखें |
network.lastIsp | सबसे हालिया ISP — Business और उससे ऊपर |
network.lastRealIp | प्रॉक्सी या VPN के पीछे देखा गया सबसे हालिया पता — Business और उससे ऊपर; ऐसा कोई पता न दिखे तो अनुपस्थित |
lastSession | सबसे हालिया विज़िट के लिए पूरा सेशन ऑब्जेक्ट |
meta | प्लान, दिनों में उसकी अवधारण, और वास्तव में लागू की गई विंडो |
अवधारण विंडो के भीतर बिना किसी डेटा वाला विज़िटर 404 not_found और संदेश
visitor not found in the retention window लौटाता है — यह आपके इंटीग्रेशन की त्रुटि
नहीं है, इसका अर्थ है कि विज़िटर नया है या समय के साथ बाहर हो चुका है।
सेशन दो वर्डिक्ट लाता है, और वे अलग-अलग प्रश्नों का उत्तर देते हैं — क्या क्लाइंट स्वचालित था, और जोखिम इंजन ने कुल मिलाकर क्या निष्कर्ष निकाला:
| फ़ील्ड | मान |
|---|---|
bot.result | human, bot, uncertain |
bot.type | तब मौजूद जब bot.result का मान bot हो: या तो कोई विशिष्ट टूल (playwright, puppeteer, selenium, jsdom, claude_computer_use…) या, टूल का नाम न मिलने पर, एक परिवार — automation, headless, antidetect, extension, privacy_browser, other |
decision.action | real, fake, suspicious |
bot.score और decision.riskScore दोनों 0..100 पर चलते हैं। Business और उससे ऊपर
guidance इन्हें सीढ़ी allow → challenge → review → deny पर प्रति-परिदृश्य सलाह में
बदल देता है — हर पायदान का अर्थ जानने के लिए देखें
Guidance।
curl -H "Authorization: Bearer tracio_sk_XXXX...XXXX" \ "https://api.tracio.ai/v1/visitors/X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y/sessions?limit=100&minRiskScore=50"| पैरामीटर | डिफ़ॉल्ट | टिप्पणियाँ |
|---|---|---|
limit | 50 | 500 पर सीमित; बड़ा मान अस्वीकार नहीं, बल्कि क्लैंप किया जाता है |
from, to | प्लान की अवधारण | ऊपर बताई गई साझा समय विंडो |
cursor | — | पिछले पेज से मिला अपारदर्शी पेजिनेशन कर्सर |
botResult | — | केवल इस बॉट वर्डिक्ट वाले सेशन रखें |
minRiskScore | — | केवल इस जोखिम स्कोर पर या उससे ऊपर वाले सेशन रखें, 0..100 |
सेशन नवीनतम पहले के क्रम में लौटते हैं:
{ "items": [ { "requestId": "9c1f6a2e-3b7d-4c58-a1e2-6f0d8b4a7c31", "visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y", "timestamp": "2026-07-25T08:00:00Z" } ], "nextCursor": "MTcyMTg5NDQwMDAwMDphYmMxMjM", "hasMore": true, "meta": { "plan": "business", "retentionDays": 90, "from": "2026-04-26T00:00:00Z", "to": "2026-07-25T12:00:00Z" }}पेजिंग कर्सर-आधारित है। कोई page या offset पैरामीटर नहीं है: आपको जो nextCursor
मिला उसे cursor के रूप में वापस भेजें, और जब तक hasMore सही है तब तक चलते रहें।
async function allSessions(visitorId: string, secretKey: string) { const sessions = [] let cursor: string | undefined
do { const url = new URL(`https://api.tracio.ai/v1/visitors/${visitorId}/sessions`) url.searchParams.set("limit", "500") if (cursor) url.searchParams.set("cursor", cursor)
const res = await fetch(url, { headers: { Authorization: `Bearer ${secretKey}` } }) if (!res.ok) throw new Error(`Data API: ${res.status}`)
const page = await res.json() sessions.push(...page.items) cursor = page.nextCursor } while (cursor)
return sessions}कर्सर को अपारदर्शी मानें — उसकी सामग्री एक कार्यान्वयन विवरण है और बदल सकती है। संपादित
किया गया कर्सर 400 invalid_request और संदेश malformed cursor के साथ अस्वीकार कर दिया
जाता है।
User-Agent से लिए गए ब्राउज़र और OS के साथ-साथ, एक सेशन वह भी रखता है जो विज़िटर का ब्राउज़र मशीन के बारे में बताता है, हमारी ओर से साफ़ किया हुआ। विज़िट ऐसा डेटा न लाए तो हर फ़ील्ड अनुपस्थित रहता है, इसलिए हर एक को वैकल्पिक मानें।
| फ़ील्ड | अर्थ |
|---|---|
gpu | ब्राउज़र द्वारा बताया गया वीडियो अडैप्टर का मॉडल (WebGL), पढ़ने योग्य नाम में सामान्यीकृत — Intel Iris Xe Graphics, Apple M1 Pro, Qualcomm Adreno 830; Software renderer का अर्थ है कोई असली GPU नहीं (वर्चुअल मशीन या headless एनवायरनमेंट); Safari Apple GPU बताता है |
network.proxyDetected | विज़िट का HTTP ट्रैफ़िक और उसके कच्चे नेटवर्क पथ अलग-अलग नेटवर्कों से बाहर निकलते हैं — यानी ब्राउज़र के आगे कोई प्रॉक्सी या VPN है; एक ही प्रदाता के दो पते (कैरियर NAT, उसी VPN का दूसरा निकास) नहीं गिने जाते |
network.realIp.address, .country, .isp | कच्चे नेटवर्क पथ पर देखा गया सार्वजनिक पता, यानी प्रॉक्सी या VPN के पीछे का पता, उसके देश और ISP के साथ — Business और उससे ऊपर; ऐसा कोई पता न दिखे तो अनुपस्थित (country और isp तब अनुपस्थित रहते हैं जब उन्हें हल नहीं किया जा सका) |
deviceInfo.deviceId, .crossBrowser, .confidence, .linkedBrowsers | तब मौजूद जब डिवाइस की पहचान तय हो सकी: उस पर मौजूद ब्राउज़रों के आर-पार भौतिक डिवाइस की एक स्थिर आईडी, क्या यह विज़िट पहले से अलग ब्राउज़र से आई, उस मिलान का विश्वास, और कितने अलग-अलग विज़िटर (ब्राउज़र) यह डिवाइस साझा करते हैं — एक से अधिक का अर्थ है कई ब्राउज़र पहचानों के अंतर्गत एक ही मशीन — Business और उससे ऊपर |
osEnvironment | Linux मशीन पर मापा गया डेस्कटॉप एनवायरनमेंट (Mint 22+, Ubuntu, GNOME, KDE) — Business और उससे ऊपर; निर्धारित न होने पर अनुपस्थित |
spoofing | विज़िट ने क्या दावा किया, बनाम स्वतंत्र जाँचों ने क्या मापा (claimed, real, os, gpu, screen, network, browser में से spoofedAxes; उत्पादों के नामों के साथ anonymousBrowser) — Business और उससे ऊपर; केवल तभी मौजूद जब स्पूफ़िंग पकड़ी गई हो |
screen.width, .height, .colorDepth, .pixelRatio | ब्राउज़र द्वारा बताए गए स्क्रीन रिज़ॉल्यूशन, कलर डेप्थ और device pixel ratio — Business और उससे ऊपर |
locale.languages, locale.timezone | ब्राउज़र की अपनी पसंदीदा भाषाएँ और उसका टाइमज़ोन — geo.timezone के विपरीत, जो IP पते से निकाला जाता है; दोनों में बेमेल नकली लोकेशन का आम संकेत है — Business और उससे ऊपर |
clientHints.architecture, .bitness, .model, .deviceName, .platformVersion | User-Agent Client Hints: CPU की आर्किटेक्चर और बिटनेस, डिवाइस मॉडल कोड (Android, जैसे SM-A556B) उसके Google Play डिवाइस सूची वाले मार्केटिंग नाम (deviceName, जैसे Samsung Galaxy A55 5G) के साथ, और प्लेटफ़ॉर्म का सटीक संस्करण; केवल Chromium आधारित ब्राउज़र — Business और उससे ऊपर |
environment.virtualMachine, environment.hypervisor | केवल तभी मौजूद जब वीडियो अडैप्टर ने ख़ुद को वर्चुअल बताया हो; hypervisor एक बंद शब्दकोश है (vmware, virtualbox, parallels, qemu, hyperv, bochs, intel-gvt, vgpu)। ब्लॉक का न होना यह बताता है कि ऐसा कोई प्रमाण नहीं है — Business और उससे ऊपर |
extensions उन ब्राउज़र एक्सटेंशनों को सूचीबद्ध करता है जो विज़िट के दौरान पकड़े गए — Business और उससे ऊपर। हर प्रविष्टि एक ऑब्जेक्ट है:
| फ़ील्ड | अर्थ |
|---|---|
slug | एक्सटेंशन का स्थिर मशीन पहचानकर्ता, वही मान जो webhook पहुँचाता है |
name | मनुष्य के पढ़ने योग्य नाम |
category | मोटा वर्ग — adblock, privacy, automation, wallet, vpn, devtools, other, इत्यादि |
risky | ऑटोमेशन, स्पूफ़िंग या क्रेडेंशियल चोरी से जुड़े एक्सटेंशनों के लिए true |
storeUrl | एक्सटेंशन की स्टोर लिस्टिंग का लिंक, जब ज्ञात हो |
कोई निष्कर्ष तभी बताया जाता है जब वह हमारी भरोसे की जाँचों में खरा उतरे — जो परिवेश हर जाँच पर "इंस्टॉल है" उत्तर देता है, या जो बैच बारह नामों से लंबा होता है, उसे अविश्वसनीय मानकर हटा दिया जाता है। इसलिए खाली या अनुपस्थित सूची का अर्थ है "ऐसा कुछ नहीं जिसकी हम पुष्टि कर सकें", न कि "कोई एक्सटेंशन इंस्टॉल नहीं है"। इसे प्रमाण की तरह पढ़ें, इन्वेंटरी की तरह नहीं।
सबसे हालिया वाला:
curl -H "Authorization: Bearer tracio_sk_XXXX...XXXX" \ "https://api.tracio.ai/v1/visitors/X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y/sessions/latest"यह एक सादा सेशन ऑब्जेक्ट लौटाता है — न कोई ऐरे, और न ही किसी एनवेलप में लिपटा हुआ। विंडो
में बिना किसी सेशन वाला विज़िटर 404 not_found और
no sessions for this visitor in the retention window लौटाता है।
या requestId से, वह पहचानकर्ता जो webhook पेलोड में भी आता है:
curl -H "Authorization: Bearer tracio_sk_XXXX...XXXX" \ "https://api.tracio.ai/v1/sessions/9c1f6a2e-3b7d-4c58-a1e2-6f0d8b4a7c31?visitorId=X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y"यहाँ visitorId वैकल्पिक है, पर जब वह आपको पता हो तब उसे भेजना लुकअप को उल्लेखनीय रूप से
तेज़ बना देता है।
वेलोसिटी इस प्रश्न का उत्तर देती है कि "यह विज़िटर हाल में कितना कुछ कर रहा है" — यही क्रेडेंशियल स्टफ़िंग, कार्ड टेस्टिंग और थोक साइनअप का आकार है।
curl -H "Authorization: Bearer tracio_sk_XXXX...XXXX" \ "https://api.tracio.ai/v1/visitors/X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y/velocity?window=1h"window 1h, 24h या 7d स्वीकार करता है और डिफ़ॉल्ट रूप से 24h है। कोई भी अन्य मान
400 invalid_request और window must be one of: 1h, 24h, 7d के साथ अस्वीकार कर दिया
जाता है।
{ "window": "1h", "events": 37, "uniqueIps": 9, "uniqueCountries": 3, "uniqueAccounts": 12, "botEvents": 4, "meta": { "plan": "business", "retentionDays": 90, "from": "2026-07-25T11:00:00Z", "to": "2026-07-25T12:00:00Z" }}uniqueAccounts उन अलग-अलग linkedId मानों की गिनती करता है जो आपने इस डिवाइस के लिए
भेजे — देखें अकाउंट लिंकिंग। botEvents Business और उससे ऊपर
है।
अनुपस्थित फ़ील्ड का अर्थ है "कोई डेटा नहीं", कभी शून्य नहीं। बिना मान वाले फ़ील्ड
0, "" या null के रूप में भेजे जाने के बजाय पूरी तरह हटा दिए जाते हैं: बिलकुल नए
विज़िटर के पास कोई matchConfidence नहीं होता, साफ़-सुथरी विज़िट के पास कोई
antidetectScore या suspectScore नहीं होता। एकमात्र जान-बूझकर रखा गया अपवाद है
bot.score, जो शून्य होने पर भी हमेशा मौजूद रहता है। फ़ील्ड सावधानी से पढ़ें।
पेलोड आपके प्लान पर निर्भर करता है। API पहुँच वाला हर प्लान बेस सेशन पाता है — पहचानकर्ता, टाइमस्टैम्प, URL, IP, user agent, ब्राउज़र, OS, डिवाइस, geo, network, bot, identification और decision। Pro इसमें identification.matchType, identification.matchConfidence, bot.type, bot.antidetectScore, gpu और network.proxyDetected जोड़ता है। Business और Enterprise extensions, geo.isp, network.asn, network.realIp, decision.suspectScore, identification.driftScore, reasons, behavior, guidance, deviceInfo, spoofing, osEnvironment, screen, locale, clientHints और environment जोड़ते हैं। व्यक्ति-स्तर के फ़ील्ड (personId, reputation, linkedAccountsCount, linkedVisitorsCount) Business और Enterprise के लिए आरक्षित हैं और व्यक्ति परत सक्षम होते ही दिखाई देंगे — आज यह ऑब्ज़र्वेशन मोड में चलती है और ये फ़ील्ड नहीं भेजे जाते। Pro प्लान पर किसी Business फ़ील्ड की अनुपस्थिति कोई त्रुटि नहीं है।
सिग्नल-स्तर की आंतरिक बातें कभी नहीं लौटाई जातीं, किसी भी प्लान पर: अलग-अलग सिग्नल के नाम, उनके वज़न, किसी वर्डिक्ट के पीछे की थ्रेशोल्ड, कच्चे सिग्नल मान और स्कोर का विश्लेषण हमारी ओर ही रहते हैं। जिस स्कोर की उसके इनपुट में रिवर्स इंजीनियरिंग हो सके, वह बचाव के रूप में उपयोगी नहीं रह जाता।
हर विफलता एक ही एनवेलप का उपयोग करती है:
{ "error": { "code": "unauthorized", "message": "missing Authorization: Bearer <secret key>", "requestId": "8f14e45fceea167a5a36dedd" }}यह requestId विज़िट पहचानकर्ता नहीं है। दो अलग-अलग मान एक ही नाम साझा करते हैं:
सेशन पेलोड के भीतर requestId विज़िट का UUID है, वही जो webhook पहुँचाता है; त्रुटि
एनवेलप के भीतर यह प्रति HTTP कॉल बनाया गया 24-वर्ण का ट्रेस पहचानकर्ता है। यह ट्रेस
पहचानकर्ता हर उत्तर पर X-Request-Id हेडर में भी वापस आता है, चाहे उत्तर सफल हो या न
हो। सपोर्ट से संपर्क करते समय इसे साथ दें — इसी से हम आपकी ठीक वही कॉल ढूँढ़ते हैं।
| HTTP | code | अर्थ |
|---|---|---|
| 400 | invalid_request | कोई पैरामीटर अनुपस्थित है या गलत रूप में है |
| 401 | unauthorized | कुंजी अनुपस्थित, अमान्य, निरस्त या समाप्त है |
| 402 | upgrade_required | आपके प्लान में API पहुँच शामिल नहीं है |
| 404 | not_found | अवधारण विंडो के भीतर कुछ भी मेल नहीं खाया |
| 405 | method_not_allowed | रूट मौजूद है, पर उस मेथड के लिए नहीं |
| 429 | rate_limited | प्रति सेकंड अनुरोध, या दैनिक कोटा, पार हो गया |
| 500 | internal | हमारी ओर कुछ विफल हुआ |
| 503 | unavailable | कोई आधार-स्टोर अस्थायी रूप से पहुँच से बाहर है |
जांचें एक निश्चित क्रम में चलती हैं — पहले कुंजी, फिर प्लान, फिर सीमाएँ — इसलिए गलत कुंजी वाला अनुरोध हमेशा पहले कुंजी की ही रिपोर्ट करता है, कभी कोटा की समस्या नहीं।
दो 401 स्थितियाँ जान-बूझकर अलग-अलग पढ़ी जाती हैं: missing Authorization: Bearer <secret key>
का अर्थ है कि हेडर आया ही नहीं, जबकि invalid or revoked API key का अर्थ है कि वह आया और
मेल नहीं खाया। 402 के साथ आता है Data API requires the Pro plan or higher।
हर प्रमाणित उत्तर आपकी वर्तमान स्थिति साथ लाता है:
| हेडर | अर्थ |
|---|---|
X-RateLimit-Limit | आपका दैनिक कोटा |
X-RateLimit-Remaining | आज बची हुई कॉलें |
X-RateLimit-Reset | रीसेट का Unix समय — आधी रात UTC |
Retry-After | कितने सेकंड प्रतीक्षा करें, केवल 429 के साथ भेजा |
| प्लान | प्रति सेकंड अनुरोध | प्रति दिन अनुरोध | इतिहास की गहराई |
|---|---|---|---|
| Free | API पहुँच नहीं | — | 7 दिन |
| Pro | 10 | 10,000 | 30 दिन |
| Business | 50 | 100,000 | 90 दिन |
| Enterprise | 200 | बिना मीटरिंग | 365 दिन |