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

# Get an account's CRM opportunities

> Every CRM opportunity on the account, with our verdict on whether a signal led to it.



## OpenAPI

````yaml /openapi.json get /accounts/{account_id}/opportunities
openapi: 3.1.0
info:
  title: Letterdrop Competitor Monitoring API
  version: 2.0.0
  license:
    name: Proprietary
    url: https://letterdrop.com/terms
  description: >-
    Read your workspace's Competitor Monitoring data: the accounts where people
    engaged your competitors, the contacts and signals behind each, their CRM
    context, your outreach, and the dashboard metrics.


    The API speaks the same language as the New Competitor Deal webhook (payload
    version v2): a field has the same name and the same values in both, so
    whatever you build on one reads the other.


    **Versioning.** The major version is in the path (/api/v2). Within v2
    changes are additive only (new optional fields, filters, endpoints), so
    ignore fields you do not recognise. The v1 competitor-monitoring endpoints
    keep working unchanged.


    **Rate limits.** Per workspace: 10 requests/second and 600/minute, plus 20
    uncached computations/minute (analytics count as 4). Cached reads
    (meta.cache = hit), including every later page of a list you already
    started, use no computation budget. Every response carries RateLimit-Limit /
    RateLimit-Remaining / RateLimit-Reset; a 429 carries Retry-After.


    **Freshness.** Results are cached for a few minutes (analytics and filter
    options a little longer); meta.data_as_of says when the data was computed.
    Signals are collected daily, so polling faster than every few minutes
    returns the same data.
servers:
  - url: https://api.letterdrop.com/api/v2
security: []
tags:
  - name: Accounts
    description: Companies with competitor signals, and what we know about each.
  - name: Contacts
    description: The people behind the signals.
  - name: Analytics
    description: The dashboard metrics, one endpoint each.
  - name: Filters
    description: Every key of every object, and how to select and filter on it.
externalDocs:
  description: Developer reference
  url: https://api.letterdrop.com/api/v2/docs
paths:
  /accounts/{account_id}/opportunities:
    get:
      tags:
        - Accounts
      summary: Get an account's CRM opportunities
      description: >-
        Every CRM opportunity on the account, with our verdict on whether a
        signal led to it.
      operationId: getAccountOpportunities
      parameters:
        - name: account_id
          in: path
          required: true
          description: The account_id of an account, URL-encoded (domain%3Aacme.com).
          schema:
            type: string
        - name: include
          in: query
          required: false
          description: contact_info adds contact_work_email and contact_phone_number.
          schema:
            type: string
        - name: fields
          in: query
          required: false
          description: Comma-separated fields of each item to return; omit for all.
          schema:
            type: string
            maxLength: 4000
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - meta
                properties:
                  data:
                    type: object
                    properties:
                      account_id:
                        type: string
                      opportunities:
                        type: array
                        items:
                          $ref: '#/components/schemas/Opportunity'
                  meta:
                    $ref: '#/components/schemas/Meta'
              example:
                data:
                  account_id: domain:acme.com
                  opportunities:
                    - crm_opp_id: '64931875364'
                      crm_opp_name: Acme - New Business
                      crm_opp_stage: 'S1: Discover (SAO)'
                      crm_opp_amount: 24000
                      crm_opp_pipeline: New Business
                      crm_opp_created_date: '2026-10-29'
                      crm_opp_close_date: '2026-12-15'
                      crm_opp_is_closed: false
                      outreach_attribution: direct_reply
                      outreach_attribution_reason: Created two days after the meeting the signal led to.
                meta:
                  api_version: '2'
                  data_as_of: '2026-11-02T09:36:28.016Z'
                  cache: hit
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
      security:
        - WorkspaceKey: []
        - BearerAuth:
            - mcp.read
components:
  schemas:
    Opportunity:
      type: object
      description: One CRM opportunity.
      x-field-groups:
        - CRM
        - Outreach
      properties:
        crm_opp_id:
          type: string
          description: CRM id of the opportunity.
          x-group: CRM
        crm_opp_name:
          type: string
          description: Its name.
          x-group: CRM
        crm_opp_stage:
          type: string
          description: Its stage as your CRM labels it.
          x-group: CRM
        crm_opp_amount:
          type:
            - number
            - 'null'
          description: Its amount.
          x-group: CRM
        crm_opp_pipeline:
          type: string
          description: Its pipeline.
          x-group: CRM
        crm_opp_created_date:
          type: string
          x-format: YYYY-MM-DD, or empty
          description: When it was created.
          x-group: CRM
        crm_opp_close_date:
          type: string
          x-format: YYYY-MM-DD, or empty
          description: Its close date (expected close while open).
          x-group: CRM
        crm_opp_is_closed:
          type:
            - boolean
            - 'null'
          description: It is closed. Null when the CRM does not say.
          x-group: CRM
        outreach_attribution:
          type: string
          x-values:
            - direct_reply
            - driven
            - assisted
            - detected
            - competitive_deal
            - pending_analysis
            - none
          description: Our verdict on whether a signal led to this opportunity.
          x-group: Outreach
        outreach_attribution_reason:
          type: string
          description: Why.
          x-group: Outreach
    Meta:
      type: object
      required:
        - api_version
        - data_as_of
        - cache
      properties:
        api_version:
          type: string
          const: '2'
        data_as_of:
          type: string
          format: date-time
          description: >-
            When the data in this response was computed. Responses are cached
            for a few minutes; this tells you how fresh they are.
        cache:
          type: string
          enum:
            - hit
            - miss
            - shared
            - 'off'
          description: >-
            hit = served from cache; miss = computed for this request; shared =
            joined a computation already running for the same query.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - invalid_request
                - invalid_json
                - invalid_cursor
                - cursor_expired
                - unauthorized
                - forbidden
                - account_not_found
                - not_found
                - rate_limited
                - internal_error
            message:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                  message:
                    type: string
              description: 'For invalid_request: one entry per parameter that failed.'
  responses:
    Unauthorized:
      description: Missing or invalid credential.
      x-status: 401
      x-codes:
        - unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The credential lacks the mcp.read scope.
      x-status: 403
      x-codes:
        - forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: No such account in this workspace, or no such route.
      x-status: 404
      x-codes:
        - account_not_found
        - not_found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unprocessable:
      description: A parameter failed validation; details lists each one.
      x-status: 422
      x-codes:
        - invalid_request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limited; wait Retry-After seconds.
      x-status: 429
      x-codes:
        - rate_limited
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds to wait.
    ServerError:
      description: Our fault; retry, and contact support if it persists.
      x-status: 500
      x-codes:
        - internal_error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    WorkspaceKey:
      type: apiKey
      in: header
      name: api-key
    BearerAuth:
      type: http
      scheme: bearer

````

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