सब्सक्रिप्शन
एक स्टोर
- आप भेजते हैं
X-API-Key: sk_live_…, यानी साइन-अप पर दिखाई गई कुंजी, या ग्राहक पोर्टल में नई बनाई गई।- आप भुगतान करते हैं
- आपके प्लान का मासिक कोटा। कॉल के समय कुछ भी नहीं लिया जाता।
डॉक्सAddress Validator API इंटीग्रेट करें
API कुंजी से प्रोडक्शन तक: प्रमाणीकरण, अनुबंध, रिटर्न कोड, कैश और कोटा। फिर चार व्यावहारिक उदाहरण: सीधी कॉल, CSV इम्पोर्ट, Shopify और WooCommerce।
शुरुआत
sk_live_…) सिर्फ़ एक बार दिखती है। उसके बाद उसे ग्राहक पोर्टल से नई बनाया जा सकता है।POST /validate को कॉल करें, कुंजी हेडर X-API-Key में रखकर।cache_key।curl -sS https://kder-ai.com/validate \
-H "X-API-Key: sk_live_YOUR_KEY" \
-H "content-type: application/json" \
-d '{"address": {"street": "1 Rue de Paris", "city": "Saint-Denis", "state": "RE", "zip": "97400", "country": "RE"}}'
सभी उदाहरणों में sk_live_YOUR_KEY की जगह अपनी कुंजी रखें।
अभी खाता नहीं है? पता निःशुल्क जाँचकर देखें: पृष्ठ कुछ सहेजता नहीं और ठीक वही दिखाता है जो API लौटाती है।
पहुँच
दो रास्ते, एक ही उत्तर। सिर्फ़ भेजा जाने वाला हेडर और भुगतान बदलते हैं।
सब्सक्रिप्शन
X-API-Key: sk_live_…, यानी साइन-अप पर दिखाई गई कुंजी, या ग्राहक पोर्टल में नई बनाई गई।प्रति कॉल भुगतान · x402
X-PAYMENT: हस्ताक्षरित EIP-3009 प्राधिकरण, जो 402 उत्तर के बॉडी (फ़ील्ड accepts) से बनाया जाता है।X-Payment-Mode में बताता है कि भुगतान कैसे हुआ।कुंजी को कभी git रिपॉज़िटरी, साझा फ़ाइल या URL में न रखें। वह किसी एनवायरनमेंट वेरिएबल या सीक्रेट मैनेजर में रहनी चाहिए और सिर्फ़ https पर चलनी चाहिए। लीक हुई कुंजी एक क्लिक में नई बन जाती है: पुरानी तुरंत काम करना बंद कर देती है।
संदर्भ
POST https://kder-ai.com/validate, JSON बॉडी, हेडर content-type: application/json।
{"address": {
"street": "1 Rue de Paris", // अनिवार्य
"city": "Saint-Denis", // अनिवार्य
"state": "RE", // अनिवार्य (क्षेत्र या राज्य)
"zip": "97400", // अनिवार्य
"country": "RE" // वैकल्पिक, डिफ़ॉल्ट "US" (ISO, 2 अक्षर)
}}
200 उत्तर{
"result": {
"validated": true,
"standardized": {"line1": "1 RUE DE PARIS", "line2": "", "city": "SAINT-DENIS",
"state": "RE", "zip": "97400", "country": "RE"},
"latitude": -20.8823, "longitude": 55.4504,
"deliverability": "residential",
"confidence": 0.99,
"degraded": false,
"cache_key": "9b7a..."
},
"price_paid": 0.0,
"transaction_id": null
}
validatedfalse हमेशा अंतिम निर्णय नहीं होता: कोई निष्कर्ष निकालने से पहले degraded पढ़ें।deliverabilityresidential, commercial, unknown ou invalid : प्रदाता का कोड, सरल शब्दों में।confidencedegradedtrue: प्रदाता ने उत्तर नहीं दिया (खराबी, समय सीमा पार, सर्किट ब्रेकर खुला)। उत्तर पते के बारे में कुछ नहीं कहता। इसे कभी «अमान्य पता» के रूप में दर्ज न करें।price_paid0.0; भुगतान वाली कॉल के लिए USDC में कीमत।cache_keyये वही हेडर हैं जो रूट सचमुच लगाता है। किसी और का वादा नहीं है।
X-Payment-Modeapi_key या x402: कॉल का भुगतान कैसे हुआ।X-Plantrial, starter, pro या enterprise। केवल कुंजी मोड में।X-Quota-Remainingसंदर्भ
/validate पर आठ कोड संभव हैं। कुंजी मोड की तीन अस्वीकृतियाँ (401, 402, 403) जान-बूझकर अलग हैं: हर एक को उसके अपने तरीके से सँभालें।
सफलता
result पढ़ें। cache_key सँभालकर रखें: यह इस पते का आपका छद्म-नाम है, हटाने का अनुरोध इसी से होता है।
दोबारा भेजने की ज़रूरत नहीं
आपकी ओर से सुधार
कुंजी अधूरी है, रद्द हो चुकी है (नई बनाई गई) या किसी दूसरी सेवा की है। एनवायरनमेंट वेरिएबल ठीक करें। लूप में बार-बार कोशिश न करें।
नहीं: कुंजी ठीक करें
सीमा या भुगतान
उत्तर का बॉडी पढ़ें: वह बताता है कि दोनों में से कौन-सा मामला है। कोटे वाला 402 खराबी नहीं है।
बॉडी के अनुसार
{"reason": "quota_atteint"}उपयोग की सीमा पूरी हुई। यह खराबी नहीं है। काउंटर माह की 1 तारीख़ (UTC) को फिर शुरू होता है।{"x402Version": 1}इस कॉल का भुगतान नहीं आया। कीमत फ़ील्ड accepts में है।आपकी ओर से सुधार
निःशुल्क ट्रायल खत्म हो गया है और खाता ट्रायल प्लान पर ही रह गया है। सशुल्क प्लान पर जाएँ: कुछ भी अपने आप नहीं कटता।
नहीं: प्लान बदलें
आपकी ओर से सुधार
कोई फ़ील्ड गायब या खाली है। street, city, state और zip अनिवार्य हैं; country का डिफ़ॉल्ट US है।
सुधार के बाद
सीमा
यह /validate-form यानी बिना खाते के ट्रायल पर लागू होता है, सशुल्क API पर नहीं। Retry-After में बताई अवधि तक रुकें, या खाता बनाएँ।
Retry-After के बाद
सेवा की ओर की समस्या
सेवा ऐसा वैलिडेशन देने से इनकार करती है जिसे वह दर्ज नहीं कर सकती। फिर कोशिश करें। कॉल का भुगतान हुआ था तो transaction_id बताएँ: मिलान हाथ से किया जाता है।
हाँ, transaction_id सँभालकर रखें
सेवा की ओर की समस्या
कुंजी की जाँच नहीं हो सकी (यह अस्वीकृति नहीं है), या डेटाबेस जवाब नहीं दे रहा। कुछ मिनट बाद फिर कोशिश करें: कुछ भी खर्च नहीं हुआ।
503 कभी भुगतान की माँग नहीं होता।
हाँ, कुछ मिनट बाद
बिलिंग
cache_key देता है।degraded नतीजा 5 मिनट रखा जाता है, 30 दिन नहीं: «प्रदाता ने उत्तर नहीं दिया» कोई निर्णय नहीं है।degraded: true को «बाद में फिर कोशिश करें» मानें। इस छोटी अवधि के बाद वही कॉल असली उत्तर पाती है।X-Quota-Remaining पर नज़र रखें। सीमा के बाद नहीं, उससे पहले हमें लिखें।price_paid: 0.0 आता है।402 का बॉडी (accepts) पढ़ता है: कीमत वहीं रहती है, उसका अंदाज़ा कभी नहीं लगाना पड़ता।/validate-form पर हर दिन, हर विज़िटर के लिए 10 वैलिडेशन।उदाहरण
API जोड़ने के चार तरीके। हर उदाहरण कुंजी को एनवायरनमेंट वेरिएबल से पढ़ता है।
$cle = $env:ADDRESS_VALIDATOR_KEY
$corps = '{"address":{"street":"1 Rue de Paris","city":"Saint-Denis","state":"RE","zip":"97400","country":"RE"}}'
$r = Invoke-WebRequest -Uri https://kder-ai.com/validate -Method POST `
-Headers @{ "X-API-Key" = $cle } -ContentType "application/json" -Body $corps
$r.StatusCode
$r.Headers["X-Payment-Mode"], $r.Headers["X-Plan"], $r.Headers["X-Quota-Remaining"]
($r.Content | ConvertFrom-Json).result
"""पतों की CSV जाँचती है और नतीजा बगल के कॉलम में लिखती है।
प्रदाता से हर पते के लिए सिर्फ़ एक बार पूछा जाता है: उत्तर कैश में रखा जाता है
(निर्णय के लिए 30 दिन), इसलिए उसी फ़ाइल पर दूसरी बार चलाने पर कोई अतिरिक्त
खर्च नहीं होता।
"""
import csv
import os
import time
import requests
CLE = os.environ["ADDRESS_VALIDATOR_KEY"] # कभी कोड में नहीं, कभी git में नहीं
API = "https://kder-ai.com/validate"
with open("colis.csv", newline="", encoding="utf-8") as source, open(
"colis-verifies.csv", "w", newline="", encoding="utf-8"
) as cible:
lecteur = csv.DictReader(source)
champs = list(lecteur.fieldnames) + [
"validated", "deliverability", "degraded", "note",
]
sortie = csv.DictWriter(cible, fieldnames=champs)
sortie.writeheader()
for ligne in lecteur:
reponse = requests.post(
API,
headers={"X-API-Key": CLE},
timeout=30,
json={
"address": {
"street": ligne["adresse"],
"city": ligne["ville"],
"state": ligne["region"],
"zip": ligne["code_postal"],
"country": ligne.get("pays") or "US",
}
},
)
if reponse.status_code in (500, 503):
time.sleep(5) # सेवा की ओर की खराबी: कुछ भी खर्च नहीं हुआ
continue
if reponse.status_code == 429:
time.sleep(int(reponse.headers.get("Retry-After", "60")))
continue
if reponse.status_code != 200:
sortie.writerow({**ligne, "note": f"refus {reponse.status_code}"})
continue
resultat = reponse.json()["result"]
sortie.writerow(
{
**ligne,
"validated": resultat["validated"],
"deliverability": resultat["deliverability"],
"degraded": resultat["degraded"],
"note": "a reverifier (fournisseur injoignable)"
if resultat["degraded"]
else "",
}
)
यह उदाहरण बस इतना दिखाता है: कुंजी एनवायरनमेंट वेरिएबल से आती है, 429 का सम्मान होता है (अवधि पढ़ी जाती है, अंदाज़े से नहीं ली जाती), और degraded नतीजे को अमान्य पता लिखने के बजाय «दोबारा जाँचें» चिह्नित किया जाता है।
orders/create वेबहुक (या पार्सल तैयार करने का आपका चरण) आपकी सेवा को कॉल करता है, जो ऑर्डर के डिलीवरी पते के साथ /validate से पूछती है।shipping_address.address1 → street (नतीजे में address2 को line2 में जोड़ें)city → cityprovince_code → statezip → zipcountry_code → countryvalidated: false: भेजने से पहले अपने बैक-ऑफ़िस में ऑर्डर पर निशान लगाएँ। degraded: true: कुछ न रोकें, जाँच दोबारा तय करें।woocommerce_checkout_order_processed एक्शन (भुगतान हुआ ऑर्डर), या तैयारी में चल रहे ऑर्डर देखने वाला एक cron (wc_get_orders( ['status' => 'processing'] ))।$order->get_shipping_address_1() → street$order->get_shipping_city() → city$order->get_shipping_state() → state$order->get_shipping_postcode() → zip$order->get_shipping_country() → countrycache_key को ऑर्डर के साथ सहेजें: हटाने के अनुरोध के लिए पते का यही एकमात्र मान्य पहचानकर्ता है।हर स्थिति में: हर पते और हर ऑर्डर के लिए एक ही कॉल, कभी ऐसे लूप में नहीं जो रिटर्न कोड अनदेखा करे। कोटे वाला 402 खराबी नहीं है: वह एक सीमा है, और उत्तर में ही पढ़ी जा सकती है।
डेवलपर और AI एजेंट
स्वायत्त एजेंट को न खाते की ज़रूरत है, न कुंजी की। हर वसूल किया गया वैलिडेशन 0.02 USDC का है, जो Base नेटवर्क पर x402 से चुकाया जाता है।
POST /validate को कॉल करें, सामान्य बॉडी के साथ। भुगतान के बिना उत्तर 402 होता है, जिसके बॉडी में {"x402Version": 1} और फ़ील्ड accepts होते हैं: कीमत वहीं है।accepts से EIP-3009 प्राधिकरण बनाएँ और अनुरोध हेडर X-PAYMENT के साथ दोबारा भेजें।X-Payment-Mode का मान x402 है, price_paid USDC में कीमत देता है, और transaction_id वह संदर्भ है जिसे 500 की स्थिति में बताना है।आपके एजेंटों के लिए सब कुछ बिना भुगतान के खोजा जा सकता है:
इंटीग्रेट करने से पहले जानें
degraded: true दोबारा जाँचेंcache_key) और नतीजा, पता खुद कभी नहीं। बिना खाते के निःशुल्क ट्रायल के लिए: कुछ नहीं, सिर्फ़ एक गुमनाम काउंटर जो सीमा लागू रखता है। हटाने का अनुरोध cache_key से किया जाता है।कुंजी पाने के लिए खाता बनाएँ, या पहले बिना खाते के कोई पता जाँचकर देखें।