Entity Enricher REST API आपको एंटिटी एनरिच करने, स्कीमा प्रबंधित करने, और रिकॉर्ड प्रोग्रामेटिक रूप से प्राप्त करने देता है। सभी रिस्पॉन्स JSON होते हैं। रीयल-टाइम प्रगति Server-Sent Events (SSE) का उपयोग करती है।
तीन चरणों में Entity Enricher इंटीग्रेट करें:
GET /api/schema/savedसहेजे गए स्कीमा की सूची बनाएँ या नमूना डेटा से एक जेनरेट करें
POST /api/single/enrich/streamएनरिचमेंट शुरू करें, SSE स्ट्रीमिंग के लिए जॉब ID प्राप्त करें
GET /api/records/{id}संरचित आउटपुट के साथ पूर्ण enrichment record प्राप्त करें
सभी API एंडपॉइंट्स (लॉगिन/रजिस्टर को छोड़कर) को प्रमाणीकरण की आवश्यकता होती है। संगठन एक्सेस की के साथ X-API-Key हेडर का उपयोग करें:
curl -H "X-API-Key: ent_your_key_here" \
https://your-instance.example.com/api/enrichment/optionsAPI Keys पेज से या POST /api/auth/api-keys के माध्यम से API की बनाएँ। की के प्रकार और अनुमतियों के विवरण के लिए API Keys गाइड देखें।
| मेथड | Endpoint | विवरण |
|---|---|---|
| GET | /api/enrichment/options | उपलब्ध मॉडल, भाषाएँ, और स्ट्रैटेजी |
| POST | /api/single/enrich/stream | एकल एंटिटी एनरिचमेंट शुरू करें (SSE के लिए job_id लौटाता है) |
| POST | /api/single/enrich/sync | गैर-SSE क्लाइंट्स (Make.com, curl) के लिए ब्लॉकिंग सिंगल एनरिचमेंट |
| POST | /api/enrichment/batch/start | कई एंटिटी के लिए बैच एनरिचमेंट शुरू करें |
| POST | /api/enrichment/batch/fetch | किसी बाहरी URL से एंटिटीज़ फ़ेच करें |
| मेथड | Endpoint | विवरण |
|---|---|---|
| GET | /api/llm/stream/{job_id} | किसी भी LLM जॉब (संवर्धन, स्कीमा, फ्यूज़न) के लिए SSE स्ट्रीम |
| POST | /api/llm/cancel/{job_id} | चल रहे या रुके हुए जॉब को रद्द करें |
| POST | /api/llm/continue/{job_id} | किसी रुके हुए जॉब को फिर से शुरू करें (जैसे, वर्गीकरण मिसमैच के बाद) |
| मेथड | Endpoint | विवरण |
|---|---|---|
| GET | /api/schema/saved | सभी सहेजे गए स्कीमा की सूची बनाएँ |
| POST | /api/schema/saved | एक नया schema बनाएँ |
| POST | /api/schema/generate/stream | सैंपल डेटा से schema जेनरेट करें (SSE) |
| POST | /api/schema/saved/{id}/prompt/stream | नैचुरल लैंग्वेज के साथ स्कीमा को AI-एडिट करें (SSE) |
| POST | /api/schema/analyze-sample | सैंपल JSON का विश्लेषण करें — ऐसे अस्पष्ट प्रॉपर्टी नामों के लिए जिनके पैरेंट के संदर्भ में कई अर्थ निकलते हों, या कोई भी नहीं — और ऐसे संबंधित आइटम्स के लिए जो एंटिटी से जुड़े तथ्यों को प्रति-पैरेंट तथ्यों के साथ मिला देते हैं (स्टेटलेस रिपोर्ट, सुझाए गए नए नाम) |
| POST | /api/schema/saved/{id}/analyze | किसी सेव्ड स्कीमा पर अस्पष्टता और आइडेंटिटी-स्कोपिंग जाँच चलाएँ और उनके एनोटेशन लिखें (हर अस्पष्ट नाम के लिए एक पुनर्लिखित विवरण) |
| POST | /api/schema/scoping-split | सैंपल सेट पर एक आइडेंटिटी-स्कोपिंग स्प्लिट लागू करें — संबंधित एंटिटी के अपने तथ्य अपने अलग सबऑब्जेक्ट में चले जाते हैं (डिटरमिनिस्टिक, मुफ़्त, कुछ भी सेव नहीं होता) |
| DELETE | /api/schema/saved/{id}/enrichment-data | किसी स्कीमा का संवर्धन (enrichment) डेटा पर्ज करें — रिकॉर्ड और एंटिटी स्थिति — स्कीमा को बनाए रखते हुए (owner+) |
| मेथड | Endpoint | विवरण |
|---|---|---|
| GET | /api/records | पेजिनेशन और फ़िल्टरिंग के साथ रिकॉर्ड की सूची बनाएँ |
| GET | /api/records/{id} | स्ट्रक्चर्ड आउटपुट के साथ पूर्ण record विवरण प्राप्त करें |
| POST | /api/records/batch-delete | कई record हटाएँ (अधिकतम 100) |
| POST | /api/fusion/merge | कई models के परिणाम मर्ज करें |
| मेथड | Endpoint | विवरण |
|---|---|---|
| POST | /api/attachments | एक या अधिक फ़ाइलें अपलोड करें (multipart/form-data) |
| POST | /api/attachments/base64 | JSON base64 के माध्यम से एक फ़ाइल अपलोड करें (non-multipart क्लाइंट्स के लिए) |
| GET | /api/attachments/{id}/download | मूल फ़ाइल बाइट्स डाउनलोड करें |
| DELETE | /api/attachments/{id} | एक attachment हटाएँ (enrichment के बाद सफ़ाई) |
| मेथड | Endpoint | विवरण |
|---|---|---|
| POST | /api/schema/saved/{id}/publish | लिंक किए गए स्कीमा की वर्किंग कॉपी को उस कॉन्ट्रैक्ट के रूप में प्रकाशित करें जिसके विरुद्ध एनरिचमेंट और उसके डेटाबेस चलते हैं। जब तक यह नहीं चलता, कोई भी संरचनात्मक बदलाव प्रभावी नहीं होता |
| POST | /api/schema/sample/generate/stream | एक एंटिटी टाइप के 1..N सैंपल JSON ऑब्जेक्ट जनरेट करें (SSE के लिए job_id लौटाता है) |
| मेथड | Endpoint | विवरण |
|---|---|---|
| GET | /api/databases | संगठन के डेटाबेस रजिस्ट्रेशन, लंबित डेल्टा संख्या के साथ सूचीबद्ध करें |
| POST | /api/databases | किसी स्कीमा पर डेटाबेस रजिस्टर करें |
| GET | /api/databases/{id}/snapshot | पूरी स्टेट को .sql स्नैपशॉट के रूप में डाउनलोड करें — शून्य से बूटस्ट्रैप करें |
| GET | /api/databases/{id}/changes | डेल्टा की अगली FIFO विंडो लाएँ; एक्नॉलेज्ड डिलीवरी के लिए लीज़ हेतु उन्हें क्लेम करें |
| POST | /api/databases/{id}/ack | किसी id तक लागू किए गए डेल्टा की पुष्टि करें — लीज़ रिलीज़ हो जाती है |
| POST | /api/databases/{id}/clear-acked | डिलीवर और acknowledge किए जा चुके डेल्टा पर्ज करें |
| मेथड | Endpoint | विवरण |
|---|---|---|
| GET | /api/semantic-concepts | कॉन्सेप्ट वोकैबुलरी देखें, टाइप के अनुसार फ़िल्टर करके और किसी संदर्भ कॉन्सेप्ट के मुक़ाबले स्कोर करके |
| GET | /api/semantic-concepts/types | कॉन्सेप्ट प्रकारों को उनकी संख्या और एम्बेडिंग मॉडल के साथ सूचीबद्ध करें |
| POST | /api/semantic-concepts/probe | किसी टेक्स्ट के लिए रिज़ॉल्यूशन लैडर का ड्राई-रन करें — वह किससे मैच करेगा, और कितनी नज़दीकी से |
| GET | /api/semantic-concepts/duplicates | मर्ज थ्रेशोल्ड से ठीक नीचे बैठे कॉन्सेप्ट जोड़े |
| POST | /api/semantic-concepts/import | पहचान टेक्स्ट वाली CSV को बैच में रिज़ॉल्व करें (मिंटिंग के लिए ओनर होना ज़रूरी) |
| GET | /api/semantic-concepts/export | वोकैबुलरी को CSV के रूप में एक्सपोर्ट करें |
| POST | /api/semantic-concepts/delete-impact | कॉन्सेप्ट डिलीट करने से क्या प्रभावित होगा — उपयोग की गिनती और रीसिंक लागत |
| GET | /api/semantic-concepts/migration/status | एम्बेडिंग-मॉडल माइग्रेशन की स्थिति, यदि कोई चल रहा हो |
| मेथड | Endpoint | विवरण |
|---|---|---|
| GET | /api/benchmarks | बेंचमार्क सिनेरियो की सूची दें |
| POST | /api/benchmarks/{id}/run | एक सिनैरियो को कई मॉडलों पर चलाएँ — हर परिणाम अपने आप स्कोर होता है |
| POST | /api/benchmarks/{id}/reference | वह गोल्ड रेफ़रेंस सेव और सत्यापित करें जिसके विरुद्ध सिनैरियो स्कोर किया जाता है |
| GET | /api/billing/balance | वर्तमान क्रेडिट बैलेंस |
| GET | /api/billing/transactions | क्रेडिट ट्रांज़ैक्शन इतिहास, एम्बेडिंग खर्च सहित |
| GET | /api/billing/plans | उपलब्ध प्लान और उनकी सीमाएँ |
Enrichment, schema जनरेशन और fusion ऑपरेशन रियल-टाइम प्रगति के लिए Server-Sent Events का उपयोग करते हैं। एक जॉब शुरू करें, एक job_id प्राप्त करें, फिर SSE स्ट्रीम से कनेक्ट करें:
| इवेंट | विवरण |
|---|---|
| model_started | मॉडल प्रोसेसिंग शुरू होती है |
| expertise_completed | एक expertise domain समाप्त हुआ (आंशिक परिणामों के साथ) |
| model_completed | मॉडल result, record_id, और cost के साथ समाप्त हुआ |
| fusion_started / fusion_completed | मल्टी-मॉडल फ्यूज़न लाइफसाइकल इवेंट्स |
| entity_started / entity_completed | बैच-विशिष्ट प्रति-एंटिटी इवेंट्स (entity_index शामिल करें) |
| completed | टर्मिनल इवेंट - कनेक्शन बंद करें |
| error | Job-स्तरीय त्रुटि हुई |
एक संपूर्ण workflow जो schema सूचीबद्ध करता है, enrichment शुरू करता है, परिणाम stream करता है, और अंतिम record प्राप्त करता है:
import httpx
import json
BASE = "https://your-instance.example.com"
KEY = "ent_your_api_key"
HEADERS = {"X-API-Key": KEY, "Content-Type": "application/json"}
# 1. List saved schemas
schemas = httpx.get(f"{BASE}/api/schema/saved", headers=HEADERS).json()
schema_id = schemas["schemas"][0]["id"]
# 2. Start enrichment
resp = httpx.post(f"{BASE}/api/single/enrich/stream", headers=HEADERS, json={
"entity_data": {"name": "Moderna Inc", "country": "US"},
"schema_id": schema_id,
"models": ["anthropic::claude-sonnet-4-5-20250514"],
"strategy": "multi_expertise",
})
job_id = resp.json()["job_id"]
# 3. Stream SSE events
record_id = None
with httpx.stream("GET", f"{BASE}/api/llm/stream/{job_id}", headers=HEADERS) as stream:
for line in stream.iter_lines():
if not line.startswith("data: "):
continue
event = json.loads(line[6:])
if event["type"] == "model_completed" and event.get("record_id"):
record_id = event["record_id"]
elif event["type"] == "completed":
break
# 4. Retrieve the enrichment record
if record_id:
record = httpx.get(f"{BASE}/api/records/{record_id}", headers=HEADERS).json()
print(json.dumps(record["structured_output"], indent=2))दो मॉडल के साथ बैच एनरिचमेंट शुरू करें और परिणाम स्ट्रीम करें:
# Start batch enrichment
JOB_ID=$(curl -s -X POST \
-H "X-API-Key: $KEY" \
-H "Content-Type: application/json" \
"$BASE/api/enrichment/batch/start" \
-d '{
"entities": [
{"name": "Pfizer Inc", "country": "US"},
{"name": "Roche", "country": "CH"}
],
"schema_id": "your-schema-uuid",
"models": ["anthropic::claude-sonnet-4-5-20250514", "openai::gpt-4o"],
"strategy": "multi_expertise",
"arbitration_model": "anthropic::claude-sonnet-4-5-20250514"
}' | jq -r '.job_id')
# Stream events
curl -N -H "X-API-Key: $KEY" "$BASE/api/llm/stream/$JOB_ID"
# List resulting records
curl -s -H "X-API-Key: $KEY" \
"$BASE/api/records?type=enrichment&page_size=10" | jq '.records'| स्थिति | अर्थ | उदाहरण |
|---|---|---|
| 200 | सफल | अनुरोध पूर्ण हुआ |
| 400 | गलत रिक्वेस्ट | अमान्य model key या गुम फ़ील्ड |
| 401 | अनधिकृत | API कुंजी अनुपस्थित या अमान्य है |
| 402 | भुगतान आवश्यक | प्लान की सीमा या क्रेडिट बैलेंस — कोटा समाप्त, बहुत अधिक मॉडल या भाषाएँ, कोई ऐसा फ़ीचर जो आपके प्लान में नहीं है। बॉडी में विवरण के साथ एक मशीन-रीडेबल कोड भी होता है। |
| 403 | निषिद्ध | इस एंडपॉइंट के लिए अपर्याप्त भूमिका |
| 404 | नहीं मिला | रिकॉर्ड, स्कीमा, या जॉब नहीं मिला |
| 500 | Server त्रुटि | आंतरिक विफलता |
एरर रिस्पॉन्स में एक detail फ़ील्ड होता है जिसमें पढ़ने योग्य एरर मैसेज होता है। प्लान और बिलिंग फ़ेल्योर (402) के साथ अतिरिक्त रूप से एक स्ट्रक्चर्ड बॉडी आती है जिसमें एक स्थिर code होता है — prompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — साथ ही संबंधित लिमिट और उपयोग की संख्याएँ, ताकि क्लाइंट टेक्स्ट पार्स करने के बजाय कारण के आधार पर ब्रांच कर सके। अगर स्ट्रीम के बीच में कुछ फ़ेल होता है, तो SSE स्ट्रीम एक error इवेंट टाइप भेजती हैं, अंतिम completed इवेंट से पहले।
मॉडल की पहचान provider_name::model_name फ़ॉर्मेट में कंपोज़िट कुंजियों द्वारा की जाती है। उपलब्ध मॉडल और उनकी कुंजियाँ सूचीबद्ध करने के लिए GET /api/enrichment/options का उपयोग करें।
एनरिचमेंट, स्कीमा जनरेशन और सैंपल जनरेशन पर model पैरामीटर वैकल्पिक है: इसे छोड़ दें (या literal "auto" पास करें) और सर्वर आपके संगठन का डिफ़ॉल्ट मॉडल चुन लेता है — यदि Settings में सेट है तो पिन किया गया प्रति-कार्य डिफ़ॉल्ट, अन्यथा आपके स्कोरिंग-स्रोत बेंचमार्क से सर्वश्रेष्ठ समग्र स्कोर वाला मॉडल। options रिस्पॉन्स का default_models फ़ील्ड दिखाता है कि ऑटो वर्तमान में किसमें रिज़ॉल्व होता है, और model_auto_selected SSE इवेंट हर जॉब पर चयन की रिपोर्ट देता है। ऑटो हमेशा एकल मॉडल में रिज़ॉल्व होता है (यह कभी फ्यूज़न ट्रिगर नहीं करता); पुनरुत्पादनीय पाइपलाइन के लिए, स्पष्ट मॉडल पास करते रहें।
Request विकल्प auto pick को सीमित करते हैं: enable_web_search: true के साथ केवल वेब-सर्च-सक्षम models पर विचार किया जाता है (options response का default_models_web_search फ़ील्ड उस pick का पूर्वावलोकन दिखाता है), और binary attachments के लिए ऐसे model की आवश्यकता होती है जो उन्हें पढ़ सके (PDF, vision, audio)। जब कोई योग्य model इन सीमाओं को पूरा नहीं करता, तो विकल्प को चुपचाप हटाने के बजाय request HTTP 400 no_capable_default_model के साथ विफल हो जाती है।
anthropic::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatएप्लिकेशन में रिक्वेस्ट/रिस्पॉन्स उदाहरणों के साथ इंटरैक्टिव API दस्तावेज़ शामिल हैं। एक्सेस के लिए एडमिन प्रमाणीकरण आवश्यक है: