Cape Partners Deal Flow API

The DealFlow API from Cape Partners — 2 operation(s) for dealflow.

Business capability
Corporate Development Management BC-100.30

Operations 2

GET /api/deal-flow/{session_id} The supply-side counterpart of the Interest Signals card: the counterparty… #
POST /api/watchlist Pin or unpin a counterparty on this session's Deal Flow watchlist. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/capepartners-fr:capepartners-fr-dealflow-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

capepartners-fr-dealflow-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cape Partners — Sniffer Agent Deal Flow API
  version: 1.0.0
  description: Machine-readable API backing the Cape Partners M&A deal-flow workspace (click, humans).
  contact:
    name: Cape Partners
    url: https://www.capepartners.fr
servers:
- url: https://www.capepartners.fr
  description: Production (www) via Cloudflare
- url: https://sniffer.capepartners.fr
  description: Workspace host
- url: http://localhost:3000
  description: Local dev
tags:
- name: DealFlow
paths:
  /api/deal-flow/{session_id}:
    get:
      summary: 'The supply-side counterpart of the Interest Signals card: the counterparty…'
      tags:
      - DealFlow
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DealFlowResponse'
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: Workspace session UUID (acts as the scoped credential)
      - name: refresh
        in: query
        required: false
        schema:
          type: boolean
        description: Force a universe recompute instead of using the 24h cache
      - name: window
        in: query
        required: false
        schema:
          type: integer
          default: 90
        description: Freshness window in days for the "new & recently enriched" list
      security:
      - SessionToken: []
      operationId: getApiDealFlowBySessionId
      x-operation-id-source: derived
  /api/watchlist:
    post:
      summary: Pin or unpin a counterparty on this session's Deal Flow watchlist.
      tags:
      - DealFlow
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchlistResponse'
        '400':
          description: entity_type/entity_id missing or invalid
          content:
            application/json:
              schema:
                type: object
                description: entity_type/entity_id missing or invalid
                properties:
                  error:
                    type: string
                required:
                - error
        '404':
          description: Counterparty not found
          content:
            application/json:
              schema:
                type: object
                description: Counterparty not found
                properties:
                  error:
                    type: string
                required:
                - error
        '403':
          description: Cross-origin request rejected
          content:
            application/json:
              schema:
                type: object
                description: Cross-origin request rejected
                properties:
                  error:
                    type: string
                required:
                - error
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WatchlistRequest'
      security:
      - SessionToken: []
      operationId: postApiWatchlist
      x-operation-id-source: derived
components:
  schemas:
    DealFlowResponse:
      type: object
      description: 'The supply-side counterpart of the Interest Signals card: the counterparty universe that matches the session''s OWN mandate, ranked, with what is new and the session''s watchlist. Names are masked ("Company A") until the session''s agreement is confirmed — the same reveal rule as /api/matches — so the payload is safe to render pre-reveal. Shares ONE memoised universe sweep with GET /api/interest-signals (24h TTL per entity).'
      properties:
        context:
          type: string
          enum:
          - seller
          - buyer
          description: Which side this session owns.
        counterparty_type:
          type: string
          enum:
          - seller
          - buyer
          description: The side being described (the opposite of context).
        entity_id:
          type: integer
        entity_name:
          type: string
        names_revealed:
          type: boolean
          description: True only when the session's ToS/NDA signature is confirmed. When false every name is "Company <letter>".
        mandate:
          type: object
          description: 'The session''s own criteria, echoed back (buyers: ticket range, geography, growth/EBITDA targets, sector; sellers: revenue, growth, valuation, sector).'
        universe:
          type: object
          properties:
            matched:
              type: integer
              description: Counterparties at or above the fit threshold (50).
            size:
              type:
              - integer
              - 'null'
              description: Counterparties swept (denominator).
            threshold:
              type:
              - number
              - 'null'
            best_score:
              type:
              - number
              - 'null'
            median_score:
              type:
              - number
              - 'null'
            bands:
              type: object
              description: Score-band distribution of the matched set (50-55 / 55-60 / 60-65 / 65+).
              additionalProperties:
                type: integer
            sectors:
              type: array
              items:
                type: object
                properties:
                  sector:
                    type: string
                  count:
                    type: integer
            avg_data_quality:
              type:
              - number
              - 'null'
            scored:
              type:
              - integer
              - 'null'
            unscored:
              type:
              - integer
              - 'null'
            computed_at:
              type:
              - number
              - 'null'
            cached:
              type: boolean
            truncated:
              type: boolean
              description: True when the ranked list was capped.
        fresh:
          type: object
          description: Freshness over the matched set. A counterparty's "last touch" is the later of its own record timestamp and its newest enrichment/update event; most sellers have no created_at, so the event is the signal.
          properties:
            window_days:
              type: integer
            counts:
              type: object
              description: Matched counterparties touched within 7 / 30 / 90 days.
              additionalProperties:
                type: integer
            count:
              type: integer
            items:
              type: array
              description: Newest touches first (capped at 12).
              items:
                $ref: '#/components/schemas/DealFlowCounterparty'
        top:
          type: array
          description: The ranked fits (capped at 25).
          items:
            $ref: '#/components/schemas/DealFlowCounterparty'
        watchlist:
          type: array
          description: Counterparties this session pinned, with their current fit, data quality and pairing phase.
          items:
            type: object
            properties:
              entity_type:
                type: string
                enum:
                - seller
                - buyer
              entity_id:
                type: integer
              note:
                type: string
              watched_at:
                type: string
              name:
                type:
                - string
                - 'null'
                description: Null until the agreement is confirmed.
              score:
                type:
                - number
                - 'null'
              data_quality:
                type:
                - integer
                - 'null'
              phase:
                type:
                - string
                - 'null'
    WatchlistRequest:
      type: object
      properties:
        session_id:
          type: string
          format: uuid
        entity_type:
          type: string
          enum:
          - seller
          - buyer
        entity_id:
          type: integer
        action:
          type: string
          enum:
          - add
          - remove
          default: add
        note:
          type: string
      required:
      - session_id
      - entity_type
      - entity_id
    DealFlowCounterparty:
      type: object
      properties:
        id:
          type: integer
        type:
          type: string
          enum:
          - seller
          - buyer
        name:
          type: string
          description: Real name when names_revealed, else "Company <letter>".
        revealed:
          type: boolean
        score:
          type: number
          description: Canonical fit score (deterministic x semantic).
        sector:
          type: string
        data_quality:
          type: number
        created_at:
          type:
          - string
          - 'null'
        last_touch:
          type:
          - string
          - 'null'
          description: Null when the counterparty has neither a record timestamp nor any logged event — reported as unknown, never invented.
        touch_kind:
          type: string
          enum:
          - sourced
          - enriched
        paired_phase:
          type:
          - string
          - 'null'
          description: Phase of this pairing for the session, when one exists.
        watched:
          type: boolean
        has_session:
          type: boolean
        revenue:
          type:
          - number
          - 'null'
          description: Seller counterparties only.
        growth:
          type:
          - number
          - 'null'
          description: Seller counterparties only (fraction).
        ebitda_margin:
          type:
          - number
          - 'null'
        valuation:
          type:
          - number
          - 'null'
        geography:
          type: string
        ticket_min:
          type:
          - number
          - 'null'
          description: Buyer counterparties only.
        ticket_max:
          type:
          - number
          - 'null'
        growth_target:
          type:
          - number
          - 'null'
        ebitda_target:
          type:
          - number
          - 'null'
    WatchlistResponse:
      type: object
      properties:
        ok:
          type: boolean
        action:
          type: string
        entity_type:
          type: string
        watched:
          type: array
          items:
            type: integer
          description: The session's remaining watched ids of that entity_type.
  securitySchemes:
    SessionToken:
      type: apiKey
      in: header
      name: X-Session-Id
      description: 'The workspace session UUID is a capability token carried in the URL PATH (not this header — shown here only because OpenAPI securitySchemes cannot model a path parameter as a credential). A valid request must present a well-formed UUID-v4 in the path segment {session_id} AND a first-party Origin/Referer (or none). Requests carrying a known-foreign Origin/Referer are refused 403. Per-IP rate limiting applies. All responses carry Referrer-Policy: strict-origin-when-cross-origin.'
    NdaSigned:
      type: apiKey
      in: header
      name: X-Nda-Signed
      description: 'Precondition (not a literal header): a server-side NDA signature for {session_id} must be recorded in the nda_signatures table via POST /api/nda/sign before NDA-gated resources (/api/matched-names, /api/infomemo/*) will serve data. Recorded signatures are enforced server-side (helper `nda_signed`), not by trusting a client header.'