Vorena AI API Reference
Use the Vorena public API to integrate your conversations, contacts, pipelines, knowledge base, and analytics with external systems.
OpenAPI spec available at /api/v1/openapi
Authentication
All API requests require a valid API key sent via the Authorization header. API keys can be created from Settings → API Keys in your dashboard.
Authorization: Bearer vk_live_your_api_key_here
Rate Limits
API requests are limited to 20 requests per minute per API key. Exceeding this limit returns a 429 status code.
Quick Start
const response = await fetch("https://vorena-ai.com/api/v1/contacts", {
headers: {
"Authorization": "Bearer vk_live_your_api_key_here",
"Content-Type": "application/json",
},
});
const { data, pagination } = await response.json();
console.log(data); // Array of contactsAccount
/api/v1/meReturns the authenticated client's ID and business name. Used by plugins for verification.
(any valid key){ "clientId": "uuid", "businessName": "Apex Fitness Studio" }Contacts
/api/v1/contactsList contacts (leads) for your account.
contacts:read{
"data": [{ "id": "uuid", "name": "Jane Smith", "email": "jane@example.com", "status": "new", ... }],
"pagination": { "page": 1, "limit": 20, "total": 128 }
}/api/v1/contactsCreate a new contact. Requires name and email.
contacts:write{ "name": "Jane Smith", "email": "jane@example.com", "phone": "+15551234567", "source": "api" }// 201 Created
{ "data": { "id": "uuid", "name": "Jane Smith", "email": "jane@example.com", "status": "new", ... } }/api/v1/contacts/:idGet a single contact by ID.
contacts:read{ "data": { "id": "uuid", "name": "Jane Smith", "email": "jane@example.com", "form_data": {...}, ... } }/api/v1/contacts/:idUpdate a contact's name, email, phone, or status.
contacts:write{ "name": "Jane Doe", "status": "qualified" }{ "data": { "id": "uuid", "name": "Jane Doe", "status": "qualified", ... } }/api/v1/contacts/:idDelete a contact.
contacts:write{ "success": true }Conversations
/api/v1/conversationsList conversations for your account.
conversations:read{
"data": [{ "id": "uuid", "visitor_id": "visitor-123", "status": "active", "started_at": "2026-01-15T10:30:00Z", ... }],
"pagination": { "page": 1, "limit": 20, "total": 42 }
}/api/v1/conversationsCreate a new conversation.
conversations:write{ "visitor_id": "visitor-456", "metadata": { "source": "api" } }// 201 Created
{ "data": { "id": "uuid", "visitor_id": "visitor-456", "status": "active", ... } }/api/v1/conversations/:idGet a single conversation with escalation details.
conversations:read{ "data": { "id": "uuid", "escalated": false, "escalated_reason": null, ... } }/api/v1/conversations/:id/messagesList messages within a conversation.
conversations:read{
"data": [{ "id": "uuid", "role": "user", "content": "Hello!", "created_at": "..." }],
"pagination": { "page": 1, "limit": 20, "total": 15 }
}/api/v1/conversations/:id/messagesAdd a message to a conversation. Role must be user, assistant, or admin.
conversations:write{ "role": "admin", "content": "A human agent has joined the chat." }// 201 Created
{ "data": { "id": "uuid", "role": "admin", "content": "A human agent has joined the chat.", ... } }Pipelines
/api/v1/pipelinesList pipelines for your account, including row counts.
pipelines:read{
"data": [{ "id": "uuid", "name": "Sales Pipeline", "stages": ["Lead", "Qualified", "Closed"], "row_count": 34, ... }]
}/api/v1/pipelines/:idGet a single pipeline with its column definitions.
pipelines:read{ "data": { "id": "uuid", "name": "Sales Pipeline", "columns": [...], "row_count": 34, ... } }/api/v1/pipelines/:id/rowsList rows in a pipeline.
pipelines:read{
"data": [{ "id": "uuid", "data": { "name": "Acme Corp", "stage": "Qualified" }, "source_type": "api", ... }],
"pagination": { "page": 1, "limit": 20, "total": 34 }
}/api/v1/pipelines/:id/rowsCreate a new row in a pipeline.
pipelines:write{ "data": { "name": "Acme Corp", "stage": "Lead", "value": 5000 }, "source_ref": "crm-123" }// 201 Created
{ "data": { "id": "uuid", "data": { "name": "Acme Corp", ... }, "source_type": "api", ... } }/api/v1/pipelines/:id/rows/:rowIdUpdate a pipeline row. Set merge=true to merge with existing data instead of replacing.
pipelines:write{ "data": { "stage": "Closed", "value": 7500 }, "merge": true }{ "data": { "id": "uuid", "data": { "name": "Acme Corp", "stage": "Closed", "value": 7500 }, ... } }/api/v1/pipelines/:id/rows/:rowIdDelete a pipeline row.
pipelines:write{ "success": true }Knowledge Base
/api/v1/knowledgeList knowledge base documents.
knowledge:read{
"data": [{ "id": "uuid", "title": "FAQs", "type": "faq", "status": "processed", "chunk_count": 12, ... }],
"pagination": { "page": 1, "limit": 20, "total": 5 }
}/api/v1/knowledgeAdd a text-based knowledge document. Type can be text, faq, or url.
knowledge:write{ "title": "Return Policy", "content": "We offer 30-day returns...", "type": "text" }// 201 Created
{ "data": { "id": "uuid", "title": "Return Policy", "type": "text", "status": "pending", ... } }/api/v1/knowledge?id=:idDelete a knowledge document by ID (pass as query parameter).
knowledge:write{ "success": true }Analytics
/api/v1/analyticsGet conversation and lead analytics summary.
analytics:read{
"data": {
"period": "30d",
"conversations": { "total": 342, "period": 87, "escalated": 3 },
"leads": { "total": 128, "period": 31, "hot": 8, "warm": 15, "cold": 105 }
}
}Error Codes
| Status | Meaning |
|---|---|
| 400 | Invalid request body or parameters |
| 401 | Invalid or missing API key |
| 403 | API key lacks the required scope |
| 404 | Resource not found or does not belong to your account |
| 429 | Rate limit exceeded (20 requests/minute) |
| 500 | Internal server error |
Webhooks
Configure webhooks in Dashboard → Integrations → Webhooks to receive real-time event notifications. Available on Elite and Enterprise plans.
| Event | Fired when |
|---|---|
| lead.created | New lead captured via widget or API |
| lead.scored | Lead score changes (hot/warm/cold) |
| followup.sent | Follow-up email or SMS sent |
| conversation.escalated | Conversation escalated to human agent |
| row.created | Pipeline row created |
| row.updated | Pipeline row updated |
| row.deleted | Pipeline row deleted |
| rule.triggered | Automation rule triggered |
Every webhook includes an X-Vorena-Signature HMAC-SHA256 header for verification. Failed deliveries retry up to 3 times with exponential backoff.