Skip to main content

CallAnalysisSaveRequestDTO

Request body for POST /v1/open-api/call-history/{uuid}/analysis — the analysis produced by an external service for one conversation.

Every field is optional except insights[].summary. The order of every list is preserved as sent; there is no orderIndex field to supply.

sourceTypeAnalysisSourceTypenullable

Kind of conversation the analysis was produced from. Omitted or null is treated as CALL.

Possible values: [CALL, MEET, ZOOM, TEAMS, OFFLINE]

Example: CALL
languagestringnullable

Language of the conversation, as an ISO 639-1 code. Max 8 characters.

Possible values: <= 8 characters

Example: uz
durationSecint32nullable

Length of the analysed conversation in seconds.

Possible values: >= 0

Example: 312
startedAtint64nullable

Start time of the conversation (epoch seconds).

Example: 1719734400
overallScoreint32nullable

Overall quality score of the conversation, 0–100.

Possible values: >= 0 and <= 100

Example: 82
overallScoreLabelstringnullable

Short human-readable label for overallScore (e.g. Yaxshi, Good).

Possible values: <= 128 characters

Example: Yaxshi
overallScoreCommentstringnullable

Free-text justification of the overall score. No length limit.

Example: Menejer ehtiyojni aniqladi, lekin narx e'tirozini yopmadi.
providerstringnullable

Name of the analysis provider that produced this result.

Possible values: <= 64 characters

Example: openai
providerModelstringnullable

Concrete model / engine version used by the provider.

Possible values: <= 128 characters

Example: gpt-4o-mini
chapters object[]nullable

Timeline segments of the conversation. Max 50 items.

Possible values: <= 50

  • Array [
  • titlestringnullable

    Segment title.

    Possible values: <= 255 characters

    Example: Ehtiyojni aniqlash
    startSecint32nullable

    Offset of the segment start from the beginning of the call, in seconds.

    Possible values: >= 0

    Example: 25
    durationSecint32nullable

    Length of the segment in seconds.

    Possible values: >= 0

    Example: 140
  • ]
  • speakers object[]nullable

    Participants of the conversation and their talk-time split. Max 20 items.

    Possible values: <= 20

  • Array [
  • namestringnullable

    Display name of the speaker. Transcript lines are matched to speakers by this name first, so keep it identical to transcript[].speakerName.

    Possible values: <= 255 characters

    Example: Aziz Karimov
    roleSpeakerRolenullable

    Role of the speaker in the conversation.

    Possible values: [MANAGER, CLIENT, OTHER]

    Example: MANAGER
    roleLabelstringnullable

    Free-text label shown in the UI, e.g. Mijoz · GreenLeaf MChJ.

    Possible values: <= 255 characters

    Example: Menejer · Uysot
    talkPercentnumbernullable

    Share of the conversation this speaker talked, in percent.

    Example: 58.4
    talkSecondsint32nullable

    Total time this speaker talked, in seconds.

    Possible values: >= 0

    Example: 182
  • ]
  • transcript object[]nullable

    Transcript lines in chronological order. Max 2000 items.

    Possible values: <= 2000

  • Array [
  • speakerNamestringnullable

    Name of the speaker of this line. Should match a speakers[].name.

    Possible values: <= 255 characters

    Example: Aziz Karimov
    speakerRoleSpeakerRolenullable

    Fallback used to match the speaker when speakerName does not match.

    Possible values: [MANAGER, CLIENT, OTHER]

    Example: MANAGER
    startSecint32nullable

    Start offset of the line, in seconds from the beginning of the call.

    Possible values: >= 0

    Example: 0
    endSecint32nullable

    End offset of the line, in seconds from the beginning of the call.

    Possible values: >= 0

    Example: 6
    textstringnullable

    The spoken text. No length limit.

    Example: Assalomu alaykum, Uysot kompaniyasidan Aziz.
  • ]
  • insights object[]nullable

    Analytical blocks rendered as cards in the UI. Max 20 items.

    Possible values: <= 20

  • Array [
  • keystringnullable

    Stable machine key of the insight, e.g. summary, objections.

    Possible values: <= 64 characters

    Example: summary
    titlestringnullable

    Card heading.

    Possible values: <= 255 characters

    Example: Qisqacha xulosa
    summarystringrequired

    Required and must not be blank. Short summary in Markdown. Exactly one summary per insight.

    Possible values: non-empty

    Example: Mijoz uch xonali kvartira bilan qiziqdi, narx muhokama qilindi.
    bodystringnullable

    Full text in Markdown — sections and bullet lists live inside this single string. No length limit.

    Example: ### Asosiy nuqtalar - Byudjet: 700–800 mln so'm - Ipoteka varianti so'raldi
  • ]
  • scoreCategories object[]nullable

    Per-category breakdown of the overall score. Max 30 items.

    Possible values: <= 30

  • Array [
  • titlestringnullable

    Category name.

    Possible values: <= 255 characters

    Example: E'tiroz bilan ishlash
    valueint32nullable

    Score achieved in this category, 0–100.

    Possible values: >= 0 and <= 100

    Example: 60
    maxValueint32nullable

    Maximum score achievable in this category, 1–100.

    Possible values: >= 1 and <= 100

    Example: 100
  • ]
  • recommendations object[]nullable

    Actionable recommendations for the operator. Max 30 items.

    Possible values: <= 30

  • Array [
  • titlestringnullable

    Short recommendation heading.

    Possible values: <= 255 characters

    Example: Narx e'tirozini yoping
    textstringnullable

    Full recommendation text. No length limit.

    Example: To'lov jadvali variantlarini oldindan tayyorlab qo'ying.
    priorityRecommendationPrioritynullable

    How urgent the recommendation is.

    Possible values: [HIGH, MEDIUM, LOW]

    Example: HIGH
    iconstringnullable

    Icon key used by the UI to render the recommendation.

    Possible values: <= 64 characters

    Example: price-tag
  • ]
  • CallAnalysisSaveRequestDTO
    {
    "sourceType": "CALL",
    "language": "uz",
    "durationSec": 312,
    "startedAt": 1719734400,
    "overallScore": 82,
    "overallScoreLabel": "Yaxshi",
    "overallScoreComment": "Menejer ehtiyojni aniqladi, lekin narx e'tirozini yopmadi.",
    "provider": "openai",
    "providerModel": "gpt-4o-mini",
    "chapters": [
    {
    "title": "Ehtiyojni aniqlash",
    "startSec": 25,
    "durationSec": 140
    }
    ],
    "speakers": [
    {
    "name": "Aziz Karimov",
    "role": "MANAGER",
    "roleLabel": "Menejer · Uysot",
    "talkPercent": 58.4,
    "talkSeconds": 182
    }
    ],
    "transcript": [
    {
    "speakerName": "Aziz Karimov",
    "speakerRole": "MANAGER",
    "startSec": 0,
    "endSec": 6,
    "text": "Assalomu alaykum, Uysot kompaniyasidan Aziz."
    }
    ],
    "insights": [
    {
    "key": "summary",
    "title": "Qisqacha xulosa",
    "summary": "Mijoz uch xonali kvartira bilan qiziqdi, narx muhokama qilindi.",
    "body": "### Asosiy nuqtalar\n- Byudjet: 700–800 mln so'm\n- Ipoteka varianti so'raldi"
    }
    ],
    "scoreCategories": [
    {
    "title": "E'tiroz bilan ishlash",
    "value": 60,
    "maxValue": 100
    }
    ],
    "recommendations": [
    {
    "title": "Narx e'tirozini yoping",
    "text": "To'lov jadvali variantlarini oldindan tayyorlab qo'ying.",
    "priority": "HIGH",
    "icon": "price-tag"
    }
    ]
    }