API संदर्भ - Entity Enricher दस्तावेज़ीकरण

API संदर्भ

Entity Enricher REST API आपको एंटिटी एनरिच करने, स्कीमा प्रबंधित करने, और रिकॉर्ड प्रोग्रामेटिक रूप से प्राप्त करने देता है। सभी रिस्पॉन्स JSON होते हैं। रीयल-टाइम प्रगति Server-Sent Events (SSE) का उपयोग करती है।

त्वरित शुरुआत

तीन चरणों में Entity Enricher इंटीग्रेट करें:

1

Schema प्राप्त करें

GET /api/schema/saved

सहेजे गए स्कीमा की सूची बनाएँ या नमूना डेटा से एक जेनरेट करें

2

एनरिच करें

POST /api/single/enrich/stream

एनरिचमेंट शुरू करें, SSE स्ट्रीमिंग के लिए जॉब ID प्राप्त करें

3

परिणाम प्राप्त करें

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/options

API 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 से एंटिटीज़ फ़ेच करें

Job प्रबंधन

मेथडEndpointविवरण
GET/api/llm/stream/{job_id}किसी भी LLM जॉब (संवर्धन, स्कीमा, फ्यूज़न) के लिए SSE स्ट्रीम
POST/api/llm/cancel/{job_id}चल रहे या रुके हुए जॉब को रद्द करें
POST/api/llm/continue/{job_id}किसी रुके हुए जॉब को फिर से शुरू करें (जैसे, वर्गीकरण मिसमैच के बाद)

Schema

मेथड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/base64JSON 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 लौटाता है)

Database Sync

मेथड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उपलब्ध प्लान और उनकी सीमाएँ

SSE स्ट्रीमिंग

Enrichment, schema जनरेशन और fusion ऑपरेशन रियल-टाइम प्रगति के लिए Server-Sent Events का उपयोग करते हैं। एक जॉब शुरू करें, एक job_id प्राप्त करें, फिर SSE स्ट्रीम से कनेक्ट करें:

SSE इवेंट फ्लो

data: {"type":"model_started","model":"anthropic::claude-sonnet-4-5"}
data: {"type":"expertise_completed","expertise_key":"financial","partial_result":{...}}
data: {"type":"model_completed","success":true,"result":{...},"record_id":"uuid"}
data: {"type":"completed"}

प्रमुख इवेंट प्रकार

इवेंटविवरण
model_startedमॉडल प्रोसेसिंग शुरू होती है
expertise_completedएक expertise domain समाप्त हुआ (आंशिक परिणामों के साथ)
model_completedमॉडल result, record_id, और cost के साथ समाप्त हुआ
fusion_started / fusion_completedमल्टी-मॉडल फ्यूज़न लाइफसाइकल इवेंट्स
entity_started / entity_completedबैच-विशिष्ट प्रति-एंटिटी इवेंट्स (entity_index शामिल करें)
completedटर्मिनल इवेंट - कनेक्शन बंद करें
errorJob-स्तरीय त्रुटि हुई

Python उदाहरण

एक संपूर्ण 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))

curl उदाहरण

दो मॉडल के साथ बैच एनरिचमेंट शुरू करें और परिणाम स्ट्रीम करें:

# 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नहीं मिलारिकॉर्ड, स्कीमा, या जॉब नहीं मिला
500Server त्रुटिआंतरिक विफलता

एरर रिस्पॉन्स में एक 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
anthropic::claude-sonnet-4-5-20250514
OpenAI
openai::gpt-4o
Google
google::gemini-2.5-pro
DeepSeek
deepseek::deepseek-chat

इंटरैक्टिव API डॉक्युमेंटेशन

एप्लिकेशन में रिक्वेस्ट/रिस्पॉन्स उदाहरणों के साथ इंटरैक्टिव API दस्तावेज़ शामिल हैं। एक्सेस के लिए एडमिन प्रमाणीकरण आवश्यक है:

अगले चरण