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

# Train from closed deals

> Train the ICP model on real won and lost deals. Nous enriches each domain, links the contacts it already has there, learns the signals that separate wins from losses, and rescores open accounts. Up to 40 deals per list.

Trains the ICP model on deals you actually won and lost, then rescores open accounts.

Pass domains, or objects with `amount`, `currency`, and `closed_at`. One deal is enough to start. Won and lost together give the clearest signal.


## OpenAPI

````yaml POST /v2/icp/closed-deals
openapi: 3.1.0
info:
  title: OpenNous REST API
  version: 2.0.0
  description: >-
    Read and write the OpenNous revenue context graph over HTTP. Authenticate
    with a workspace API key.
servers:
  - url: https://api.opennous.cloud
    description: OpenNous Cloud
security:
  - bearerAuth: []
  - apiKeyHeader: []
tags:
  - name: People
  - name: Accounts
  - name: Deals
  - name: Notes
  - name: Attention
  - name: Insights
  - name: Enrich & score
  - name: Organization
  - name: Workflows
  - name: Webhooks
    description: >-
      Subscribe to events and have them pushed to your own stack, with the
      account record attached.
  - name: Usage
paths:
  /v2/icp/closed-deals:
    post:
      tags:
        - Organization
      summary: Train from closed deals
      description: >-
        Train the ICP model on real won and lost deals. Nous enriches each
        domain, links the contacts it already has there, learns the signals that
        separate wins from losses, and rescores open accounts. Up to 40 deals
        per list.
      operationId: trainIcp
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                won:
                  type: array
                  items:
                    $ref: '#/components/schemas/ClosedDeal'
                lost:
                  type: array
                  items:
                    $ref: '#/components/schemas/ClosedDeal'
            example:
              won:
                - acme.com
                - domain: globex.com
                  amount: 48000
                  currency: USD
                  closed_at: '2026-08-14'
              lost:
                - initech.com
      responses:
        '201':
          description: What the model learned.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  won:
                    type: integer
                  lost:
                    type: integer
                  enriched:
                    type: integer
                    description: Companies enriched.
                  surfaced:
                    type: integer
                    description: New signals added to the model.
                  mode:
                    type: string
                    enum:
                      - lift
                      - winners
                    description: >-
                      `lift` compares won against lost. `winners` uses won deals
                      only.
                  linked:
                    type: array
                    items:
                      type: object
                      properties:
                        domain:
                          type: string
                        name:
                          type: string
                  discovered:
                    type: array
                    items:
                      type: object
                      properties:
                        label:
                          type: string
                        weight:
                          type: number
                        note:
                          type: string
              example:
                ok: true
                won: 2
                lost: 1
                enriched: 3
                surfaced: 2
                mode: lift
                linked:
                  - domain: acme.com
                    name: Sarah Chen
                discovered:
                  - label: Employees 200-500
                    weight: 15
                    note: on 2 of your 2 won deals
        '400':
          description: No deals in the body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: need_more_deals
                message: Give at least one closed-won or closed-lost domain.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/UpgradeRequired'
        '403':
          $ref: '#/components/responses/ReadOnlyKey'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    ClosedDeal:
      oneOf:
        - type: string
          description: A bare company domain.
          example: acme.com
        - type: object
          required:
            - domain
          properties:
            domain:
              type: string
            amount:
              type: number
              description: Deal value in major units.
            currency:
              type: string
            closed_at:
              type: string
              format: date
              description: When it closed. Future dates are clamped to today.
    Error:
      type: object
      description: >-
        Every error response. `error` is a stable machine code. Some errors add
        fields such as `detail`, `supported`, `max`, or `reason`.
      required:
        - error
      properties:
        error:
          type: string
          description: Machine-readable error code.
        detail:
          type: string
          description: Human-readable explanation, when there is one.
      additionalProperties: true
  responses:
    Unauthorized:
      description: Missing, unknown, or expired API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            missing:
              summary: api_key_required
              value:
                error: api_key_required
            invalid:
              summary: invalid_api_key
              value:
                error: invalid_api_key
            expired:
              summary: api_key_expired
              value:
                error: api_key_expired
                detail: >-
                  This API key has expired. Create or rotate a key to get a
                  fresh one.
    UpgradeRequired:
      description: The workspace is past its monthly operations limit and grace window.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: upgrade_required
            reason: ops_limit_reached
            current_plan: starter
            upgrade_url: /settings?section=billing
    ReadOnlyKey:
      description: A read-only key called a write endpoint.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: read_only_key
            detail: >-
              This API key is read-only — it can read context but cannot record,
              modify, connect, or send. Use a read/write key for write
              operations.
    RateLimited:
      description: More than 600 requests in a minute on this key.
      headers:
        RateLimit-Limit:
          schema:
            type: integer
          description: Requests allowed per window.
        RateLimit-Remaining:
          schema:
            type: integer
          description: Requests left in the window.
        RateLimit-Reset:
          schema:
            type: integer
          description: Seconds until the window resets.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: rate_limited
    InternalError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: internal_error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Workspace API key. Create one in **Settings → API keys**.
    apiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: The same key, sent as a header.

````

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