RylvoRylvo
API Documentation

Rylvo API Reference

One endpoint. Full workflow control. Integrate stage detection, action selection, verification, and escalation into your application in minutes.

Quick Start

Video coming soon

Click to preview (placeholder)

Make your first API call in under a minute. You need your company_id, bot_id, and API key from the dashboard.

bash
curl -X POST https://rylvo.com/api/v1/respond \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "company_id": "your_company_id",
    "bot_id": "your_bot_id",
    "session_id": "session_001",
    "workflow_id": "support_triage",
    "current_user_message": "I can't access my account."
  }'

Access Model

Video coming soon

Click to preview (placeholder)

Rylvo currently exposes two surfaces. Knowing which one to use for what avoids confusion when integrating from a backend vs operating the platform day-to-day.

Public RESTFor runtime integration

Call from your backend with an X-API-Key. This is the decisioning surface you ship in production.

  • POST /v1/respond
  • GET /v1/status, /v1/models/available
  • GET /v1/traces, /v1/sessions, /v1/analytics/*
  • /v1/connectors/* (full CRUD)
  • /health, /ready, /live, /flags
DashboardFor configuration & operations

Manage from app.rylvo.com/dashboard. External REST wrappers for these are on the roadmap.

  • Bots, Prompts, Guardrails, Knowledge Base
  • Workspace Architect, Bot Chat, Bot Tests
  • Edge Cases, Red Team, Automation, Reports
  • Mission Control, Agent Evolution, Agent Skills, MCP Hub
  • Billing, Team, API Keys, Provider Keys (BYOK)

Sections below marked with Dashboard-only do not yet have a public REST endpoint. They remain fully functional inside the dashboard and their behavior affects the /v1/respond runtime.

Authentication

Video coming soon

Click to preview (placeholder)

All API requests require an API key sent in the X-API-Key header. Create keys from your dashboard.

http
X-API-Key: rylvo_sk_live_abc123...

Security: Never expose API keys in client-side code. Always call the API from your backend.

Provider Keys (BYOK)Dashboard-only

Video coming soon

Click to preview (placeholder)

Every bot chat on Rylvo runs on your own LLM provider key. Rylvo never charges your provider account - the request goes directly to your chosen provider (OpenAI / Anthropic / Google / DeepSeek / xAI / OpenRouter) with your key. Manage keys in Settings → LLM Provider Keys.

Bot Chat, Group Chat, Bot Tests

Route to the customer's own provider key. Requires either the matching direct-provider key (e.g. Anthropic for anthropic/* models) or an OpenRouter universal key. Without a key the UI blocks the chat and surfaces a CTA.

Workspace Architect

Uses Rylvo's own server-side key - you don't need to add anything to run the Architect. Only the bots it creates need BYOK before you can chat with them.

Key resolution order

  1. If you configured the bot's native provider (e.g. Anthropic for an anthropic/claude-sonnet-4.6 bot), that key is used and the request goes directly to api.anthropic.com.
  2. Otherwise, if you configured an OpenRouter universal key, the request is routed through OpenRouter so any model works with a single key.
  3. Otherwise, the bot is not chattable - the chat UI shows a banner asking you to add a key.

Supported providers

  • OpenRouter - universal, covers every model
  • OpenAI - openai/*
  • Anthropic - anthropic/* (native Messages API adapter)
  • Google Gemini - google/* (native generateContent adapter)
  • DeepSeek - deepseek/*
  • xAI (Grok) - x-ai/*

Access & security

  • Write/delete restricted to org admins.
  • Read allowed for all org members so operators can chat with bots.
  • Keys never leave Firestore + the route handler - never exposed to page HTML.
  • Key rotation automatically resets verification state.

Test before you ship

The Settings page has a Test button next to every saved key. It sends a 4-token ping (< $0.001) to the provider and reports auth / rate-limit / network errors inline, plus round-trip latency. Use Test all to re-verify every configured key at once - ideal after a key rotation.

Bot Tagging (Mandatory)

Video coming soon

Click to preview (placeholder)

Required: Every API request must include a bot_id field. Requests without a valid bot_id will be rejected with a 422 error.

Bots are the primary organizational unit for your API usage. Each bot represents a distinct agent or use case (e.g. "Support Triage Bot", "Sales Qualifier Bot"). Create bots from your dashboard, then use the bot ID to tag every API call.

How it works

1

Create a bot

Go to Dashboard → Bots → New Bot. Give it a name and description.

2

Copy the bot ID

Each bot gets a unique ID. Copy it from the bot card.

3

Tag every API request

Include "bot_id": "your_bot_id" in the request body.

4

View per-bot analytics

Filter traces, analytics, and billing by bot.

Example request with bot_id

json
{
  "company_id": "comp_001",
  "bot_id": "bot_abc123def456",
  "session_id": "sess_001",
  "workflow_id": "support_triage",
  "current_user_message": "I can't access my account."
}

Benefits of bot tagging

Per-bot analytics

View metrics, latency, and error rates per bot

Trace grouping

Filter and search traces by bot name

Key association

Link API keys to specific bots

Access control

Manage permissions per bot

Bot Chat PlaygroundDashboard-only

Video coming soon

Click to preview (placeholder)

Test a bot's behavior end-to-end before pointing production traffic at it. The playground at /dashboard/bots/[botId]/chat assembles the full runtime exactly like /v1/respond does: system prompts, placeholders, guardrails, connectors, KB connections, and evolution rules.

Every turn captures

  • Active prompt IDs + resolved placeholders
  • Guardrails evaluated (and which triggered)
  • Connectors invoked + request/response bodies
  • Evolution rules injected into the system prompt
  • Stage & action selected, verification outcome
  • Token usage + cost (uses prepaid balance)

Good for

  • Reproducing a failure from a trace replay
  • Iterating on a prompt before promoting to active
  • Verifying a new guardrail actually fires
  • Comparing two bots side-by-side (/dashboard/bots/[botId]/compare)

Each playground turn shows the prompt stack, guardrail decisions, connector calls, evolution rules applied, stage & action chosen, verification outcome, operator whispers, token usage, and cost - all alongside the message itself.

Bot TestsDashboard-only

Video coming soon

Click to preview (placeholder)

Define reusable test cases per bot and run them on demand or via an Automation schedule. Manage at /dashboard/bots/[botId]/tests.

A test case specifies

  • Input message (single-turn) or a scripted multi-turn conversation
  • Expected stage / action / verification outcome
  • Guardrails that should or must not trigger
  • Assertions on output text (contains, regex, semantic similarity)
  • Optional pre-populated structured_state

A test run produces

  • Pass/fail per case with diff against expectations
  • Token usage & cost for the whole run
  • Full trace links for every case (for debugging)
  • A summary you can attach to a report or alert channel

Failed test cases can be converted into Edge Cases so the engine tracks them through the detect → classify → fix → verify loop.

Agent Groups (Multi-Bot Teams)Dashboard-only

Video coming soon

Click to preview (placeholder)

Compose multiple bots into a team where one bot routes, delegates, and merges results from specialists. Useful for workflows that span domains (e.g. billing + technical support) or require parallel drafts.

Group modes

  • Router - one bot picks the best specialist per turn
  • Sequential - bots run in a fixed pipeline
  • Parallel - bots run simultaneously, a merger summarises
  • Round-robin - alternates bots across turns

Each member contributes

  • Its own prompts, guardrails, connectors, KB scope
  • An attached role/persona (e.g. billing_specialist)
  • Its own trace - the group trace links all of them

Group chats record which member bots contributed to each turn and how routing decisions were made, so you can debug who said what and why.

Endpoints

Video coming soon

Click to preview (placeholder)

MethodPathDescription
POST/v1/respondPrimary decision endpoint
GET/v1/statusSystem status & capabilities
GET/v1/models/availableCustomer-facing model catalog with pricing
GET/v1/models/available/{model_id}Model detail
GET/v1/modelsInternal task → model registry (advanced)
GET/v1/traces/{trace_id}/replayReplay a past decision trace
GET/v1/sessions/{session_id}/tracesList traces for a session
GET/v1/analytics/companies/{company_id}/overviewCompany analytics rollup
GET/v1/analytics/companies/{company_id}/runsRecent decision runs
GET/healthLiveness (process alive)
GET/readyReadiness (can handle requests)
GET/liveUptime probe
GET/flagsRollout flags

Decision API

Video coming soon

Click to preview (placeholder)

The POST /v1/respond endpoint is the core of Rylvo. Send a user message with session context, and receive a complete workflow decision including stage prediction, next action, verification result, and response text.

Stage Detection

13 stages

Action Selection

30+ actions

Verification

Pass/Warn/Fail

Escalation

Auto-detect

Request Format

Video coming soon

Click to preview (placeholder)

json
{
  "company_id": "comp_001",
  "bot_id": "bot_abc123def456",
  "session_id": "sess_001",
  "workflow_id": "support_triage",
  "current_user_message": "The display shows error E42.",
  "current_structured_state": {
    "order_id": "ORD-12345-ABC",
    "identity_verified": true,
    "error_code": "E42"
  },
  "business_metadata": {
    "customer_tier": "premium"
  },
  "tool_mode": "auto",
  "memory_mode": "auto"
}

Required Fields

FieldTypeDescription
company_idstringYour company/tenant ID
bot_idstringBot identifier (from Dashboard → Bots)
session_idstringUnique conversation session ID
workflow_idstringWorkflow type (e.g., support_triage)
current_user_messagestringThe user's current message

Optional Fields

FieldTypeDescription
current_structured_stateobjectPre-collected state (order ID, error code)
business_metadataobjectBusiness context (tier, region)
allowed_actionsarrayRestrict to specific action IDs
prompt_idstringPrompt ID to use for this request (from Dashboard → Prompts)
tool_modestringauto | force | none
memory_modestringauto | read_only | disabled
prompt_overridesobjectOverride {{placeholder}} defaults per request
modelstringOverride model (e.g. rylvo-fast, openai/gpt-4.1-mini)
callbackobjectWebhook delivery config

Response Format

Video coming soon

Click to preview (placeholder)

json
{
  "id": "resp_a1b2c3d4e5f6",
  "workflow_id": "support_triage",
  "trace_id": "tr_def456",
  "stage_prediction": {
    "stage_id": "error_code_handling",
    "confidence": 0.92
  },
  "next_action": {
    "action_id": "lookup_error_code",
    "action_class": "tool_call",
    "confidence": 0.90,
    "rationale": "Error code detected, retrieving guidance."
  },
  "verification": {
    "status": "pass",
    "reason_codes": ["decision_verified"]
  },
  "escalation": {
    "should_escalate": false,
    "escalation_target": null,
    "reason_codes": []
  },
  "output_text": "I captured E42. Let me retrieve the matching guidance.",
  "confidence": 0.91,
  "trace_id": "tr_def456"
}

Key Response Fields

FieldDescription
stage_prediction.stage_idCurrent workflow stage
next_action.action_idSelected next action
next_action.action_classtool_call | clarification | escalation | handoff
verification.statuspass | warn | fail
escalation.should_escalateWhether human handoff is needed
output_textResponse text to show the user
confidenceCombined confidence score (0-1)
trace_idUnique ID for debugging & replay

Workflow Stages (13)

Video coming soon

Click to preview (placeholder)

greetingInitial contact, intent detection, routing
identity_collectionCollect and confirm user identity
serial_collectionGather product serial number
serial_validationValidate the collected serial
issue_clarificationGather issue details and symptoms
error_code_handlingError code lookup and guidance
kb_troubleshootingKnowledge base troubleshooting
feedback_collectionCapture user feedback on outcome
complaint_eligibilityComplaint eligibility check
complaint_registrationRegister a formal complaint
ticket_updateUpdate or close an existing ticket
escalationHuman handoff
session_closureSession wrap-up

Error Handling

Video coming soon

Click to preview (placeholder)

401

Authentication Error

Missing or invalid API key

402

Insufficient Balance

Prepaid USD balance is zero or below the minimum required to serve the request. Top up from Dashboard → Billing.

403

Forbidden

Valid key, but bot or feature is not permitted (e.g. bot disabled, plan gate, bot scoping).

404

Not Found

Company profile, bot, prompt, or resource not found

422

Validation Error

Invalid request body (e.g. missing bot_id)

429

Rate Limited

Too many requests - see X-RateLimit-Remaining header

500

Server Error

Internal processing error

json
// Error response format
{
  "error": {
    "type": "authentication_error",
    "message": "Missing X-API-Key header."
  }
}

Multi-Turn Example

Video coming soon

Click to preview (placeholder)

Rylvo tracks conversation state across turns using the session_id. Each turn builds on the previous state automatically.

Turn 1 - User reports issue

bash
curl -X POST https://rylvo.com/api/v1/respond \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"company_id":"comp_001","bot_id":"bot_abc123","session_id":"conv_001","workflow_id":"support_triage","current_user_message":"My subscription renewal failed."}'
# → stage: identity_collection, action: verify_identity

Turn 2 - User provides serial number

bash
curl -X POST https://rylvo.com/api/v1/respond \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"company_id":"comp_001","bot_id":"bot_abc123","session_id":"conv_001","workflow_id":"support_triage","current_user_message":"My serial is SN-98765-XYZ"}'
# → stage: serial_validation, action: run_serial_validation

Turn 3 - User wants escalation

bash
curl -X POST https://rylvo.com/api/v1/respond \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"company_id":"comp_001","bot_id":"bot_abc123","session_id":"conv_001","workflow_id":"support_triage","current_user_message":"I want to talk to a real person."}'
# → stage: escalation, action: handoff_to_human, escalation: true

Webhooks

Video coming soon

Click to preview (placeholder)

Receive async notifications after each decision by including a callback object in your request.

json
{
  "callback": {
    "target_url": "https://your-app.com/hooks/rylvo",
    "event_type": "workflow.decision.completed",
    "headers": { "Authorization": "Bearer your-token" },
    "include_full_response": true,
    "shared_secret": "hmac-signing-secret"
  }
}

Rate Limits

Video coming soon

Click to preview (placeholder)

These limits apply to direct POST /v1/respond calls. Bot chat launched from the dashboard uses your own BYOK provider key and is NOT rate-limited by Rylvo. Architect Credits (Workspace Architect, Agent Evolution, Prompt Auto-Optimization, Red Team) are metered separately by USD wallet - see pricing · credits.

PlanMonthly RequestsRate Limit
Free2,5003 req/s
Pro25,00010 req/s
Team500,00060 req/s
EnterpriseCustomCustom

Usage headers are included in every response: X-Plan-Requests-Remaining, X-RateLimit-Remaining

Billing & Usage

Video coming soon

Click to preview (placeholder)

Rylvo has a dual billing model: a monthly subscription plan covers platform capacity (bots, prompts, guardrails, KB sources, connectors, observability, SLA). On top of that, two independent wallets meter the work that actually runs:

Backend API balance

Prepaid USD for /v1/respond

Every decision call deducts based on actual input+output tokens. No markup, no commitment.

Architect Credits

Rylvo-paid AI (separate USD wallet)

Covers Workspace Architect, Agent Evolution reviewers, Prompt Auto-Optimization, Edge Case Engine, and Red Team. Monthly included grant + top-up packages. Bot chat on your own BYOK key is NOT metered here.

Cost formula (Backend API)

text
cost_usd = (input_tokens  × model.price_per_input_token)
         + (output_tokens × model.price_per_output_token)

Request lifecycle

1

Pre-check

Before invoking a model, the gateway checks that your org's balance is above the minimum for the requested model tier.

2

Invoke

Model runs. Token counts come back from the provider.

3

Record usage

A usage record is written (company, bot, model, tokens, cost) and the balance is atomically debited.

4

Respond

The HTTP response includes X-Plan-* and X-RateLimit-* headers plus the trace_id for follow-up.

5

Block on zero

If the new balance drops below the per-request minimum, subsequent calls return 402 until you top up.

Response headers on /v1/respond

HeaderMeaning
X-Plan-NameYour current plan (free | pro | team | enterprise)
X-Usage-PeriodISO period string for the current billing window
X-Plan-Requests-UsedRequests consumed in this period
X-Plan-Requests-RemainingRequests remaining before soft limit
X-Plan-Billable-Units-UsedCumulative billable units for the period
X-Plan-Soft-Limit-Reachedtrue when approaching plan soft cap
X-RateLimit-RemainingRequests left in the current rate-limit window
X-Callback-StatusDelivery status if callback was included

Top-up & ledger Dashboard-only

Top up in any amount from $5 to $10,000 at Dashboard → Billing. Every debit and credit is recorded in an immutable transactions ledger you can review and export from the Billing page (per-bot breakdown, model breakdown, date range, CSV).

402 responses indicate insufficient balance. Retry with exponential backoff is pointless - top up first, or enable Auto-Top-Up on the Billing page.

Traces & Analytics

Video coming soon

Click to preview (placeholder)

Every decision is traced. You can re-run any past decision (replay), list every turn in a session, and pull rollup analytics per company. These endpoints are public REST - they work with the same X-API-Key as /v1/respond.

Endpoints

MethodPathDescription
GET/v1/traces/{trace_id}/replayReturn the full replay payload for one trace (stage, action, verification, tool calls, timings)
GET/v1/sessions/{session_id}/traces?limit=50List every run in a session, newest first
GET/v1/analytics/companies/{company_id}/overview?limit=500&top_n=10Top stages/actions, escalation rate, avg latency over the window
GET/v1/analytics/companies/{company_id}/runs?limit=100Recent individual runs for a company

Replay example

bash
curl https://rylvo.com/api/v1/traces/tr_def456/replay \
  -H "X-API-Key: YOUR_API_KEY"

Dashboard note: richer per-chat traces (prompt stack, guardrail decisions, connector payloads, evolution rules applied, operator whispers) are stored alongside each playground/group chat message and are not yet exposed over REST. See Bot Chat Playground.

SDKs & Libraries

Video coming soon

Click to preview (placeholder)

Python

python
import requests

response = requests.post(
    "https://rylvo.com/api/v1/respond",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "company_id": "comp_001",
        "bot_id": "bot_abc123def456",
        "session_id": "sess_001",
        "workflow_id": "support_triage",
        "current_user_message": "I can't access my account.",
    },
)

data = response.json()
print(f"Stage: {data['stage_prediction']['stage_id']}")
print(f"Action: {data['next_action']['action_id']}")
print(f"Response: {data['output_text']}")

JavaScript / Node.js

javascript
const response = await fetch("https://rylvo.com/api/v1/respond", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": "YOUR_API_KEY",
  },
  body: JSON.stringify({
    company_id: "comp_001",
    bot_id: "bot_abc123def456",
    session_id: "sess_001",
    workflow_id: "support_triage",
    current_user_message: "I can't access my account.",
  }),
});

const data = await response.json();
console.log("Stage:", data.stage_prediction.stage_id);
console.log("Action:", data.next_action.action_id);
console.log("Response:", data.output_text);

PromptsDashboard-only

Video coming soon

Click to preview (placeholder)

Prompts are the instructions your agents follow at runtime. Create them from the Prompts dashboard, assign them to bots, and optionally enable self-improving optimization.

Key Concepts

Agent Categories

8 categories: Response Composer, Stage Classifier, Action Selector, Escalation Classifier, Session Summarizer, Verifier, Retrieval, Custom

Placeholders

Use {{key}} syntax for dynamic values resolved at runtime (company name, tone, language, etc.)

Self-Improving

Toggle auto-optimization to let the system generate, evaluate, and promote better prompt variants

Bot Assignment

Assign prompts to specific bots, or leave shared across all bots

Creating a Prompt

1

Choose an agent category

Select what type of agent this prompt controls (e.g., Response Composer, Verifier).

2

Write your prompt content

Use {{placeholder_key}} syntax for dynamic values. Templates are provided for each category.

3

Add placeholders

Define keys, labels, default values, and whether they're required. Use the template library for common ones.

4

Assign to a bot (optional)

Link the prompt to a specific bot, or leave it shared. Tag requests with prompt_id in the API.

5

Enable self-improving (optional)

Toggle auto-optimization in the prompt detail panel. Choose a strategy, metric, and frequency.

Placeholder Syntax

Placeholders use double-brace syntax: {{key}}. At runtime, they are resolved with values from the API request or defaults.

text
You are a support agent for {{company_name}}.

Greet the user as {{user_name}} in a {{tone}} tone.
Respond in {{language}}. Keep replies under {{max_length}} tokens.

{{context}}

Built-in Placeholder Templates

KeyDefaultDescription
{{company_name}}Acme CorpThe customer's company name
{{user_name}}JohnThe end user's display name
{{product_name}}Widget ProThe product being discussed
{{industry}}TechnologyThe customer's industry vertical
{{tone}}professionalResponse tone (formal, casual, empathetic)
{{language}}EnglishResponse language
{{max_length}}256Maximum response length in tokens
{{context}}-Additional context for the prompt

Version History

Every edit to a prompt creates a new version. Versions are tracked as manual or auto_optimized. You can view, compare, and promote any version to active from the prompt detail panel.

Resource VersioningDashboard-only

Video coming soon

Click to preview (placeholder)

Every runtime-affecting resource is versioned - not just prompts. Prompts, guardrails, connectors, evolution rules, and KB blueprints all track an immutable version history plus the source of each edit. You can diff, preview, promote, and rollback from the dashboard.

Edit sources

human

Manual edit by a teammate from the dashboard

architect

Applied via Workspace Architect (conversational setup / edit mode)

auto_generated

Produced by the Self-Improving optimizer or Agent Evolution rule generator

fix_proposal

Accepted from an Edge Case Engine fix proposal

system

Internal migration or default seed

red_team

Created in response to a red-team finding

What's versioned

Bots
Prompts
Guardrails
Connectors
Evolution Rules
KB Blueprints

What you can do from the dashboard

  • View the full edit history for any resource (who, what, when, why)
  • Diff any two versions side by side
  • Preview a version before promoting it to active
  • Promote any past version back to active in one click (rollback)
  • Filter history by source - manual, architect, auto-generated, etc.

Every runtime decision records which version was active when it ran, so you can correlate performance changes with specific edits - not just which resource was used, but which version of it.

Self-Improving PromptsDashboard-only

Video coming soon

Click to preview (placeholder)

Rylvo implements research-backed automatic prompt optimization. When enabled, the system continuously generates, evaluates, and selects better prompt variants using real performance data.

How It Works

1. Collect

The system gathers performance metrics from real API requests that use this prompt - success rate, verification pass rate, user satisfaction signals, and latency.

2. Generate

An optimizer LLM analyzes scored prompt history and proposes N improved variants. Each variant preserves all placeholders and the core intent, but tries a different improvement strategy.

3. Evaluate

Each variant is scored against your chosen metric. Scoring uses structural analysis, constraint quality, and historical performance patterns.

4. Select

The best-performing variant is identified. It must beat the current prompt by at least the improvement threshold (default 2%) to qualify.

5. Promote or Suggest

If auto-promote is on, the winner automatically becomes the active prompt. Otherwise, it appears in version history for manual review.

Optimization Strategies

Four research-backed strategies are available. Each uses a different approach to prompt improvement.

OPRO

Yang et al., 2023 - Google DeepMind

Optimization by PROmpting. Feeds scored (prompt, performance) history to an LLM which proposes improved variants. Core insight: LLMs can act as optimizers when given examples with scores.

Best when you have version history with diverse scores.

APE

Zhou et al., 2023 - University of Toronto

Automatic Prompt Engineer. Generates diverse candidates using multiple improvement strategies (explicit instructions, examples, restructuring, guardrails, simplification), evaluates each, selects the best.

Best for new prompts with little history.

DSPy Bootstrap

Khattab et al., 2023 - Stanford

Compiles the best-performing patterns from history into optimized few-shot demonstrations. Extracts what works and bakes it directly into the prompt as examples.

Best when high-scoring versions exist to learn from.

PromptBreeder

Fernando et al., 2023 - Google DeepMind

Self-referential evolution. Applies mutation-prompts (make concise, add constraints, restructure, add reasoning, add role-playing) to evolve the task-prompt. The mutations themselves can evolve.

Best for creative exploration of prompt space.

Configuration Options

OptionDefaultDescription
StrategyOPROWhich optimization algorithm to use
Evaluation MetricSuccess Ratesuccess_rate | verification_pass | user_satisfaction | latency
Run FrequencyDailyhourly | daily | weekly | manual
Auto-PromoteOffAutomatically promote winning variants to active
Improvement Threshold2%Minimum improvement required to qualify as a winner
Max Variants Per Run5Number of candidate variants generated per optimization run
Min Sample Size50Minimum API requests before first optimization run

Enabling Self-Improvement

1

Open the prompt detail panel

Click on any prompt from the Prompts page to view its details.

2

Expand 'Self-Improving Optimization'

Click the panel header to expand the optimization settings.

3

Toggle 'Enable Auto-Improvement'

This activates the optimization loop for this prompt.

4

Choose your strategy

Select OPRO, APE, DSPy Bootstrap, or PromptBreeder depending on your needs.

5

Set your metric and frequency

Choose what to optimize for and how often to run.

6

Decide on auto-promote

Turn on to automatically deploy winning variants, or leave off for manual review.

Prompt API Usage

Video coming soon

Click to preview (placeholder)

Use prompts programmatically by including a prompt_id in your API requests. The system resolves the active prompt version, substitutes placeholders, and uses the resulting text.

Using a Prompt in API Requests

Add the prompt_id field to your POST /v1/respond request. Optionally pass prompt_overrides to override placeholder defaults.

json
{
  "company_id": "comp_001",
  "bot_id": "bot_abc123def456",
  "session_id": "sess_001",
  "workflow_id": "support_triage",
  "prompt_id": "prompt_xyz789",
  "prompt_overrides": {
    "company_name": "Acme Corp",
    "tone": "empathetic",
    "language": "Spanish",
    "max_length": "512"
  },
  "current_user_message": "I can't access my account."
}

Prompt Resolution Flow

1

Lookup

System finds the prompt by ID and loads the active version.

2

Substitute

All {{placeholder}} values are replaced with prompt_overrides or defaults.

3

Inject

The resolved prompt is injected into the agent's system prompt for this request.

4

Track

The request is tagged with the prompt_id and version for analytics and optimization.

Python Example

python
import requests

response = requests.post(
    "https://rylvo.com/api/v1/respond",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "company_id": "comp_001",
        "bot_id": "bot_abc123def456",
        "session_id": "sess_001",
        "workflow_id": "support_triage",
        "prompt_id": "prompt_xyz789",
        "prompt_overrides": {
            "company_name": "Acme Corp",
            "tone": "empathetic",
            "language": "English",
        },
        "current_user_message": "My subscription renewal failed.",
    },
)

data = response.json()
print(f"Used prompt version: v{data.get('prompt_version', 'N/A')}")
print(f"Response: {data['output_text']}")

JavaScript / Node.js Example

javascript
const response = await fetch("https://rylvo.com/api/v1/respond", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": "YOUR_API_KEY",
  },
  body: JSON.stringify({
    company_id: "comp_001",
    bot_id: "bot_abc123def456",
    session_id: "sess_001",
    workflow_id: "support_triage",
    prompt_id: "prompt_xyz789",
    prompt_overrides: {
      company_name: "Acme Corp",
      tone: "empathetic",
      language: "English",
    },
    current_user_message: "My subscription renewal failed.",
  }),
});

const data = await response.json();
console.log("Prompt version:", data.prompt_version);
console.log("Response:", data.output_text);

Edge Case Engine Dashboard-only

Automatically detect, classify, and fix bot failure modes

Video coming soon

Click to preview (placeholder)

The Edge Case Engine is a closed-loop system that monitors your bot traces, automatically discovers failure patterns, classifies them into categories, and suggests fixes. It uses a 5-stage pipeline: Observe → Detect → Classify → Fix → Verify.

How It Works

  1. Scan Traces - Click "Scan Traces" to analyze recent API traces for failures
  2. Auto-Detect - Engine identifies verification failures, missed escalations, hallucinations, etc.
  3. Classify - Issues are grouped into 12 categories with severity levels
  4. Fix Proposals - Engine suggests guardrails, prompt edits, or threshold changes
  5. Verify - Monitor whether fixes reduce the failure rate over time

Edge Case Categories

  • Hallucination - Response not grounded in KB evidence
  • Policy Violation - Broke company/workflow policy
  • Missed Escalation - Should have escalated but didn't
  • Wrong Tool - Selected incorrect tool for the task
  • PII Leak - Exposed sensitive personal information
  • Loop Detected - Bot stuck in repetitive pattern
  • Tone Violation - Response doesn't match brand guidelines
  • Unknown Intent - User intent not covered by any workflow

Bot-Scoped Filtering

Use the bot filter dropdown in the Edge Cases header to scope all data to a specific bot. This filters edge cases, guardrails, red team runs, and fix proposals to show only issues for that bot. Useful when managing multiple bots with different use cases.

Guardrails Dashboard-only

Programmable safety rules that run on every bot response

Video coming soon

Click to preview (placeholder)

Guardrails are runtime rules that check bot inputs/outputs and take action when conditions are met. They can be created manually or auto-suggested by the Edge Case Engine when it detects failure patterns.

Guardrail Types

  • Input Filter - Validates user input before processing
  • Output Filter - Validates bot response before delivery
  • Fact Check - Verifies claims against knowledge base
  • Policy Check - Ensures compliance with company policies
  • PII Detection - Detects and redacts sensitive data
  • Tone Check - Validates tone matches brand
  • Loop Breaker - Breaks repetitive conversation patterns
  • Escalation Override - Forces escalation on conditions
  • Tool Gate - Controls tool access in specific contexts

Actions

  • Block - Prevent response, return fallback message
  • Warn - Flag for review but allow response through
  • Rewrite - Auto-modify response to comply
  • Escalate - Trigger human handoff immediately
  • Log - Record for monitoring, no action taken

Each guardrail has conditions (field + operator + value) and a fallback message shown when triggered.

Red Team Testing Dashboard-only

Proactively discover vulnerabilities with adversarial tests

Video coming soon

Click to preview (placeholder)

Red Team runs generate adversarial inputs against your bot to find failures before users do. Select a bot, choose attack strategies, and the engine generates test cases automatically. Results are converted into edge cases with severity levels.

Attack Strategies

  • Policy Probe - Tests policy boundary conditions with edge-case inputs
  • Hallucination Bait - Questions with no KB answer to test grounding
  • Tool Confusion - Inputs that could trigger wrong tool selection
  • Escalation Boundary - Tests the edge of escalation thresholds
  • Injection Attempt - Prompt injection and jailbreak attempts
  • Context Overflow - Long conversations that stress memory limits

Automation & Reports Dashboard-only

Schedule scans, connect channels, and generate automated reports

Video coming soon

Click to preview (placeholder)

The Automation page (/dashboard/automation) lets you set up recurring jobs and notification channels. Everything runs on your chosen schedule - no manual intervention needed after setup.

Scheduled Tasks

Cron jobs that run automatically:

  • Trace Scan - Auto-scan traces for edge cases
  • Red Team Run - Periodic adversarial testing
  • Report Generation - Auto-generate analytics reports
  • Guardrail Audit - Review guardrail effectiveness

Cadences: hourly, daily, weekly, biweekly, monthly

Notification Channels

Where alerts and reports get sent:

  • Slack - Webhook integration
  • Email - Direct to team inboxes
  • Discord - Webhook integration
  • Microsoft Teams - Webhook integration
  • Custom Webhook - Any HTTP endpoint

Automated Reports

Analytics reports sent to your team:

  • 10 report sections to choose from
  • Daily, weekly, or monthly cadence
  • Filter recipients by role or custom emails
  • Scope to specific bot or all bots
  • "Generate Now" for instant snapshots
  • Includes improvements timeline + AI recommendations

Agent Evolution Dashboard-only

Closed-loop system that learns from real traffic and safely rewrites the agent

Video coming soon

Click to preview (placeholder)

While the Edge Case Engine catches individual failures, Agent Evolution looks at patterns across runs and updates the agent itself. It runs a six-phase loop - observe, detect, infer, generate, inject, verify - and writes new rules, prompt variants, or guardrail tweaks into versioned resources. Every change is reversible.

Phases

  1. Observe - sample recent traces for the bot
  2. Detect - cluster failures & near-misses
  3. Infer - reviewer LLM names the pattern + root cause
  4. Generate - draft a rule, prompt edit, or guardrail
  5. Inject - attach to the bot behind an experiment flag
  6. Verify - measure effect; auto-promote, keep, or roll back

What gets written

  • Evolution rules (injected into the system prompt conditionally)
  • Prompt version updates (marked auto_generated)
  • Guardrail tweaks (threshold, condition, fallback text)
  • Reviewer insights (narrative explanations for the team)
  • Effectiveness scores per rule (controls auto-promote)

Every proposed change is gated behind an experiment flag with measurable success criteria. Anything that doesn't move the needle is rolled back automatically; anything that does becomes a permanent versioned change you can inspect, fork, or revert.

Agent Skills Dashboard-only

Hermes-style reusable capability packages that extend your bots

Video coming soon

Click to preview (placeholder)

Agent Skills are modular, reusable capability packages that can be attached to any bot in your organization. When a skill is active, its system instructions are conditionally injected into the bot's system prompt based on trigger conditions — keywords, intents, or contextual patterns matched against the conversation. Skills can be created manually, generated automatically from evolution rules, or imported from other bots.

Skill Types

  • Prompt Template — Reusable instruction pattern injected when triggered
  • Tool Chain — Ordered sequence of tool calls with parameter mapping
  • Code Snippet — Programmatic capability executed in one turn
  • Workflow — Multi-step procedure with conditional branches

How it works

  1. Define — Write system instructions and trigger conditions
  2. Bind — Attach to a specific bot or make org-level
  3. Activate — Set status to active (draft → active → disabled → archived)
  4. Match — Runtime checks triggers on each turn
  5. Inject — Matched skill instructions are added to the system prompt
  6. Measure — Usage and success counters track effectiveness

Scope

  • Bot-level — Skill is only available to the bot it is bound to
  • Org-level — Skill is available to every bot in the organization
  • Switch scope by creating a new skill or using version rollback

Versioning & Rollback

  • Every edit creates a new version with full audit trail
  • Rollback to any previous version instantly
  • Effectiveness counters reset on rollback
  • Changes are tagged with author and reason

Enable the Skills Layer toggle in Agent Evolution → Settings to allow the reviewer engine to auto-promote related rules into skills. You can also create skills manually from Dashboard → Agent Skills.

Mission Control Dashboard-only

Live human oversight for every production conversation

Video coming soon

Click to preview (placeholder)

Mission Control is the live operations surface at /dashboard/mission-control. Operators see every active conversation in real time, can intervene at any level, and the system keeps an immutable audit trail that satisfies EU AI Act Article 14 (human oversight) requirements.

Intervention types

  • Whisper - nudge the bot's next turn without the user seeing
  • Takeover - operator types directly to the user
  • Pause - freeze the bot pending review
  • Kill - terminate the session immediately
  • Augment - add context/state to help the bot

Approvals & SLAs

  • High-risk actions pause for operator approval
  • Each approval has a configurable SLA timer
  • Timeouts auto-escalate to a fallback operator
  • Decisions (approve/deny/modify) are attached to the trace

Every operator action is captured in an immutable, hash-chained audit log you can export for compliance reviews.

Email DeliveryDashboard-only

Video coming soon

Click to preview (placeholder)

Rylvo handles its own transactional emails (welcome, team invites, scheduled reports, operational alerts) automatically. Templates are branded and theme-aware - there is nothing for you to set up.

To send your own emails on workflow events (e.g. notify a human when a session escalates), use an Event Connector or add an Email channel in Automation.

Webhook Connectors

Video coming soon

Click to preview (placeholder)

Connectors let Rylvo call your systems during workflow execution. Register webhook endpoints for tool calls, state sync, or event notifications - Rylvo handles auth, retry, and signing.

Three connector types

Tool

Execute actions on your systems (create case, look up order, check inventory)

State Sync

Read/write workflow state from your DB before and after decisions

Event

Receive notifications on escalation, stage change, verification failure

Register a tool connector

bash
curl -X POST https://rylvo.com/api/v1/connectors \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{
    "company_id": "comp_001",
    "connector_type": "tool",
    "name": "Salesforce Case Creator",
    "auth": {
      "auth_type": "api_key",
      "api_key_header": "X-Salesforce-Key",
      "api_key_value": "your_salesforce_api_key"
    },
    "tool_config": {
      "tool_name": "create_salesforce_case",
      "tool_description": "Create a case in Salesforce",
      "input_schema": { "type": "object", "properties": { "issue_summary": { "type": "string" } } }
    },
    "endpoint": { "url": "https://your-app.com/rylvo/tools/create-case", "method": "POST" }
  }'

API endpoints

MethodPathDescription
POST/v1/connectorsCreate connector
GET/v1/connectors/{company_id}List connectors
GET/v1/connectors/{company_id}/{id}Get detail
PATCH/v1/connectors/{company_id}/{id}Update
DELETE/v1/connectors/{company_id}/{id}Delete
POST.../{id}/activateActivate
POST.../{id}/deactivateDeactivate
POST.../{id}/testTest endpoint
POST/v1/connectors/generate-secretGenerate HMAC secret
GET/v1/connectors/{company_id}/tools/availableList webhook tools

7 authentication methods

noneapi_keybearer_tokenhmac_sha256basicoauth2_client_credentialscustom_header

10 subscribable event types

workflow.decision.completedworkflow.decision.failedworkflow.escalation.triggeredworkflow.stage.changedtool.execution.completedtool.execution.failedstate.updatedverification.failedsession.startedsession.closed

Connector Python SDK

Video coming soon

Click to preview (placeholder)

Typed convenience methods for all connector operations. Sync and async variants included.

python
from core.connectors.sdk import ConnectorSDK

sdk = ConnectorSDK(base_url="https://rylvo.com", api_key="rylvo_sk_live_...")

# Register a tool connector
connector = sdk.create_tool_connector(
    company_id="comp_001",
    name="Salesforce Case Creator",
    endpoint_url="https://your-app.com/rylvo/tools/create-case",
    tool_name="create_salesforce_case",
    tool_description="Create a case in Salesforce",
    auth_type="api_key",
    api_key_header="X-Salesforce-Key",
    api_key_value="your_salesforce_api_key",
)

# Test + activate
test = sdk.test_connector("comp_001", connector["connector_id"])
if test["success"]:
    sdk.activate("comp_001", connector["connector_id"])

# List available tools
tools = sdk.list_available_tools("comp_001")
print(f"{tools['total']} webhook tools available")

Async variant

python
from core.connectors.sdk import AsyncConnectorSDK

async with AsyncConnectorSDK(base_url="...", api_key="...") as sdk:
    connector = await sdk.create_event_connector(
        company_id="comp_001",
        name="Slack Alerts",
        endpoint_url="https://hooks.slack.com/...",
        event_types=["workflow.escalation.triggered"],
    )
    await sdk.activate("comp_001", connector["connector_id"])

Error handling

ConnectorNotFoundError(404)Connector does not exist
ConnectorAuthError(401/403)Invalid or missing API key
ConnectorValidationError(422)Invalid connector configuration
ConnectorSDKError(5xx)Base class for all SDK errors

MCP HubDashboard-only

Video coming soon

Click to preview (placeholder)

The MCP Hub is Rylvo's Model Context Protocol registry - a curated catalog of MCP servers your bots can use as tools. Manage from Dashboard → MCP Hub.

What you can do

  • Discover & install MCP servers
  • Store credentials securely (encrypted at rest)
  • Allow specific servers per bot
  • See invocation logs & per-server analytics
  • Submit your own server for review

Built-in controls

  • Approval workflow before a server can be used in production
  • Cost tiers (low / medium / high) surfaced before invocation
  • Health checks & auto-disable on repeated failure
  • Resume tokens for long-running tool calls

Workspace ArchitectDashboard-only

Video coming soon

Click to preview (placeholder)

The Architect is a conversational setup agent that turns a plain-English brief into a working workspace: bots, prompts, guardrails, connectors, KB connections, evolution rules, and tests. It runs at /dashboard (Architect tab) and also powers natural-language edit mode and bot cloning.

8-phase agent loop

1. Intent

Capture goal, industry, tone, compliance constraints

2. Research

Pull org profile defaults, relevant industry templates, prior sessions

3. Blueprint

Propose bots + workflow + guardrails + KB + connectors

4. Review

User approves / edits the blueprint in natural language

5. Generate

Write prompts, guardrails, connectors, rules, KB stubs

6. Verify

Auto-run bot tests on the new bot(s) and score readiness

7. Apply

Commit as versioned resources, tagged source=architect

8. Handoff

Summarise what was built, link to Mission Control & Playground

Other architect capabilities

  • Edit mode - change an existing bot with a sentence ("make it more empathetic, prefer email over phone")
  • Bot cloning - duplicate a bot with modifications (industry, language, tone)
  • Bot testing - architect can run tests and iterate until a readiness threshold is met
  • Industry templates - 20+ starting points (SaaS support, fintech KYC, healthcare intake, etc.)
  • Org profile prefill - reuses defaults you set once in your organization profile

Knowledge BaseDashboard-only

Video coming soon

Click to preview (placeholder)

Connect your data sources to Rylvo for grounded, evidence-backed decisions. The KB system provides hybrid retrieval with 12 pre-built blueprints covering common enterprise patterns.

How it works

1

Add a source

Upload documents, connect APIs, or point to URLs. 15 source types supported.

2

Pick a blueprint

Choose from 12 retrieval blueprints (FAQ, Policy Lookup, Troubleshooting, etc.) or create custom.

3

Create a connection

A connection links a source to a blueprint with specific pipeline settings.

4

Query in playground

Test retrieval quality before going live. Tune chunking, reranking, and thresholds.

Built-in blueprints

FAQ RetrievalPolicy LookupTroubleshooting GuideProduct CatalogLegal / ComplianceOnboarding DocsMedical ReferenceFinancial AdvisoriesHR HandbookTechnical ManualsSales PlaybookCustom Pipeline

Dashboard features

Connections

Create, monitor, pause, and delete knowledge base connections

Sources

Manage 15 source types - file upload, API, URL, database

Blueprints

Pre-built and custom retrieval pipeline configurations

Playground

Test queries, inspect retrieved chunks, tune settings live

Performance

Retrieval quality metrics, latency, and hit rates

Settings

Auto-tune, chunking config, reranking, and threshold tuning

Conversation StorageDashboard-only

Video coming soon

Click to preview (placeholder)

Bring Your Own Database (BYODB). Every conversation event Rylvo processes can be pushed to a database or webhook endpoint you own — so your conversations live permanently in infrastructure you control. Rylvo also maintains a time-bounded operational copy for Mission Control, traces, agent evolution, and edge-case detection. Manage from Dashboard → Conv. Storage.

Connections

Add one or more storage targets. Each target receives a copy of every conversation event.

  • PostgreSQL, Supabase, Neon, PlanetScale
  • MySQL, Turso, MongoDB, Redis
  • Webhook (none / API key / Bearer / HMAC auth)
  • Credentials encrypted at rest

Schema Designer

Map Rylvo's conversation fields to your own table columns or JSON keys.

  • Custom field mapping per target
  • Schema migration runs idempotently (CREATE IF NOT EXISTS)
  • Preview the output schema before going live

Sync Logs

Per-event push history with status, latency, and error details.

  • Success / failure / retry status per target
  • Webhook retry with exponential backoff (0.5 s → 1 s → 2 s)
  • Inspect the exact payload that was sent

Retention

How long Rylvo keeps its own operational copy of your conversations.

Free30 days
Pro60 days
Team90 days
EnterpriseUnlimited

Your database is the source of truth. Rylvo's copy is an operational cache — not a backup. Use the Connections tab to wire up your own database for permanent storage. Extending Rylvo-side retention increases storage costs but does not replace your own database.

Audience HubDashboard-only

Video coming soon

Click to preview (placeholder)

The central operator workspace for managing every end-user across every bot in your organization. Replace scattered user lists with a scalable hub: paginated people browsing, saved filter segments, aggregate analytics, consent governance, CSV import/export, and retention policy controls. Manage from Dashboard → Audience.

People

Paginated, server-driven list of every end-user. Scales to 100k+ rows with cursor pagination and infinite scroll.

  • Filter by channel, consent scope, forgotten status, or free-text search
  • Bot-scoped filtering with data-collection field predicates
  • Inspector drawer with Overview, Profiles, Activity, and Audit tabs
  • Bulk actions: tag, forget (GDPR), export CSV, seed broadcast
  • Keyboard shortcuts: / search, j/k navigate, Enter inspect

Audience Rooms

Saved filter presets that act like persistent views. Create rooms for common cohorts and share them with your team.

  • Save any filter combination as a named room
  • Dirty indicator when current filters diverge
  • Pins & Discussion panel per room
  • Deep-linkable via ?room= URL param

Segments

Reusable filters that resolve into concrete member lists for broadcasts and exports.

  • Basic predicates: all users, active within N days, by channel, min conversations
  • Profile predicates: checkpoint achieved, field value, completeness threshold
  • Live preview with match count before saving
  • One-click link to bot broadcast tab

Insights

Cached aggregate analytics computed from a snapshot (6h TTL). Org-wide or bot-scoped.

  • Onboarding funnel, channel mix, consent breakdown
  • Engagement depth, activity recency, hour-of-day heatmap
  • Field-fill rates, top tags, completeness histogram
  • Bot leaderboard (org-wide only)

Imports & Exports

Bring legacy CRM contacts in and export segments for your data warehouse.

  • CSV import wizard: upload → map columns → preview → commit (idempotent)
  • Segment export to CSV (up to 5,000 rows)
  • 15 MB file limit for imports

Consent & Privacy

Govern how end-user data is collected and retained.

  • Consent scope tiles: none, short_term_only, personalize, full
  • GDPR forgotten-users queue with deep-links
  • Retention policy: effective days, shorten override, extend add-ons
  • Nightly sweep purges expired records automatically

Profiles & Schema

Org-wide field catalog + per-bot schema cards. Spot naming drift before it ruins dashboards.

Settings

Retention policy, add-on tiers, and governance. Admin-only configuration.

Ready to integrate?

Create an account, generate an API key, and start making decisions.