openapi: 3.0.0
info:
title: Nimble Leads API
description: Nimble CRM Leads 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
tags:
- name: Leads
paths:
/api/v2/leads/{lead_id}/{pipeline_id}/successful:
parameters:
- in: path
name: lead_id
required: true
schema:
type: string
- in: path
name: pipeline_id
required: true
schema:
type: string
post:
description: Exit lead from a pipeline successfully
operationId: mark-lead-exited-successful
summary: Exit lead from pipeline successfully
tags:
- Leads
- Contacts Pipelines
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ExitLeadSuccessfullyRequest'
required: true
responses:
'200':
description: updated lead (contact)
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ContactView'
'404':
description: lead or pipeline couldn't be found
'406':
description: operation is invalid (e.g., contact isn't editable or transition itself violates
certain rules)
put:
description: Updates the "exit" transition with new notes and/or actual_exit_date
operationId: put-lead-exit-successful
summary: Update the 'successful exit' transition
tags:
- Leads
- Contacts Pipelines
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ExitLeadSuccessfullyRequest'
required: true
responses:
'200':
description: updated lead (contact)
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ContactView'
'404':
description: lead or pipeline couldn't be found
'406':
description: operation is invalid (e.g., contact isn't editable or transition itself violates
certain rules)
/api/v2/leads/{lead_id}/{pipeline_id}/unsuccessful:
parameters:
- in: path
name: lead_id
required: true
schema:
type: string
- in: path
name: pipeline_id
required: true
schema:
type: string
post:
description: Exit lead from a pipeline unsuccessfully
operationId: mark-lead-exited-unsuccessfully
summary: Exit lead from a pipeline unsuccessfully
tags:
- Leads
- Contacts Pipelines
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ExitLeadUnsuccessfullyRequest'
required: true
responses:
'200':
description: updated lead (contact)
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ContactView'
'404':
description: lead or pipeline couldn't be found
'406':
description: operation is invalid (e.g., contact isn't editable or transition itself violates
certain rules)
put:
description: Updates the "exit" transition with new notes and/or actual_exit_date and/or lost_reason
operationId: put-lead-exit-unsuccessful
summary: Update the 'unsuccessful exit' transition
tags:
- Leads
- Contacts Pipelines
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ExitLeadUnsuccessfullyRequest'
required: true
responses:
'200':
description: updated lead (contact)
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ContactView'
'404':
description: lead or pipeline couldn't be found
'406':
description: operation is invalid (e.g., contact isn't editable or transition itself violates
certain rules)
/api/v2/leads/{lead_id}/{pipeline_id}/move:
parameters:
- in: path
name: lead_id
required: true
schema:
type: string
- in: path
name: pipeline_id
required: true
schema:
type: string
post:
description: Move lead to a stage within the pipeline. You can use this operation to enter pipeline
for the first time.
operationId: move-lead
summary: Move lead to a pipeline stage
tags:
- Leads
- Contacts Pipelines
requestBody:
content:
application/json:
schema:
type: object
properties:
stage_id:
type: string
description: the id of a target stage
required: true
responses:
'200':
description: updated lead (contact)
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ContactView'
'404':
description: lead or pipeline couldn't be found
'406':
description: operation is invalid (e.g., contact isn't editable or transition itself violates
certain rules)
/api/v2/leads/{lead_id}/{pipeline_id}/undo:
parameters:
- in: path
name: lead_id
required: true
schema:
type: string
- in: path
name: pipeline_id
required: true
schema:
type: string
post:
description: Undo a recent lead transition to won or lost stage
operationId: undo-lead-transition
summary: Undo lead won/lost transition
tags:
- Leads
- Contacts Pipelines
responses:
'200':
description: updated lead (contact)
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ContactView'
'404':
description: lead or pipeline couldn't be found
'406':
description: operation is invalid (e.g., contact isn't editable or transition itself violates
certain rules)
/api/v2/leads/{lead_id}/{pipeline_id}:
parameters:
- in: path
name: lead_id
required: true
schema:
type: string
- in: path
name: pipeline_id
required: true
schema:
type: string
delete:
description: Clear all leads transitions in the current pipeline "run"
operationId: delete-lead-transitions
summary: Clear leads transitions
tags:
- Leads
- Contacts Pipelines
responses:
'200':
description: updated lead (contact)
content:
application/json:
schema:
$ref: '#/components/schemas/Contacts.ContactView'
'404':
description: lead or pipeline couldn't be found
'406':
description: operation is invalid (e.g., contact isn't editable or transition itself violates
certain rules)
security:
- ApiKey: []
components:
schemas:
Messages.MessagingAccountIdentifier:
properties:
account_type:
enum:
- email
- mass_mail
type: string
identifier:
description: 'Account identifier specific to account_type. For account_type: email it should
be email address. '
type: string
required:
- account_type
- identifier
type: object
Attachments.AttachmentData:
discriminator:
propertyName: type
properties:
attachment_bytes:
type: integer
attachment_type:
type: string
icon:
type: string
link:
description: URL that can be used to download an attachment
type: string
mime_type:
type: string
name:
type: string
type:
type: string
updated:
type: string
updated_by:
type: string
required:
- attachment_type
- name
- link
- attachment_bytes
- icon
- type
- mime_type
- updated
- updated_by
type: object
Contacts.ContactPrivacy:
description: "Defines scopes of object visibility and editability.
\nEdit permission means that\
\ group or user also is able to read an object.
\n***No duplication***, if `id` in edit Principal\
\ it must not be in view Principal.
\nIf property is `None` - everyone have an action right\
\ (Permitted to everyone).
\nIf Principal is set, but has empty properies - only owner is allowed\
\ to act.
\nIf not specified - default privacy from company settings will be applied "
properties:
edit:
description: None means permitted to everyone. Prinipals object define permission explicitly
nullable: true
type: object
oneOf:
- $ref: '#/components/schemas/Contacts.Principals'
read:
description: None means permitted to everyone. Prinipals object define permission explicitly
nullable: true
type: object
oneOf:
- $ref: '#/components/schemas/Contacts.Principals'
required:
- read
- edit
type: object
Contacts.ContactView:
description: user perspective on a specific contact
properties:
avatar_url:
type: string
children:
items:
type: string
type: array
employers_info:
description: DEPRECATED, use values in `contexts`
items:
properties:
company_name:
type: string
contact_id:
type: string
required:
- company_name
- contact_id
type: object
type: array
company_last_contacted:
description: DEPRECATED, use values in `contexts`
properties:
in:
$ref: '#/components/schemas/Contacts.LastContacted'
out:
$ref: '#/components/schemas/Contacts.LastContacted'
required:
- in
- out
type: object
lc:
description: DEPRECATED, use values in `contexts`
$ref: '#/components/schemas/Contacts.UserLastContactedView'
created:
type: string
creator:
type: string
fields:
additionalProperties:
items:
properties:
field_id:
type: string
modifier:
type: string
value:
type: string
required:
- field_id
- value
- modifier
type: object
type: array
type: object
id:
type: string
is_important:
type: object
last_contacted:
description: DEPRECATED, use values in `contexts`
nullable: true
$ref: '#/components/schemas/Contacts.LastContacted'
object_type:
enum:
- contact
type: string
last_contacted_user:
description: email of user that contacted for the last time (DEPRECATED, use values in `contexts`)
type: string
owner_id:
type: string
privacy:
$ref: '#/components/schemas/Contacts.ContactPrivacy'
record_type:
$ref: '#/components/schemas/Contacts.ContactType'
reminder:
nullable: true
$ref: '#/components/schemas/Contacts.Reminder'
tags:
items:
type: string
type: array
updated:
type: string
updater:
type: string
stages_info:
description: DEPRECATED. use `contexts`
type: array
items:
$ref: '#/components/schemas/Contacts.LeadInStageInfo'
notice:
$ref: '#/components/schemas/Contacts.ContactNotice'
contexts:
description: additional requested contexts (usually passed in the `contexts` request parameter)
type: array
items:
$ref: '#/components/schemas/Contacts.ContactViewContext'
required:
- id
- record_type
- object_type
- fields
- owner_id
- privacy
- children
- updated
- created
- updater
- creator
- avatar_url
- tags
- last_contacted
- company_last_contacted
- is_important
- reminder
- notice
type: object
Contacts.UploadedContactFile:
type: object
properties:
file_id:
type: string
contact_id:
type: string
file_name:
type: string
file_size:
type: number
mime_type:
type: string
uploader:
$ref: '#/components/schemas/Accounts.ShortUserInfo'
uploaded_at:
type: string
pipeline_ids:
type: array
items:
type: string
Contacts.EmployersDataContext:
type: object
properties:
context_key:
type: object
context:
type: array
items:
$ref: '#/components/schemas/Contacts.EmployerInfo'
Settings.MessagingAccountIdentifier:
properties:
account_type:
type: string
identifier:
type: string
required:
- account_type
- identifier
type: object
Sequences.SequenceProgressionOutcomes:
enum:
- successful
- unsuccessful
- error
- removed
Contacts.ExitLeadUnsuccessfullyRequest:
properties:
actual_exit_date:
description: |
if specified, this value will be set as the actual exit data, otherwise the time of the request will be used
type: string
nullable: true
notes:
description: optional notes (comments) to add to this transition to a lost stage
type: string
nullable: true
lost_reason:
description: optional lost reason to add to this "exit"
type: string
nullable: true
type: object
Messages.MessageTemplateContentMode:
type: string
enum:
- standard
- builder
- custom_html
Contacts.ContactFilesContext:
type: object
properties:
context_key:
type: object
context:
type: array
items:
$ref: '#/components/schemas/Contacts.ContactFile'
Messages.EmailList:
type: object
properties:
list_id:
type: string
format: objectid
description: Unique identifier for the email list
name:
type: string
description: The name of the email list
description:
type: string
nullable: true
description: Description of the email list
opt_in_settings:
type: object
properties:
enabled:
type: boolean
description: whether to enable mandatory opt-in (i.e. confirmation of recipient via email)
confirmation_message_request:
$ref: '#/components/schemas/Messages.EmailListConfirmationMessageRequest'
owner_id:
type: string
format: objectid
description: User id of owner
is_private:
type: boolean
description: whether this mailing list is shared across company or not
archived_at:
type: string
format: date-time
description: Timestamp when the list was archived
is_archived:
type: boolean
description: whether this mailing list is archived already
total_entries:
type: integer
description: Total number of recipients in this mailing list
Contacts.LeadsDataContext:
type: object
properties:
context_key:
type: object
context:
type: array
items:
$ref: '#/components/schemas/Contacts.LeadInStageInfo'
Contacts.LastContactedDataContext:
type: object
properties:
context_key:
type: object
context:
$ref: '#/components/schemas/Contacts.UserLastContactedView'
Contacts.LastContacted:
properties:
deletion_tstamp:
type: object
object_id:
type: object
tstamp:
type: object
type:
type: object
user_id:
type: object
direction:
enum:
- inbound
- outbound
required:
- tstamp
- type
- object_id
- user_id
- deletion_tstamp
type: object
Contacts.Reminder:
properties:
active:
type: boolean
contact_id:
type: string
days_till_triggered:
type: integer
period:
type: integer
triggered:
type: boolean
required:
- contact_id
- period
- days_till_triggered
- active
- triggered
type: object
Contacts.ContactType:
enum:
- person
- company
type: string
Attachments.DropboxAttachmentData:
allOf:
- $ref: '#/components/schemas/Attachments.AttachmentData'
- description: Dropbox
Contacts.LastContactedDirectedContainer:
properties:
in:
$ref: '#/components/schemas/Contacts.LastContacted'
out:
$ref: '#/components/schemas/Contacts.LastContacted'
last:
$ref: '#/components/schemas/Contacts.LastContacted'
Contacts.ContactNotice:
properties:
created:
description: Date and time when the notice was created encoded in ISO 8601
type: string
updated:
description: Date and time when the notice was updated encoded in ISO 8601
type: string
creator:
$ref: '#/components/schemas/Accounts.ShortUserInfo'
updated_by:
$ref: '#/components/schemas/Accounts.ShortUserInfo'
text:
type: string
color:
type: string
required:
- created
- updated
- creator
- updated_by
- text
- color
type: object
Attachments.OneDriveAttachmentData:
allOf:
- $ref: '#/components/schemas/Attachments.AttachmentData'
- description: OneDrive
Contacts.ContactViewContext:
oneOf:
- $ref: '#/components/schemas/Contacts.ContactFilesContext'
- $ref: '#/components/schemas/Contacts.EmployersDataContext'
- $ref: '#/components/schemas/Contacts.LastContactedDataContext'
- $ref: '#/components/schemas/Contacts.LeadsDataContext'
- $ref: '#/components/schemas/Contacts.InSequenceContactInfoContext'
- $ref: '#/components/schemas/Contacts.EmailListsContext'
discriminator:
propertyName: context_key
mapping:
last_contacted_data: '#/components/schemas/Contacts.LastContactedDataContext'
employers_data: '#/components/schemas/Contacts.EmployersDataContext'
leads_data: '#/components/schemas/Contacts.LeadsDataContext'
contact_files: '#/components/schemas/Contacts.ContactFilesContext'
sequences_data: '#/components/schemas/Contacts.InSequenceContactInfoContext'
email_lists: '#/components/schemas/Contacts.EmailListsContext'
Contacts.ContactFile:
type: object
properties:
source:
type: string
enum:
- device
- google_drive
- one_drive
- dropbox
metadata:
oneOf:
- $ref: '#/components/schemas/Contacts.UploadedContactFile'
- $ref: '#/components/schemas/Attachments.DropboxAttachmentData'
- $ref: '#/components/schemas/Attachments.GoogleDriveAttachmentData'
- $ref: '#/components/schemas/Attachments.OneDriveAttachmentData'
Sequences.CompletedSequenceStepRecord:
type: object
properties:
step_id:
type: string
description: ID (name) of the completed sequence step
step_type:
description: the type of the completed sequence step
enum:
- delay
- send_message
- condition
when:
type: string
description: iso8601 timestamp of when the step was completed
step_name:
type: string
description: the name of a step this contact completed
Sequences.InSequenceContactExitDetails:
type: object
properties:
when:
type: string
exit_method:
type: string
description: |
"how" the contact exited the sequence (e.g. by an exit rule or certain message condition)
outcome:
$ref: '#/components/schemas/Sequences.SequenceProgressionOutcomes'
Messages.MessageTemplateContentSpecification:
properties:
attachments:
items:
$ref: '#/components/schemas/Messages.Attachment'
type: array
bcc:
items:
$ref: '#/components/schemas/Messages.MessagingAccount'
type: array
body:
description: |
Can include template variable references in for of *|VARIABLE|*. Recognized template variables are 'FName',
'LName', 'Title', 'CompanyName' and 'Unsubscribe'.
Template variables are surrounded with *| |* symbols. Unknown template variable references are not allowed
and will result in error.
type: string
cc:
items:
$ref: '#/components/schemas/Messages.MessagingAccount'
type: array
subject:
type: string
builder_data:
type: object
description: client Email builder data
nullable: true
content_mode:
$ref: '#/components/schemas/Messages.MessageTemplateContentMode'
unsubscribe_category_ids:
type: array
items:
type: string
description: ids of unsubscribe categories to which this message belongs. If null -- will unsubscribe
from all categories
nullable: true
required:
- subject
- body
type: object
Contacts.Principals:
description: |
Explicitly defines users and groups that have an action permission. If any set - no one can.
properties:
group_ids:
description: ids of permitted groups. if empty - no group has permission
items:
type: string
type: array
user_ids:
description: ids of permitted users. If empty - no user has permission
items:
type: string
type: array
required:
- user_ids
- group_ids
type: object
Contacts.LeadInStageInfo:
description: info about stage where lead is
properties:
pipeline_id:
type: string
format: ObjectId
pipeline_name:
type: string
stage_name:
type: string
entered_data:
type: string
format: datetime
is_final:
type: boolean
days_limit:
type: integer
nullable: true
Accounts.ShortUserInfo:
properties:
avatar_url:
type: string
email:
type: string
is_active:
type: boolean
name:
type: string
user_id:
type: string
required:
- user_id
- name
- email
- avatar_url
- is_active
type: object
Sequences.InSequenceContactInfo:
type: object
properties:
sequence_id:
description: id of a sequence this contact is in
type: string
seq_contact_id:
description: a unique identifier of a the contact in the sequence
type: string
sequence_name:
description: the name of a sequence this contact belongs to
type: string
sequence_color:
description: the color of a sequence this contact belongs to
type: string
completed_steps:
type: array
items:
$ref: '#/components/schemas/Sequences.CompletedSequenceStepRecord'
current_step:
type: string
description: current sequence's step name
current_step_id:
type: string
description: current sequence's step id
last_completed_action:
type: string
description: last completed sequence action name
last_completed_action_dao:
type: string
description: last completed sequence action date
has_waited_in_current_step:
type: number
description: for how many seconds the contact has waited in it's current step
email:
description: an email address the contact was entered the sequence with
type: string
exit_details:
description: exit details if contact completed the sequence
nullable: true
type: object
oneOf:
- $ref: '#/components/schemas/Sequences.InSequenceContactExitDetails'
owner:
description: user who entered this contact to a sequence
oneOf:
- $ref: '#/components/schemas/Accounts.ShortUserInfo'
next_step_scheduled_at:
description: |
the timestamp of the next scheduled sequence step (can be use to approximate the next send_message step)
type: string
Messages.MessagingAccount:
allOf:
- $ref: '#/components/schemas/Messages.MessagingAccountIdentifier'
properties:
avatar_url:
nullable: true
type: string
comment:
description: |
Field comment holds some short freeform text that shows a role of this messaging account to user.
Examples are 'home', 'work', 'assistant', etc.
type: string
company:
description: Name of account's company, might be null.
type: object
company_id:
description: ID of account's company in Nimble db, might be null.
nullable: true
type: object
contact_id:
description: Nimble contact id associated with this account
nullable: true
type: string
format: ObjectId
user_id:
description: Nimble user id (user themself or team member) associated with this account
nullable: true
type: string
format: ObjectId
name:
description: Field name is for readable name of a user. Sometimes identifier value is not suitable
to be shown to user, for example when it's numerical user id (as for Facebook). Can be null
if full name is unknown.
oneOf:
- type: number
- type: string
type: object
Contacts.EmailListsContext:
type: object
properties:
context_key:
type: object
context:
type: array
items:
$ref: '#/components/schemas/Messages.EmailList'
Contacts.InSequenceContactInfoContext:
type: object
properties:
context_key:
type: object
context:
type: array
items:
$ref: '#/components/schemas/Sequences.InSequenceContactInfo'
Messages.EmailListConfirmationMessageRequest:
properties:
message:
$ref: '#/components/schemas/Messages.MessageTemplateContentSpecification'
sender_account:
$ref: '#/components/schemas/Settings.MessagingAccountIdentifier'
sender_credential_id:
type: string
format: objectid
description: Unique identifier of sender's credential to send emails on behalf of
required:
- sender_account
- message
- sender_credential_id
type: object
Contacts.EmployerInfo:
description: employer's info
type: object
properties:
contact_id:
type: string
company_name:
type: string
avatar_url:
type: string
Messages.Attachment:
properties:
content_type:
description: MIME type of attachment
type: string
data_id:
description: Field data_id must be first retrieved using any sort of Uploads API.
type: string
file_size:
description: Field file_size is given in bytes.
type: integer
name:
type: string
url:
description: URL that can be used by a user to download attachment's content
type: string
required:
- data_id
- file_size
- content_type
- name
- url
type: object
Contacts.UserLastContactedView:
properties:
company_lc:
$ref: '#/components/schemas/Contacts.LastContactedDirectedContainer'
user_lc:
$ref: '#/components/schemas/Contacts.LastContactedDirectedContainer'
last_user:
$ref: '#/components/schemas/Accounts.ShortUserInfo'
Attachments.GoogleDriveAttachmentData:
allOf:
- $ref: '#/components/schemas/Attachments.AttachmentData'
- description: GoogleDrive
Contacts.ExitLeadSuccessfullyRequest:
properties:
actual_exit_date:
description: |
if specified, this value will be set as the actual exit data, otherwise the time of the request will be used
type: string
nullable: true
notes:
description: optional notes (comments) to add to this transition to a won stage
type: string
nullable: true
type: object
securitySchemes:
ApiKey:
type: apiKey
in: header
name: X-Nimble-Token