Skip to main content
PATCH
/
agent-eval
/
cases
/
{id}
Update case
curl --request PATCH \
  --url https://api.goyappr.com/agent-eval/cases/{id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "<string>",
  "description": "<string>",
  "persona_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "suite_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "scenario": "<string>",
  "success_criteria": [
    {
      "weight": 1,
      "description": "<string>",
      "pattern": "<string>",
      "tool_name": "<string>",
      "args_match": {},
      "node_id": "<string>",
      "rubric": "<string>"
    }
  ],
  "max_turns": 50,
  "pass_threshold": 50,
  "agent_overrides": {},
  "tool_allowlist": [
    "<string>"
  ]
}
'
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "company_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "persona_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "name": "Yes path — caller agrees on first ask",
  "scenario": "The persona is responding to a missed call from your business about their recent inquiry. They have time to talk for 5 minutes.",
  "success_criteria": [
    {
      "weight": 1,
      "description": "<string>",
      "pattern": "<string>",
      "tool_name": "<string>",
      "args_match": {},
      "node_id": "<string>",
      "rubric": "<string>"
    }
  ],
  "max_turns": 20,
  "pass_threshold": 80,
  "tool_policy": "mock",
  "created_at": "2023-11-07T05:31:56Z",
  "agent": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>",
    "type": "prompt",
    "flow_config": {
      "nodes": [
        {
          "id": "<string>",
          "name": "<string>",
          "position": {
            "x": 123,
            "y": 123
          },
          "agent_speaks_first": true,
          "greeting": "<string>",
          "is_literal": false,
          "next_step_id": "<string>",
          "auto_advance": true
        }
      ],
      "flow_config_version": "1",
      "metadata": {
        "custom_metadata_keys": [
          "<string>"
        ]
      }
    },
    "system_prompt": "<string>",
    "description": "<string>",
    "background_sound_volume": 0.3,
    "temperature": 1,
    "greeting_message": "<string>",
    "agent_speaks_first": true,
    "vad_stop_secs": 0.5,
    "vad_start_secs": 0.2,
    "vad_confidence": 0.7,
    "silence_timeout_secs": 60,
    "max_continuous_speech_secs": 120,
    "max_call_duration_secs": 600,
    "lead_memory_enabled": true,
    "is_active": true,
    "webhook_url": "<string>",
    "webhook_events": [],
    "extraction_parameters": [
      {
        "name": "customerName",
        "description": "The caller's full name as mentioned during the conversation"
      }
    ],
    "created_at": "2023-11-07T05:31:56Z",
    "updated_at": "2023-11-07T05:31:56Z"
  },
  "persona": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "company_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "Frustrated tenant",
    "identity_prompt": "You are a 38-year-old tenant calling about a leaking pipe in your kitchen. You're frustrated because this is the third time you've reported it.",
    "language": "en",
    "created_at": "2023-11-07T05:31:56Z",
    "description": "<string>",
    "behavior_traits": {
      "patience": "low",
      "verbosity": "chatty",
      "cooperation": "cooperative",
      "interruption_tendency": "occasional",
      "goal": "Get a maintenance technician scheduled today"
    },
    "voice_config": {},
    "updated_at": "2023-11-07T05:31:56Z",
    "deleted_at": "2023-11-07T05:31:56Z"
  },
  "suite_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "description": "<string>",
  "agent_overrides": {},
  "tool_allowlist": [],
  "updated_at": "2023-11-07T05:31:56Z",
  "deleted_at": "2023-11-07T05:31:56Z"
}

Documentation Index

Fetch the complete documentation index at: https://docs.goyappr.com/llms.txt

Use this file to discover all available pages before exploring further.

Send only the fields you want to change. The case’s agent_id itself is not patchable — to repoint a case at a different agent, create a new case (the original keeps its run history intact). A common pattern: tweak success_criteria after watching a few runs. Lower the weight on a flaky assertion, raise it on a load-bearing one, add a new must_not_say for a phrase you saw the agent leak.

Authorizations

Authorization
string
header
required

Your Yappr API key (e.g. ypr_live_...). Generate one in the dashboard under Settings → API Keys.

Path Parameters

id
string<uuid>
required

Body

application/json
name
string
description
string | null
persona_id
string<uuid>
suite_id
string<uuid> | null
scenario
string
success_criteria
object[]
max_turns
integer
Required range: 1 <= x <= 100
pass_threshold
number
Required range: 0 <= x <= 100
agent_overrides
object
tool_policy
enum<string>
Available options:
mock,
real,
allowlist
tool_allowlist
string[]

Response

Updated case

A specific eval scenario — persona + target agent + scenario + success criteria.

id
string<uuid>
required
company_id
string<uuid>
required
agent_id
string<uuid>
required

Agent under test. Full agent record is expanded inline as agent in API responses.

persona_id
string<uuid>
required
name
string
required
Example:

"Yes path — caller agrees on first ask"

scenario
string
required

Free-form one-paragraph framing the persona LLM is given on top of its identity. Describe the situation that prompted the call.

Example:

"The persona is responding to a missed call from your business about their recent inquiry. They have time to talk for 5 minutes."

success_criteria
object[]
required

Array of assertions evaluated after the run completes.

max_turns
integer
default:20
required

Hard cap on conversation turns. Hitting this terminates the run with termination_reason='max_turns'.

Required range: 1 <= x <= 100
pass_threshold
number
default:80
required

Weighted-score threshold (0-100) for pass_fail=true.

Required range: 0 <= x <= 100
tool_policy
enum<string>
default:mock
required

How the agent's tools behave during the run. mock (default): every tool call returns a synthetic success result the worker fabricates from the tool's declared output schema. real: tools fire for real (charges real money, hits real systems). allowlist: tools whose name appears in tool_allowlist fire for real, the rest return mock results.

Available options:
mock,
real,
allowlist
created_at
string<date-time>
required
agent
object
persona
object

Reusable caller archetype consumed by eval cases. The identity_prompt plus behavior_traits shape how the persona LLM responds; the same persona can be reused across many cases.

suite_id
string<uuid> | null

Optional parent suite. When null, the case is ad-hoc — runnable on its own but not part of a regression sweep.

description
string | null
agent_overrides
object

Optional per-case overrides applied to the agent's saved config at run time (e.g. a different system_prompt or flow_config for A/B testing). Same shape as the agent record. The agent on disk is never mutated.

tool_allowlist
string[]

Used only when tool_policy='allowlist'. List of tool names (camelCase) that should fire for real.

updated_at
string<date-time>
deleted_at
string<date-time> | null