orqAgent
Everything you need to create, configure, and integrate AI agents into your product — without writing infrastructure code.
Introduction
orqAgent is a no-code platform that lets you build custom AI agents powered by models like Claude, GPT-4, and Gemini. Each agent has its own personality, knowledge base, guardrails, and REST API endpoint — ready to embed in any product in minutes.
Custom agents
Configure model, tone, system prompt, and persona
Knowledge base
Upload PDFs and text files — the agent cites them automatically
REST API
Call any agent from your app with a single HTTP request
Quick Start
From sign-up to your first API call in under 5 minutes.
Create your account
Create your first agent
Test it in the Playground
Generate an API key
Make your first API call
curl -X POST https://your-domain.com/api/agents/{agent_id}/run \
-H "Content-Type: application/json" \
-H "X-API-Key: orq_your_api_key" \
-d '{"user_input": "Hello!"}'Creating an Agent
An agent is the core building block. It bundles a model, a personality, and optional capabilities (knowledge base, guardrails, rate limits) into a single deployable unit.
Basic settings
| Field | Type | Description |
|---|---|---|
| Namerequired | string | Display name — used in the dashboard and analytics. |
| Description | string | Short description of what the agent does. |
| Modelrequired | enum | LLM to use: Claude Haiku / Sonnet / Opus, GPT-4, Gemini 2.0 Flash. |
| Temperature | float | Creativity level — 0 is deterministic, 1 is most creative. Default 0.7. |
| Max tokens | integer | Maximum tokens in a single response. Default 1024. |
| System promptrequired | text | Core instructions the model always follows. This is the heart of your agent. |
Persona fields
Persona fields let you shape how the agent behaves without cluttering the system prompt.
| Field | Type | Description |
|---|---|---|
| Role | string | The agent's job title, e.g. "Customer Support Specialist". |
| Tone | enum | Professional · Friendly · Concise · Technical · Creative |
| Language | string | Language the agent responds in (e.g. "French", "Spanish"). |
| Constraints | text | Hard rules — e.g. "Never discuss competitors. Always end with a CTA." |
| Welcome message | text | First message shown in the Playground and in embedded widgets. |
Advanced options
| Field | Type | Description |
|---|---|---|
| Response format | enum | text · markdown · json · bullet_points — controls output structure. |
| JSON schema | text | When format is JSON, paste a JSON Schema to enforce the response shape. |
| Rate limit/min | integer | Maximum calls per minute from a single session. |
| Rate limit/day | integer | Maximum calls per day across all sessions. |
| Max tokens/response | integer | Overrides the global max_tokens for this agent's API responses. |
Playground
The Playground is a fully-featured chat interface wired directly to your agent — same model, same system prompt, same knowledge base as the live API. Use it to iterate on prompts before going to production.
Knowledge Base
Upload documents and your agent automatically retrieves the most relevant chunks for each user question. This is done via retrieval-augmented generation (RAG) — no manual prompt engineering required.
Supported formats
How it works
API Keys
API keys let your backend or external tools call any of your agents over HTTP without going through the dashboard UI.
Creating a key
1. Go to API Keys in the sidebar.
2. Click Create key and enter a descriptive name (e.g. "Production backend").
3. Copy the key immediately — it starts with orq_ and is shown only once.
Key properties
| Field | Type | Description |
|---|---|---|
| Prefix | string | First 10 characters — shown in the dashboard to identify a key. |
| call_count | integer | Total number of API calls made with this key. |
| last_used_at | datetime | Timestamp of the most recent call. |
| expires_at | datetime | Optional expiry date. Expired keys are automatically rejected. |
| is_active | boolean | Disable a key temporarily without revoking it. |
REST API Reference
Every agent exposes a simple HTTP endpoint. Authenticate with your API key in theX-API-Key header.
/api/agents/{agent_id}/runRequires API keySend a message to an agent and receive a response. The conversation history is automatically maintained when you reuse the same session_id.
Authentication
X-API-Key: orq_your_api_key_hereRequest body
| Field | Type | Description |
|---|---|---|
| user_inputrequired | string | The user's message. 1–10 000 characters. |
| session_id | string | Conversation session identifier (max 128 chars). Pass the same value across turns to maintain history. Omit for one-shot calls. |
Response body
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique run identifier. |
| agent_response | string | The agent's reply text. |
| session_id | string | Echo of the session_id used for this run. |
| prompt_tokens | integer | Tokens consumed by the input (system prompt + history + user message). |
| completion_tokens | integer | Tokens in the agent's response. |
| cost | string | Estimated USD cost for this run (6 decimal places). |
| latency_ms | integer | Wall-clock latency of the LLM call in milliseconds. |
| status | string | "success" | "error" | "timeout" | "rate_limited" |
| used_knowledge_base | boolean | True if document chunks were injected into this run. |
| chunks_injected | integer | Number of KB chunks included in the context. |
Example — cURL
curl -X POST https://your-domain.com/api/agents/YOUR_AGENT_ID/run \
-H "Content-Type: application/json" \
-H "X-API-Key: orq_your_api_key" \
-d '{
"user_input": "What is your return policy?",
"session_id": "user-abc-session-1"
}'Example — JavaScript (fetch)
const response = await fetch(
`https://your-domain.com/api/agents/${AGENT_ID}/run`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.ORQ_API_KEY,
},
body: JSON.stringify({
user_input: userMessage,
session_id: sessionId, // keep across turns for memory
}),
}
);
const data = await response.json();
console.log(data.agent_response);Example — Python
import httpx, os
BASE_URL = "https://your-domain.com"
AGENT_ID = "your-agent-id"
API_KEY = os.environ["ORQ_API_KEY"]
def chat(user_input: str, session_id: str) -> str:
r = httpx.post(
f"{BASE_URL}/api/agents/{AGENT_ID}/run",
headers={"X-API-Key": API_KEY},
json={"user_input": user_input, "session_id": session_id},
timeout=30,
)
r.raise_for_status()
return r.json()["agent_response"]
reply = chat("Summarise your pricing plans.", "session-42")
print(reply)Public agent endpoint (no auth)
If you've toggled Public on an agent, it can be called without an API key. Usage is still billed to your account.
/api/public/agents/{agent_id}/chatNo auth required# No API key needed — works from any browser or server
curl -X POST https://your-domain.com/api/public/agents/YOUR_AGENT_ID/chat \
-H "Content-Type: application/json" \
-d '{"user_input": "Hello!"}'Error codes
| Field | Type | Description |
|---|---|---|
| 400 | Bad Request | Input blocked by guardrail, or invalid request body. |
| 401 | Unauthorized | Missing or invalid API key. |
| 403 | Forbidden | Agent is private, disabled, or not owned by this key's user. |
| 404 | Not Found | Agent ID does not exist. |
| 429 | Too Many Requests | Rate limit exceeded (per-minute or per-day). |
| 502 | Bad Gateway | LLM provider returned an error — retry with exponential backoff. |
Guardrails
Guardrails are automatic input filters that block toxic, harmful, or off-topic messages before they reach the LLM — protecting your quota and your users.
What gets blocked
When a guardrail fires
The API returns HTTP 400 with a clear error message. The run is still logged with blocked_by_guardrail: true so you can track block rates in the Analytics tab.
{
"error": "Input blocked by content guardrail",
"code": "GUARDRAIL_BLOCKED"
}Plans & Limits
- 3 agents
- 500 runs / month
- All models available
- Knowledge base (up to 5 docs)
- API key access
- Community support
- Unlimited agents
- 10 000 runs / month
- All models available
- Knowledge base (unlimited docs)
- Priority support
- Advanced analytics
HTTP 429 with code QUOTA_EXCEEDED. Upgrade to Pro from the Pricing page.