Nimble Deals API

Deals on the /api/v2 surface — create, update and delete deals, attach notes and files, manage deal tags, list overdue activity and read the won-last-month rollup. 18 operation(s).

Operations 18

GET /api/v2/deals List all user's deals #
POST /api/v2/deals Create new deal #
GET /api/v2/deals/tags List deals tags #
POST /api/v2/deals/tags Add tags to deals #
PUT /api/2/deals/tags/{tag_name} Update deals' tag by name #
DELETE /api/2/deals/tags/{tag_name} Delete deals tag by name #
GET /api/v2/deals/widget/won_last_month Get sum of all deals amount won last month #
GET /api/v2/deals/{deal_id} Get deal by id #
DELETE /api/v2/deals/{deal_id} Delete deal by id #
PUT /api/v2/deals/{deal_id} Update deal by id #
POST /api/v2/deals/{deal_id}/files Store deal file #
PUT /api/v2/deals/{deal_id}/files/{file_id} Update deal file #
DELETE /api/v2/deals/{deal_id}/files/{file_id} Delete deal file #
GET /api/v2/deals/{deal_id}/files/{file_id}/url Get deal file download url #
POST /api/v2/deals/{deal_id}/notes Create note to the deal #
PUT /api/v2/deals/{deal_id}/notes/{note_id} Update deal note by id #
DELETE /api/v2/deals/{deal_id}/notes/{note_id} Delete deal note by id #
GET /api/v2/deals/{deal_id}/overdue List deals' overdue activities #

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/nimble-deals-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

nimble-deals-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Nimble Deals API
  description: Nimble CRM Deals operations. Split by tag from the OpenAPI Nimble publishes at https://www.nimble.com/developers/docs/ (embedded Redoc spec). Base host https://app.nimble.com.
  version: v1
servers:
- url: https://app.nimble.com
security:
- ApiKey: []
tags:
- name: Deals
  description: Deals management
paths:
  /api/v2/deals:
    get:
      description: Retrieves list of all user deals
      operationId: list-user-deals
      summary: List all user's deals
      tags:
      - Deals
      parameters:
      - name: sort
        in: query
        required: true
        schema:
          type: string
          format: field:order
      - name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Meta and list of all deals
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deals.DealsList'
    post:
      description: Create a new deal_v2
      operationId: create-new-deal
      summary: Create new deal
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Deals.CreateDealRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deals.DealView'
          description: ''
        '409':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ValidationError'
  /api/v2/deals/tags:
    get:
      description: Returns a list of deals tags
      operationId: list-deals-tags
      summary: List deals tags
      tags:
      - Deals
      parameters:
      - description: Find tags that start with
        in: query
        name: starts_with
        schema:
          type: string
      - description: A number of tags to return
        in: query
        name: limit
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  tags:
                    items:
                      $ref: '#/components/schemas/Commons.Tag'
                    type: array
                required:
                - tags
                type: object
          description: ''
    post:
      description: Assign tags to deals
      operationId: post-deals-tags
      summary: Add tags to deals
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              properties:
                preflight_checks:
                  default: false
                  description: check query's deals are editable
                  type: boolean
                query:
                  description: query for deals advanced search
                  type: object
                tags:
                  description: list of tags to assign
                  items:
                    type: string
                  type: array
              required:
              - tags
              - query
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  push_data:
                    $ref: '#/components/schemas/Contacts.AssigmentProgress'
                required:
                - push_data
                type: object
          description: tags successfully assigned
        '406':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.PreflightCheckFailures'
          description: ''
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ValidationError'
          description: ''
  /api/2/deals/tags/{tag_name}:
    parameters:
    - description: name of tag
      in: path
      name: tag_name
      required: true
      schema:
        type: string
    put:
      description: update deals tag by name
      operationId: put-deals-tag
      summary: Update deals' tag by name
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              properties:
                new_tag:
                  type: string
              required:
              - new_tag
              type: object
        required: true
      responses:
        '200':
          description: Tag successfully updated
        '406':
          description: tag with tag_name already exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.NotAcceptableError'
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ValidationError'
          description: ''
    delete:
      description: delete deals tag by name
      operationId: delete-deals-tag
      summary: Delete deals tag by name
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              properties:
                preflight_checks:
                  default: false
                  description: check query's deals are editable
                  type: boolean
              type: object
        required: true
      responses:
        '200':
          description: Tag successfully deleted/unlinked
        '406':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.PreflightCheckFailures'
          description: ''
  /api/v2/deals/widget/won_last_month:
    get:
      description: Returns sum of all deals amount won last month
      operationId: get-won-last-month-deals-sum
      summary: Get sum of all deals amount won last month
      tags:
      - Deals
      responses:
        '200':
          description: Sum of all deals amount from all pipelines won for last month
          content:
            application/json:
              schema:
                properties:
                  last_month_won_amount:
                    type: number
                    format: decimal
                  last_month_won_count:
                    type: integer
  /api/v2/deals/{deal_id}:
    parameters:
    - description: id of a deal to operate on
      in: path
      name: deal_id
      required: true
      schema:
        type: string
    get:
      description: Get deal by id
      operationId: get-deal
      summary: Get deal by id
      tags:
      - Deals
      responses:
        '200':
          description: Retrieved deal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deals.DealView'
        '404':
          description: Deal not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.NotFoundError'
    delete:
      description: Delete deal by id
      operationId: delete-deal
      summary: Delete deal by id
      tags:
      - Deals
      responses:
        '200':
          description: ''
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ForbiddenError'
          description: ''
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.NotFoundError'
    put:
      description: Edit deal by id
      operationId: put-deal
      summary: Update deal by id
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Deals.EditDealRequest'
      responses:
        '200':
          description: Updated deal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deals.DealView'
        '409':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ValidationError'
  /api/v2/deals/{deal_id}/files:
    parameters:
    - description: id of deal to which the file should be stored
      in: path
      name: deal_id
      required: true
      schema:
        type: string
    post:
      description: "Store a new deal file.\nWe can store two categories of files:\n\n1. Files from external sources (gdrive, dropbox, onedrive). In this scenario files are being select in the respective\nfile picker, and the client should pass file details to this API call so the file gets stored for the deal\n\n2. Files uploaded from a computer using Azure SDK.\na) To perform the upload itself, the client must first use /api/files/azure/upload (this API is the same as one \nfor uploading Contact Files – we just moved it to a separate endpoint since it's independent \nfrom contact/deals/etc)\nb) after the upload was completed, the client has so-called `data_id` (the ID of this file in Azure Blob Storage)\nc) pass the `data_id` to this API so the file gets stored to the deal\n"
      operationId: store-deal-file
      summary: Store deal file
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Deals.StoreFileRequest'
      responses:
        '201':
          description: File was successfully added
  /api/v2/deals/{deal_id}/files/{file_id}:
    parameters:
    - in: path
      name: deal_id
      required: true
      schema:
        type: string
    - description: id of a file to operate with
      in: path
      name: file_id
      required: true
      schema:
        type: string
    put:
      description: 'Updates a file with new name. Note: only files uploaded using Azure SDK can be renamed

        '
      operationId: put-deal-file
      summary: Update deal file
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Deals.UpdateDealFileRequest'
      responses:
        '200':
          description: Empty response, file was successfully updated
    delete:
      description: Deletes file
      operationId: delete-deal-file
      summary: Delete deal file
      tags:
      - Deals
      responses:
        '200':
          description: ''
  /api/v2/deals/{deal_id}/files/{file_id}/url:
    get:
      description: Returns download link for selected deal file
      operationId: get-deal-file-download-url
      summary: Get deal file download url
      tags:
      - Deals
      responses:
        '200':
          description: Retrieved URL
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                    description: Download URL
                    format: URL
        '404':
          description: File not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.NotFoundError'
      parameters:
      - in: path
        name: deal_id
        required: true
        schema:
          type: string
      - description: id of a file to get link for
        in: path
        name: file_id
        required: true
        schema:
          type: string
  /api/v2/deals/{deal_id}/notes:
    parameters:
    - description: id of deal to which note should be attached
      in: path
      name: deal_id
      required: true
      schema:
        type: string
    post:
      description: Create note to the deal
      operationId: create-deal-note
      summary: Create note to the deal
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              properties:
                title:
                  type: string
                  description: Title of the note.
                  minLength: 1
                  maxLength: 256
                body:
                  type: string
                  description: Text of the note.
              required:
              - title
      responses:
        '201':
          description: Created note
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deals.DealNote'
        '409':
          description: ValidationError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ValidationError'
  /api/v2/deals/{deal_id}/notes/{note_id}:
    parameters:
    - description: id of deal to which note should be attached
      in: path
      name: deal_id
      required: true
      schema:
        type: string
    - description: id of note to operate with
      in: path
      name: note_id
      required: true
      schema:
        type: string
    put:
      description: Update note
      operationId: put-deal-note
      summary: Update deal note by id
      tags:
      - Deals
      requestBody:
        content:
          application/json:
            schema:
              properties:
                title:
                  type: string
                  description: Title of the note.
                  minLength: 1
                  maxLength: 256
                body:
                  type:
                  - string
                  - 'null'
                  description: Text of the note.
      responses:
        '200':
          description: Updated note
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deals.DealNote'
        '404':
          description: Note not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.NotFoundError'
        '409':
          description: ValidationError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ValidationError'
    delete:
      description: Delete note
      operationId: delete-deal-note
      summary: Delete deal note by id
      tags:
      - Deals
      responses:
        '200':
          description: ''
  /api/v2/deals/{deal_id}/overdue:
    parameters:
    - in: path
      name: deal_id
      required: true
      schema:
        type: string
    get:
      description: 'Returns a feed of overdue activities for a given deals. Sorting order is time since overdue, descending

        '
      operationId: list-deals-overdue-activities
      summary: List deals' overdue activities
      tags:
      - Deals
      parameters:
      - description: Indicates how many activities show per page.
        in: query
        name: limit
        schema:
          type: integer
      - description: List of overdue activity types to return. If not present, we'll return activities by all types.
        in: query
        name: types
        schema:
          items:
            type: string
          type: array
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  activities:
                    description: List of activities that match query parameters.
                    items:
                      $ref: '#/components/schemas/Activities.Activity'
                    type: array
                required:
                - activities
                type: object
          description: ''
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.ValidationError'
          description: ''
components:
  schemas:
    Deals.RelatedExternalContact:
      description: external contact related to this deal
      type: object
      properties:
        contact_info:
          type: string
        note:
          type: string
    Accounts.User:
      properties:
        account_type:
          type: string
        avatar_url:
          type:
          - string
          - 'null'
        company_id:
          type: string
        company_name:
          type: string
        created:
          format: date-time
          type: string
        disabled:
          type: boolean
        email:
          type: string
        first_name:
          type: object
        is_company_owner:
          type: boolean
        is_pending:
          description: true if that user has a pending invite
          type: boolean
        last_active:
          description: timestamp when a user made his last API request to the platform
          format: date-time
          type: string
        last_name:
          type: object
        name:
          type: string
        permissions:
          $ref: '#/components/schemas/Settings.UserPermissions'
        receive_newsletter:
          type: boolean
        has_password:
          type: boolean
          description: 'if this user has a password set (for some account types, like google accounts, the password is optional)

            '
        timezone:
          type: string
        under_gdpr:
          type: boolean
        user_id:
          type: string
        metadata:
          $ref: '#/components/schemas/Legacy.UserMetadata'
        email_verification_due:
          type: boolean
          description: 'A flag indicating whether the email verification is due. Almost all API call will result in 403 response

            for users with unverified email.

            '
      required:
      - under_gdpr
      - user_id
      - company_id
      - company_name
      - email
      - name
      - first_name
      - last_name
      - timezone
      - disabled
      - avatar_url
      - created
      - account_type
      - is_company_owner
      - receive_newsletter
      - permissions
      - last_active
      - is_pending
      - metadata
      - has_password
      type: object
    Errors.ForbiddenError:
      example:
        message: You don't have access to this deal
      properties:
        message:
          type: string
          description: 'indicates that we can''t authenticate the request. Message can be an arbitrary string, however there are

            few special cases:<br/>

            "Can''t authenticate request" – something is wrong with the auth token<br/>

            "email_verification_required" - if the user needs to verify their email address to continue having

            access to Nimble<br/>

            '
      required:
      - message
      type: object
    Deals.CreateDealRequest:
      properties:
        owner_id:
          description: <code>id</code> of user who owns deal
          type: string
        privacy:
          description: deal's read and edit privacy
          $ref: '#/components/schemas/Deals.DealPrivacy'
        fields_values:
          description: 'Fields of the deals which was filled up by the owner/creator. At leas field <code>deal_name</code> is required. <br> Standard fields description: <br> <ul><li><b style=''color:red''>name</b> - required. Name of the deal.</li> <li><b style=''color:#ff7200''>probability</b> - required (if none <code>Stage.default_probability</code> set). Deal probability. If not provided by user,  deal will try to derive it from stage''s <code>default_probability</code>. If none, will rise error</li> <li><b>description</b> - optional. Description of the deal. Sending just '' '' (whitespace) removing it</li> <li><b>amount</b> - optional. Amount of tha money in the deal. Can be only positive number or 0</li> <li><b>expected_close_date</b> - optional. Date when deal is expected to be closed.</li> <li><b>actual_close_date</b> - optional. Actual date. View only.</li> </ul> <br> To remove any field send <code>{field_id:[]}</code> List of available fields can be obtained from <code>/api/v2/deals/fields</code>'
          type: object
          additionalProperties:
            type: array
            items:
              type: object
              properties:
                value:
                  type: string
          example:
            63760e653af0e748fe48366a:
            - value: Deal Name
            63760e653af0e748fe48366b:
            - value: '10000'
            description:
            - value: Important deal
        pipeline_id:
          description: <code>id</code> of the pipeline which belongs to this deal
          type: string
        stage_id:
          type: string
          description: <code>id</code> of stage on which deal is currently is
        currency:
          description: Currency of the deal in <code style='color:blue'>ISO-4217</code> format (3 char code)
          type: string
          format: ISO-4217
        related_contacts:
          description: List of Nimble contacts that take part in the deal.
          type: array
          items:
            type: object
            properties:
              contact_id:
                type: string
              note:
                type:
                - string
                - 'null'
        related_external_contacts:
          description: A list with related external contacts. Similar to related_contacts, but instead of <code>contact_id</code> we use <code>contact_info</code> (email, phone etc)
          type: array
          items:
            $ref: '#/components/schemas/Deals.RelatedExternalContact'
        tags:
          type: array
          items:
            type: string
      required:
      - owner
      - fields_values
      - pipeline_id
      - stage_id
      type: object
    Legacy.UserMetadata:
      properties:
        city:
          type:
          - string
          - 'null'
          description: (deprecated)
        company_name:
          type: string
          description: (deprecated)
        country:
          description: (deprecated)
          type:
          - string
          - 'null'
        employees_count:
          description: (deprecated)
          type:
          - integer
          - 'null'
        help_tour_data:
          description: (deprecated)
          properties:
            app/activities/list:
              type: integer
            app/b/homepage:
              type: integer
            app/contacts/list:
              type: integer
            app/contacts/view:
              type: integer
            app/deals/list:
              type: integer
            app/deals/view:
              type: integer
            app/groupmessages/create:
              type: integer
            app/messages/list:
              type: integer
            app/messages/view:
              type: integer
            app/settings/:
              type: integer
            app/social/list:
              type: integer
            contact_list_group_message:
              type: integer
            disabled:
              type: integer
            nimble_widget:
              type: integer
          type: object
        industry:
          description: (deprecated)
          type:
          - string
          - 'null'
        phone:
          type:
          - string
          - 'null'
        state:
          description: (deprecated)
          type:
          - string
          - 'null'
        street:
          description: (deprecated)
          type:
          - string
          - 'null'
        title:
          type:
          - string
          - 'null'
        zip:
          description: (deprecated)
          type:
          - string
          - 'null'
      required:
      - title
      - company_name
      - industry
      - phone
      - street
      - city
      - state
      - zip
      - country
      - employees_count
      - help_tour_data
      type: object
    Deals.StoreFileRequest:
      oneOf:
      - $ref: '#/components/schemas/Deals.StoreAzureFileRequest'
      - $ref: '#/components/schemas/Deals.StoreExternalFileRequest'
    Deals.UpdateDealFileRequest:
      type: object
      properties:
        new_file_name:
          type: string
    Deals.FieldsValues:
      type: object
      description: Fields of the deals which was filled up by the owner/creator
      properties:
        field_id:
          type: string
          example: 65958d7ef2e8748e6361ddb1
        values:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                example: value_1
              is_primary:
                type: boolean
                example: true
    Deals.DealPipelineTransitions:
      properties:
        pipeline_id:
          type: string
        pipeline_color:
          type: string
        pipeline_name:
          type: string
        transitions:
          items:
            $ref: '#/components/schemas/Deals.DealStageTransition'
          type: array
        before_final_stage:
          $ref: '#/components/schemas/Pipeline.DealStage'
          description: previous to the final stage (if the deal is won or lost, otherwise - null)
      required:
      - pipeline_id
      - pipeline_color
      - pipeline_name
      - transitions
      type: object
    Deals.AzureFileMetadata:
      type: object
      description: metadata for files uploaded from device using Azure JS SDK
      properties:
        data_id:
          description: id of an object in the cloud
          type: string
        source:
          enum:
          - uploaded_azure
    Deals.DealPrivacy:
      type: object
      properties:
        read:
          $ref: '#/components/schemas/Deals.Principals'
          description: Principals permitted to read deal. Null if permitted for everyone
        edit:
          $ref: '#/components/schemas/Deals.Principals'
          description: Principals permitted to read and edit deal. Null if permitted for everyone
      required:
      - read
      - edit
      example:
        read:
          user_ids:
          - 507f1f77bcf86cd799439011
          group_ids:
          - 507f1f77bcf86cd799439012
        edit:
          user_ids:
          - 507f1f77bcf86cd799439013
          group_ids:
          - 507f1f77bcf86cd799439014
    Errors.ValidationError:
      description: request was malformed
      example:
        errors:
          /:
            message: 'missing required properties: ["calendar_id", "summary"]'
          /base_occurrence/start_dtime:
            message: Can't parse value 20000-01-01T01:01:00 as DATE-TIME
        message: 'Invalid value {} (dict): missing required properties: []"calendar_id", "summary"]'
        code: 245
        human_readable_error: 'Invalid value {} (dict): missing required properties: []"calendar_id", "summary"]"'
        extra:
        - {}
      properties:
        errors:
          description: 'mapping where keys are paths to problematic request attributes

            and values are objects with single message attribute

            '
          type: object
        message:
          type: string
        code:
          type: integer
          description: legacy that you <span style='color:red'>SHOULD NOT USE</span>
        human_readable_error:
          type: string
          description: Error message with some changes making it easier to read.
        extra:
          type: array
          items:
            type: object
          description: extra data that would be useful to provide
      required:
      - message
      - errors
      - human_readable_error
      type: object
    Commons.Comment:
      properties:
        author:
          $ref: '#/components/schemas/Accounts.User'
        comment_id:
          type: string
        created:
          type: string
        text:
          type: string
        updated:
          type: string
      required:
      - comment_id
      - author
      - text
      - created
      - updated
      type: object
    Deals.DealNote:
      type: object
      properties:
        note_id:
          type: string
        title:
          type: string
        body:
          type: string
        created:
          type: string
          format: date-time
        updated:
          type: string
          format: date-time
        creator:
          $ref: '#/components/schemas/Accounts.ShortUserInfo'
    Deals.ShortSavedDeal:
      properties:
        deal_id:
          description: unique id of a deal
          type: string
        is_editable:
          description: Is this deal is editable to a user who retrieved it
          type: boolean
        is_viewable:
          description: Is this deal is viewable to a user who retrieved it (True for private deals
          type: boolean
        name:
          type: string
        amount:
          type:
          - integer
          - 'null'
    Deals.DealStageTransition:
      properties:
        from_stage:
          $ref: '#/components/schemas/Pipeline.DealStage'
          description: Can be null if this was the very first transition
        to_stage:
          $ref: '#/components/schemas/Pipeline.DealStage'
        who:
          $ref: '#/components/schemas/Accounts.ShortUserInfo'
        when:
          type: string
          format: date
        notes:
          type:
          - string
          - 'null'
      required:
      - from_stage
      - to_stage
      - who
      - when
      type: object
    Contacts.AssigmentProgress:
      properties:
        is_completed:
          type: boolean
        operation_id:
          type: string
        processed:
          type: integer
        started_at:
          type: string
        total:
          type: integer
        errors:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/Contacts.ContactsAlreadyLeadsError'
            - $ref: '#/components/schemas/Contacts.NotEditableContactsError'
      required:
      - operation_id
      - processed
      - total
      - started_at
      - is_completed
      - errors
      type: object
    Contacts.ContactsAlreadyLeadsError:
      properties:
        error_type:
          type: string
        error_description:
          type: string
        already_leads:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              full_name:
                type: string
    Deals.EmploymentInfo:
      description: Information about date employment
      type: object
      properties:
        employer:
          $ref: '#/components/schemas/Contacts.ShortContact'
        start_date:
          description: First working day
          type: string
        end_date:
          description: Last working day
          type: string
        title:
          description: Job-title of contact
          type: string
    Deals.ExternalFileMetadata:
      type: object
      description: metadata for files from external sources (dropbox, google drive, one drive)
      properties:
        icon_url:
          type: string
        file_url:
          type: string
        source:
          enum:
          - dropbox
          - one_drive
          - google_drive
    Contacts.ShortContact:
      properties:
        avatar_url:
          type: string
        contact_type:
          $ref: '#/components/schemas/Contacts.ContactType'
        email:
          items:
            type: string
          type: array
        id:
          type: string
        is_viewable:
          description: if this contact can be viewed in details by a calling user
          type: boolean
        name:
          type: string
        employment:
          description: the most relevant contact employment (e.g., primary or present)
          type:
          - object
          - 'null'
          properties:
            company_name:
              type:
              - string
              - 'null'
            title:
              type:
              - string
              - 'null'
        phones:
          properties:
            label:
              description: phone label like "home", "work", etc
              type: string
            value:
              type: string
          required:
          - label
          - value
          type: object
      required:
      - avatar_url
      - contact_type
      - id
      - name
      - email
      - is_viewable
      - phones
      type: object
    Deals.StoreAzureFileR

# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/nimble/refs/heads/main/openapi/nimble-deals-api-openapi.yml