[{"data":1,"prerenderedAt":696},["ShallowReactive",2],{"docs:\u002Fdocs\u002Fintegrations":3},{"id":4,"title":5,"body":6,"description":687,"extension":688,"meta":689,"navigation":690,"path":692,"seo":693,"stem":694,"__hash__":695},"docs\u002Fdocs\u002Fintegrations\u002Findex.md","Integrations",{"type":7,"value":8,"toc":674},"minimark",[9,13,18,27,30,166,173,176,268,272,279,353,357,421,425,428,482,497,501,521,631,641,645,670],[10,11,12],"p",{},"Iqrar's wire format is plain HTTP\u002FJSON, so any agent runtime that can make a network request can register and stream telemetry. We ship first-class SDKs and adapters for the platforms that cover ~95% of agents in production today.",[14,15,17],"h2",{"id":16},"pick-your-runtime","Pick your runtime",[19,20,22,23],"h3",{"id":21},"typescript-javascript-iqraragent","TypeScript \u002F JavaScript — ",[24,25,26],"code",{},"@iqrar\u002Fagent",[10,28,29],{},"Three-line drop-in. Framework-specific entrypoints exist for the most common stacks.",[31,32,33,49],"table",{},[34,35,36],"thead",{},[37,38,39,43,46],"tr",{},[40,41,42],"th",{},"Platform",[40,44,45],{},"Entrypoint",[40,47,48],{},"Page",[50,51,52,70,86,102,117,133,150],"tbody",{},[37,53,54,58,63],{},[55,56,57],"td",{},"OpenAI SDK \u002F Assistants",[55,59,60],{},[24,61,62],{},"@iqrar\u002Fagent\u002Fopenai",[55,64,65],{},[66,67,69],"a",{"href":68},"\u002Fdocs\u002Fintegrations\u002Fopenai","OpenAI",[37,71,72,75,80],{},[55,73,74],{},"Anthropic SDK",[55,76,77],{},[24,78,79],{},"@iqrar\u002Fagent\u002Fanthropic",[55,81,82],{},[66,83,85],{"href":84},"\u002Fdocs\u002Fintegrations\u002Fanthropic","Anthropic",[37,87,88,91,96],{},[55,89,90],{},"Vercel AI SDK",[55,92,93],{},[24,94,95],{},"@iqrar\u002Fagent\u002Fvercel-ai",[55,97,98],{},[66,99,101],{"href":100},"\u002Fdocs\u002Fintegrations\u002Fvercel-ai","Vercel AI",[37,103,104,107,112],{},[55,105,106],{},"Mastra",[55,108,109],{},[24,110,111],{},"@iqrar\u002Fagent\u002Fmastra",[55,113,114],{},[66,115,106],{"href":116},"\u002Fdocs\u002Fintegrations\u002Fmastra",[37,118,119,122,127],{},[55,120,121],{},"LangChain.js \u002F LangGraph.js",[55,123,124],{},[24,125,126],{},"@iqrar\u002Fagent\u002Flangchain",[55,128,129],{},[66,130,132],{"href":131},"\u002Fdocs\u002Fintegrations\u002Flangchain","LangChain",[37,134,135,138,144],{},[55,136,137],{},"OpenClaw \u002F NemoClaw",[55,139,140,143],{},[24,141,142],{},"Iqrar(...).wrap(claw)"," + llms.txt self-onboard",[55,145,146],{},[66,147,149],{"href":148},"\u002Fdocs\u002Fintegrations\u002Fopenclaw","OpenClaw",[37,151,152,155,160],{},[55,153,154],{},"Anything else",[55,156,157],{},[24,158,159],{},"Iqrar(...).wrap(target)",[55,161,162],{},[66,163,165],{"href":164},"\u002Fdocs\u002Fgetting-started","Getting started",[19,167,169,170],{"id":168},"python-iqrar-agent","Python — ",[24,171,172],{},"iqrar-agent",[10,174,175],{},"Mirrors the TS surface signature-for-signature. Same wire format, same dashboard.",[31,177,178,189],{},[34,179,180],{},[37,181,182,184,187],{},[40,183,42],{},[40,185,186],{},"Adapter",[40,188,48],{},[50,190,191,206,222,238,254],{},[37,192,193,196,201],{},[55,194,195],{},"CrewAI",[55,197,198],{},[24,199,200],{},"iqrar.adapters.crewai.attach",[55,202,203],{},[66,204,195],{"href":205},"\u002Fdocs\u002Fintegrations\u002Fcrewai",[37,207,208,211,216],{},[55,209,210],{},"LangChain \u002F LangGraph (Python)",[55,212,213],{},[24,214,215],{},"IqrarCallbackHandler",[55,217,218],{},[66,219,221],{"href":220},"\u002Fdocs\u002Fintegrations\u002Flangchain-python","LangChain (Python)",[37,223,224,227,232],{},[55,225,226],{},"OpenAI Agents SDK (Python)",[55,228,229],{},[24,230,231],{},"IqrarRunHooks",[55,233,234],{},[66,235,237],{"href":236},"\u002Fdocs\u002Fintegrations\u002Fopenai-agents-python","OpenAI Agents SDK",[37,239,240,243,248],{},[55,241,242],{},"AutoGen v0.4",[55,244,245],{},[24,246,247],{},"IqrarMiddleware",[55,249,250],{},[66,251,253],{"href":252},"\u002Fdocs\u002Fintegrations\u002Fautogen","AutoGen",[37,255,256,259,265],{},[55,257,258],{},"Pydantic AI \u002F LlamaIndex \u002F Smolagents",[55,260,261,262],{},"direct ",[24,263,264],{},"Iqrar(...).wrap()",[55,266,267],{},"covered below",[19,269,271],{"id":270},"hosted-managed-agent-platforms","Hosted \u002F managed agent platforms",[10,273,274,275,278],{},"When you don't run the agent yourself, hook into the platform's event stream and forward to Iqrar's ",[24,276,277],{},"\u002Ftelemetry"," endpoint.",[31,280,281,293],{},[34,282,283],{},[37,284,285,287,290],{},[40,286,42],{},[40,288,289],{},"Bridge",[40,291,292],{},"Status",[50,294,295,311,325,339],{},[37,296,297,300,305],{},[55,298,299],{},"AWS Bedrock Agents",[55,301,302,303],{},"EventBridge → Lambda → ",[24,304,277],{},[55,306,307],{},[66,308,310],{"href":309},"\u002Fdocs\u002Fintegrations\u002Fbedrock","Bedrock",[37,312,313,316,319],{},[55,314,315],{},"Azure AI Agent Service",[55,317,318],{},"Diagnostic Settings → Event Hub → Function",[55,320,321],{},[66,322,324],{"href":323},"\u002Fdocs\u002Fintegrations\u002Fazure","Azure",[37,326,327,330,333],{},[55,328,329],{},"Vertex AI Agent Builder",[55,331,332],{},"Pub\u002FSub → Cloud Function",[55,334,335],{},[66,336,338],{"href":337},"\u002Fdocs\u002Fintegrations\u002Fvertex","Vertex",[37,340,341,344,347],{},[55,342,343],{},"OpenAI Assistants (hosted)",[55,345,346],{},"Run\u002FStep polling or webhook",[55,348,349],{},[66,350,352],{"href":351},"\u002Fdocs\u002Fintegrations\u002Fopenai-assistants","Assistants",[19,354,356],{"id":355},"universal-escape-hatches","Universal escape hatches",[31,358,359,371],{},[34,360,361],{},[37,362,363,366,369],{},[40,364,365],{},"Surface",[40,367,368],{},"What we ship",[40,370,48],{},[50,372,373,393,407],{},[37,374,375,382,387],{},[55,376,377,378,381],{},"OpenTelemetry (",[24,379,380],{},"gen_ai.*"," semconv)",[55,383,384],{},[24,385,386],{},"@iqrar\u002Fotel-exporter",[55,388,389],{},[66,390,392],{"href":391},"\u002Fdocs\u002Fintegrations\u002Fopentelemetry","OpenTelemetry",[37,394,395,398,401],{},[55,396,397],{},"Model Context Protocol (MCP)",[55,399,400],{},"Iqrar MCP server",[55,402,403],{},[66,404,406],{"href":405},"\u002Fdocs\u002Fintegrations\u002Fmcp","MCP",[37,408,409,412,415],{},[55,410,411],{},"Direct HTTP",[55,413,414],{},"the wire format itself",[55,416,417],{},[66,418,420],{"href":419},"\u002Fdocs\u002Fintegrations\u002Fhttp","HTTP API",[14,422,424],{"id":423},"what-every-integration-does","What every integration does",[10,426,427],{},"Regardless of platform, the integration shape is the same:",[429,430,431,454,460,466,472],"ol",{},[432,433,434,438,439,442,443,442,446,449,450,453],"li",{},[435,436,437],"strong",{},"Register"," the agent once at startup with ",[24,440,441],{},"org",", ",[24,444,445],{},"jurisdiction",[24,447,448],{},"capabilities",", and a stable ",[24,451,452],{},"agent_id",".",[432,455,456,459],{},[435,457,458],{},"Fetch + cache"," the regulator-published ruleset for your jurisdiction; the SDK self-classifies your risk tier from your declared capabilities.",[432,461,462,465],{},[435,463,464],{},"Emit telemetry"," on each invocation, tool call, and decision. Below Tier 3 the SDK summarises payloads automatically.",[432,467,468,471],{},[435,469,470],{},"Sync verbosity"," from the regulator-issued runtime directives every 30 seconds (or on demand) without redeploying.",[432,473,474,477,478,481],{},[435,475,476],{},"Disclose"," AI use to consumers via the canonical ",[24,479,480],{},"disclose()"," string when your tier requires it (Article 50 \u002F §11).",[10,483,484,485,488,489,492,493,496],{},"The framework adapters above just wire those five steps into whatever lifecycle hooks your platform exposes — ",[24,486,487],{},"step_callback"," for CrewAI, ",[24,490,491],{},"BaseCallbackHandler"," for LangChain, ",[24,494,495],{},"RunHooks"," for the OpenAI Agents SDK, the v0.4 event bus for AutoGen, and so on. Your call sites stay unchanged.",[14,498,500],{"id":499},"authentication","Authentication",[10,502,503,504,507,508,511,512,516,517,520],{},"The integrations above all accept the optional ",[24,505,506],{},"apiKey"," config field (read automatically from ",[24,509,510],{},"IQRAR_API_KEY"," on most stacks). It's required once your org has been ",[66,513,515],{"href":514},"\u002Fdocs\u002Fcoding-agents","claimed via the onboarding flow"," — until then, the API treats your org as observability-only and accepts unauthenticated traffic. The SDK forwards the key as ",[24,518,519],{},"Authorization: Bearer iqr_…"," on every call.",[522,523,528],"pre",{"className":524,"code":525,"language":526,"meta":527,"style":527},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const iqrar = Iqrar({\n  org: \"acme\",\n  jurisdiction: \"AE\",\n  apiKey: process.env.IQRAR_API_KEY,\n});\n","ts","",[24,529,530,557,580,597,619],{"__ignoreMap":527},[531,532,535,539,543,547,551,554],"span",{"class":533,"line":534},"line",1,[531,536,538],{"class":537},"spNyl","const",[531,540,542],{"class":541},"sTEyZ"," iqrar ",[531,544,546],{"class":545},"sMK4o","=",[531,548,550],{"class":549},"s2Zo4"," Iqrar",[531,552,553],{"class":541},"(",[531,555,556],{"class":545},"{\n",[531,558,560,564,567,570,574,577],{"class":533,"line":559},2,[531,561,563],{"class":562},"swJcz","  org",[531,565,566],{"class":545},":",[531,568,569],{"class":545}," \"",[531,571,573],{"class":572},"sfazB","acme",[531,575,576],{"class":545},"\"",[531,578,579],{"class":545},",\n",[531,581,583,586,588,590,593,595],{"class":533,"line":582},3,[531,584,585],{"class":562},"  jurisdiction",[531,587,566],{"class":545},[531,589,569],{"class":545},[531,591,592],{"class":572},"AE",[531,594,576],{"class":545},[531,596,579],{"class":545},[531,598,600,603,605,608,610,613,615,617],{"class":533,"line":599},4,[531,601,602],{"class":562},"  apiKey",[531,604,566],{"class":545},[531,606,607],{"class":541}," process",[531,609,453],{"class":545},[531,611,612],{"class":541},"env",[531,614,453],{"class":545},[531,616,510],{"class":541},[531,618,579],{"class":545},[531,620,622,625,628],{"class":533,"line":621},5,[531,623,624],{"class":545},"}",[531,626,627],{"class":541},")",[531,629,630],{"class":545},";\n",[10,632,633,634,637,638,453],{},"If a request to a claimed org arrives without a matching key, the worker responds ",[24,635,636],{},"401","; with a key that belongs to a different org, ",[24,639,640],{},"403",[14,642,644],{"id":643},"dont-see-your-platform","Don't see your platform?",[10,646,647,648,650,651,657,658,660,661,442,664,442,667,669],{},"The TS and Python SDKs both expose ",[24,649,159],{}," which transparently proxies any callable or class instance. If your platform exposes a structured event stream we should write an adapter for, ",[66,652,656],{"href":653,"rel":654},"https:\u002F\u002Fgithub.com\u002Fiqrar\u002Fiqrar\u002Fissues",[655],"nofollow","open an issue"," — or just call the ",[66,659,420],{"href":419}," directly. Three endpoints (",[24,662,663],{},"\u002Fregister",[24,665,666],{},"\u002Frules\u002F\u003Cj>",[24,668,277],{},") cover 90% of integrations.",[671,672,673],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":527,"searchDepth":559,"depth":559,"links":675},[676,684,685,686],{"id":16,"depth":559,"text":17,"children":677},[678,680,682,683],{"id":21,"depth":582,"text":679},"TypeScript \u002F JavaScript — @iqrar\u002Fagent",{"id":168,"depth":582,"text":681},"Python — iqrar-agent",{"id":270,"depth":582,"text":271},{"id":355,"depth":582,"text":356},{"id":423,"depth":559,"text":424},{"id":499,"depth":559,"text":500},{"id":643,"depth":559,"text":644},"Drop Iqrar into any AI agent codebase — TypeScript, Python, hosted platforms, OpenTelemetry, MCP. Same wire format, same dashboard, every framework.","md",{},{"title":5,"order":691},15,"\u002Fdocs\u002Fintegrations",{"title":5,"description":687},"docs\u002Fintegrations\u002Findex","fDajuZVNqune1sOGVH9CAEGA5nr6CuJRaewrLQ2FPzU",1781253131675]