API Documentation
Integrate Clairo's AI agents into your application via REST API. Requires the Max plan.
Authentication
All API requests require a Bearer token. Generate an API key from the dashboard: Settings → API Keys.
API keys start with clr_
curl -H "Authorization: Bearer clr_your_api_key" \
https://clairo.tech/api/v1/agentsImportant: API access requires the Max plan (€190/month). Keep your keys secret — never expose them in client-side code.
Agents
/api/v1/agentsReturns a list of all your agents.
Example response:
{
"agents": [
{
"id": "cm1abc...",
"name": "Support Bot",
"type": "SUPPORT",
"isActive": true,
"description": "Customer support agent",
"createdAt": "2026-01-15T10:00:00Z"
}
]
}Chat
/api/v1/chatSend a message to a Support agent and receive an AI response.
Request body:
{
"agentId": "cm1abc...",
"message": "What are your business hours?",
"conversationId": "optional-existing-id"
}Example response:
{
"reply": "We are open Monday to Friday, 9am-6pm.",
"conversationId": "cm2xyz..."
}Pass conversationId to continue an existing conversation. If omitted, a new one will be created.
Discovery
/api/v1/discoverSend an answer to a Discovery agent. Returns the next question or completion.
{
"agentId": "cm1def...",
"message": "We have 50 employees",
"conversationId": "optional-existing-id"
}Example response:
{
"reply": "What is your monthly software budget?",
"conversationId": "cm2abc...",
"progress": 60,
"completed": false
}Conversations
/api/v1/conversationsReturns a list of conversations. Supports filtering by agent.
Query parameters:
| Parameter | Type | Description |
|---|---|---|
| agentId | string | Filter by agent (optional) |
| limit | number | Number of results (default: 50) |
/api/v1/conversations/{id}Returns details of a specific conversation with all messages.
{
"id": "cm2xyz...",
"agentId": "cm1abc...",
"status": "ACTIVE",
"messages": [
{ "role": "user", "content": "Hello!", "createdAt": "..." },
{ "role": "assistant", "content": "Hi! How can I help?", "createdAt": "..." }
]
}Briefs (Discovery)
/api/v1/briefsReturns briefs from Discovery conversations.
{
"briefs": [
{
"id": "cm3abc...",
"agentId": "cm1def...",
"conversationId": "cm2ghi...",
"summary": "John Smith, CEO of TechStart. Looking for AI chatbot for support. Budget: $50-100/month.",
"createdAt": "2026-04-01T14:30:00Z"
}
]
}/api/v1/briefs/{id}Returns details of a specific brief.
{
"id": "cm3abc...",
"summary": "...",
"answers": { ... },
"conversation": { "id": "...", "messages": [...] }
}Meetings
/api/v1/meetingsSubmit audio for transcription and summarization.
Send multipart/form-data with an audio file (webm, mp3, wav). Max size: 25MB.
curl -X POST \
-H "Authorization: Bearer clr_your_api_key" \
-F "agentId=cm1ghi..." \
-F "audio=@meeting.webm" \
-F "title=Weekly standup" \
https://clairo.tech/api/v1/meetingsExample response:
{
"id": "cm4abc...",
"title": "Weekly standup",
"transcript": "Full meeting transcript...",
"summary": "Summary with key points and action items...",
"durationSec": 2700
}Error Handling
The API returns standard HTTP status codes. Error responses always include an error field.
| Code | Description |
|---|---|
| 400 | Bad Request — check your parameters |
| 401 | Invalid or missing API key |
| 403 | Forbidden — requires Max plan |
| 404 | Resource not found |
| 429 | Too many requests — slow down |
| 500 | Internal server error |
{
"error": "Missing or invalid Authorization header. Use: Bearer clr_..."
}Rate Limits
The API is limited to 1,000 requests per minute per business. Limits are returned in response headers.
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per minute |
| X-RateLimit-Remaining | Remaining requests in current window |
| X-RateLimit-Reset | Unix timestamp when the limit resets |
Quick Start
Example with JavaScript (Node.js):
const API_KEY = "clr_your_api_key";
const BASE_URL = "https://clairo.tech/api/v1";
// Send a chat message
const response = await fetch(`${BASE_URL}/chat`, {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
agentId: "your_agent_id",
message: "What products do you offer?",
}),
});
const data = await response.json();
console.log(data.reply);Example with Python:
import requests
API_KEY = "clr_your_api_key"
BASE_URL = "https://clairo.tech/api/v1"
response = requests.post(
f"{BASE_URL}/chat",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"agentId": "your_agent_id",
"message": "What products do you offer?",
},
)
data = response.json()
print(data["reply"])