> ## 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.

# Log a call

> Records a call that happened **outside** Leadey — on a mobile, another dialler or a conference line — so the lead's history and your call metrics stay complete.

Calls placed through Leadey are recorded automatically and must not be posted here as well, or they are counted twice.

Valid outcome keys come from `GET /call-outcomes`.



## OpenAPI

````yaml /openapi.json post /calls
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:
    post:
      tags:
        - Calls
      summary: Log a call
      description: >-
        Records a call that happened **outside** Leadey — on a mobile, another
        dialler or a conference line — so the lead's history and your call
        metrics stay complete.


        Calls placed through Leadey are recorded automatically and must not be
        posted here as well, or they are counted twice.


        Valid outcome keys come from `GET /call-outcomes`.
      operationId: logCall
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                leadId:
                  type: string
                  description: The lead who was called.
                outcome:
                  type: string
                  description: Outcome key from `GET /call-outcomes`. Defaults to `sent`.
                notes:
                  type: string
                  description: >-
                    What was said. Appears on the lead's timeline and as the
                    call's summary.
                duration:
                  type: integer
                  description: >-
                    How long the call lasted, in seconds. Counts towards your
                    talk-time metrics.
                  minimum: 0
                direction:
                  type: string
                  description: Defaults to `outbound`.
                  enum:
                    - outbound
                    - inbound
              required:
                - leadId
            example:
              leadId: lead_8Kq2mXvR
              outcome: connected
              duration: 412
              notes: Spoke for seven minutes. Wants a proposal for 240 vehicles.
      responses:
        '201':
          description: The call was logged.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Id of the call record created. It appears in `GET
                          /calls` and on the lead's timeline.
                      leadId:
                        type: string
                        description: The lead it was logged against.
                      outcome:
                        type: string
                        description: The outcome recorded.
                      loggedAt:
                        type: string
                        description: When it was recorded.
                        format: date-time
                    required:
                      - id
                      - leadId
                      - outcome
                      - loggedAt
                required:
                  - data
              example:
                data:
                  id: call_3Zm6yPdL
                  leadId: lead_8Kq2mXvR
                  outcome: connected
                  loggedAt: '2026-08-03T11:04:12.000Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  responses:
    BadRequest:
      description: The request was malformed, or a required field was missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: One of email, phone or linkedinUrl is required
              details: null
    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
    Forbidden:
      description: >-
        The key is read-only, or the workspace is not currently allowed to write
        (payment method missing, trial expired, payment overdue, or subscription
        cancelled).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: >-
                This API key is read-only. Create a key with write access in
                Settings → API Keys.
              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
  schemas:
    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
  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_…`.

````