Creator dashboard for your Dyvas: analytics, instruction versioning, A/B testing, and marketplace publishing. Every endpoint requires ownership of the Dyva.
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/studio/:id/analyticsConversation and message counts for the period, plus a day-by-day conversation breakdown. There is no unique_users or retention_rate field.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (2)
idstringRequiredperiodstringOptionalResponse
Illustrative example, not a captured response{
"period": "30d",
"total_conversations": 573,
"total_messages": 14832,
"avg_rating": 4.72,
"share_views": 41,
"data": [
{
"date": "2026-02-08",
"conversations": 12
},
{
"date": "2026-02-09",
"conversations": 19
}
]
}Examples (1)
curl "https://api.dyva.ai/v1/studio/dyva_EXAMPLE0001/analytics?period=30d" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"/v1/studio/:id/versionsList saved snapshots, newest first. Plain array, capped at 20.
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": "ver_EXAMPLE0002",
"version_number": 3,
"system_prompt": "You are a friendly coding mentor who explains concepts with real-world analogies...",
"personality": {
"archetype": "mentor",
"traits": [
"patient",
"encouraging"
]
},
"label": "Added analogy-based explanations",
"created_at": "2026-03-08T10:15:00Z"
},
{
"id": "ver_EXAMPLE0001",
"version_number": 2,
"system_prompt": "You are a coding mentor. Answer questions about programming clearly...",
"personality": {
"archetype": "mentor"
},
"label": "v2",
"created_at": "2026-02-20T08:30:00Z"
}
]/v1/studio/:id/versionsSnapshot the Dyva's current system_prompt and personality as a new version. The body cannot set instruction text directly; it only labels the snapshot.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (1)
labelstringOptionalResponse
Illustrative example, not a captured response{
"id": "ver_EXAMPLE0003",
"version_number": 4,
"system_prompt": "You are a friendly coding mentor who explains concepts with real-world analogies...",
"personality": {
"archetype": "mentor",
"traits": [
"patient",
"encouraging"
]
},
"label": "Before Socratic rewrite",
"created_at": "2026-03-09T14:30:00Z"
}/v1/studio/:id/versions/:version_id/restoreCopy a saved snapshot's system_prompt and personality back onto the live Dyva. Not the PUT .../activate endpoint some older client code may expect: restoring is a POST, and the response is the full updated Dyva, not a version object.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (2)
idstringRequiredversion_idstringRequiredResponse
Illustrative example, not a captured response{
"id": "dyva_EXAMPLE0001",
"name": "Code Mentor",
"system_prompt": "You are a friendly coding mentor who explains concepts with real-world analogies...",
"personality": {
"archetype": "mentor",
"traits": [
"patient",
"encouraging"
]
},
"updated_at": "2026-03-09T14:35:22Z"
}/v1/studio/:id/test-chatSend a single test turn against an optional system prompt override, without creating a real conversation. The body param is content, not message, and there is no version_id targeting; pass system_prompt directly if you want to test something other than the Dyva's current live prompt.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (2)
contentstringRequiredsystem_promptstringOptionalResponse
Illustrative example, not a captured response{
"response": "Great question! Imagine a backpack: when a function is created inside another function, it carries a backpack with all the variables from its parent scope..."
}/v1/studio/:id/variantsList A/B variants for a Dyva. Plain array; metrics aren't included in this response (see /variants/analytics for that).
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": "var_EXAMPLE0001",
"dyva_id": "dyva_EXAMPLE0001",
"name": "Control: Friendly Mentor",
"system_prompt": "You are a friendly coding mentor who explains concepts with real-world analogies...",
"traffic_pct": 50,
"is_active": true,
"created_at": "2026-03-01T09:00:00Z"
}
]/v1/studio/:id/variantsCreate a variant. name is required; traffic_pct defaults to 50 and must not push the active total over 100.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (3)
namestringRequiredsystem_promptstringOptionaltraffic_pctintegerOptionalResponse
Illustrative example, not a captured response{
"id": "var_EXAMPLE0002",
"dyva_id": "dyva_EXAMPLE0001",
"name": "Variant A: Socratic Method",
"system_prompt": "You are a coding mentor who uses Socratic questioning to guide learners...",
"traffic_pct": 33,
"is_active": true,
"created_at": "2026-03-09T15:00:00Z"
}/v1/studio/:id/variants/:variant_idUpdate a variant. All fields optional. Not a PUT: a PUT to this path returns 404, since only PATCH is registered.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (2)
idstringRequiredvariant_idstringRequiredRequest body (3)
namestringOptionalsystem_promptstringOptionaltraffic_pctintegerOptionalResponse
Illustrative example, not a captured response{
"id": "var_EXAMPLE0002",
"dyva_id": "dyva_EXAMPLE0001",
"name": "Variant B: Concise Style",
"traffic_pct": 25,
"is_active": true,
"updated_at": "2026-03-09T16:10:00Z"
}/v1/studio/:id/publishPublish to the marketplace. Only category_slug is accepted in the body. There is no tags or pricing field on this endpoint. Fails with 422 and a readiness object when the Dyva isn't publish-ready (missing avatar, no category, etc.), not with a generic 400.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (1)
category_slugstringRequiredResponse
Illustrative example, not a captured response{
"id": "dyva_EXAMPLE0001",
"name": "Code Mentor",
"visibility": "public",
"marketplace_listed": true,
"category_id": "cat_EXAMPLE01",
"published_at": "2026-03-09T16:30:00Z"
}/v1/studio/:id/unpublishTake a Dyva off the marketplace. Sets visibility back to private; the Dyva itself is untouched.
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": "dyva_EXAMPLE0001",
"name": "Code Mentor",
"visibility": "private",
"marketplace_listed": false,
"updated_at": "2026-03-09T17:00:00Z"
}