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

# Get a call

> Fetch one call with everything Leadey knows about the conversation: the diarised transcript, who spoke and for how long, and the AI summary.

Leadey does not serve call audio. `hasRecording` tells you a recording was captured; what it contained is in `transcript`, `transcriptSegments`, `speakers` and `summaryStructured`.

Those fields are null until the call has been transcribed, which happens shortly after it ends — poll or use the `call.completed` webhook rather than assuming they are ready.



## OpenAPI

````yaml /openapi.json get /calls/{id}
openapi: 3.1.0
info:
  title: Leadey API
  version: 1.4.0
  description: >-
    The Leadey API gives you programmatic access to your workspace: leads,
    companies, contacts, campaigns, meetings, opportunities and calls, plus the
    reporting metrics behind the Cockpit.


    Every request is authenticated with an organization-scoped API key, and
    every response is JSON. Reads work with any key. Writes — creating leads,
    adding notes, logging calls, managing tasks — need a key with write access,
    and are attributed to the workspace member that key belongs to. See [Writing
    data](/guides/writing-data).
servers:
  - url: https://backend.leadey.ai/v1
    description: Production
  - url: http://localhost:3001/v1
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: Account
    description: The organization behind the API key.
  - name: Leads
    description: People enrolled in your campaigns.
  - name: Notes
    description: >-
      Free-text notes on a lead. Notes appear in the lead's timeline and in the
      Cockpit.
  - name: Tasks
    description: Follow-ups and reminders, each assigned to a workspace member.
  - name: Campaigns
    description: Outreach sequences and their performance.
  - name: Companies
    description: Companies in your workspace.
  - name: Contacts
    description: The canonical person record behind your leads.
  - name: Meetings
    description: Bookings merged across Calendly, Leadey and connected calendars.
  - name: Opportunities
    description: Deals, their value, and the pipelines they sit in.
  - name: Pipelines
    description: Deal pipelines and the stages inside them.
  - name: Calls
    description: Dial history, recordings and transcripts.
  - name: Metrics
    description: >-
      Aggregated reporting — meetings booked, sit rate, dial activity and
      pipeline value.
  - name: Reference
    description: The vocabularies other endpoints return values from.
paths:
  /calls/{id}:
    get:
      tags:
        - Calls
      summary: Get a call
      description: >-
        Fetch one call with everything Leadey knows about the conversation: the
        diarised transcript, who spoke and for how long, and the AI summary.


        Leadey does not serve call audio. `hasRecording` tells you a recording
        was captured; what it contained is in `transcript`,
        `transcriptSegments`, `speakers` and `summaryStructured`.


        Those fields are null until the call has been transcribed, which happens
        shortly after it ends — poll or use the `call.completed` webhook rather
        than assuming they are ready.
      operationId: getCall
      parameters:
        - name: id
          in: path
          required: true
          description: Call id.
          schema:
            type: string
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CallDetail'
              example:
                data:
                  id: call_3Zm6yPdL
                  direction: outbound
                  fromNumber: '+442071838750'
                  toNumber: '+442038079420'
                  contactName: Priya Raman
                  companyName: Northwind Logistics
                  leadId: lead_7Kd2mPqR
                  campaignId: cmp_4Xy9tBnW
                  duration: 412
                  connected: true
                  disposition: completed
                  dialStatus: completed
                  outcome: booked_meeting
                  userId: user_2pXn4Rk
                  userName: Sam Whitfield
                  calledAt: '2026-08-03T11:04:12.000Z'
                  hasRecording: true
                  recordingDuration: 412
                  answeredBy: human
                  outcomeManual: false
                  transcript: >-
                    Priya Raman: Hello, Priya speaking.

                    Sam Whitfield: Hi Priya, it's Sam from Leadey — is now a bad
                    time?
                  transcriptSegments:
                    - speaker: spk_1
                      start: 0.4
                      end: 2.1
                      text: Hello, Priya speaking.
                    - speaker: spk_0
                      start: 2.3
                      end: 5.8
                      text: Hi Priya, it's Sam from Leadey — is now a bad time?
                  speakers:
                    - id: spk_0
                      name: Sam Whitfield
                      role: rep
                      talkPct: 46
                    - id: spk_1
                      name: Priya Raman
                      role: prospect
                      talkPct: 54
                  summary: >-
                    Priya is reviewing two vendors and asked for pricing in
                    writing before a decision next quarter.
                  summaryStructured:
                    tldr:
                      - Comparing two vendors
                      - Wants pricing in writing
                      - Decision next quarter
                    sections:
                      - title: Current setup
                        points:
                          - Three dispatch sites on separate systems
                      - title: Objections
                        points:
                          - Worried about migrating historic job data
                    nextSteps:
                      - Send pricing by Friday
                      - Book a technical call with their ops lead
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    CallDetail:
      allOf:
        - $ref: '#/components/schemas/Call'
        - type: object
          description: >-
            Only returned on the single-call endpoint.


            Leadey returns what was **said** on a call, not the audio file.
            There is no recording download: `hasRecording` tells you one exists,
            and the transcript, speakers and summary are what you would have
            listened for.


            Every field here is null until the call has been transcribed, so
            read them defensively — a call placed a moment ago will have none of
            them.
          properties:
            hasRecording:
              type: boolean
              description: Whether audio was captured for this call.
            recordingDuration:
              type:
                - integer
                - 'null'
              description: Length of the recording in seconds.
            answeredBy:
              type:
                - string
                - 'null'
              description: >-
                Answering-machine detection: `human`, `machine_end_beep`,
                `machine_start`, `machine_end_silence`, `machine_end_other`,
                `fax` or `unknown`. Null on inbound calls.
            outcomeManual:
              type: boolean
              description: True when a person set `outcome`; false when it was classified.
            transcript:
              type:
                - string
                - 'null'
              description: The full transcript as plain text.
            transcriptSegments:
              type:
                - array
                - 'null'
              items:
                $ref: '#/components/schemas/TranscriptSegment'
            speakers:
              type:
                - array
                - 'null'
              items:
                $ref: '#/components/schemas/TranscriptSpeaker'
            summary:
              type:
                - string
                - 'null'
            summaryStructured:
              oneOf:
                - $ref: '#/components/schemas/CallSummary'
                - type: 'null'
    Call:
      type: object
      properties:
        id:
          type: string
        direction:
          type: string
          enum:
            - inbound
            - outbound
            - missed
        fromNumber:
          type: string
        toNumber:
          type: string
        contactName:
          type:
            - string
            - 'null'
        companyName:
          type:
            - string
            - 'null'
        leadId:
          type:
            - string
            - 'null'
        campaignId:
          type:
            - string
            - 'null'
        duration:
          type: integer
          description: Talk time in seconds. 0 means the call never connected.
        connected:
          type: boolean
          description: >-
            Derived from talk time — a `completed` call of 0 seconds reached
            nobody.
        disposition:
          type: string
          description: How the attempt ended.
          example: voicemail
        outcome:
          type:
            - string
            - 'null'
          description: Classified result of the conversation, where one was determined.
        userId:
          type:
            - string
            - 'null'
        userName:
          type:
            - string
            - 'null'
        calledAt:
          type:
            - string
            - 'null'
          format: date-time
      required:
        - id
        - direction
        - calledAt
    TranscriptSegment:
      type: object
      description: One diarised line of the call, in time order.
      properties:
        speaker:
          type: string
          description: Matches a `speakers[].id`.
        start:
          type: number
          description: Seconds from the start of the call.
        end:
          type: number
        text:
          type: string
    TranscriptSpeaker:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        role:
          type: string
          enum:
            - rep
            - prospect
            - other
        talkPct:
          type: number
          description: Share of talk time, 0 to 100.
    CallSummary:
      type: object
      description: The AI summary, broken into sections.
      properties:
        tldr:
          type: array
          items:
            type: string
        sections:
          type: array
          items:
            type: object
            properties:
              title:
                type: string
              points:
                type: array
                items:
                  type: string
        nextSteps:
          type: array
          items:
            type: string
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
              description: Human-readable error message.
            details:
              type:
                - object
                - array
                - string
                - 'null'
              description: Optional structured detail.
          required:
            - message
  responses:
    Unauthorized:
      description: The API key is missing, invalid, or revoked.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: Invalid or revoked API key.
              details: null
    NotFound:
      description: The resource does not exist or is not in your workspace.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: Lead not found
              details: null
    RateLimited:
      description: Too many requests. Retry after the period in the `Retry-After` header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: Rate limit exceeded. Retry in 42s.
              details: null
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Your API key, created in the Leadey dashboard under Settings → API Keys.
        Send it as `Authorization: Bearer leadey_sk_live_…`.

````