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

# Get call analysis

> 
Retrieve the full AI review for a call. This is the complete output of the
analysis pipeline — everything the Aura dashboard shows on a call's review tab.

**Response includes:**
- Overall, closing, emotional and structure scores, plus the buyer certainty index
- AI verdict (`hire`, `retain`, `replace`) with confidence and written reasoning
- Every detected objection: category, the prospect's verbatim quote, and how well
  it was handled
- Key moments with their offset into the call
- The stage-by-stage call journey (rapport → discovery → pitch → close), each
  stage scored
- Coaching output: quick insights, the specific script upgrades that would have
  changed the call, and the exit door taken
- `offer_made`, which powers offer-rate reporting

**Availability.** The review runs asynchronously after the call ends, so it lands
minutes to hours after the call itself. Until it does, this endpoint returns 404.
Two ways to know when it is ready:

- `has_analysis` on the call object (`GET /v1/calls`, `GET /v1/calls/{id}`)
- the `call.analysis_completed` webhook, which carries the headline scores and a
  link back here — prefer this over polling

**Evolving fields.** `coaching_data`, `metrics`, `call_journey` and
`quick_insights` are pipeline outputs whose internal structure improves as the
models do. Their presence is contractual; their inner keys are not. Read them
defensively and do not pin to a specific shape.
  

Retrieve the full AI review for a call. This is the complete output of the
analysis pipeline — everything the Aura dashboard shows on a call's review tab.

**Response includes:**

* Overall, closing, emotional and structure scores, plus the buyer certainty index
* AI verdict (`hire`, `retain`, `replace`) with confidence and written reasoning
* Every detected objection: category, the prospect's verbatim quote, and how well
  it was handled
* Key moments with their offset into the call
* The stage-by-stage call journey (rapport → discovery → pitch → close), each
  stage scored
* Coaching output: quick insights, the specific script upgrades that would have
  changed the call, and the exit door taken
* `offer_made`, which powers offer-rate reporting

**Availability.** The review runs asynchronously after the call ends, so it lands
minutes to hours after the call itself. Until it does, this endpoint returns 404.
Two ways to know when it is ready:

* `has_analysis` on the call object (`GET /v1/calls`, `GET /v1/calls/{id}`)
* the `call.analysis_completed` webhook, which carries the headline scores and a
  link back here — prefer this over polling

**Evolving fields.** `coaching_data`, `metrics`, `call_journey` and
`quick_insights` are pipeline outputs whose internal structure improves as the
models do. Their presence is contractual; their inner keys are not. Read them
defensively and do not pin to a specific shape.


## OpenAPI

````yaml openapi.json GET /v1/calls/{id}/analysis
openapi: 3.1.0
info:
  contact:
    email: support@aura-app.ai
    name: Aura Support
  description: >-
    # Aura Partner Integrations API


    > **Alpha Release** - This API is under active development. Endpoints,
    request/response schemas, and behaviors may change without prior notice. We
    recommend pinning to specific response fields you need and handling unknown
    fields gracefully.


    Enterprise REST API for external partner integrations including

    commission platforms, external mobile apps, and client booking widgets.


    ## MCP Connector


    Aura also exposes a **Model Context Protocol** server at `/mcp` so AI

    assistants (Claude, ChatGPT) can answer questions about a user's own sales
    data.

    If you are building an assistant integration rather than a server-to-server
    one,

    that is almost certainly the surface you want — it is task-shaped ("prep me
    for

    my next call") rather than resource-shaped, and it handles auth per-user.


    Read-only. OAuth 2.1 + PKCE, with Clerk as the authorization server;
    discover it

    from `/.well-known/oauth-protected-resource`. Setup guide:

    https://docs.api.aura-app.ai/mcp-connector


    ## Authentication


    Authenticated endpoints support two authentication methods:


    **1. API Key (for partners and integrations):**

    ```

    Authorization: Bearer aura_pk_live_xxxxxxxxxxxxxxxx

    ```

    Get your API key from the Aura dashboard at Settings > API Keys.


    **2. Clerk JWT (for mobile and web apps):**

    ```

    Authorization: Bearer <clerk_jwt_token>

    ```

    Use Clerk's authentication SDK to obtain a JWT token with org claims.


    ## Rate Limiting


    - **Per API Key:** 100 requests/minute

    - **Per Organization:** 1000 requests/minute


    Rate limit headers are included in all responses:

    - `X-RateLimit-Limit`: Maximum requests allowed

    - `X-RateLimit-Remaining`: Remaining requests in current window

    - `X-RateLimit-Reset`: Unix timestamp when limit resets


    These counters are held per serving instance, so under concurrency the

    effective ceiling is higher than the number above and the headers describe
    one

    instance's view rather than a global total. Treat a 429 as backpressure to
    obey

    and pace your client to the documented rate — but do not rely on us to
    reject

    your 101st request, and do not derive a global remaining-quota figure from
    the

    headers. The limit may become globally enforced without notice, so a client

    that stays within it will not be affected when that happens.


    ## Pagination


    List endpoints support cursor-based pagination:

    - `limit`: Number of results per page (default: 50, max: 100)

    - `cursor`: Opaque cursor for next page


    ## Error Handling


    All errors follow a standard format:


    ```json

    {
      "success": false,
      "error": "Error message",
      "code": "ERROR_CODE"
    }

    ```


    Common HTTP status codes:

    - **400** Bad Request - Invalid input (`VALIDATION_ERROR`)

    - **401** Unauthorized - Missing or invalid API key (`AUTHENTICATION_ERROR`)

    - **402** Payment Required - The key is valid, but the organization's
    subscription is not active (`PAYMENT_REQUIRED`). Every authenticated
    endpoint can return this. Retrying will not help until the account's payment
    method is updated in Aura; surface it to the account owner rather than
    treating it as an auth failure.

    - **403** Forbidden - Insufficient permissions (`AUTHORIZATION_ERROR`)

    - **404** Not Found - Resource not found (`NOT_FOUND`)

    - **409** Conflict - Resource state prevents the operation (`CONFLICT`)

    - **413** Payload Too Large - Request body exceeds 256KB
    (`PAYLOAD_TOO_LARGE`)

    - **429** Too Many Requests - Rate limit exceeded (`RATE_LIMIT_EXCEEDED`)

    - **500** Internal Server Error - Server error (`INTERNAL_ERROR`)


    ## Webhooks


    Subscribe to real-time events using the Webhooks API. All webhook payloads

    are signed with HMAC-SHA256 for security verification.


    Delivery is at-least-once. Every payload carries an `idempotency_key` that

    is stable across retries of the same event, so you can enforce exactly-once

    with a `(subscription_id, idempotency_key)` unique constraint on your side.


    For full documentation, visit
    [docs.aura-app.ai/api](https://docs.aura-app.ai/api)
  license:
    name: Proprietary
  title: Aura Partner Integrations API
  version: 1.0.0-alpha
servers:
  - description: Production
    url: https://api.aura-app.ai
  - description: Staging
    url: https://staging-api.aura-app.ai
  - description: Local Development
    url: http://localhost:3001
security:
  - bearerAuth: []
tags:
  - description: Lead management operations
    name: Leads
  - description: Call booking and management
    name: Calls
  - description: Booking link configuration (read-only)
    name: Booking Links
  - description: Product catalog (read-only)
    name: Products
  - description: Payment tracking (read-only)
    name: Payments
  - description: Public booking creation
    name: Bookings
  - description: Real-time event subscriptions and webhook management
    name: Webhooks
  - description: >-
      Team member information for commission attribution. **Alpha** - schema may
      change without notice.
    name: Team (Alpha)
  - description: >-
      Dashboard analytics, lead source attribution, and objection analysis.
      **Alpha** - schema may change without notice.
    name: Analytics (Alpha)
  - description: System endpoints (health checks)
    name: System
paths:
  /v1/calls/{id}/analysis:
    get:
      tags:
        - Calls
      summary: Get call analysis
      description: >-

        Retrieve the full AI review for a call. This is the complete output of
        the

        analysis pipeline — everything the Aura dashboard shows on a call's
        review tab.


        **Response includes:**

        - Overall, closing, emotional and structure scores, plus the buyer
        certainty index

        - AI verdict (`hire`, `retain`, `replace`) with confidence and written
        reasoning

        - Every detected objection: category, the prospect's verbatim quote, and
        how well
          it was handled
        - Key moments with their offset into the call

        - The stage-by-stage call journey (rapport → discovery → pitch → close),
        each
          stage scored
        - Coaching output: quick insights, the specific script upgrades that
        would have
          changed the call, and the exit door taken
        - `offer_made`, which powers offer-rate reporting


        **Availability.** The review runs asynchronously after the call ends, so
        it lands

        minutes to hours after the call itself. Until it does, this endpoint
        returns 404.

        Two ways to know when it is ready:


        - `has_analysis` on the call object (`GET /v1/calls`, `GET
        /v1/calls/{id}`)

        - the `call.analysis_completed` webhook, which carries the headline
        scores and a
          link back here — prefer this over polling

        **Evolving fields.** `coaching_data`, `metrics`, `call_journey` and

        `quick_insights` are pipeline outputs whose internal structure improves
        as the

        models do. Their presence is contractual; their inner keys are not. Read
        them

        defensively and do not pin to a specific shape.
          
      parameters:
        - description: Call ID (UUID)
          in: path
          name: id
          required: true
          schema:
            description: Call ID (UUID)
            example: 550e8400-e29b-41d4-a716-446655440000
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallAnalysisSuccessResponse'
          description: Successfully retrieved call analysis
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: Request validation failed
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: Missing or invalid API key
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: The organization's subscription is not active
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: The API key does not have the required scope
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallAnalysisErrorResponse'
          description: Call analysis not found
        '408':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: >-
            The request exceeded its processing time limit. Check the outcome
            before retrying a write
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '413':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: The request body exceeds 256KB
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: Rate limit exceeded. Wait before retrying
          headers:
            Retry-After:
              description: Seconds to wait before retrying
              schema:
                type: string
            X-RateLimit-Limit:
              description: Requests allowed in the current window
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Requests remaining in the current window
              schema:
                type: string
            X-RateLimit-Reset:
              description: Window reset as a Unix timestamp
              schema:
                type: string
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: >-
            Unexpected server failure. Include the request identifier when
            contacting support
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
      security:
        - bearerAuth: []
components:
  schemas:
    CallAnalysisSuccessResponse:
      properties:
        data:
          $ref: '#/components/schemas/CallAnalysis'
        success:
          enum:
            - true
          type: boolean
      required:
        - success
        - data
      type: object
    MiddlewareErrorResponse:
      properties:
        code:
          type: string
        error:
          type: string
        requestId:
          type: string
        success:
          enum:
            - false
          type: boolean
      required:
        - success
        - error
        - code
      type: object
    CallAnalysisErrorResponse:
      properties:
        code:
          description: Error code
          example: NOT_FOUND
          type: string
        error:
          description: Error message
          example: Call analysis not found
          type: string
        success:
          enum:
            - false
          type: boolean
      required:
        - success
        - error
      type: object
    CallAnalysis:
      properties:
        analyzed_at:
          description: When the analysis was performed
          example: '2026-01-17T10:00:00Z'
          format: date-time
          type: string
        buyer_certainty_index:
          description: Buyer certainty index (0-100)
          example: 55
          nullable: true
          type: number
        call_id:
          description: ID of the analyzed call
          type: string
        call_journey:
          $ref: '#/components/schemas/CallJourney'
        closing_score:
          description: Closing effectiveness score (0-100)
          example: 65
          nullable: true
          type: number
        coaching_data:
          $ref: '#/components/schemas/CoachingData'
        confidence:
          description: Confidence level in the analysis (0-1)
          example: 0.87
          nullable: true
          type: number
        created_at:
          description: When the analysis record was created
          example: '2026-01-17T10:00:00Z'
          format: date-time
          type: string
        door:
          $ref: '#/components/schemas/ExitDoor'
        emotional_score:
          description: Emotional intelligence score (0-100)
          example: 82
          nullable: true
          type: number
        id:
          description: Unique identifier for the analysis
          example: 550e8400-e29b-41d4-a716-446655440000
          type: string
        key_moments:
          description: Key moments from the call with timestamps
          items:
            $ref: '#/components/schemas/KeyMoment'
          nullable: true
          type: array
        metrics:
          $ref: '#/components/schemas/CallMetrics'
        objections_detected:
          description: All objections detected with confidence, quotes, and handling scores
          items:
            $ref: '#/components/schemas/DetectedObjection'
          nullable: true
          type: array
        offer_made:
          description: >-
            Whether the rep actually presented an offer on this call. Powers the
            offer-rate KPI. Null on analyses produced before this signal existed
            — treat null as false when aggregating.
          example: true
          nullable: true
          type: boolean
        overall_score:
          description: Overall call performance score (0-100)
          example: 78
          nullable: true
          type: number
        pack_id:
          description: >-
            Methodology pack this call was graded against. Null on analyses that
            pre-date methodology packs, which used the built-in seven-stage
            rubric. Results are stored per pack and never re-graded on read.
          nullable: true
          type: string
        primary_objection:
          description: Primary objection category detected
          example: price
          nullable: true
          type: string
        quick_insights:
          $ref: '#/components/schemas/QuickInsights'
        reasoning:
          description: Reasoning for the verdict and status classification
          nullable: true
          type: string
        status:
          description: Predicted call status based on AI analysis
          example: closed
          nullable: true
          type: string
        structure_score:
          description: Call structure score (0-100)
          example: 71
          nullable: true
          type: number
        updated_at:
          description: When the analysis record was last updated
          example: '2026-01-17T10:00:00Z'
          format: date-time
          type: string
        upgrades:
          description: >-
            The two or three specific lines that would most change this call's
            outcome, ranked by deal impact. Each entry pairs what the rep said
            (`was`) with a suggested replacement (`say`) and the surrounding
            context (`ctx`).
          items:
            $ref: '#/components/schemas/ScriptUpgrade'
          nullable: true
          type: array
        verdict:
          description: 'AI verdict: "hire", "retain", or "replace"'
          example: retain
          nullable: true
          type: string
      required:
        - id
        - call_id
        - overall_score
        - closing_score
        - emotional_score
        - structure_score
        - buyer_certainty_index
        - status
        - verdict
        - confidence
        - reasoning
        - primary_objection
        - objections_detected
        - key_moments
        - call_journey
        - quick_insights
        - coaching_data
        - metrics
        - offer_made
        - door
        - upgrades
        - pack_id
        - analyzed_at
        - created_at
        - updated_at
      type: object
    CallJourney:
      description: >-
        AI-generated call flow breakdown (discovery → gap → financial
        qualification → pitch → objection handling → close). Internal pipeline
        output; structure may evolve as the model improves. Treat unknown keys
        as forward-compatible — partners should not pin to a specific shape.
      items:
        additionalProperties:
          nullable: true
        type: object
      nullable: true
      type: array
    CoachingData:
      additionalProperties:
        nullable: true
      description: >-
        AI-generated coaching feedback (line rewrites, action plans, improvement
        areas). Internal pipeline output; structure may evolve.
      nullable: true
      type: object
    ExitDoor:
      additionalProperties:
        nullable: true
      description: >-
        Exit-door classification: how the call ended and on what terms. `taken`
        is null when no clean exit was established. Doors are methodology-pack
        agnostic.
      nullable: true
      properties:
        note:
          description: Why the model classified the exit this way.
          example: >-
            Prospect agreed to review the proposal with their partner and a
            follow-up was booked.
          nullable: true
          type: string
        taken:
          description: >-
            Which exit door the rep took (1-3), or null when the call ended
            without establishing one.
          example: 2
          maximum: 3
          minimum: 1
          nullable: true
          type: integer
      required:
        - taken
        - note
      type: object
    KeyMoment:
      additionalProperties:
        nullable: true
      properties:
        description:
          description: Description of what happened
          example: Lead raised concern about implementation timeline
          type: string
        id:
          description: >-
            Stable identifier for the moment within this analysis (e.g.,
            "moment-1")
          example: moment-1
          type: string
        speaker:
          description: Who was speaking at this moment
          example: Sarah Smith
          nullable: true
          type: string
        timestamp:
          description: >-
            Offset from the start of the call, in seconds. Absent on moments the
            model could not place on the timeline.
          example: 312
          nullable: true
          type: number
        title:
          description: Short headline for the moment
          example: Prospect Rejects Offer
          type: string
        type:
          description: >-
            Type of moment (e.g., "breaking_point", "opportunity", "warning",
            "info")
          example: breaking_point
          type: string
      required:
        - type
        - description
      type: object
    CallMetrics:
      additionalProperties:
        nullable: true
      description: >-
        AI-extracted quantitative metrics (talk-time ratio, monologue counts,
        filler-word density, etc.). Internal pipeline output; structure may
        evolve.
      nullable: true
      type: object
    DetectedObjection:
      additionalProperties:
        nullable: true
      properties:
        category:
          description: >-
            Objection category (e.g., "money", "timing", "partner",
            "smoke_screen", "authority")
          example: smoke_screen
          type: string
        confidence:
          description: AI confidence in detection (0-1)
          example: 0.92
          type: number
        handling_feedback:
          description: >-
            Detailed feedback on objection handling quality. Present whenever
            handling_score is.
          example: Good reframe to value but missed opportunity to anchor to ROI
          type: string
        handling_score:
          description: >-
            Score for how well the objection was handled (0-100). Absent when
            the objection was raised but never addressed — most commonly on
            no-shows and calls that ended at the objection.
          example: 75
          type: number
        quote:
          description: Direct quote from the transcript
          example: That's a bit more than we budgeted for this quarter
          type: string
      required:
        - category
        - confidence
        - quote
      type: object
    QuickInsights:
      description: >-
        AI-generated short-form insights (objections raised, sentiment, decision
        indicators). Internal pipeline output; structure may evolve.
      items:
        additionalProperties:
          nullable: true
        type: object
      nullable: true
      type: array
    ScriptUpgrade:
      additionalProperties:
        nullable: true
      properties:
        ctx:
          description: Why this moment matters and how to deliver the line.
          example: >-
            Immediately after the prospect declines — the highest-leverage
            moment in the call.
          type: string
        say:
          description: The suggested replacement line.
          example: >-
            Before we wrap up — I totally respect that. Can I ask what gave you
            pause?
          type: string
        t:
          description: Offset from the start of the call, in seconds.
          example: 312
          type: number
        was:
          description: What the rep actually said.
          example: So unfortunately, we don't have a deal today.
          type: string
      required:
        - t
        - was
        - say
        - ctx
      type: object

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.