> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invoca.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Transcript Analysis (v2)

export const MethodTag = ({method = "GET", path, label, colors = {}}) => {
  const presets = {
    get: {
      label: "GET",
      light: {
        bg: "#DCFCE7",
        text: "#15803D"
      },
      dark: {
        bg: "rgba(34,197,94,0.16)",
        text: "#4ADE80"
      }
    },
    post: {
      label: "POST",
      light: {
        bg: "#DBEAFE",
        text: "#1D4ED8"
      },
      dark: {
        bg: "rgba(59,130,246,0.16)",
        text: "#60A5FA"
      }
    },
    put: {
      label: "PUT",
      light: {
        bg: "#FEF3C7",
        text: "#B45309"
      },
      dark: {
        bg: "rgba(245,158,11,0.16)",
        text: "#FBBF24"
      }
    },
    patch: {
      label: "PATCH",
      light: {
        bg: "#F3E8FF",
        text: "#7E22CE"
      },
      dark: {
        bg: "rgba(168,85,247,0.16)",
        text: "#C084FC"
      }
    },
    delete: {
      label: "DEL",
      light: {
        bg: "#FEE2E2",
        text: "#B91C1C"
      },
      dark: {
        bg: "rgba(239,68,68,0.16)",
        text: "#F87171"
      }
    }
  };
  const fallback = {
    label: String(method).toUpperCase(),
    light: {
      bg: "#F3F4F6",
      text: "#374151"
    },
    dark: {
      bg: "rgba(156,163,175,0.16)",
      text: "#D1D5DB"
    }
  };
  const preset = presets[String(method).toLowerCase()] || fallback;
  const light = {
    ...preset.light,
    ...colors.light || ({})
  };
  const dark = {
    ...preset.dark,
    ...colors.dark || ({})
  };
  const css = `
    .invoca-method-tag {
      display: inline-block;
      padding: 1px 8px;
      margin-right: 8px;
      border-radius: 8px;
      font-size: 10px;
      line-height: 18px;
      font-weight: 700;
      letter-spacing: 0.4px;
      text-transform: uppercase;
      vertical-align: middle;
      background: var(--imt-bg);
      color: var(--imt-fg);
    }
    .invoca-method-path {
      font-size: 13px;
    }
    [data-component-part="accordion-icon"]:has(.invoca-method-tag) {
      width: auto;
      height: auto;
      flex-shrink: 0;
    }
    [data-component-part="accordion-icon"] .invoca-method-tag {
      margin-right: 0;
    }
    [data-component-part="accordion-button"]:has(.invoca-method-tag) {
      flex-wrap: wrap;
      row-gap: 6px;
    }
    [data-component-part="accordion-button"]:has(.invoca-method-tag) [data-component-part="accordion-icon"] {
      flex: 1 1 0;
      min-width: 0;
      overflow-wrap: anywhere;
    }
    [data-component-part="accordion-button"]:has(.invoca-method-tag) [data-component-part="accordion-title-container"] {
      flex: 0 0 calc(100% - 8px);
      padding-left: 20px;
    }
    [data-component-part="accordion-button"]:has(.invoca-method-tag) [data-component-part="accordion-title"] {
      font-size: 12px;
    }
    .dark .invoca-method-tag,
    [data-theme="dark"] .invoca-method-tag {
      background: var(--imt-bg-dark);
      color: var(--imt-fg-dark);
    }
  `;
  const vars = {
    "--imt-bg": light.bg,
    "--imt-fg": light.text,
    "--imt-bg-dark": dark.bg,
    "--imt-fg-dark": dark.text
  };
  return <span>
      <style>{css}</style>
      <span className="invoca-method-tag" style={vars}>
        {label || preset.label}
      </span>
      {path ? <code className="invoca-method-path">{path}</code> : null}
    </span>;
};

## URL

The API follows REST conventions. Perform an HTTPS GET to the URL in order to retrieve Transcript Analysis.

Unlike v1, the v2 endpoint always returns an explicit, per-analysis `status` for both the transcript summary and sentiment, so clients never have to interpret a missing field. Each analysis has its own independent lifecycle (sentiment can be available while the summary is still pending, and vice versa).

The following response formats are supported, where CUID-33 is the call record id.

| Format         | Description and URL                                                                                                                                                                     |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| json (default) | Returns a JSON object of the transcript analysis. [https://mynetwork.invoca.net/call/v2/transcript\_analysis/CUID-33](https://mynetwork.invoca.net/call/v2/transcript_analysis/CUID-33) |

## Authentication

The API uses OAuth to validate access. The OAuth Token can be passed in two ways. The first way is to pass the OAuth Token in the header of the request. The second is to pass the OAuth Token like any other query parameter. Please note that the OAuth Token is a required parameter. OAuth Tokens may be generated from the Manage API Credentials page.

## Status values

`transcript_summary.status`:

| Status                 | Meaning                                                                     |
| ---------------------- | --------------------------------------------------------------------------- |
| available              | The summary has been generated; text is present.                            |
| pending                | The summary is enabled and is being (or will be) generated; text is absent. |
| transcript\_too\_short | The transcript was too short to summarize; no summary will be produced.     |
| no\_transcript         | The call has no transcript; no summary will be produced.                    |
| not\_applicable        | Transcript summaries are not enabled for this network.                      |

`sentiment.status`:

| Status          | Meaning                                                                     |
| --------------- | --------------------------------------------------------------------------- |
| available       | Sentiment has been computed; overall, agent, and caller scores are present. |
| pending         | Sentiment is enabled and is being (or will be) computed; scores are absent. |
| not\_applicable | Sentiment analysis is not enabled for this network.                         |

## Response

<AccordionGroup>
  <Accordion title="Get a transcript analysis (summary and sentiment available)" icon={<MethodTag method="get" path="/call/v2/transcript_analysis/<call_record_id>"/>}>
    #### Examples

    Get transcript analysis for the given call record `CUID-33` where both the summary and sentiment are available

    Endpoint:

    `https://mynetwork.invoca.net/call/v2/transcript_analysis/CUID-33`

    Format: application/json

    Response Code: 200

    Response Body:

    ```json theme={null}
    {
       "call_record_id": "CUID-33",
       "transcript_summary": {
          "status": "available",
          "text": "The customer was looking to purchase a new vehicle."
       },
       "sentiment": {
          "status": "available",
          "overall": { "score": 0.42, "label": "positive" },
          "agent":   { "score": 0.55, "label": "positive" },
          "caller":  { "score": 0.31, "label": "neutral" }
       }
    }
    ```
  </Accordion>

  <Accordion title="Get a transcript analysis (summary pending, sentiment not enabled)" icon={<MethodTag method="get" path="/call/v2/transcript_analysis/<call_record_id>"/>}>
    #### Examples

    Get transcript analysis for the given call record `CUID-33` where the summary is still pending and sentiment analysis is not enabled

    Endpoint:

    `https://mynetwork.invoca.net/call/v2/transcript_analysis/CUID-33`

    Format: application/json

    Response Code: 200

    Response Body:

    ```json theme={null}
    {
       "call_record_id": "CUID-33",
       "transcript_summary": {
          "status": "pending"
       },
       "sentiment": {
          "status": "not_applicable"
       }
    }
    ```
  </Accordion>
</AccordionGroup>

Endpoint:

`https://mynetwork.invoca.net/call/v2/transcript_analysis/<call_record_id>`
