HTTP API
The Iqrar wire format — three endpoints (register, rules, telemetry) cover 90% of integrations. Use this when no SDK or adapter exists for your stack.
The SDKs are convenience wrappers around a small JSON HTTP API. Anything that can make a network request can integrate.
Endpoints
POST /register
Register an agent. Idempotent — calling it again with the same agent_id is a no-op on the agent record but refreshes the rule_hash.
POST /register
content-type: application/json
{
"agent_id": "support-bot-prod",
"org": "acme",
"jurisdiction": "EU",
"name": "Support bot · production",
"model": "gpt-4o",
"tools": ["search", "fetch"],
"capabilities": ["consumer_chatbot"]
}
Response:
{
"ok": true,
"rule_hash": "abc123...",
"verbosity": "normal",
"channels": []
}
GET /rules/<jurisdiction>
Returns the active ruleset for a jurisdiction (or a signed bundle envelope when the deployment is in signed mode). The SDK fetches this on register and on every rule_hash drift.
GET /policies/<org>
Returns the org-level policy overlay (optional — 404 is fine).
POST /telemetry
POST /telemetry
content-type: application/json
{
"agent_id": "support-bot-prod",
"events": [
{
"type": "agent.invocation.start",
"ts": 1746478291000,
"agent_id": "support-bot-prod",
"rule_hash": "abc123...",
"payload": { "name": "chat.completions.create" }
}
]
}
Events are batched and durably enqueued before the response returns.
GET /agents/<agent_id>/sync
Polls for verbosity drift and rule_hash changes. The SDK calls this every 30 seconds.
{ "verbosity": "debug", "rule_hash": "def456..." }
Canonical event types
| Event | When |
|---|---|
agent.classified | Once after register, when tier is computed |
agent.invocation.start / .end / .error | Around any wrapped or observed call |
agent.tool.start / .end / .error | Tool calls |
agent.step | Per-step events from CrewAI / LangChain agent actions |
agent.handoff | Multi-agent handoffs |
decision.made | Tier 3+ decisions (full payload retention) |
human_review.recorded | Human review of a prior decision |
agent.verbosity_changed | Sync loop picked up a verbosity change |
See also
· ·