{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/itsconvo-com/json-schema/itsconvo-com-feedback-response-schema.json",
  "title": "FeedbackResponse",
  "x-generated": "2026-11-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/itsconvo-com-openapi.json#/components/schemas/FeedbackResponse",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "feedback": {
      "type": "object",
      "properties": {
        "overallScore": {
          "type": "number",
          "description": "0 to 10"
        },
        "topPriority": {
          "type": "object",
          "description": "Optional. The single highest-leverage focus area to act on before the next call — synthesized from across the growth areas, not necessarily a copy of growthAreas[0]. Absent when the call was too brief/routine for a clear priority, or in feedback generated before this field existed.",
          "properties": {
            "focus": {
              "type": "string",
              "description": "Short imperative theme, 4-8 words ('Slow down before committing to scope')."
            },
            "quote": {
              "type": "string",
              "description": "Verbatim anchoring moment from the user's transcript."
            },
            "reason": {
              "type": "string",
              "description": "Why this is the #1 priority for next call (1-2 sentences)."
            },
            "alternative": {
              "type": "string",
              "description": "Verbatim line the user could have said instead. Rendered as a 'Try saying' callout."
            }
          }
        },
        "strengths": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "category": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "timestamp": {
                "type": "string"
              },
              "quote": {
                "type": "string",
                "description": "Verbatim line the user said (primary content for chat-bubble rendering)."
              },
              "reason": {
                "type": "string",
                "description": "Why this specific moment landed well (1-2 sentences)."
              }
            }
          }
        },
        "growthAreas": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "category": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "suggestion": {
                "type": "string"
              },
              "timestamp": {
                "type": "string"
              },
              "quote": {
                "type": "string",
                "description": "Verbatim line the user said that could be improved."
              },
              "reason": {
                "type": "string",
                "description": "Why this moment fell short (1-2 sentences)."
              },
              "alternative": {
                "type": "string",
                "description": "Verbatim better phrasing the user could have used instead. Rendered as a 'Try saying' callout."
              }
            }
          }
        },
        "categoryScores": {
          "type": "object",
          "properties": {
            "clarity": {
              "type": "number"
            },
            "listening": {
              "type": "number"
            },
            "timeManagement": {
              "type": "number"
            },
            "collaboration": {
              "type": "number"
            },
            "decisionMaking": {
              "type": "number"
            }
          }
        },
        "talkListenRatio": {
          "type": "number",
          "description": "Talk-to-listen ratio as a percentage (0 to 100), estimated by the model"
        },
        "actionPlan": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "stats": {
          "type": "object",
          "description": "Added when the feedback is generated through the API",
          "properties": {
            "talkListenRatio": {
              "type": "number",
              "description": "Same as `talkListenRatio`, 50 when the model gave none"
            },
            "totalMinutes": {
              "type": "integer",
              "description": "Minutes between the first and last segment"
            }
          }
        }
      }
    },
    "overallScore": {
      "type": "number"
    },
    "userSpeakerName": {
      "type": "string",
      "description": "The speaker Convo scored as you: `local` (your microphone), a speaker whose name matches yours, or `Unknown`"
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    }
  }
}