Base URL
https://api.verba.ink
How the API works (short answer)
- Create an API key in Dashboard -> Settings -> Security -> API Keys (Pro and Ultra plans).
- Call
POST /v1/responsewithcharacter+messages. - Save the returned
session_idand reuse it for follow-up requests. - Use
stream: truefor SSE streaming on Ultra plans. - Use
POST /v1/imagewhen you need image generation.
Fast answers
- Base URL:
https://api.verba.ink - Text endpoint:
POST /v1/response - Image endpoint:
POST /v1/image - Auth:
Authorization: Bearer vka_...orx-api-key: vka_... - Session memory: reuse
session_idon later calls to continue context - API access: Pro and Ultra plans
- Streaming:
stream: trueon/v1/response(Ultra) - Image generation allowance: Free
20/mo, Plus50/mo, Pro100/mo, Ultra unlimited - Message count limit: up to
60items inmessages - Message size limits: each message text up to
4000chars, total up to20000chars - Session ID format: optional, max
128chars, allowed charsA-Z a-z 0-9 : _ - - Image URL limit: up to
4combined URLs - Tool limits: up to
8tool definitions, up to2executed tool calls per request
API SSE is separate from the AI Engine’s Response Streaming toggle for
Discord, WhatsApp, and Telegram. The platform toggle does not change API plan
requirements.
Request limits (fast reference)
Quick start
1
Create an API key
Go to Verba Settings -> Security -> API Keys and create a key. API keys are available on Pro and Ultra plans.
2
Pick a character
Use your character vanity slug or vanity URL (for example
mycharacter_abc or https://verba.ink/v/mycharacter_abc).3
Call an endpoint
Use
POST /v1/response for text replies, or POST /v1/image for image generation.Authentication
Send your API key in either header:Authorization: Bearer vka_...x-api-key: vka_...
401.
API key quick facts
- API key prefix is
vka_. - Maximum active keys per account:
3. - Key revocation is immediate.
Character identifier
Both endpoints usecharacter (not verb_id).
Accepted formats:
- Vanity slug:
mycharacter_abc - Vanity path:
/v/mycharacter_abc - Full vanity URL:
https://verba.ink/v/mycharacter_abc
Endpoints
POST /v1/responsefor text chat completionsPOST /v1/imagefor image generation
POST /v1/response
Text completion endpoint. You can optionally attach image URLs for vision-enabled prompting.
Supports both standard JSON and streaming. Set
stream: true to receive Server-Sent Events (SSE) chunks.Streaming on
/v1/response is available on Ultra plans.characterstring (vanity URL or vanity slug)messagesarray (role+content)
session_idstringtemperaturenumber (0..2)top_pnumber (0..1)max_tokensnumberstreamboolean (truefor SSE stream, defaultfalse)image_urlsarray of image URLs (http/https, max 4)toolsarray (OpenAI-style function tools, max 8)tool_choice("auto"or"none")debugobject ({ "tools": true }to include tool traces)
Session memory on /v1/response
How it works:
- Send your first request with or without
session_id. - If omitted, the API generates one and returns it in the response.
- Reuse that same
session_idin later requests to keep context for that caller + character.
session_id, you start a new conversation state.
messages[].content supports:
- String text content
- Array parts with:
{ "type": "text", "text": "..." }{ "type": "image_url", "image_url": { "url": "https://..." } }
messages[].content or top-level image_urls (both are merged, max 4 total).
You cannot pass custom system messages on /v1/response; character personality + system instructions are applied automatically.
Tool configuration is request-scoped only (not stored on your character/dashboard).
Request examples
Session memory example
First call:session_id:
Vision input example
Request-scoped tool calling
/v1/response supports server-executed HTTP function tools passed in the request.
- Tools are not persisted.
- Allowed methods:
GET,POST. - Tool URLs support only
http/httpson ports80or443. - Local/private network targets are blocked.
- Tool responses must be
application/json(or+json) ortext/plain. - Max executed tool calls per request:
2. - Tool requests execute through Verba-managed outbound egress.
- Built-in character
webSearchremains separate and unchanged.
tool_choice supports:
"auto"(default model decides)"none"(disable tool calls for this request)
auto works:
- Verba first lets the model decide natively (provider
tool_callsif supported). - If the provider does not emit native
tool_calls, Verba runs an internal model planner step to decide whether one tool should be used. - This preserves model-driven behavior while improving compatibility across providers.
debug.tools=true:
- Non-stream response includes
debug.tool_runs[]. - Stream response emits extra SSE frames with
object: "chat.completion.tool_trace".
Tool example (GET web search)
Tool example (POST JSON)
Example response
debug.tools=true:
Streaming (stream: true)
With stream: true, /v1/response returns text/event-stream and emits data: events.
- Each event is an OpenAI-style
chat.completion.chunkpayload. - If
debug.tools=trueand tools run, extra events useobject: "chat.completion.tool_trace". - The final event is
data: [DONE]. - You should concatenate
choices[0].delta.contentchunks to build the assistant message. - Free, Plus, and Pro plans return
403 stream_plan_upgrade_requiredwhenstream: trueis used.
Streaming request examples
POST /v1/image
Generates one image URL.
Image generation is limited monthly by the character owner’s plan: Free
20, Plus 50, Pro 100, and Ultra unlimited.characterstring (vanity URL or vanity slug)promptstring
session_idstringimage_urlsstring array (reference images)size(1024x1024only)response_format(urlonly)
Request examples
Example response
Sessions and memory
session_idis optional.- If omitted, Verba generates one and returns it.
- Reusing the same
session_idpreserves API conversation context for that caller + verb pair. - API memory is stored in conversation history only (not DM or message logs).
Access, billing, and limits
- API access is available on Pro and Ultra plans.
- Verb privacy still applies:
- Private characters: owner only
- Public characters: any API caller
- Billing and tier/model enforcement are applied to the character owner account.
/v1/*uses account rate limits via the same per-user limiter model.
Message format (/v1/response)
messagesmust be an array.- Include at least one
usermessage. - Allowed roles:
user,assistant(assistantmaps internally to model role). systemrole is blocked on/v1/responseto prevent overriding character instructions.messages[].contentsupports text andimage_urlparts.- Top-level
image_urlsis also supported. - Combined image URL limit is 4.
toolsis optional and request-scoped (max 8 per request).tool_choiceis optional (autoornone).
Error model
Errors return JSON with a top-levelmessage and an error object.
error.type: stable machine-readable error type (for program logic)error.code: HTTP status code
401 invalid_api_keyfor missing/invalid/revoked API key403 verb_access_deniedfor private character access by non-owner403 api_plan_upgrade_requiredwhen the API key owner is not on Pro or Ultra403 stream_plan_upgrade_requiredwhen a non-Ultra plan requestsstream: true403 insufficient_creditswhen the character owner has no credits for the selected model403 image_limit_reachedwhen the character owner has reached their monthly image generation allowance400 invalid_message_rolewhensystemrole is provided inmessages400 invalid_streamwhenstreamis not a boolean400 invalid_toolsfor malformed tool schema/config400 invalid_tool_choicefor invalidtool_choice400 blocked_tool_urlwhen tool URL targets local/private hosts400 tool_call_limit_exceededwhen model attempts more than 2 tool calls400 invalid_image_urlswhen image URL payload format is invalid400 blocked_image_urlwhen image URL targets local/private network hosts400 too_many_image_urlswhen more than 4 image URLs are provided502 tool_proxy_unavailablewhen managed outbound tool egress is unavailable502 tool_execution_failedwhen upstream tool execution fails400 invalid_sizewhen/v1/imagesize is not1024x1024

