# Vorel > AI receptionist for any business — voice + chat agents that handle inbound conversations, qualify leads, book appointments, and write back to your CRM. ## Docs - [Weekly rollup snapshot](https://docs.vorel.ai/api-reference/analytics/weekly-rollup-snapshot.md): Single snapshot of the metrics the around-the-brain weekly automation needs (QA average + p50 + p95, conversation count, agent turn count, hallucination flag count, top 5 hallucination kinds, top 5 handoff reasons). The weekly-qa-rollup n8n workflow polls this endpoint each Monday morning. Window de… - [Create an appointment](https://docs.vorel.ai/api-reference/appointments/create-an-appointment.md): Optional `conversation_id`/`lead_id`/`offering_id` FKs are pre-checked under the tenant RLS context — a 404 envelope identifies which FK was bad. Emits `booking.created`. - [Get an appointment by id](https://docs.vorel.ai/api-reference/appointments/get-an-appointment-by-id.md): Single-fetch by id, RLS-scoped. 404 collapses cross-tenant rows + nonexistent rows so callers cannot fingerprint other tenants. - [List appointments](https://docs.vorel.ai/api-reference/appointments/list-appointments.md): Cursor-paginated list of appointments, ordered by `scheduled_start DESC, id DESC` — most-recently-scheduled first. - [Update an appointment](https://docs.vorel.ai/api-reference/appointments/update-an-appointment.md): Strict-partial update. Lifecycle-aware webhook emission: time changes emit `booking.rescheduled`; `status` → `cancelled` emits `booking.cancelled`; `status` → `completed` emits `booking.completed`. The FK fields and `google_calendar_event_id` are NOT updatable (delete + re-create to rebind). Time va… - [Create a conversation](https://docs.vorel.ai/api-reference/conversations/create-a-conversation.md): Pre-create a conversation from a CRM / webform handler before the customer messages. Closes the chicken-and-egg with `POST /api/v1/leads` (which requires an existing `conversation_id`). Strict-create: returns 409 if a conversation already exists for the (channel, customer_identifier) pair. Emits `co… - [Get a conversation by id](https://docs.vorel.ai/api-reference/conversations/get-a-conversation-by-id.md): Single-fetch by id, RLS-scoped. Returns the conversation header only (no message transcript — a future `?include=messages` query param will surface that). 404 collapses cross-tenant rows + nonexistent rows. - [List conversations](https://docs.vorel.ai/api-reference/conversations/list-conversations.md): Cursor-paginated list of conversations for the authenticated tenant, ordered by `created_at DESC, id DESC`. - [Send an outbound message](https://docs.vorel.ai/api-reference/conversations/send-an-outbound-message.md): Operator-initiated outbound — the public sibling of the agent-only `send_whatsapp_message` tool. Around-the-brain workflows (n8n nurture loops, post-booking nudges) call this without going through the agent layer. Operator-curated copy is treated as authoritative; no hallucination grading or guardra… - [Update a conversation](https://docs.vorel.ai/api-reference/conversations/update-a-conversation.md): Strict-partial update. Mutable surface is `customer_name` + `customer_language` only — `channel` / `customer_identifier` form the unique-message-routing tuple and are NOT updatable; `status` is NOT updatable here either (transitions like `'closed'` have heavy side-effects — billing event creation, Q… - [Push a record into the tenant CRM](https://docs.vorel.ai/api-reference/crm/push-a-record-into-the-tenant-crm.md): Operator-initiated CRM write — public sibling of the agent-only `crm_create_record` tool. Per-tenant `tenant_crm_field_mappings` translate canonical Vorel keys to vendor-side keys before the driver call. Returns 200 + `{ok:false, error}` for the no-CRM-configured case + typed CrmError responses (aut… - [API introduction](https://docs.vorel.ai/api-reference/introduction.md): REST API for programmatic access to your Vorel tenant. Bearer-token auth, JSON requests + responses, full OpenAPI 3.1 spec. - [Create a lead](https://docs.vorel.ai/api-reference/leads/create-a-lead.md): Strict-create: returns 409 if the conversation already has a lead. The schema allows exactly one lead per conversation. - [Escalate a lead to human handoff](https://docs.vorel.ai/api-reference/leads/escalate-a-lead-to-human-handoff.md): Flips the lead's underlying conversation to `awaiting_human` + audit-logs the trigger + publishes the `conversation.handoff_requested` webhook event. Mirrors the internal `request_handoff` tool but for operator-initiated escalation (e.g. nurture-loop day 7, post-call no-response). Re-posting flips s… - [Get a lead by id](https://docs.vorel.ai/api-reference/leads/get-a-lead-by-id.md): Single-fetch by id, RLS-scoped. 404 collapses cross-tenant rows + nonexistent rows so callers cannot fingerprint other tenants. - [List leads](https://docs.vorel.ai/api-reference/leads/list-leads.md): Cursor-paginated list of leads for the authenticated tenant, ordered by `created_at DESC, id DESC`. Pass `stale_for_days=N` to scope the result to qualified leads whose conversation has gone quiet for more than N days — the canonical query the lead-nurture automation uses to find its daily cohort. - [Update a lead](https://docs.vorel.ai/api-reference/leads/update-a-lead.md): Strict-partial update. Any subset of mutable fields is accepted; omitted fields are left untouched. `attributes` is shallow-MERGED into the existing JSONB; within the merge, a `null` attribute value DELETES that key. Emits `lead.updated` (and `lead.qualified` IF this PATCH transitions the lead from… - [Create an offering](https://docs.vorel.ai/api-reference/offerings/create-an-offering.md): Catalog entry — properties / services / treatments / etc. depending on your vertical pack. `attributes` carries vertical-specific keys. Does NOT emit a webhook event today (the canonical `WebhookEventName` union does not yet include `offering.*`). - [Get an offering by id](https://docs.vorel.ai/api-reference/offerings/get-an-offering-by-id.md): Single-fetch by id, RLS-scoped. Soft-deleted offerings return 404 (mirrors the list surface's exclusion). 404 collapses cross-tenant + nonexistent + soft-deleted rows under one response. - [List offerings](https://docs.vorel.ai/api-reference/offerings/list-offerings.md): Cursor-paginated list of offerings, ordered by `created_at DESC, id DESC`. Excludes soft-deleted rows. - [Update an offering](https://docs.vorel.ai/api-reference/offerings/update-an-offering.md): Strict-partial update. `attributes` is shallow-MERGED into the existing JSONB; within the merge, a `null` attribute value DELETES that key. Soft-deleted offerings return 404 (mirrors the GET surface's exclusion). No webhook events emitted today (canonical event union does not yet include `offering.*… - [Quickstart](https://docs.vorel.ai/getting-started/quickstart.md): Get a working voice agent answering calls in under 30 minutes. - [What is Vorel](https://docs.vorel.ai/getting-started/what-is-vorel.md): The product, the verticals, and what you actually get when you sign up. - [Welcome to Vorel](https://docs.vorel.ai/index.md): AI receptionist for any business — voice + chat agents that handle inbound conversations, qualify leads, book appointments, and write back to your CRM. - [Voice](https://docs.vorel.ai/product/voice.md): Vorel handles inbound calls end-to-end — picks up, qualifies, books, escalates. Bilingual Arabic/English, MENA-region SIP infrastructure. - [Security overview](https://docs.vorel.ai/security/overview.md): How Vorel protects your customer data: multi-tenant isolation, encryption, append-only audit, rate limiting, compliance posture. ## OpenAPI Specs - [openapi](https://docs.vorel.ai/api-reference/openapi.json) ## Optional - [Marketing site](https://vorel.ai) - [Status page](https://app.vorel.ai/status) - [Changelog](https://vorel.ai/changelog)