Characters are AI personalities with a name, system prompt, and optional voice and memory settings. Create, update, list, delete, or browse the public explore feed.
Every route and HTTP method below was checked directly against the live ts-api source on August 13, 2026. Response bodies are illustrative examples, never captured responses.
Base URL
https://api.dyva.ai/v1/v1/dyvasCreate a character with a name and, optionally, a system prompt, greeting, personality, and visibility.
Route and method verified directly against the live ts-api source on August 13, 2026.
Request body (12)
namestringRequiredtaglinestringOptionalsystem_promptstringOptionalgreeting_messagestringOptionalscenariostringOptionalpersonalityobjectOptionalconversation_startersstring[]Optionalavatar_urlstringOptionalvoice_enabledbooleanOptionalmemory_enabledbooleanOptionalweb_searchbooleanOptionalvisibilitystringOptionalResponse
Illustrative example, not a captured response{
"id": "00000000-0000-4000-8000-EXAMPLE00001",
"slug": "atlas-research-assistant",
"name": "Atlas",
"tagline": "A curious research assistant that loves diving deep into topics.",
"system_prompt": "You are Atlas, a knowledgeable and curious research assistant...",
"greeting_message": "Hey! I'm Atlas. What are we researching today?",
"scenario": null,
"personality": { "traits": ["curious", "precise"] },
"conversation_starters": ["What are you working on?"],
"avatar_url": "https://cdn.dyva.ai/avatars/EXAMPLE00001.webp",
"voice_enabled": false,
"memory_enabled": true,
"web_search": false,
"visibility": "unlisted",
"total_conversations": 4832,
"total_messages": 40211,
"avg_rating": 4.8,
"created_at": "2026-01-15T08:30:00.000Z",
"updated_at": "2026-03-08T14:22:10.000Z"
}
// Abbreviated. The live row also carries fields this page doesn't
// document (moderation status, monetization flags, embed settings,
// LoRA/appearance fields): a representative subset, not the complete
// column list.Examples (2)
curl -X POST https://api.dyva.ai/v1/dyvas \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Atlas",
"tagline": "A curious research assistant.",
"system_prompt": "You are Atlas, a knowledgeable research assistant who explains complex topics clearly.",
"greeting_message": "Hey! I\u0027m Atlas. What are we researching today?"
}'/v1/dyvasList every character you own. Returns a plain array; there is no pagination, sort, or filter parameter on this endpoint.
Route and method verified directly against the live ts-api source on August 13, 2026.
Response
Illustrative example, not a captured response[
{
"id": "00000000-0000-4000-8000-EXAMPLE00001",
"slug": "atlas-research-assistant",
"name": "Atlas",
"tagline": "A curious research assistant that loves diving deep into topics.",
"avatar_url": "https://cdn.dyva.ai/avatars/EXAMPLE00001.webp",
"visibility": "unlisted",
"voice_enabled": false,
"memory_enabled": true,
"total_conversations": 4832,
"total_messages": 40211,
"avg_rating": 4.8,
"created_at": "2026-01-15T08:30:00.000Z"
}
]
// Returns every character you own in one response. There is no limit,
// offset, or sort parameter on this endpoint.Examples (2)
curl https://api.dyva.ai/v1/dyvas \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"/v1/dyvas/:idGet full details for a single character. Works without a token for public and unlisted characters; private characters are visible only to their owner. The system prompt is returned as null unless you're the owner.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured response{
"id": "00000000-0000-4000-8000-EXAMPLE00001",
"slug": "atlas-research-assistant",
"name": "Atlas",
"tagline": "A curious research assistant that loves diving deep into topics.",
"system_prompt": "You are Atlas, a knowledgeable and curious research assistant...",
"greeting_message": "Hey! I'm Atlas. What are we researching today?",
"scenario": null,
"personality": { "traits": ["curious", "precise"] },
"conversation_starters": ["What are you working on?"],
"avatar_url": "https://cdn.dyva.ai/avatars/EXAMPLE00001.webp",
"voice_enabled": false,
"memory_enabled": true,
"web_search": false,
"visibility": "unlisted",
"total_conversations": 4832,
"total_messages": 40211,
"avg_rating": 4.8,
"created_at": "2026-01-15T08:30:00.000Z",
"updated_at": "2026-03-08T14:22:10.000Z"
}
// Abbreviated. The live row also carries fields this page doesn't
// document (moderation status, monetization flags, embed settings,
// LoRA/appearance fields): a representative subset, not the complete
// column list.Examples (2)
curl https://api.dyva.ai/v1/dyvas/atlas-research-assistant \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"/v1/dyvas/:idUpdate one or more fields. Only included fields change. This page previously documented this as a PUT; grepping the live route table on 2026-08-13 found only a PATCH handler. There is no PUT route for this path.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (14)
namestringOptionaltaglinestringOptionalsystem_promptstringOptionalgreeting_messagestringOptionalscenariostringOptionalpersonalityobjectOptionalconversation_startersstring[]Optionalavatar_urlstringOptionalvoice_enabledbooleanOptionalmemory_enabledbooleanOptionalweb_searchbooleanOptionalvisibilitystringOptionalvoice_idstringOptionalmsg_credit_costintegerOptionalResponse
Illustrative example, not a captured response{
"id": "00000000-0000-4000-8000-EXAMPLE00001",
"slug": "atlas-research-assistant",
"name": "Atlas",
"tagline": "A curious research assistant that loves diving deep into topics.",
"system_prompt": "You are Atlas, a knowledgeable and curious research assistant...",
"greeting_message": "Hey! I'm Atlas. What are we researching today?",
"scenario": null,
"personality": { "traits": ["curious", "precise"] },
"conversation_starters": ["What are you working on?"],
"avatar_url": "https://cdn.dyva.ai/avatars/EXAMPLE00001.webp",
"voice_enabled": false,
"memory_enabled": true,
"web_search": false,
"visibility": "unlisted",
"total_conversations": 4832,
"total_messages": 40211,
"avg_rating": 4.8,
"created_at": "2026-01-15T08:30:00.000Z",
"updated_at": "2026-03-08T14:22:10.000Z"
}
// Abbreviated. The live row also carries fields this page doesn't
// document (moderation status, monetization flags, embed settings,
// LoRA/appearance fields): a representative subset, not the complete
// column list.Examples (2)
curl -X PATCH https://api.dyva.ai/v1/dyvas/atlas-research-assistant \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tagline": "Updated tagline for Atlas.",
"voice_enabled": true
}'/v1/dyvas/:idDelete a character and all its conversations. Cannot be undone.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured responseHTTP/1.1 204 No ContentExamples (2)
curl -X DELETE https://api.dyva.ai/v1/dyvas/atlas-research-assistant \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"/v1/dyvas/exploreBrowse public characters. This endpoint has no auth requirement at all; the Authorization header shown here is optional.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (3)
categorystringOptionalsortstringOptionallimitintegerOptionalResponse
Illustrative example, not a captured response[
{
"id": "00000000-0000-4000-8000-EXAMPLE00002",
"slug": "codepilot",
"name": "CodePilot",
"tagline": "Senior engineer that reviews your code and suggests improvements.",
"avatar_url": "https://cdn.dyva.ai/avatars/EXAMPLE00002.webp",
"category_id": "00000000-0000-4000-8000-EXAMPLE00099",
"category_name": "Developer",
"total_conversations": 28401,
"total_messages": 190442,
"avg_rating": 4.9,
"like_count": 3120,
"voice_enabled": true,
"owner_id": "00000000-0000-4000-8000-EXAMPLE00003",
"created_at": "2025-12-01T10:00:00.000Z"
}
]Examples (2)
curl "https://api.dyva.ai/v1/dyvas/explore?sort=trending&limit=5" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"