Αναφορά API / Agents

Agents

Τα endpoints της ομάδας Agents του Voiceland AI API, με παραμέτρους, σχήματα και παραδείγματα curl.

Τελευταία ενημέρωση:

Οι περιγραφές των endpoints και των πεδίων εμφανίζονται στα αγγλικά, όπως ακριβώς τις δημοσιεύει το API. Είναι επιλογή μας, ώστε να διαβάζετε εδώ ό,τι θα δείτε και στις αποκρίσεις.

GET /v1/agents#

List agents. Returns all agents on your account. If your operator has configured guardrails, the expanded agent carries them read-only, and guardrails.input.action_by_channel says what the input guard's action means on each channel **for this agent**. It matters for one value: escalate is a real handover to a person only in a **chat** on an agent whose web_widget.enabled and web_widget.takeover.enabled are both on, because the handover runs through the same path the request-a-human tool uses and that path refuses when either switch is off. On a **voice** call it is refuse plus the fallback line and nothing more, since a phone leg has no takeover queue to enter. So one stored escalate reads back as {"voice": "refuse", "chat": "escalate"} on an agent with the widget handover armed and as {"voice": "refuse", "chat": "refuse"} on one without it - neither is a misconfiguration, they are the same setting reported honestly for the agent you asked about. The field is filled by the server on reads and ignored on writes.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/agents" \
  -H "Authorization: Bearer VL_API_KEY"

Παράδειγμα απόκρισης

{
  "items": [
    {
      "deploy_state": "deployed",
      "name": "front-desk"
    }
  ]
}

POST /v1/agents#

Create or update an agent. Upserts an agent from the narrow tenant shape. Server-managed knobs (model, transcriber tuning, durations, tools) are filled from your account defaults; the response returns the fully expanded agent so you can see what was applied. Unknown fields are rejected with 422. If your operator has configured guardrails, the expanded agent carries them read-only, and guardrails.input.action_by_channel says what the input guard's action means on each channel **for this agent**. It matters for one value: escalate is a real handover to a person only in a **chat** on an agent whose web_widget.enabled and web_widget.takeover.enabled are both on, because the handover runs through the same path the request-a-human tool uses and that path refuses when either switch is off. On a **voice** call it is refuse plus the fallback line and nothing more, since a phone leg has no takeover queue to enter. So one stored escalate reads back as {"voice": "refuse", "chat": "escalate"} on an agent with the widget handover armed and as {"voice": "refuse", "chat": "refuse"} on one without it - neither is a misconfiguration, they are the same setting reported honestly for the agent you asked about. The field is filled by the server on reads and ignored on writes.

Σώμα αιτήματος

application/json Σχήμα: Agent

Πεδίο Τύπος Απαιτείται Περιγραφή
calendar_id string
call_webhook CallWebhook Optional post-call POST: transcript + summary + extracted custom fields + audio URLs, delivered with retry + HMAC signing.
cdr_export CDRExport Optional lean metadata-only post-call POST for billing / archive systems (no transcript or summary).
data_sources array of string Ids of data sources (ds-…) whose latest snapshot is placed in the agent's context at call start. Up to 8.
event_webhooks EventWebhooks Optional real-time per-event delivery (answered / caller utterance / agent utterance / hangup / transfer).
identity Identity Ναι The agent's system prompt and first spoken line, your primary content surface.
intents IntentTaxonomy
knowledge_collections array of string
language Language Ναι Primary BCP-47 language (drives speech recognition + the default summary language) plus optional secondary fallbacks.
name string Ναι Logical identifier: lowercase, alphanumeric plus dash/underscore, ≤64 chars.
notifications Notifications Optional per-call email recap to a list of recipients, independent of call_webhook.
outbound boolean When true the agent is outbound-only (can be dialed via /calls/dial); when false (default) it is inbound-only and answers calls routed to its numbers.
pickup_delay_s integer Seconds to wait after answering before the agent speaks its first line (0 to 15). Use 1 to 2 for a more human pace.
re_engagement_prompt string Line spoken when the caller has been silent for the re-engagement interval.
record_call boolean Ναι When true, per-call stereo + per-channel recordings are produced and their URLs exposed.
search_widget SearchWidget Optional public knowledge-search box rendered by /search-widget.js on your site. Independent of web_widget: enabling the chat bubble never enables this, and this serves anonymous readers rather than a conversation.
timezone string IANA timezone for any wall-clock formatting in prompts/tool args. Empty falls back to the account default.
voice Voice Ναι The synthesized voice: provider + voice id (+ optional model).
web_widget WebWidget Optional browser-embed voice/chat bubble rendered by /embed.js on your site.

Αποκρίσεις

Κωδικός Περιγραφή
200 The expanded agent.
401 Missing or invalid API key.
402 The agent uses a capability your plan does not include (feature_not_entitled, the message lists the feature codes), or the account has no subscription (no_subscription).
409 Creating this agent would exceed your plan's agent allowance, one pool shared by voice and text agents, counted across your whole account (agent_limit, the message says how many the plan allows and how many exist), or this project's own agent limit. Updating an existing agent is never refused for this reason.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/agents" \
  -H "Authorization: Bearer VL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "identity": {
    "initial_message": "Acme Clinic, how can I help?",
    "system_prompt": "You are the front desk of Acme Clinic. Help callers book appointments."
  },
  "language": {
    "primary": "en-US"
  },
  "name": "front-desk",
  "record_call": true,
  "voice": {
    "provider": "voiceland",
    "voice_id": "pNInz6obpgDQGcFmaJgB"
  }
}'

Παράδειγμα απόκρισης

{
  "api_version": "2026-04-26",
  "deploy_state": "draft",
  "name": "front-desk"
}

POST /v1/agents/generate#

Generate an agent from a brief. Uses the language model to draft a complete agent from a free-text description, then upserts it. Returns the expanded agent.

Σώμα αιτήματος

application/json Σχήμα: AgentGenerateRequest

Πεδίο Τύπος Απαιτείται Περιγραφή
description string Ναι Free-text description of what the agent should do.
language string
name string Ναι Name for the generated agent.
pickup_delay_s integer
record_call boolean
timezone string
voice_id string

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/agents/generate" \
  -H "Authorization: Bearer VL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "description": "A friendly receptionist that greets callers and answers general questions about the business.",
  "language": "en-US",
  "name": "greeter",
  "record_call": true
}'

Παράδειγμα απόκρισης

{
  "deploy_state": "draft",
  "name": "clinic-bot"
}

POST /v1/agents/wizard#

Draft an agent from structured input. Builds an agent from a small set of structured fields (industry, language, voice persona, transfer behavior). Non-persisting, returns the draft yaml + tenant agent for review.

Σώμα αιτήματος

application/json

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/agents/wizard" \
  -H "Authorization: Bearer VL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "industry": "receptionist",
  "language": "en-US",
  "name": "front-desk",
  "voice": {
    "gender": "female",
    "style": "warm"
  }
}'

Παράδειγμα απόκρισης

{
  "name": "front-desk",
  "warnings": [],
  "yaml": "name: front-desk\n…"
}

DELETE /v1/agents/{name}#

Delete an agent. Permanently deletes the agent.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
name path string Ναι Agent name.

Αποκρίσεις

Κωδικός Περιγραφή
204 Deleted.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X DELETE "https://api.voiceland.ai/v1/agents/{name}" \
  -H "Authorization: Bearer VL_API_KEY"

GET /v1/agents/{name}#

Get an agent. Returns the fully expanded agent spec, including the server-filled defaults. If your operator has configured guardrails, the expanded agent carries them read-only, and guardrails.input.action_by_channel says what the input guard's action means on each channel **for this agent**. It matters for one value: escalate is a real handover to a person only in a **chat** on an agent whose web_widget.enabled and web_widget.takeover.enabled are both on, because the handover runs through the same path the request-a-human tool uses and that path refuses when either switch is off. On a **voice** call it is refuse plus the fallback line and nothing more, since a phone leg has no takeover queue to enter. So one stored escalate reads back as {"voice": "refuse", "chat": "escalate"} on an agent with the widget handover armed and as {"voice": "refuse", "chat": "refuse"} on one without it - neither is a misconfiguration, they are the same setting reported honestly for the agent you asked about. The field is filled by the server on reads and ignored on writes.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
name path string Ναι Agent name.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/agents/{name}" \
  -H "Authorization: Bearer VL_API_KEY"

Παράδειγμα απόκρισης

{
  "deploy_state": "deployed",
  "name": "front-desk",
  "spec": {
    "guardrails": {
      "input": {
        "action": "escalate",
        "action_by_channel": {
          "chat": "escalate",
          "voice": "refuse"
        },
        "enabled": true
      }
    }
  }
}

POST /v1/agents/{name}/deploy#

Deploy an agent. Publishes the agent so it answers/originates live calls.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
name path string Ναι Agent name.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/agents/{name}/deploy" \
  -H "Authorization: Bearer VL_API_KEY"

Παράδειγμα απόκρισης

{
  "deploy_state": "deployed",
  "name": "front-desk"
}

POST /v1/agents/{name}/rollback#

Roll back an agent. Restores a prior version as the current spec.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
name path string Ναι Agent name.

Σώμα αιτήματος

application/json Σχήμα: RollbackRequest

Πεδίο Τύπος Απαιτείται Περιγραφή
version_id string Ναι The version to restore.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/agents/{name}/rollback" \
  -H "Authorization: Bearer VL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "version_id": "v_…"
}'

Παράδειγμα απόκρισης

{
  "deploy_state": "draft",
  "name": "front-desk"
}

POST /v1/agents/{name}/test#

Start a test session. Mints a short-lived session so you can talk to the agent in the browser without a phone call. Returns a room + join token. A test session is a call: it spends one of your plan's simultaneous-call slots for as long as it runs.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
name path string Ναι Agent name.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
402 Too many simultaneous calls for your plan (concurrent_calls_cap): the message names how many your plan allows at once and how many are in progress, counted across your whole account. Nothing was placed or billed; retry when a call ends.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/agents/{name}/test" \
  -H "Authorization: Bearer VL_API_KEY"

Παράδειγμα απόκρισης

{
  "expires_at": "2026-07-15T12:00:00Z",
  "room_name": "room_…",
  "session_id": "sess_…"
}

GET /v1/agents/{name}/versions#

List agent versions. Every save snapshots the agent. Returns the version history.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
name path string Ναι Agent name.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/agents/{name}/versions" \
  -H "Authorization: Bearer VL_API_KEY"

Παράδειγμα απόκρισης

{
  "items": [
    {
      "created_at": "2026-07-14T09:00:00Z",
      "version_id": "v_…"
    }
  ]
}

GET /v1/agents/{name}/versions/{version_id}#

Get an agent version. Returns a specific snapshot including its full spec.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
name path string Ναι Agent name.
version_id path string Ναι Version id.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/agents/{name}/versions/{version_id}" \
  -H "Authorization: Bearer VL_API_KEY"

Παράδειγμα απόκρισης

{
  "spec": {
    "name": "front-desk"
  },
  "version_id": "v_…"
}

Σχήματα#

Agent#

A voice agent. POST this shape to create or update an agent; server-managed knobs are filled from your account defaults.

Πεδίο Τύπος Απαιτείται Περιγραφή
calendar_id string
call_webhook CallWebhook Optional post-call POST: transcript + summary + extracted custom fields + audio URLs, delivered with retry + HMAC signing.
cdr_export CDRExport Optional lean metadata-only post-call POST for billing / archive systems (no transcript or summary).
data_sources array of string Ids of data sources (ds-…) whose latest snapshot is placed in the agent's context at call start. Up to 8.
event_webhooks EventWebhooks Optional real-time per-event delivery (answered / caller utterance / agent utterance / hangup / transfer).
identity Identity Ναι The agent's system prompt and first spoken line, your primary content surface.
intents IntentTaxonomy
knowledge_collections array of string
language Language Ναι Primary BCP-47 language (drives speech recognition + the default summary language) plus optional secondary fallbacks.
name string Ναι Logical identifier: lowercase, alphanumeric plus dash/underscore, ≤64 chars.
notifications Notifications Optional per-call email recap to a list of recipients, independent of call_webhook.
outbound boolean When true the agent is outbound-only (can be dialed via /calls/dial); when false (default) it is inbound-only and answers calls routed to its numbers.
pickup_delay_s integer Seconds to wait after answering before the agent speaks its first line (0 to 15). Use 1 to 2 for a more human pace.
re_engagement_prompt string Line spoken when the caller has been silent for the re-engagement interval.
record_call boolean Ναι When true, per-call stereo + per-channel recordings are produced and their URLs exposed.
search_widget SearchWidget Optional public knowledge-search box rendered by /search-widget.js on your site. Independent of web_widget: enabling the chat bubble never enables this, and this serves anonymous readers rather than a conversation.
timezone string IANA timezone for any wall-clock formatting in prompts/tool args. Empty falls back to the account default.
voice Voice Ναι The synthesized voice: provider + voice id (+ optional model).
web_widget WebWidget Optional browser-embed voice/chat bubble rendered by /embed.js on your site.

AgentGenerateRequest#

Πεδίο Τύπος Απαιτείται Περιγραφή
description string Ναι Free-text description of what the agent should do.
language string
name string Ναι Name for the generated agent.
pickup_delay_s integer
record_call boolean
timezone string
voice_id string

CDRExport#

Πεδίο Τύπος Απαιτείται Περιγραφή
headers map of string
method string
url string Ναι HTTPS endpoint the lean metadata-only CDR payload is delivered to.

CallWebhook#

Πεδίο Τύπος Απαιτείται Περιγραφή
custom_fields array of CustomField Fields the model extracts from the transcript and includes in the payload.
headers map of string Extra request headers sent verbatim (e.g. an Authorization bearer the receiver expects).
method string HTTP method, POST (default), PUT, or PATCH.
summary_languages array of string One post-call summary per BCP-47 code; empty uses the agent's primary language.
url string Ναι HTTPS endpoint the post-call payload is delivered to.

CustomField#

Πεδίο Τύπος Απαιτείται Περιγραφή
name string Ναι Key under which the extracted value is delivered.
prompt string Ναι One-line instruction telling the model what to extract; return null when undeterminable.
type string Informational type hint (e.g. string).

EmailNotification#

Πεδίο Τύπος Απαιτείται Περιγραφή
custom_fields array of CustomField
summary_languages array of string
to array of string Ναι

Error#

Error envelope returned for non-2xx responses.

Πεδίο Τύπος Απαιτείται Περιγραφή
error object Ναι

EventWebhook#

Πεδίο Τύπος Απαιτείται Περιγραφή
enabled boolean Ναι
headers map of string
method string
url string Ναι

EventWebhooks#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent_answered EventWebhook
agent_utterance EventWebhook
call_hangup EventWebhook
call_transferred EventWebhook
caller_utterance EventWebhook
chat_takeover EventWebhook
transfer_initiated TransferWebhook

Identity#

The agent's system prompt and opening line.

Πεδίο Τύπος Απαιτείται Περιγραφή
initial_message string Ναι The exact first line the agent speaks on pickup (spoken verbatim, not model-generated).
system_prompt string Ναι The master instruction set the model follows for the whole call.

Intent#

Πεδίο Τύπος Απαιτείται Περιγραφή
action string Ναι
description string
examples array of string
name string Ναι
target string

IntentTaxonomy#

Πεδίο Τύπος Απαιτείται Περιγραφή
enabled boolean Ναι
items array of Intent
threshold number
unknown_action string

Language#

Πεδίο Τύπος Απαιτείται Περιγραφή
primary string Ναι Primary language as a BCP-47 tag, e.g. el-GR or en-US.
secondary array of string Additional BCP-47 languages the agent may switch to.

Notifications#

Πεδίο Τύπος Απαιτείται Περιγραφή
email EmailNotification

RollbackRequest#

Πεδίο Τύπος Απαιτείται Περιγραφή
version_id string Ναι The version to restore.

SearchWidget#

Public knowledge-search box for your own site. It serves anonymous visitors, so it is switched on separately from the chat bubble and must name both the sites that may embed it and the collections it may search.

Πεδίο Τύπος Απαιτείται Περιγραφή
allowed_origins array of string Exact-match list of page origins that may query this widget ("https://example.com", scheme, host, optional port; no path, no wildcard). REQUIRED when enabled. Exact match only, so serving both the apex and www means listing both.
collections array of string Knowledge-base collection ids this widget may search. REQUIRED when enabled, unlike elsewhere in the API an empty list does not mean "everything published", because for an anonymous reader that default would publish your whole corpus.
enabled boolean Ναι Master switch. While false the public endpoints report the widget as unavailable and answer nothing.
lang string Default BCP-47 language of the page the widget sits on, used as the retrieval preference when a query does not state one. Empty means no preference.
no_results_text string Line shown when a search matches nothing.
placeholder string Placeholder text inside the input.
primary_color string Accent colour as a hex literal (e.g. #3B82F6).
result_limit integer Results per query. 0 uses the service default; the service caps the ceiling regardless.
title string Heading rendered above the search box.

TransferWebhook#

Πεδίο Τύπος Απαιτείται Περιγραφή
custom_fields array of CustomField
enabled boolean Ναι
headers map of string
method string
url string Ναι

Voice#

Πεδίο Τύπος Απαιτείται Περιγραφή
model string Optional voice model/engine override; empty uses the provider default.
provider string Ναι Voice provider identifier.
voice_id string Ναι The voice to use.

WebWidget#

Πεδίο Τύπος Απαιτείται Περιγραφή
ai_responses_enabled boolean
allowed_origins array of string
auto_open boolean
automation_webhook_url string
avatar_url string
busy_text string
button_main_text string
button_size string
button_style string
button_sub_text string
chat_enabled boolean Ναι
chat_placeholder string
chat_tab_label string
default_mode string
enabled boolean Ναι
end_confirm_no_text string
end_confirm_text string
end_confirm_yes_text string
header_subtitle string
header_title string
layout string
modal_description string
modal_title string
position string
pre_form WebWidgetPreForm
primary_color string
start_button_text string
takeover WebWidgetTakeover
voice_connecting_text string
voice_disconnect_text string
voice_enabled boolean Ναι
voice_error_text string
voice_tab_label string

WebWidgetFormField#

Πεδίο Τύπος Απαιτείται Περιγραφή
key string Ναι
label string Ναι
required boolean
type string

WebWidgetPreForm#

Πεδίο Τύπος Απαιτείται Περιγραφή
description string
fields array of WebWidgetFormField
submit_text string
title string

WebWidgetTakeover#

Πεδίο Τύπος Απαιτείται Περιγραφή
closed_message string
enabled boolean Ναι
no_rep_message string

Η κονσόλα

Οι σελίδες αυτές είναι μόνο για ανάγνωση. Η δοκιμαστική κλήση, τα κλειδιά API και η ζωντανή αναφορά API βρίσκονται στην κονσόλα, όπου ο λογαριασμός σας είναι συνδεδεμένος.

Άνοιγμα κονσόλας