Nimble API (v1)

Download OpenAPI specification:Download

Overview

Nimble is a relationship-focused CRM for your entire team. With customizable contact records and easy-to-use Kanban-style workflows, managing client information has never been simpler. Nimble effortlessly integrates with both Microsoft 365 and Google Workspace, gathering contacts and leads from all your platforms, while our automation tools handle the busy work. Focus on what matters most – growing your business and nurturing relationships, as Nimble streamlines your workflow for maximum productivity.

The document below offers an overview of currently available APIs & how to utilize them. If you're missing some APIs for an integration you want to build, please contact us at [email protected].

Currently available APIs:

  • Contacts & Contact fields - managing contacts & custom fields.
  • Deals & Deals Pipelines - managing deals, pipelines, and deal pipeline fields.
  • Create tasks - allows to create tasks within account.

We are building the API with a few main use cases in mind: widgets/extensions to Nimble, web clients (including our own), mobile clients, and 2-way data integrations with other services. We aim to make an API that is simple to use, easy to read, and flexible.

Old Documentation can be found here.

Your feedback is greatly appreciated while we continue to shape our API offering.

Authentication

Introduction

This document will describe authorization flow that return the authorization token that allow to make requests to Nimble API and access resources to which access has been granted for user. For For authorization Nimble use OAuth 2.0 protocol with bearer tokens. All technical details can be read in RFC6749 and RFC6750, but you don't need to read them (unless you want to know more details on OAuth 2.0) every detail that need to obtain access token and use this token for requesting resource on behalf of user will be described in this document.

Terminology

  • User - Person who has an account inside Nimble and owner of resources to which API provide access

  • Client - Service that request a token and want to make requests to the Nimble API on behalf of User

  • Authorization server - Server that allow User to grant access for Client to use his resources

  • Resource server - Server that returns User's resources to Client if it was granted for access by User

  • Bearer token - Token that Client received after User has granted access. Possession of this token allows client to make requests to Resource server in order to receive Client's resources.

Prerequisites

In order to create a Client for Nimble API you need to have to register your application in our DB and get Client Secret and Client Id. Its can be done on the page with this link: https://support.nimble.com/third-party-integrations/nimble-api-access/nimble-api-access. You probably have done this already.

Authorization process overview

For giving you a good overview of process we will use scheme and give a brief explanation to the each step on scheme. Steps are shown by the arrows and has a letters assigned to each step on scheme.

Schema

Let's go over a scheme step by step.

  • Step A - You have some product (Client) that wants to use Nimble Data for some purposes. User wants to use Client and you need to retrieve a grant of user to operate the data from Nimble on his behalf. So, user has something that allows to initiate this process from Client.
  • Step B - Your client open a page that points to Authorization Server providing a params specified on scheme. As a params, you need to send your API key and URI of client to which Authorization Grant Code will be returned.
  • Step C - Auth server using your API Key (Client Key) creates a link to which user will be directed and send a redirect response. User will be automatically redirected to the page where he can put his credentials and grant access. Note that now user is on side of Authorization Server.
  • Step D - As soon as user finished a process of providing access, Authorization Server takes a redirect URI that you specified on step B and sends code to that URI.
  • Step E - Using this code you make a application/x-www-form-urlencoded request to the Authorization Server where in body you put code retrieved on previous step, your Client Secret, Client Id and Grant Type you want to receive. It is always [authorization_code]{.title-ref}. For details see Request access token
  • Step F - If everything is valid then you will receive response from server with Access Token and Refresh Token. Now you are able to do a requests to the Nimble API using Access Token until it valid. Using Refresh Token you will be able to renew this token without involving User second time. For details see: Token refresh.

Requesting Authorization Grant Code

You should use this request on step B of Authorization Process. You need to open a page for user with this endpoint and provide a Redirect URI on which your handler will be able to catch the code from Authorization Server that will be returned when User successfully grant you a permission to use Nimble API.

Endpoint:

GET https://app.nimble.com/oauth/authorize

Params:

  • client_id - required - Your Client Key from Application Page.

  • redirect_uri- required - URI where you have a handler who will catch a code and finish the Process, see note below.

  • response_type - required - must be set to code. We don't support Implicit Flow, so code is the only available option now.

  • scope - required - there are 3 scopes in Nimble: Basic (User & Company Info), Contacts and Deals

    Please note, that main value for redirect URL is specified in application settings on developer portal. redirect_uri parameter in URL could be used only to overwrite path part in redirect URL. So, redirect_uri should have exactly same URI, as specified in application settings.

Example request:

GET https://app.nimble.com/oauth/authorize?client_id=5f96b5e9adaxzca93x1213123132&redirect_uri=https%3A%2F%2Fyourportal.com%2Fauth%2Fpassed&response_type=code

Successful response:

First, user will be redirected to the page on Authorization Server with hostname https://app.nimble.com/oauth/authorize

As soon as he provided his credentials, you will receive a request like listed below on your Redirect URI:

https://yourportal.com/auth/passed?code=LTM4M 

Error response:

If the request is missing or has incorrect parameters, the user-agent will be redirected back to the redirect URI provided. The redirection will contain parameters specifying the error.

Example Invalid Authorization Request Redirect:

http://www.myapp.com/oauth?error=invalid_request&error_description=Invalid%20URL

After selecting Login, the user will be validated. If user validation is successful, a consent page is displayed. If user validation is unsuccessful, the user-agent will be redirected to the redirect URI provided in the initial request. This redirection will include additional parameters specifying the error.

Example Unsuccessful Validation Redirect:

http://www.myapp.com/oauth?error=access_denied&error_descripton=Validation%20errors

If user click Deny on the grant permission page then another error will be sent.

Example Deny Consent Redirect:

http://www.myapp.com/oauth?error=access_denied&error_description=User%20denied%20access

Get OAuth Client ID and Secret

To get OAuth app credentials, please email api-support@nimble.com and include the following:

  • App Name
  • App Description
  • Redirect URL for oAuth callback

Requesting Access Token

As soon as User complete step C your handler will catch step D. You need to listen for redirect on your Redirect URI. Code returned to you isn't access token yet! You still need to obtain the authorization token. Note, that this code is valid for a short period time and if you not intiate request to access token as soon as you receive a code then received code can become invalid and User will need to reinitiate a process once again. So, on step E you need to receive access to token for which user granted you.

The Client should use the authorization code obtained to request an access token. When requesting an access token, you SHOULD specify required data as form parameters. Client application secret is needed for client authentication. When specifying client_id and client_secret as form parameters, the Content-Type header MUST be set to application/x-www-form-urlencoded. Request should be done via HTTPS only.

Endpoint:

POST https://app.nimble.com/api/oauth/token

Parameters:

  • grant_type - required - must be set to authorization_code. You need to receive an Access token.
  • code - required - code that you received on step D. This code has a short-valid time, so initiate request for token as soon as you receive it.
  • redirect_uri - required - redirect URI for your application. Should be equal to redirect_uri, provided during Requesting grant code
  • client_id - required - your Client API key.
  • client_secret - required --- your Client API secret key.

Headers:

  • Content-Type: application/x-www-form-urlencoded; charset=UTF-8 - required - you need to specify this header always

Example Request:

POST /api/oauth/token HTTP/1.1
Host: app.nimble.com
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Body : client_id=5f96b5e9a6b7478e15ee574a426aa063&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth&code=LTM4M&grant_type=authorization_code&client_secret=89bb4ffb4f264bff

Successfull Response JSON:

{
    "access_token": "bf086611-9e97-4d11-9cd7-3c86dec0bbd4",
    "token_type": "bearer",
    "expires_in": 599,
    "refresh_token": "515ac59b-6518-49a2-81d6-54f91ee74c4a",
    "scope": "basic"
}

API requests using Access Token

Now when we have Access Token Received you need to store it and use for any requests for Nimble Data on behalf of user. This process described in Making requests tutorial

Refresh token after expiration without user input

The application uses the refresh token to extend the validity of the access token provided with the refresh token. When refreshing an access token, you should specify required data as a form parameters. Client application secret is needed for client authentication. Content-Type header must be set to application/x-www-form-urlencoded.

Parameters:

  • client_id - Client identifier used to obtain the authorization code
  • client_secret - Client secret code
  • grant_type - Must be set to refresh_token
  • refresh_token - Refresh token obtained from the access token request
  • redirect_uri - required --- redirect URI for your application. Should be equal to redirect_uri, provided during Request grant code

Example Request:

POST /api/oauth/token HTTP/1.1
Host: https://app.nimble.com/
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

client_id=3e8471e7516a0c85ef35ab1d23f1bdf1&client_secret=737d10deba3fd124&grant_type=refresh_token&refresh_token=5f752714eddb07a3e41c2a3311f514e1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth

Example Response:

{
    "access_token": "1d7bc7328b402f4826e17607e364bc6a",
    "expires_in": 559,
    "refresh_token": "f35c2165112fda74f79b408cc253485fcdfd888a"
}

Examples

For your convinience we created some examples:

Python authorization example. Actual code implementation on Python and Tornado

Ruby authorization example. Implementation of authorization process in Ruby

Troubleshooting & Feedback

If you have any problems or want to submit feedback feel free to go to our support forum or email us at api-support@nimble.com

Tutorial: Making authenticated requests

When you've received token, using the process described in Obtaining API key guide, you are ready to call Nimble API. You can use one of two ways, described below. They both are equal.

Authenticating your request with URL parameter

In order to use this token code you just add it into URL as request parameter with name access_token.

Endpoint:

Any of available endpoint of Nimble API

Params:

No matter what request POST, GET or any other HTTP method, just add an access_token as parameter to URL.

  • access_token - required - put a token for user under this parameter.

Example Request:

POST https://api.nimble.com/api/v1/contacts?access_token=e0f7b053200672c2ff6ede59c8e2bfc7

Successful Response:

All API responses described on their corresponding pages.

Authenticating your request with HTTP header

You can also pass your token in HTTP header Authorization in format: Bearer <your token>.

Example request:

PUT /api/v1/contact/4f60a873fcf7b752ed006b7a HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Authorization: Bearer c0b5f46631455b543c309b8cb18b8dae
Content-Type: application/json; charset=utf-8

{
    "fields": {
        "first name": [
            {
                "modifier": "", 
                "value": "1name"
            }
        ]
    }
}

Handling Errors

API Errors

Errors in Nimble are returned as a JSON dictionary with appropriate HTTP error codes and following keys:

message : Message about the error

code : Extended error code

Validation Error

Sent on invalid parameters. Returns with HTTP code 409 and code field equal to 245.

This response looks like common error dictionary:

{
    "message": "You can specify either `keyword` or `query` parameter, not both!", 
    "code": 245
}

On contact creation and update --- additional data is returned.

{
    "message": "Validation errors",
    "code": 245,
    "errors": {
        "first name": [{
            "message": "First name or last name field is required for person and should not be empty",
            "field_id": "5049f697a694620a07000043"
        }]
    }
}

Here errors are a dictionary, containing information about field that caused the error. Key is field name and values are extended error message and unique id of the field that caused the error.

Quota Error

Sent if user exceeded his quota values. Returns with HTTP code 402 and code field equal to 108.

{
    "message": "You have created the maximum number of contact records allowed for your subscription.\nDon't worry, you can upgrade your account and add more contacts right now.", 
    "code": 108
}

Server error

Sent if unrecoverable Nimble server occurs. Returns with HTTP code 500 and code field equal to 107.

{
    "message": "Internal error handling request", 
    "code": 107
}

NotFound Error

Sent on attempt to get some object by invalid identifier (in most cases identifier of object is its ID in our database).

This response will contain dictionary with [object_type]{.title-ref} and [object_id]{.title-ref} fields:

{
    "object_type": "contact field",
    "object_id": "111111111111111111111111"
}

Contacts

Contacts details

Typical response to this request is a dictionary with 2 keys (unless otherwise specified by the specific API): meta and resources.

Contact resources

This field usually contains all data for the contacts you've requested. Here is an example of a Nimble contact

"resources": [
    {
        "updated": "2012-09-07T16:49:56+0300",
        "created": "2012-09-07T16:49:56+0300",
        "fields": {
            "parent company": [
                {
                    "modifier": "",
                    "extra_value": "5c459c56ceee1868ee3ab468",
                    "value": "Nimble",
                    "label": "parent company"
                }
            ],
            "description": [
                {
                    "value": "description",
                    "label": "description",
                    "modifier": "other"
                },
                {
                   "value": "description",
                   "label": "description",
                   "modifier": "linkedin"
                }
            ],
            "last name": [
                {
                    "modifier": "",
                    "value": "Akopyan",
                    "label": "last name"
                }
            ],
            "phone": [
                {
                    "modifier": "mobile",
                    "value": "+7 (917) 202-456-1111",
                    "label": "phone"
                },
                {
                    "modifier": "home",
                    "value": "+7 244 231 84 22",
                    "label": "phone"
                }
            ],
            "URL": [
                {
                    "modifier": "other",
                    "value": "https://nimble.com",
                    "label": "URL"
                },
                {
                    "modifier": "other",
                    "value": "https://app.nimble.com",
                    "label": "URL"
                }
            ],
            "source": [
                {
                    "modifier": "",
                    "value": "csv",
                    "label": "source"
                }
            ],
            "address": [
                {
                    "modifier": "other",
                    "value": "{'city': 'Dushanbe', 'street': 'First str. 15', 'zip': '54055', 'country': 'Farganistan'}",
                    "label": "address"
                }
            ],
            "email": [
                {
                    "modifier": "other",
                    "value": "[email protected]",
                    "label": "email"
                }
            ],
            "first name": [
                {
                    "modifier": "",
                    "value": "Amayak",
                    "label": "first name"
                }
            ]
        },
        "object_type": "contact",
        "id": "5049fb849b85f669e40000dc",
        "last_contacted": {
            "user_id": "5c459c52ceee1868ee3ab41f",
            "deletion_tstamp": null,
            "type": "LCType<message>",
            "object_id": "ed5afbee-37f5-db6b-7f71-c7d6b8750bbb",
            "tstamp": "2019-01-22T21:57:30+0000"
        },
        "avatar_url": "https://app.nimble.com/api/contacts/avatars/5049fb849b85f669e40000dc",
        "record_type": "person",
        "creator": "Emil Kio",
        "children": [],
        "tags": [
            {
                "tag": "csv import",
                "id": "5049fa0c9b85f62cb4000639"
            }
        ],
        "owner_id": "5049f696a694620a0700001c"
    }
]

Here is a description of the response in detail:

updated

: Timestamp of contact's last update time

created

: Timestamp of contact's creation time

fields

: Dictionary containing contact's fields data. Keys are field names and values are lists of field values. All default contact fields are described here <contact-fields>{.interpreted-text role="ref"}.

object_type

: String specifying document type. For contacts it's contact.

id

: Unique contact id in BSON format.

last_contacted

:

Information about last outbound message to this contact (if any). Contains following fields.

:   -   *user_id* --- unique id of owner in BSON format
    -   *object_id* --- id of object of corresponding type in BSON
        format
    -   *type* --- last contacted provider\'s type
    -   *tstamp* --- timestamp of last outbound message
    -   *deletion_tstamp* --- timestamp of object deleting

avatar_url

: URL of image that can be used as contact's avatar. Value of null is used to indicate that contact has no avatar associated.

record_type

: Type of contact. This can have one of two values: person and company.

creator

: Name of the person who created the contact

children

: For company contacts this field contains list of person contacts associated with the company.

tags

:

List of tags associated with the contact. Each tag is represented as a dictionary having following keys.

:   -   *tag* --- tag\'s text
    -   *id* --- unique id of tag in BSON format

owner_id

: Id of the person owning the contact in BSON format

Contact list

Contact list request is similar to contact-details-response{.interpreted-text role="ref"}. It has the same key with resources, described here <contact-resources-response>{.interpreted-text role="ref"}. Difference is in meta key value. For contact listing it returns pagination details.

Delete list of contacts

Deletes a list of contacts by specified advanced search query. Requires bulk delete permission for authenticated user.

Authorizations:
ApiKey
query Parameters
keyword
Array of strings

Delete all contacts where fields are containing value from this parameter

query
string

Json-encoded advanced search query to find contact for deletion. For more details on query syntax, see Advanced search query syntax. If query parameter presented in request — record_type parameter will be ignored.

record_type
string
Default: "all"
Enum: "person" "company" "all"

Delete all contacts with provided record_type. This parameter could be combined with keyword parameter in order to delete contacts of specific record_type

preflight_checks
boolean
Default: false

check query's contacts are editable

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "status": "string"
}

Contact List

Returns list of contacts filtered by specified parameters. Allows filters by advanced search query, tags, keyword. You can receive all fields or specify a list of fields to return.

Authorizations:
ApiKey
query Parameters
keyword
string

Specifies a set of simple search criteria for the query. This simple search is performed on any (indexed in our search engine) field of contact

fields
string

Specifies a comma separated list of fields to return. If this parameter is excluded, all fields will be returned

tags
boolean
Default: true

Specifies whether tags should be included in the results.

last_contacted (DEPRECATED; use contexts)
boolean
Default: true

True if return last contacted information, False otherwise

sort
Array of strings

Identifies the sort field and sort order. Sort order is required when this parameter is used. An single sort field can be specified. Any field can be sorted in either asc or desc order. All searchable fields which aren’t multiple and aren’t custom fields are sortable.

query
Array of strings

Specifies query for contacts advanced search. Please note, that this parameter not compatible with parameters record_type and keyword

record_type
string
Default: "all"
Enum: "person" "company" "all"
page
integer
Default: 1

Specifies which page to display

per_page
integer
Default: 30

Specifies the number of items to return per page of results.

files_data (DEPRECATED; use contexts)
boolean
Deprecated
Default: false

if response should include the contacts files in this listing

contexts
any (Contacts.ContactViewContextKinds)
Enum: "last_contacted_data" "employers_data" "leads_data" "sequences_data" "contact_files"

comma-separated additional contexts that should be returned with in this contact

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "resources": [
    ]
}

Contact ids list

Has same parameters as a regular contacts list, but returns only contact ids. Works faster than regular contact list.

Authorizations:
ApiKey
query Parameters
keyword
string

Specifies a set of simple search criteria for the query. This simple search is performed on any (indexed in our search engine) field of contact

fields
string

Specifies a comma separated list of fields to return. If this parameter is excluded, all fields will be returned

tags
boolean
Default: true

Specifies whether tags should be included in the results.

last_contacted
boolean
Default: true

True if return last contacted information, False otherwise

sort
Array of strings

Identifies the sort field and sort order. Sort order is required when this parameter is used. An single sort field can be specified. Any field can be sorted in either asc or desc order. All searchable fields which aren’t multiple and aren’t custom fields are sortable.

query
Array of strings

Specifies query for contacts advanced search. Please note, that this parameter not compatible with parameters record_type and keyword

record_type
string
Default: "all"
Enum: "person" "company" "all"
page
integer
Default: 1

Specifies which page to display

per_page
integer
Default: 30

Specifies the number of items to return per page of results.

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "resources": [
    ]
}

Returns standard contact listings

Returns a list of contacts for the specified identifiers

Authorizations:
ApiKey
query Parameters
id
required
string

A list of contact ids (max 30), separated by a comma

fields
string

Field names to retrieve, otherwise all fields will be retrieved

meta
boolean

True if include fields matadata into response, False otherwise

tags
boolean

True if return tags information, False otherwise

last_contacted (DEPRECATED, use contexts)
boolean

True if return last contacted information, False otherwise

contexts
any (Contacts.ContactViewContextKinds)
Enum: "last_contacted_data" "employers_data" "leads_data" "sequences_data" "contact_files"

comma-separated additional contexts that should be returned with in this contact

Responses

Response samples

Content type
application/json
{
  • "contacts_meta": {
    },
  • "resources": [
    ]
}

Create new contact

Creates contact with data provided. For contact-persons at least first name or last name is required. For contact-companies—company name is required field.

Authorizations:
ApiKey
Request Body schema: application/json
required
avatar_url
string
fields
required
object

Describes a dictionary organized in the same structure as a contact listing response. In this structure, each key is field name. Values are lists of dictionaries, having two fields: value - actual value to store in contact field, modifier - field modifier to use, if field can have one. At a minimum, contacts require a name (first or last for a person, company name for a company).

owner_id
string or null (Contacts.OwnerId)

Describes id of user who is owning this contact. Keep in mind that the creator and owner may be different.
If null - owner will be unassigned.
If not specified - default owner from company settings will be applied.

object (Contacts.ContactPrivacy)

Defines scopes of object visibility and editability.
Edit permission means that group or user also is able to read an object.
No duplication, if id in edit Principal it must not be in view Principal.
If property is None - everyone have an action right (Permitted to everyone).
If Principal is set, but has empty properies - only owner is allowed to act.
If not specified - default privacy from company settings will be applied

record_type
string (Contacts.ContactType)
Enum: "person" "company"
tags
string

Comma separated list of tags to assign to contacts. If you need to create tags, containing comma sign — escape it with backslash. E.g. our customers,best\,premium will create tags our customers and best,premium. Note Maximum 5 tags are allowed in this list during contact creation.

type
string (Contacts.ContactType)
Enum: "person" "company"

Responses

Request samples

Content type
application/json
{
  • "avatar_url": "string",
  • "fields": { },
  • "owner_id": "string",
  • "privacy": {
    },
  • "record_type": "person",
  • "tags": "string",
  • "type": "person"
}

Response samples

Content type
application/json
{
  • "avatar_url": "string",
  • "children": [
    ],
  • "employers_info": [
    ],
  • "company_last_contacted": {
    },
  • "lc": {
    },
  • "created": "string",
  • "creator": "string",
  • "fields": {
    },
  • "id": "string",
  • "is_important": { },
  • "last_contacted": {
    },
  • "object_type": "contact",
  • "last_contacted_user": "string",
  • "owner_id": "string",
  • "privacy": {
    },
  • "record_type": "person",
  • "reminder": {
    },
  • "tags": [
    ],
  • "updated": "string",
  • "updater": "string",
  • "stages_info": [
    ],
  • "notice": {
    },
  • "contexts": [
    ]
}

Delete contact by id

Deletes contact

Authorizations:
ApiKey
path Parameters
contact_id
required
string

id of a contact to operate on

Responses

Response samples

Content type
application/json
{
  • "message": "You don't have access to this deal"
}

Returns contact data by its id.

Returns contact

Authorizations:
ApiKey
path Parameters
contact_id
required
string

id of a contact to operate on

query Parameters
fields
string

Field names to retrieve, otherwise all fields will be retrieved

meta
boolean

True if include fields matadata into response, False otherwise

tags
boolean

True if return tags information, False otherwise

last_contacted (DEPRECATED, use contexts)
boolean

True if return last contacted information, False otherwise

leads_data (DEPRECATED, use contexts)
boolean
Default: true

True if return leads pipeline info, False otherwise

contexts
any (Contacts.ContactViewContextKinds)
Enum: "last_contacted_data" "employers_data" "leads_data" "sequences_data" "contact_files"

comma-separated additional contexts that should be returned with in this contact

Responses

Response samples

Content type
application/json
{
  • "contacts_meta": {
    },
  • "resources": [
    ]
}

Updates contact by its id.

Updates contact

Authorizations:
ApiKey
path Parameters
contact_id
required
string

id of a contact to operate on

query Parameters
type
string
Enum: "0" "1"

1 if replace fields instead of extending it, otherwise extend

leads_data
boolean
Default: true

True if return leads pipeline info, False otherwise

Request Body schema: application/json
required
avatar_url
string
fields
object

Describes a dictionary organized in the same structure as a contact listing response. In this structure, each key is field name. Values are lists of dictionaries, having two fields: value - actual value to store in contact field, modifier - field modifier to use, if field can have one. At a minimum, contacts require a name (first or last for a person, company name for a company).

is_important
boolean

Responses

Request samples

Content type
application/json
{
  • "avatar_url": "string",
  • "fields": { },
  • "is_important": true
}

Response samples

Content type
application/json
{
  • "avatar_url": "string",
  • "children": [
    ],
  • "employers_info": [
    ],
  • "company_last_contacted": {
    },
  • "lc": {
    },
  • "created": "string",
  • "creator": "string",
  • "fields": {
    },
  • "id": "string",
  • "is_important": { },
  • "last_contacted": {
    },
  • "object_type": "contact",
  • "last_contacted_user": "string",
  • "owner_id": "string",
  • "privacy": {
    },
  • "record_type": "person",
  • "reminder": {
    },
  • "tags": [
    ],
  • "updated": "string",
  • "updater": "string",
  • "stages_info": [
    ],
  • "notice": {
    },
  • "contexts": [
    ]
}

(D) List contacts fields metadata Deprecated

(DEPRECATED) This method return all available metadata for company's fields/groups.

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "fields": {
    },
  • "groups": {
    }
}

Create contacts note

Creates a note on one or more contacts. At least one contact id is required as Nimble currently doesn't support notes without contacts.

Authorizations:
ApiKey
Request Body schema: application/json
required
contact_ids
required
Array of strings

List of contacts’ IDs in BSON format to which the note will be attached. Contacts count should be between 1 and 10.

note
required
string
note_preview
required
string

Short version of note, that will be used for preview purposes

Responses

Request samples

Content type
application/json
{
  • "contact_ids": [
    ],
  • "note": "string",
  • "note_preview": "string"
}

Response samples

Content type
application/json
{
  • "author_name": "string",
  • "contacts": [
    ],
  • "created": "string",
  • "id": "string",
  • "note": "string",
  • "note_preview": "string",
  • "owner_id": "string",
  • "owner": {
    },
  • "updated": "string"
}

Delte contact note by id

delete contact note

Authorizations:
ApiKey
path Parameters
note_id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string"
}

Returns note by id.

return single note

Authorizations:
ApiKey
path Parameters
note_id
required
string

Responses

Response samples

Content type
application/json
{
  • "author_name": "string",
  • "contacts": [
    ],
  • "created": "string",
  • "id": "string",
  • "note": "string",
  • "note_preview": "string",
  • "owner_id": "string",
  • "owner": {
    },
  • "updated": "string"
}

Create contact note with id

create contact note

Authorizations:
ApiKey
path Parameters
note_id
required
string
Request Body schema: application/json
required
contact_ids
required
Array of strings

List of contacts’ IDs in BSON format to which the note will be attached. Contacts count should be between 1 and 10.

note
required
string
note_preview
required
string

Short version of note, that will be used for preview purposes

Responses

Request samples

Content type
application/json
{
  • "contact_ids": [
    ],
  • "note": "string",
  • "note_preview": "string"
}

Response samples

Content type
application/json
{
  • "author_name": "string",
  • "contacts": [
    ],
  • "created": "string",
  • "id": "string",
  • "note": "string",
  • "note_preview": "string",
  • "owner_id": "string",
  • "owner": {
    },
  • "updated": "string"
}

Update contact note by id

update contact note

Authorizations:
ApiKey
path Parameters
note_id
required
string
Request Body schema: application/json
required
contact_ids
required
Array of strings

List of contacts’ IDs in BSON format to which the note will be attached. Contacts count should be between 1 and 10.

note
required
string
note_preview
required
string

Short version of note, that will be used for preview purposes

Responses

Request samples

Content type
application/json
{
  • "contact_ids": [
    ],
  • "note": "string",
  • "note_preview": "string"
}

Response samples

Content type
application/json
{
  • "author_name": "string",
  • "contacts": [
    ],
  • "created": "string",
  • "id": "string",
  • "note": "string",
  • "note_preview": "string",
  • "owner_id": "string",
  • "owner": {
    },
  • "updated": "string"
}

List contact's notes

Returns a list of notes for the specified contact

Authorizations:
ApiKey
path Parameters
contact_id
required
string

id of a contact to operate on

query Parameters
page
integer
per_page
integer

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "resources": [
    ]
}

Assign tags to contact

sets tags for a specified contact to a given set

Authorizations:
ApiKey
path Parameters
contact_id
required
string
Request Body schema: application/json
required
tags
required
Array of strings

Responses

Request samples

Content type
application/json
{
  • "tags": [
    ]
}

Response samples

Content type
application/json
{
  • "avatar_url": "string",
  • "children": [
    ],
  • "employers_info": [
    ],
  • "company_last_contacted": {
    },
  • "lc": {
    },
  • "created": "string",
  • "creator": "string",
  • "fields": {
    },
  • "id": "string",
  • "is_important": { },
  • "last_contacted": {
    },
  • "object_type": "contact",
  • "last_contacted_user": "string",
  • "owner_id": "string",
  • "privacy": {
    },
  • "record_type": "person",
  • "reminder": {
    },
  • "tags": [
    ],
  • "updated": "string",
  • "updater": "string",
  • "stages_info": [
    ],
  • "notice": {
    },
  • "contexts": [
    ]
}

Contacts Fields

Legacy contacts metadata

Contact's metadata contains information about all basic and custom fields created in Nimble for a user. Below is it's typical structure. Please note that this listing doesn't contain all metadata as the full list is very big. The typical records are shown here. All default contact fields are described here <contact-fields>{.interpreted-text role="ref"}.

"contacts_meta": {
    "fields": {
        "first name": [
            {
                "group": "Basic Info",
                "name": "first name",
                "label": "first name",
                "modifier": "",
                "presentation": {},
                "id": "5049f697a694620a07000043",
                "multiples": false,
                "read_only": false
            }
        ],
        "email": [
            {
                "group": "Contact Info",
                "name": "email",
                "label": "email",
                "modifier": "other",
                "presentation": {},
                "id": "5049f697a694620a07000065",
                "multiples": true,
                "read_only": false
            },
            {
                "group": "Contact Info",
                "name": "email",
                "label": "email",
                "modifier": "personal",
                "presentation": {},
                "id": "5049f697a694620a07000064",
                "multiples": true,
                "read_only": false
            }
        ],
        "lead status": [
            {
                "group": "Lead Details",
                "name": "lead status",
                "label": "lead status",
                "modifier": "",
                "presentation": {
                    "width": "1",
                    "next_id": "5",
                    "values": [
                        {
                            "id": "1",
                            "value": "Open"
                        },
                        {
                            "id": "2",
                            "value": "Contacted"
                        },
                        {
                            "id": "3",
                            "value": "Qualified"
                        },
                        {
                            "id": "4",
                            "value": "Unqualified"
                        }
                    ],
                    "type": "select-box"
                },
                "id": "5049f697a694620a0700008d",
                "multiples": false,
                "read_only": false
            }
        ]
    },
    "groups": {
        "Basic Info": {
            "name": "Basic Info",
            "order": [
                "first name",
                "last name",
                "middle name",
                "company name",
                "title",
                "parent company",
                "source",
                "last contacted"
            ],
            "is_standard": true,
            "label": "Basic Info",
            "type": "both",
            "id": "5049f696a694620a07000031"
        }
    }
}

Here is a description of the response in detail:

fields

: Information about the fields in Nimble. Represented by dictionary where keys are fields names, and values are lists containing details about all possible modifications of this field. If field have no modifiers (like first name on example above), this list contains only one element.

Information stored in dictionaries with following keys:

:   -   *group* --- unique name of the group containing this field.
    -   *label* --- unique name representing the field in
        human-readable form.
    -   *modifier* --- name of the field\'s modifier
    -   *id* --- unique id of the field in BSON format
    -   *multiples* - indicates whether field could have multiple
        values (under different modifiers).
    -   *presentation* - dict with the information which should help
        to display this field on client.
    -   *read_only* - if contacts field values is editable by user

groups

:

Information about field groups. Represented by dictionary where keys are unique group names and values are dictionaries with more info. Groups info dictionary contains following fields:

:   -   *id* --- unique id of the group in BSON format.
    -   *order* --- list containing names of the fields as they
        appeared in group.
    -   *name* --- unique name of the group. (Outdated: as we have
        field name as the key of `groups` dictionary.)
    -   *label* --- unique name representing the field in
        human-readable form.
    -   *is_standard* - whether this group belongs to standard
        Nimble groups.
    -   *type* - type (belonging) of group, could be among `person`,
        `company`, `both`.

Fields metadata

Contact's metadata contains information about all basic and custom fields created in Nimble for a user. Below is it's typical structure. All default contact fields are described here <contact-fields>{.interpreted-text role="ref"}.

{
  "tabs": [
    {
      "tab_id": "string",
      "tab_name": "string",
      "contact_types": "person",
      "is_standard": true,
      "members": [
        {
          "type": "group",
          "name": "string",
          "group_id": "string",
          "logo_id": "string",
          "fields": [
            {
              "type": "field",
              "name": "string",
              "field_id": "string",
              "modifier": "string",
              "multiples": true,
              "read_only": true,
              "field_type": {
                "field_kind": "string",
                "validation_rule": {
                  "type": "email"
                }
              },
              "presentation": {
                "number_type": "integer"
              },
              "available_actions": "edit_all"
            }
          ]
        }
      ],
      "available_actions": "edit_all"
    }
  ]
}

Here is a description of the response in detail:

tabs

: - tab_id --- unique id of the tab. - tab_name --- name representing the tab in human-readable form. - contact_types --- contact types that could have fields of the tab. Possible values: person, company - is_standard --- whether this tab belongs to standard Nimble tabs. - available_actions - possible values: edit_all, rearrange_only, view_only. - members - list of tab members. Its could be groups and fields without groups.

groups

: - type --- tab member type. It is always "group" here. - name --- name representing group in human-readable form. - group_id --- unique id of the group. - logo_id --- id of logo to show - is_standard - whether this group belongs to standard Nimble groups. - fields - list of fields contained in group.

fields

: - type --- tab member type. It is always "field" here. - name --- name representing field in human-readable form. - field_id --- unique id of the field. - modifier --- name of the field's modifier - multiples - indicates whether field could have multiple values (under different modifiers). - read_only - if field values available for editing - field_type - dictionary describing field type. More details are at described here <field-type>{.interpreted-text role="ref"}. - presentation - dictionary describing how field should be presented in Nimble client. More details are at described here <field-presentations>{.interpreted-text role="ref"}. - available_actions - possible values: edit_all, edit_choices_only, view_only.

The image below shows schema of fields metadata. Blue rectangle - tab, green rectangle - group, red rectangle - field. As you can see, fields could be a member of a tab or a group. The same metadata schema is used for deals metadata.

Metadata Schema

List all available metadata for company fields

Return all available metadata for company's fields

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "tabs": [
    ]
}

Create new field

Create new field

Authorizations:
ApiKey
Request Body schema: application/json
required
Fields.StringFieldValuesType (object) or Fields.LongStringFieldValuesType (object) or Fields.ChoiceFieldValuesType (object) or Fields.NumberFieldValuesType (object) or Fields.DateTimeFieldValuesType (object) or Fields.BooleanFieldValuesType (object) or Fields.AddressFieldValuesType (object) or Fields.UserFieldValuesType (object) (Fields.FieldTypeOnFieldCreation)
group_id
required
string or null
insert_after
required
string or null

If not null, inserts a new field after another field or group with specified id. If null, then inserted field to be the first one

name
required
string [ 1 .. 50 ] characters
required
Fields.IntegerNumberPresentation (object) or Fields.DecimalNumberPresentation (object) or Fields.PercentageNumberPresentation (object) or Fields.FinancialNumberPresentation (object) or Fields.DateTimePresentation (object) (Fields.FieldPresentation)

how values of the field should look. Must match to corresponding field_type. Date and number fields must have an appropriate presentation. There is no presentation for other types

tab_id
required
string
multiples
boolean

whether this field can hold multiple values (by default, false)

Responses

Request samples

Content type
application/json
{
  • "field_type": {
    },
  • "group_id": "string",
  • "insert_after": "string",
  • "name": "string",
  • "presentation": {
    },
  • "tab_id": "string",
  • "multiples": true
}

Response samples

Content type
application/json
{
  • "tab_id": "string",
  • "tab_name": "string",
  • "contact_types": "person",
  • "is_standard": true,
  • "members": [
    ],
  • "available_actions": "edit_all"
}

Delete contact field by id

Deletes field by id

Authorizations:
ApiKey
path Parameters
field_id
required
string
query Parameters
preflight_checks
required
boolean

Responses

Response samples

Content type
application/json
{
  • "object_id": "4f2acc3142a053dda595f00b",
  • "object_type": "deal"
}

Update existing field by id

Updates existing field

Authorizations:
ApiKey
path Parameters
field_id
required
string
Request Body schema: application/json
group_id
string or null

If not null, move field to specified group. Null if remove field from grooup

insert_after
string or null

If not null, move field after another field or group with specified id. If null, then moved field to be the first one

name
string [ 1 .. 50 ] characters
Fields.IntegerNumberPresentation (object) or Fields.DecimalNumberPresentation (object) or Fields.PercentageNumberPresentation (object) or Fields.FinancialNumberPresentation (object) or Fields.DateTimePresentation (object) (Fields.FieldPresentation)

how values of the field should look. Must match to corresponding field_type. Date and number fields must have an appropriate presentation. There is no presentation for other types

tab_id
string

Responses

Request samples

Content type
application/json
{
  • "group_id": "string",
  • "insert_after": "string",
  • "name": "string",
  • "presentation": {
    },
  • "tab_id": "string"
}

Response samples

Content type
application/json
{
  • "tab_id": "string",
  • "tab_name": "string",
  • "contact_types": "person",
  • "is_standard": true,
  • "members": [
    ],
  • "available_actions": "edit_all"
}

Create new contacts fields group

Create new fields group

Authorizations:
ApiKey
Request Body schema: application/json
insert_after
required
string or null

If not null, inserts a new group after another group or field with specified id. If null, then tab is inserted as the first one

logo_id
required
string
name
required
string [ 1 .. 50 ] characters
tab_id
required
string

Responses

Request samples

Content type
application/json
{
  • "insert_after": "string",
  • "logo_id": "string",
  • "name": "string",
  • "tab_id": "string"
}

Response samples

Content type
application/json
{
  • "tab_id": "string",
  • "tab_name": "string",
  • "contact_types": "person",
  • "is_standard": true,
  • "members": [
    ],
  • "available_actions": "edit_all"
}

Delete contacts fields group by id

Deletes group by id

Authorizations:
ApiKey
path Parameters
group_id
required
string
query Parameters
preflight_checks
required
boolean

Responses

Response samples

Content type
application/json
{
  • "object_id": "4f2acc3142a053dda595f00b",
  • "object_type": "deal"
}

Update contacts fields group by id

Updates existing fields group

Authorizations:
ApiKey
path Parameters
group_id
required
string
Request Body schema: application/json
insert_after
string or null

If not null, move group after another field or group with specified id. If null, then move group to the first position

logo_id
string
name
string [ 1 .. 50 ] characters
tab_id
string

Responses

Request samples

Content type
application/json
{
  • "insert_after": "string",
  • "logo_id": "string",
  • "name": "string",
  • "tab_id": "string"
}

Response samples

Content type
application/json
{
  • "tab_id": "string",
  • "tab_name": "string",
  • "contact_types": "person",
  • "is_standard": true,
  • "members": [
    ],
  • "available_actions": "edit_all"
}

Create new contacts fields tab

Create new fields tabs

Authorizations:
ApiKey
Request Body schema: application/json
contact_types
required
Array of strings (Contacts.ContactType)
Items Enum: "person" "company"
insert_after
required
string or null

If not null, inserts a new tab after another tab with specified id. If null, then tab is inserted as the first one

tab_name
required
string [ 1 .. 50 ] characters

Responses

Request samples

Content type
application/json
{
  • "contact_types": [
    ],
  • "insert_after": "string",
  • "tab_name": "string"
}

Response samples

Content type
application/json
{
  • "tab_id": "string",
  • "tab_name": "string",
  • "contact_types": "person",
  • "is_standard": true,
  • "members": [
    ],
  • "available_actions": "edit_all"
}

Delete contacts tab by id

Deletes tab by id

Authorizations:
ApiKey
path Parameters
tab_id
required
string
query Parameters
preflight_checks
required
boolean

Responses

Response samples

Content type
application/json
{
  • "object_id": "4f2acc3142a053dda595f00b",
  • "object_type": "deal"
}

Update contacts fields tab by id

Updates existing fields tab

Authorizations:
ApiKey
path Parameters
tab_id
required
string
Request Body schema: application/json
contact_types
string (Contacts.ContactType)
Enum: "person" "company"
insert_after
string or null

Moves tab after another tab with specified id. If null, then move tab to the first position

tab_name
string [ 1 .. 50 ] characters

Responses

Request samples

Content type
application/json
{
  • "contact_types": "person",
  • "insert_after": "string",
  • "tab_name": "string"
}

Response samples

Content type
application/json
{
  • "tab_id": "string",
  • "tab_name": "string",
  • "contact_types": "person",
  • "is_standard": true,
  • "members": [
    ],
  • "available_actions": "edit_all"
}

Create choice for field

Create choice for field

Authorizations:
ApiKey
path Parameters
field_id
required
string
Request Body schema: application/json
id
required
string
insert_after
required
string or null

If not null, inserts a new choice after another choice with specified id. If null, then inserted choice to be the first one in field

value
required
string

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "insert_after": "string",
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "tab_id": "string",
  • "tab_name": "string",
  • "contact_types": "person",
  • "is_standard": true,
  • "members": [
    ],
  • "available_actions": "edit_all"
}

Delete contact choice by id

Deletes choice by id

Authorizations:
ApiKey
path Parameters
field_id
required
string
id
required
string
query Parameters
preflight_checks
required
boolean

Responses

Response samples

Content type
application/json
{
  • "tabs": [
    ]
}

Update field choice

Updates choise

Authorizations:
ApiKey
path Parameters
field_id
required
string
id
required
string
Request Body schema: application/json
id
required
string
insert_after
string or null

If not null, move choice after another choice with specified id. If null, then moved choice to be the first one

value
string

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "insert_after": "string",
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "tabs": [
    ]
}

Delete is_primary mark from field

delete is_primary mark from field

Authorizations:
ApiKey
path Parameters
contact_id
required
string
Request Body schema: application/json
required
field_id
required
string
position
required
integer >= 0

Responses

Request samples

Content type
application/json
{
  • "field_id": "string",
  • "position": 0
}

Response samples

Content type
application/json
{
  • "object_id": "4f2acc3142a053dda595f00b",
  • "object_type": "deal"
}

Mark field with is_primary flag

mark field with is_primary flag

Authorizations:
ApiKey
path Parameters
contact_id
required
string
Request Body schema: application/json
required
field_id
required
string
position
required
integer >= 0

Responses

Request samples

Content type
application/json
{
  • "field_id": "string",
  • "position": 0
}

Response samples

Content type
application/json
{
  • "object_id": "4f2acc3142a053dda595f00b",
  • "object_type": "deal"
}

Deals

Deals management

List all user's deals

Retrieves list of all user deals

Authorizations:
ApiKey
query Parameters
sort
required
string <field:order>
limit
integer

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "resources": [
    ]
}

Create new deal

Create a new deal_v2

Authorizations:
ApiKey
Request Body schema: application/json
required
owner_id
string

id of user who owns deal

object

deal's read and edit privacy

required
Deals.FieldsValues (object) or Deals.NamedFieldsValues (object)

Fields of the deals which was filled up by the owner/creator. At leas field deal_name is required.
Standard fields description:

  • name - required. Name of the deal.
  • probability - required (if none Stage.default_probability set). Deal probability. If not provided by user, deal will try to derive it from stage's default_probability. If none, will rise error
  • description - optional. Description of the deal. Sending just ' ' (whitespace) removing it
  • amount - optional. Amount of tha money in the deal. Can be only positive number or 0
  • expected_close_date - optional. Date when deal is expected to be closed.
  • actual_close_date - optional. Actual date. View only.

To remove any field send {field_id:[]}

pipeline_id
required
string

id of the pipeline which belongs to this deal

stage_id
required
string

id of stage on which deal is currently is

currency
string <ISO-4217>

Currency of the deal in ISO-4217 format (3 char code)

Array of objects

List of Nimble contacts that take part in the deal.

Array of objects (Deals.RelatedExternalContact)

A list with related external contacts. Similar to related_contacts, but instead of contact_id we use contact_info (email, phone etc)

tags
Array of strings

Responses

Request samples

Content type
application/json
{
  • "owner_id": "string",
  • "privacy": {
    },
  • "fields_values": {
    },
  • "pipeline_id": "string",
  • "stage_id": "string",
  • "currency": "string",
  • "related_contacts": [
    ],
  • "related_external_contacts": [
    ],
  • "tags": [
    ]
}

Response samples

Content type
application/json
{
  • "updated": "string",
  • "deal_id": "string",
  • "creator": {
    },
  • "related_external_contacts": [
    ],
  • "privacy": {
    },
  • "updated_by": "string",
  • "created": "string",
  • "is_editable": true,
  • "currency": "string",
  • "related_contacts": [
    ],
  • "owner": {
    },
  • "fields_values": {
    },
  • "fields_values_with_names": {
    },
  • "stage_transitions": {
    },
  • "files": {
    },
  • "tags": [
    ],
  • "final_probability": 0,
  • "age_in_days": 0
}

List deals tags

Returns a list of deals tags

Authorizations:
ApiKey
query Parameters
starts_with
string

Find tags that start with

limit
integer

A number of tags to return

Responses

Response samples

Content type
application/json
{
  • "tags": [
    ]
}

Add tags to deals

Assign tags to deals

Authorizations:
ApiKey
Request Body schema: application/json
required
preflight_checks
boolean
Default: false

check query's deals are editable

query
required
object

query for deals advanced search

tags
required
Array of strings

list of tags to assign

Responses

Request samples

Content type
application/json
{
  • "preflight_checks": false,
  • "query": { },
  • "tags": [
    ]
}

Response samples

Content type
application/json
{
  • "push_data": {
    }
}

Update deals' tag by name

update deals tag by name

Authorizations:
ApiKey
path Parameters
tag_name
required
string

name of tag

Request Body schema: application/json
required
new_tag
required
string

Responses

Request samples

Content type
application/json
{
  • "new_tag": "string"
}

Response samples

Content type
application/json
{
  • "message": "You can not reopen already active deal",
  • "type": "lost_contact_access"
}

Delete deals tag by name

delete deals tag by name

Authorizations:
ApiKey
path Parameters
tag_name
required
string

name of tag

Request Body schema: application/json
required
preflight_checks
boolean
Default: false

check query's deals are editable

Responses

Request samples

Content type
application/json
{
  • "preflight_checks": false
}

Response samples

Content type
application/json
{
  • "errors": [
    ]
}

Get sum of all deals amount won last month

Returns sum of all deals amount won last month

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "last_month_won_amount": 0,
  • "last_month_won_count": 0
}

Get deal by id

Get deal by id

Authorizations:
ApiKey
path Parameters
deal_id
required
string

id of a deal to operate on

Responses

Response samples

Content type
application/json
{
  • "updated": "string",
  • "deal_id": "string",
  • "creator": {
    },
  • "related_external_contacts": [
    ],
  • "privacy": {
    },
  • "updated_by": "string",
  • "created": "string",
  • "is_editable": true,
  • "currency": "string",
  • "related_contacts": [
    ],
  • "owner": {
    },
  • "fields_values": {
    },
  • "fields_values_with_names": {
    },
  • "stage_transitions": {
    },
  • "files": {
    },
  • "tags": [
    ],
  • "final_probability": 0,
  • "age_in_days": 0
}

Delete deal by id

Delete deal by id

Authorizations:
ApiKey
path Parameters
deal_id
required
string

id of a deal to operate on

Responses

Response samples

Content type
application/json
{
  • "message": "You don't have access to this deal"
}

Update deal by id

Edit deal by id

Authorizations:
ApiKey
path Parameters
deal_id
required
string

id of a deal to operate on

Request Body schema: application/json
owner_id
string

id of user who owns the deal

object

deal's read and edit privacy

Deals.FieldsValues (object) or Deals.NamedFieldsValues (object)

Fields of the deals which was filled up by the owner/creator. At leas field deal_name is required.
Standard fields description:

  • name - required. Name of the deal.
  • probability - required (if none Stage.default_probability set). Deal probability. If not provided by user, deal will try to derive it from stage's default_probability. If none, will rise error
  • description - optional. Description of the deal. Sending just ' ' (whitespace) removing it
  • amount - optional. Amount of tha money in the deal. Can be only positive number or 0
  • expected_close_date - optional. Date when deal is expected to be closed.
  • actual_close_date - optional. Actual date. View only.

To remove any field send {field_id:[]}

pipeline_id
string

id of the pipeline to which this deal belongs

stage_id
string

id of the stage on which deal is now

currency
string <ISO-4217>

Currency of the deal in ISO-4217 (3 char code).

Array of objects

List of Nimble contacts that take part in the deal. If you want to clear contacts list, send {'related_external_contacts': []}

Array of objects (Deals.RelatedExternalContact)

A list with related external contacts. Similar to related_contacts, but instead of contact_id we use contact_info (email, phone etc).
If you want to clear contacts list, send {'related_external_contacts': []}

tags
Array of strings

new list of deal's tags

Responses

Request samples

Content type
application/json
{
  • "owner_id": "5049f696a694620a0700001c",
  • "privacy": {
    },
  • "fields_values": {
    },
  • "pipeline_id": "630f34cfa34058dea76c0c0e",
  • "stage_id": "62fd6587048065ca3510c6d5",
  • "currency": "USD",
  • "related_contacts": [
    ],
  • "related_external_contacts": [
    ],
  • "tags": [
    ]
}

Response samples

Content type
application/json
{
  • "updated": "string",
  • "deal_id": "string",
  • "creator": {
    },
  • "related_external_contacts": [
    ],
  • "privacy": {
    },
  • "updated_by": "string",
  • "created": "string",
  • "is_editable": true,
  • "currency": "string",
  • "related_contacts": [
    ],
  • "owner": {
    },
  • "fields_values": {
    },
  • "fields_values_with_names": {
    },
  • "stage_transitions": {
    },
  • "files": {
    },
  • "tags": [
    ],
  • "final_probability": 0,
  • "age_in_days": 0
}

Store deal file

Store a new deal file. We can store two categories of files:

  1. Files from external sources (gdrive, dropbox, onedrive). In this scenario files are being select in the respective file picker, and the client should pass file details to this API call so the file gets stored for the deal

  2. Files uploaded from a computer using Azure SDK. a) To perform the upload itself, the client must first use /api/files/azure/upload (this API is the same as one for uploading Contact Files – we just moved it to a separate endpoint since it's independent from contact/deals/etc) b) after the upload was completed, the client has so-called data_id (the ID of this file in Azure Blob Storage) c) pass the data_id to this API so the file gets stored to the deal

Authorizations:
ApiKey
path Parameters
deal_id
required
string

id of deal to which the file should be stored

Request Body schema: application/json
One of
object (Deals.AzureFileMetadata)

metadata for files uploaded from device using Azure JS SDK

Responses

Request samples

Content type
application/json
Example
{
  • "metadata": {
    }
}

Update deal file

Updates a file with new name. Note: only files uploaded using Azure SDK can be renamed

Authorizations:
ApiKey
path Parameters
deal_id
required
string
file_id
required
string

id of a file to operate with

Request Body schema: application/json
new_file_name
string

Responses

Request samples

Content type
application/json
{
  • "new_file_name": "string"
}

Delete deal file

Deletes file

Authorizations:
ApiKey
path Parameters
deal_id
required
string
file_id
required
string

id of a file to operate with

Responses

Get deal file download url

Returns download link for selected deal file

Authorizations:
ApiKey
path Parameters
deal_id
required
string
file_id
required
string

id of a file to get link for

Responses

Response samples

Content type
application/json
{
  • "url": "string"
}

Create note to the deal

Create note to the deal

Authorizations:
ApiKey
path Parameters
deal_id
required
string

id of deal to which note should be attached

Request Body schema: application/json
title
required
string [ 1 .. 256 ] characters

Title of the note.

body
string

Text of the note.

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "body": "string"
}

Response samples

Content type
application/json
{
  • "note_id": "string",
  • "title": "string",
  • "body": "string",
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z",
  • "creator": {
    }
}

Update deal note by id

Update note

Authorizations:
ApiKey
path Parameters
deal_id
required
string

id of deal to which note should be attached

note_id
required
string

id of note to operate with

Request Body schema: application/json
title
string [ 1 .. 256 ] characters

Title of the note.

body
string or null

Text of the note.

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "body": "string"
}

Response samples

Content type
application/json
{
  • "note_id": "string",
  • "title": "string",
  • "body": "string",
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z",
  • "creator": {
    }
}

Delete deal note by id

Delete note

Authorizations:
ApiKey
path Parameters
deal_id
required
string

id of deal to which note should be attached

note_id
required
string

id of note to operate with

Responses

List deals' overdue activities

Returns a feed of overdue activities for a given deals. Sorting order is time since overdue, descending

Authorizations:
ApiKey
path Parameters
deal_id
required
string
query Parameters
limit
integer

Indicates how many activities show per page.

types
Array of strings

List of overdue activity types to return. If not present, we'll return activities by all types.

Responses

Response samples

Content type
application/json
{
  • "activities": [
    ]
}

Deals Fields

Deals fields groups and tabs management

List column catalogue

Returns a list of columns and column groups for the user who making the request

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "items": {
    },
  • "type": [ ]
}

List deal standard and pipelines fields

Retrieves list of deal fields for this user (standard) and fields for each pipeline

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "pipelines_tabs": [
    ],
  • "standard_fields": [
    ]
}

Deals Pipelines

Pipelines management

List deals pipelines

Get user pipelines

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "pipelines": [
    ]
}

Create new deals pipeline

Create new pipeline

Authorizations:
ApiKey
Request Body schema: application/json
name
required
string [ 1 .. 200 ] characters

Name of new pipeline

description
required
string <= 256 characters
color
required
string
lost_reasons
required
Array of strings[ items <= 256 characters ]
Default: []
required
Array of objects (Pipeline.CreateDealStageRequest)
Default: []
required
Array of Pipeline.CreateDealsPipelineGroupRequest (object) or Pipeline.CreateDealsPipelineFieldRequest (object)
default_currency
required
string <ISO-4217>

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "color": "string",
  • "lost_reasons": [ ],
  • "stages": [ ],
  • "fields_tab_members": [
    ],
  • "default_currency": "string"
}

Response samples

Content type
application/json
{
  • "pipeline_id": "string",
  • "creator": {
    },
  • "name": "string",
  • "description": "string",
  • "created": "string",
  • "updated": "string",
  • "archived_at": "string",
  • "stages": [
    ],
  • "color": "string",
  • "lost_reasons": [
    ],
  • "is_default": true,
  • "default_currency": "string",
  • "tabs": [
    ]
}

Get deals' pipeline by id

Get pipeline by id

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

Id of pipeline to operate with

Responses

Response samples

Content type
application/json
{
  • "pipeline_id": "string",
  • "creator": {
    },
  • "name": "string",
  • "description": "string",
  • "created": "string",
  • "updated": "string",
  • "archived_at": "string",
  • "stages": [
    ],
  • "color": "string",
  • "lost_reasons": [
    ],
  • "is_default": true,
  • "default_currency": "string",
  • "tabs": [
    ]
}

Update deals' pipeline by id

Update pipeline by id

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

Id of pipeline to operate with

Request Body schema: application/json
name
string [ 1 .. 200 ] characters

New pipeline name

description
string

New pipeline description

color
string

New pipeline color

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "color": "string"
}

Response samples

Content type
application/json
{
  • "pipeline_id": "string",
  • "creator": {
    },
  • "name": "string",
  • "description": "string",
  • "created": "string",
  • "updated": "string",
  • "archived_at": "string",
  • "stages": [
    ],
  • "color": "string",
  • "lost_reasons": [
    ],
  • "is_default": true,
  • "default_currency": "string",
  • "tabs": [
    ]
}

Delete deals' pipeline by id

Delete the pipeline by its id. All deals in this pipelines will also be deleted!

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

Id of pipeline to operate with

Responses

Response samples

Content type
application/json
{
  • "message": "You don't have access to this deal"
}

List pipeline's deals separated by stages

Get deals in pipeline listing separated by stages

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

id of pipeline to get listing for

query Parameters
sort
required
string <field:order>
Example: sort=name:asc

parameter to sort by

limit
integer
Default: 10
Example: limit=30

limit of deals per page

query
string

unparsed NSE search query

stage_id
string <ObjectId>

id of stage to get info about

Responses

Response samples

Content type
application/json
{
  • "stages": [
    ]
}

List pipeline's deals separated by owners

Get deals in pipeline listing separated by owners

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

id of pipeline to get listing for

query Parameters
sort
required
string <field:order>
Example: sort=name:asc

parameter to sort by

limit
integer
Default: 10
Example: limit=30

limit of deals per page

query
string

unparsed NSE search query

Responses

Response samples

Content type
application/json
{
  • "groups": [
    ]
}

Archive deals pipeline

Archive the pipeline

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

Id of pipeline to operate with

Responses

Un-archive deals' pipeline

Un-archive the pipeline

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

Id of pipeline to operate with

Responses

Add new lost reason to deals pipeline

Add lost reason to pipeline

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

id of pipeline where reason is

Request Body schema: application/json
reason
required
string

Reason description

Responses

Request samples

Content type
application/json
{
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "pipeline_id": "string",
  • "creator": {
    },
  • "name": "string",
  • "description": "string",
  • "created": "string",
  • "updated": "string",
  • "archived_at": "string",
  • "stages": [
    ],
  • "color": "string",
  • "lost_reasons": [
    ],
  • "is_default": true,
  • "default_currency": "string",
  • "tabs": [
    ]
}

Create new deals pipeline stage

Create deal stage

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

id of pipeline to manipulate with

Request Body schema: application/json
name
string

Name of the stage

description
string

Stage description

pipeline_id
string <ObjectId>

Id of the pipeline where stage should be

insert_after
string <ObjectId>

Id of the stage that should be positioned before this new stage

expected_days
number >= 0

Expected day before stage complete

default_probability
number [ 0 .. 100 ]

Default probability for all deals in this stage (will be deal probability if one doesn't have its own)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "pipeline_id": "string",
  • "insert_after": "string",
  • "expected_days": 0,
  • "default_probability": 100
}

Response samples

Content type
application/json
{
  • "pipeline_id": "string",
  • "creator": {
    },
  • "name": "string",
  • "description": "string",
  • "created": "string",
  • "updated": "string",
  • "archived_at": "string",
  • "stages": [
    ],
  • "color": "string",
  • "lost_reasons": [
    ],
  • "is_default": true,
  • "default_currency": "string",
  • "tabs": [
    ]
}

Update deals pipeline stage

Update stage

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

id of pipeline to manipulate with

stage_id
required
string <ObjectId>

id of stage to manipulate with

Request Body schema: application/json
name
string [ 1 .. 4096 ] characters

Stage name

description
string or null [ 1 .. 4096 ] characters

Stage description

expected_days
integer

The number of days a deal is expected to spend at this stage

default_probability
integer [ 0 .. 100 ]

Stage default probability. Will be assigned to all deals in stage if they don't have their own

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "expected_days": 0,
  • "default_probability": 100
}

Response samples

Content type
application/json
{
  • "pipeline_id": "string",
  • "creator": {
    },
  • "name": "string",
  • "description": "string",
  • "created": "string",
  • "updated": "string",
  • "archived_at": "string",
  • "stages": [
    ],
  • "color": "string",
  • "lost_reasons": [
    ],
  • "is_default": true,
  • "default_currency": "string",
  • "tabs": [
    ]
}

Archive deals pipeline stage

Archives stage

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

id of pipeline to manipulate with

stage_id
required
string <ObjectId>

id of stage to manipulate with

Responses

Deals Pipelines Fields

Pipelines fields management

Add new custom field to deals pipeline

Creates custom field in pipeline

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of a pipeline to operate on

Request Body schema: application/json
name
required
string

Name of the new field

required
Pipeline.StringFieldValuesType (object) or Pipeline.LongStringFieldValuesType (object) or Pipeline.ChoiceFieldValuesType (object) or Pipeline.NumberFieldValuesType (object) or Pipeline.DateTimeFieldValuesType (object) or Pipeline.BooleanFieldValuesType (object) or Pipeline.AddressFieldValuesType (object) or Pipeline.UserFieldValuesType (object) (Pipeline.FieldTypeOnFieldCreation)
required
Fields.IntegerNumberPresentation (object) or Fields.DecimalNumberPresentation (object) or Fields.PercentageNumberPresentation (object) or Fields.FinancialNumberPresentation (object) or Fields.DateTimePresentation (object) (Fields.FieldPresentation)

how values of the field should look. Must match to corresponding field_type. Date and number fields must have an appropriate presentation. There is no presentation for other types

pipeline_id
string or null

id of pipeline this field is being created for (if known)

insert_after
string or null

Inserts a new field after field or group with specified id. If null, then field is inserted as the first one

group_id
string

id of group this field is being created for (if field is a member of group)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "field_type": {
    },
  • "presentation": {
    },
  • "pipeline_id": "string",
  • "insert_after": "string",
  • "group_id": "string"
}

Response samples

Content type
application/json
{
  • "pipelines_tabs": [
    ],
  • "standard_fields": [
    ]
}

Update custom field in deals pipeline

Updates custom field in pipeline

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of a pipeline to operate on

field_id
required
string

id of custom field in pipeline to operate on

Request Body schema: application/json
name
string

Name of the new field

Fields.IntegerNumberPresentation (object) or Fields.DecimalNumberPresentation (object) or Fields.PercentageNumberPresentation (object) or Fields.FinancialNumberPresentation (object) or Fields.DateTimePresentation (object) (Fields.FieldPresentation)

how values of the field should look. Must match to corresponding field_type. Date and number fields must have an appropriate presentation. There is no presentation for other types

insert_after
string or null

Inserts a new field after field or group with specified id. If null, then field is inserted as the first one

group_id
string or null <ObjectId>

id of group where field will be located or null if field will not be in group

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "presentation": {
    },
  • "insert_after": "string",
  • "group_id": "string"
}

Response samples

Content type
application/json
{
  • "pipelines_tabs": [
    ],
  • "standard_fields": [
    ]
}

Delete custom field from deals pipeline

Deletes custom field from pipeline

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of a pipeline to operate on

field_id
required
string

id of custom field in pipeline to operate on

Request Body schema: application/json
preflight_checks
boolean

if true and there are deals using this field - will return an error; if false - will delete the field and its possible values in deals

Responses

Request samples

Content type
application/json
{
  • "preflight_checks": true
}

Response samples

Content type
application/json
{
  • "message": "You don't have access to this deal"
}

Create choice in deals pipeline field

Creates choice in specified pipeline field

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of a pipeline where custom field is

field_id
required
string

id of custom field where choice will be created

Request Body schema: application/json
required
object

New choice

insert_after
string or null

Move choice after choice with specified id. If null, then choice will be the first one in field

Responses

Request samples

Content type
application/json
{
  • "choice": {
    },
  • "insert_after": "string"
}

Response samples

Content type
application/json
{
  • "pipelines_tabs": [
    ],
  • "standard_fields": [
    ]
}

Update choice in custom deals pipeline field

Updates choice in custom field in pipeline

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of a pipeline where custom field is

field_id
required
string

id of custom field where choice is

choice_id
required
string

id of choice to operate on

Request Body schema: application/json
value
string or null

New choice value

insert_after
string or null

Move choice after choice with specified id. If null, then choice will be the first one in field

Responses

Request samples

Content type
application/json
{
  • "value": "string",
  • "insert_after": "string"
}

Response samples

Content type
application/json
{
  • "pipelines_tabs": [
    ],
  • "standard_fields": [
    ]
}

Delete choice from deals pipeline custom field

Deletes choice from custom field

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of a pipeline where custom field is

field_id
required
string

id of custom field where choice is

choice_id
required
string

id of choice to operate on

Request Body schema: application/json
preflight_checks
boolean

if true and there are deals using this particular choice - will return an error; if false - will delete the choice and the value of this choice in all deals

Responses

Request samples

Content type
application/json
{
  • "preflight_checks": true
}

Response samples

Content type
application/json
{
  • "message": "You don't have access to this deal"
}

Create deals pipeline fields group

Create pipeline deal group

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string <ObjectId>

id of pipeline to manipulate with

Request Body schema: application/json
group_name
string
logo_id
string
insert_after
string or null

If not null, inserts a new group after another group or field with specified id. If null, then group is inserted as the first one

Array of objects (Pipeline.CreateDealsPipelineFieldRequest)

Responses

Request samples

Content type
application/json
{
  • "group_name": "string",
  • "logo_id": "string",
  • "insert_after": "string",
  • "fields": [
    ]
}

Response samples

Content type
application/json
{
  • "pipelines_tabs": [
    ],
  • "standard_fields": [
    ]
}

Update deals pipeline fields group

Update pipeline deal group

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of group to manipulate with

group_id
required
string

id of group to update

Request Body schema: application/json
group_name
string
logo_id
string
insert_after
string

move group after another group or field with specified id

Responses

Request samples

Content type
application/json
{
  • "group_name": "string",
  • "logo_id": "string",
  • "insert_after": "string"
}

Response samples

Content type
application/json
{
  • "pipelines_tabs": [
    ],
  • "standard_fields": [
    ]
}

Delete deals pipeline fields group

Delete pipeline deal group

Authorizations:
ApiKey
path Parameters
pipeline_id
required
string

id of pipeline to delete group from

group_id
required
string

id of group to delete

Responses

Response samples

Content type
application/json
{
  • "message": "You don't have access to this deal"
}