NAV
cURL C# JavaScript Python

Introduction

Welcome to the CINC API! This API provides access to a CINC site through a REST API. Allowing developers to integrate applications with your CINC site. If the application is not a partner, have them signup. More documentation can be found on the CINC API Swagger page.

You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right. For more information on usage, see Examples.

Developer Sign Up

Authentication

Authentication Flow

Applications can use the authorization code grant type of the OAuth2 specification to obtain an access token by redirecting a user to the authorization endpoint of the CINC site. A user can then authorize your application with the allowed scopes. Obtained access tokens will give the application access to specific actions based on the scopes selected.

You obtain a user's consent to make API calls on their behalf by redirecting their user-agent (browser, webview, etc) to the authorization endpoint with the parameters listed below.

Example request: Obtain user's consent

curl -X GET -G "https://authv2.cincapi.com/integrator/authorize" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=myclientid" \
  -d "response_type=code" \
  --data-urlencode "redirect_uri=https://myapp.com/callback" \
  --data-urlencode "scope=api:read" \
  -d "state=12345"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://authv2.cincapi.com/integrator/authorize?client_id=myclientid&response_type=code&redirect_uri=https://myapp.com/callback&scope=api:read&state=12345"))
    {
        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://authv2.cincapi.com/integrator/authorize?client_id=myclientid&response_type=code&state=12345', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: 'redirect_uri=https://myapp.com/callback&scope=api:read'
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
}

params = {
    'client_id': 'myclientid',
    'response_type': 'code',
    'state': '12345',
}

data = 'redirect_uri=https://myapp.com/callback&scope=api:read'

response = requests.get('https://authv2.cincapi.com/integrator/authorize', params=params, headers=headers, data=data)

Example response

{
  "request": {
    "responseURL": "https://myapp.com/callback?code=abcdefghijkl&scope=api:read&state=12345",
    // ... 
  },
  // ...
}

Parameters

Name Type Description
client_id String Required Unique client identifier obtained through the application registration process.
response_type String Set to code to request that an authorization code be sent back to the application return URL.
redirect_uri String Application callback URL where the authorization code is sent. This must match the URL registered for your application.
scope String Space-delimited string of the scopes you would like.
state String An opaque value used to maintain state between the authorize request and the callback.

2. Process the authorize callback

Once the user authorizes your application, CINC redirects (HTTP 302) the user-agent to the return URL with the authorization code appended in the code query parameter.

3. Obtain an access token

The authorization code received above can then be exchanged for an access token.

Example request: Obtain an access token

curl -X POST "https://authv2.cincapi.com/integrator/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=myclientid" \
  -d "client_secret=myclientsecret" \
  -d "grant_type=authorization_code" \
  -d "code=abcdefghijkl" \
  --data-urlencode "redirect_uri=https://myapp.com/callback" \
  --data-urlencode "scope=api:read"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://authv2.cincapi.com/integrator/token"))
    {
        var contentList = new List<string>();
        contentList.Add("client_id=myclientid");
        contentList.Add("client_secret=myclientsecret");
        contentList.Add("grant_type=authorization_code");
        contentList.Add("code=abcdefghijkl");
        contentList.Add($"redirect_uri={Uri.EscapeDataString("https://myapp.com/callback")}");
        contentList.Add($"scope={Uri.EscapeDataString("api:read")}");
        request.Content = new StringContent(string.Join("&", contentList));
        request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://authv2.cincapi.com/integrator/token', {
    method: 'POST',
    body: new URLSearchParams({
        'client_id': 'myclientid',
        'client_secret': 'myclientsecret',
        'grant_type': 'authorization_code',
        'code': 'abcdefghijkl'
    })
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

data = {
    'client_id': 'myclientid',
    'client_secret': 'myclientsecret',
    'grant_type': 'authorization_code',
    'code': 'abcdefghijkl',
}

response = requests.post('https://authv2.cincapi.com/integrator/token', data=data)

Example response

{
  "access_token": "8jhsJD03mds92HDs9sl3Ld",
  "token_type": "bearer",
  "expires_in": 3600,
  "refresh_token": "s982jXDpk20kasd0DK293ks",
  "scope": "api:read"
}

Headers

Name Value
content-type application/x-www-form-urlencoded

Parameters

Name Type Description
grant_type String Required Value should be authorization_code.
code String The authorization code that was sent to your application's return URL.
redirect_uri String Application callback URL where the authorization code is sent. This must match the URL registered for your application.
scope String Space-delimited string of the scopes you would like.

All Scopes

api:create

Allows create access at the site level on behalf of the user. The creation of a new object (i.e. lead) is limited to just agents with broker level status.

api:delete

Allows for deleting or removing at the site level on behalf of the user. The current version only supports providing access for agents with broker level status.

api:event

Allows for registering and receiving events at the site level on behalf of the user. Events can be read with the api:read scope and will be properly restricted by permissions. However, receiving asynchronous events is for agents with broker level status only.

api:read

Allows read access to the information at the site level on behalf of the user. The data is restricted per the permissions of the user that provided access. The current version only supports providing access for agents with broker level status.

api:update

Allows for updating information at the site level on behalf of the user. The current version only supports providing access for agents with broker level status.

Agents

Example object: Agents

"agent" : {
    "id":"AGENT0",
    "logged_in_date":"2022-05-06T17:01:49.322Z",
    "registered_date":"2022-05-06T17:01:49.322Z",
    "username":"buum@cu.com",
    "info": {
        "status": "active",
        "contact": {
            "first_name":"Rebecca",
            "last_name":"Lejeune",
            "phone_numbers": {
                "cell_phone":"6109586760",
                "office_phone":"5555555555",
                "home_phone":"5555555555"
            },
            "email":"buum@cu.com"
        },
        "updated_date":"2022-06-06T17:01:49.866Z",
        "url": "test.com/dashboard/spa#settings/profile/profile/AGENT0"
    },
    "roles":["broker", "team_lead"]
}

The agent information is structured in the following manner:

Field Type Description
id String The unique identifier for the agent.
logged_in_date Date The timestamp of when the agent last logged in ISO 8601.
registered_date Date The timestamp of when the agent was registered ISO 8601.
username String The CINC username for the agent.
info Object Contains the base level information of the agent.
roles Array[String] Contains a list of roles representing individual permissions of the agent.

Agent Roles

The following are the currently mapped roles that an agent can have:

Role Description
agent The CINC client on the site has agent level permissions.
broker The CINC client on the site has broker level permissions.
listing_agent The CINC client on the site has listing agent level permissions.
partner The CINC client on the site has partner level permissions.
owner The CINC client on the site has owner level permissions.
team_lead The CINC client on the site has team lead level permissions.

Agent Info Structure

Example object: Agent Info Structure

"info": {
    "status": "active",
    "contact": {
        "first_name":"Rebecca",
        "last_name":"Lejeune",
        "phone_numbers":{
            "cell_phone":"6109586760",
            "office_phone":"5555555555",
            "home_phone":"5555555555"
        },
        "email":"buum@cu.com",
        "mailing_address":{
            "street":"444 Office St",
            "city":"Marietta",
            "state":"GA",
            "postal_or_zip":"30067"
        }
    },
    "updated_date":"2023-06-08T15:22:09.250Z",
    "url": "test.com/dashboard/spa#settings/profile/profile/AGENT0"
}

The agent information is structured in the following manner:

Field Type Description
status String The current status of the agent.
contact Object The general contact information of the agent.
updated_date Date The timestamp of when the agent info was updated ISO 8601.

Agent Contact Info Structure

Example object: Agent Contact Info Structure

"contact": {
    "first_name": "Janis",
    "last_name": "A. Doe",
    "phone_numbers": {
        "cell_phone": "9127562309",
        "home_phone": "5555555555",
        "office_phone": "1111111111"
    },
    "email": "jane.doe@email.com"
}

The contact information is structured in the following manner:

Field Type Description
first_name String The first name of the agent.
last_name String The last name of the agent (This may include middle name).
phone_numbers Object The registered phone numbers of the agent.
phone_numbers.cell_phone String The registered primary phone number of the agent.
phone_numbers.home_phone String The registered home phone number of the agent.
phone_numbers.office_phone String The registered office phone number of the agent.
email String The registered email of the agent.

Agent Status

The status of the agent indicates to which capacity the user is within the CINC platform. If the status cannot be determined, it will not be present. The values are currently restricted through the CINC API to the following:

Leads

Example object: Leads

"lead" : {
    "id": "LEAD0",
    "logged_in_date": "2022-04-14T09:21:43.289Z",
    "username": "jane.doe@email.com",
    "registered_date": "2022-04-14T09:21:43.289Z",
    "info": {
        "is_partial": false,
        "is_buyer": true,
        "buyer": {
            "median_price": 0.00,
            "average_price": 250000.00,
            "favorite_city": "Dallas",
            "timeline": "4 to 6 weeks"
        },
        "is_seller": true,
        "seller": {
            "timeline":"4 to 6 weeks"
        },
        "source": "Facebook",
        "status": "unworked",
        "contact" : {
            "first_name": "Janis",
            "last_name": "A. Doe",
            "phone_numbers": {
                "cell_phone": "9127562309"
            },
            "email": "jane.doe@email.com",
            "is_validated_email":true,
            "mailing_address": {
                "street": "9390 Ford Ave",
                "city": "Richmond Hill",
                "state": "Georgia",
                "postal_or_zip": "31324"
            }
        },
        "updated_date": "2023-04-14T09:21:43.333Z",
        "url": "test.com/dashboard/spa#leads/details/LEADID0"
    },
    "assigned_agents": {
        "primary_agent": { 
            "id": "AGENT3" 
        },
        "listing_agent": { 
            "id": "AGENT5" 
        },
        "partner": { 
            "id": "AGENT7" 
        }
    }
}

The lead information is structured in the following manner:

Field Type Description
id String The unique identifier for the lead.
logged_in_date Date The timestamp of when the lead last logged in (ISO 8601).
username String The username of the lead.
registered_date Date The timestamp of when the lead was registered (ISO 8601).
assigned_agents Object Contains the assigned agent information of the lead.
info Object Contains the base level information of the lead.
listings Object Contains listing information about a lead, but not seller properties.
pipeline Object Contains the pipeline data of the lead.
labels Array Contains the list of applied lead labels on the lead.

Lead Assigned Agents Structure

Example object: Assigned Agents Structure

"assigned_agents" : {
    "primary_agent" : { 
        "id" : "AGENT3" 
    },
    "listing_agent" : { 
        "id" : "AGENT5" 
    },
    "partner"        : { 
        "id" : "AGENT7" 
    }
}

The assigned agent information is structured in the following manner:

Field Type Description
primary_agent.id String ID of the assigned agent.
listing_agent.id String ID of the assigned listing agent.
partner.id String ID of the assigned partner.

Lead Info Structure

Example object: Lead Info Structure

"info" : {
    "is_partial": false,
    "is_buyer": true,
    "buyer": {
        "median_price": 0.00,
        "average_price": 250000.00,
        "favorite_city": "Dallas",
        "timeline": "4 to 6 weeks"
    },
    "is_seller": true,
    "seller": {
        "timeline": "4 to 6 weeks"
    },
    "source": "Facebook",
    "status": "unworked",
    "contact": {
        "first_name": "Janis",
        "last_name": "A. Doe",
        "phone_numbers": {
            "cell_phone": "9127562309"
        },
        "email": "jane.doe@email.com",
        "valid_email": "verified",
        "mailing_address": {
            "street": "9390 Ford Ave",
            "city": "Richmond Hill",
            "state": "Georgia",
            "postal_or_zip" : "31324"
        }
    },
    "updated_date" : "2023-06-15T12:04:11.268Z",
    "url": "test.com/dashboard/spa#leads/details/LEADID0"
}

The user info information is structured in the following manner:

Field Type Description
buyer Object Contains the buyer information of the lead if they are a buyer.
contact Object The general contact information of the lead.
is_partial Boolean Check if the lead is a partial lead.
is_buyer Boolean Check if the lead is a buyer.
is_seller Boolean Check if the lead is a seller.
seller Object Contains the seller information of the lead if they are a seller.
secondary Object Contains the secondary contact information of the lead.
source String The source from which the lead came into the CINC platform.
status String The current status of the lead.
updated_date Date The timestamp of when the lead info was updated ISO 8601.
url String The URL to the lead's details CRM page.

Lead Buyer Info Structure

Example object: Buyer Info Structure

"buyer":{
    "median_price":0.00,
    "average_price":250000.00,
    "favorite_city":"Dallas",
    "timeline":"4 to 6 weeks"
}

The buyer information is structured in the following manner:

Field Type Description
median_price Number Median price of housing that the lead is looking for.
average_price Number Average price of housing that the lead is looking for.
favorite_city String Lead's favorite city.
timeline String The timeline when the lead wants to buy.

Lead Contact Info Structure

Example object: Lead Contact Info Structure

"contact": {
    "first_name": "Janis",
    "last_name": "A. Doe",
    "phone_numbers": {
        "cell_phone": "9127562309"
    },
    "email": "jane.doe@email.com",
    "is_validated_email":true,
    "mailing_address": {
        "street": "9390 Ford Ave",
        "city": "Richmond Hill",
        "state": "Georgia",
        "postal_or_zip" : "31324"
    }
}

The contact information is structured in the following manner:

Field Type Description
first_name String The first name of the lead.
last_name String The last name of the lead (This may include middle name).
phone_numbers Object The registered phone numbers provided by the lead.
phone_numbers.cell_phone String The registered primary phone number provided by the lead.
phone_numbers.home_phone String The registered home phone number provided by the lead.
phone_numbers.work_phone String The registered work phone number provided by the lead.
email String The registered email provided by the lead.
is_validated_email Boolean The validation status of the email provided by the lead.
mailing_address Object The address in order to send mail to the lead.
mailing_address.street String The street for the mailing address of the lead.
mailing_address.city String The city for the mailing address of the lead.
mailing_address.state String The state for the mailing address of the lead.
mailing_address.postal_or_zip String The postal/zip code for the mailing address of the lead.

Lead Secondary Info Structure

Example object: Secondary Info Structure

"secondary":{
    "relation": "wife",
    "contact": {
        "first_name": "Mary",
        "last_name": "Smith",
        "email": "mary.l.smith@email.com"
    }
}

The seller information is structured in the following manner:

Field Type Description
relation String The relation to the lead of the secondary contact.
contact Object The secondary contact information of the lead.

Lead Seller Info Structure

Example object: Seller Info Structure

"seller":{
    "timeline": "4 to 6 weeks",
    "properties": [
        {
            "id": "PROPERTY1",
            "address": {
                "street": "191 Pioneer Trail",
                "city": "Marietta",
                "state": "GA",
                "postal_or_zip": "30068"
            },
            "asking_price": 320999,
            "total_beds": 2,
            "total_baths": 4
        }
    ]
}

The seller information is structured in the following manner:

Field Type Description
timeline String The timeline when the lead wants to sell.
properties Array A list of seller properties that a lead has added.

Lead Seller Property Structure

Example object: Seller Property Structure

{
    "id": "PROPERTY1",
    "address": {
        "street": "9390 Ford Ave",
        "city": "Richmond Hill",
        "state": "GA",
        "postal_or_zip": "31324"
    },
    "asking_price": 320999,
    "total_beds": 2,
    "total_baths": 3
}
Field Type Description
id String The seller property identifier.
asking_price Number The current asking price (if known) provided by the lead for the property.
total_beds Number The number of bedrooms provided by the lead for the property.
total_baths Number The number of bathrooms provided by the lead for the property.
address Object The address pertaining to the property.
address.street String The street for the property of the lead.
address.city String The city for the property of the lead.
address.state String The state for the property of the lead.
address.postal_or_zip String The postal/zip code for the property of the lead.

Lead Status

The status of the lead indicates where in the system that the individual is being worked. If the status cannot be determined, it will not be present. The values are currently restricted through the CINC API to the following:

Lead Listings

Example object: Lead Listing

{
    "listings": {
        "favorited": [
            {
                "mls_number": "11223",
                "price": 59900.00,
                "favorited_date": "2023-09-20T14:17:20.940Z",
                "id": "P05",
                "address": {
                    "street": "139 Arlington Park Drive",
                    "city": "Hot Springs",
                    "state": "AR",
                    "postal_or_zip": "71901",
                    "county": "Garland",
                    "unit": "Unit B"
                },
                "total_beds": 2,
                "total_baths": 5
            },
            {
                "mls_number": "11224",
                "price": 59900.00,
                "favorited_date": "2023-09-21T14:17:20.940Z",
                "id": "P04",
                "address": {
                    "street": "209 Arlington Park Drive",
                    "city": "Hot Springs",
                    "state": "AR",
                    "postal_or_zip": "71901",
                    "county": "Garland"
                },
                "total_beds": 1,
                "total_baths": 4
            }
        ],
        "recommended": [
                {
                    "mls_number": "11125",
                    "price": 59900.00,
                    "recommended_by": "AGENT0",
                    "recommended_date": "2023-09-20T14:17:20.950Z",
                    "id": "P05",
                    "address": {
                        "street": "123 Arlington Park Drive",
                        "city": "Hot Springs",
                        "state": "AR",
                        "postal_or_zip": "71901",
                        "county": "Garland",
                        "unit": "ste K"
                    },
                    "total_beds": 2,
                    "total_baths": 5
                },
                {
                    "mls_number": "11126",
                    "price": 59900.00,
                    "recommended_by": "AGENT1",
                    "recommended_date": "2023-09-20T14:17:20.943Z",
                    "id": "P04",
                    "address": {
                        "street": "789 Arlington Park Drive",
                        "city": "Hot Springs",
                        "state": "AR",
                        "postal_or_zip": "71901",
                        "county": "Garland"
                    },
                    "total_beds": 1,
                    "total_baths": 4
                }
        ]
    }
}

The listing information is structured in the following manner:

Field Type Description
favorited Array[Object] An ordered list from newest to oldest of favorite listings that the lead has selected (only contains the five most recently favorited).
recommended Array[Object] An ordered list from newest to oldest of listings that the lead has been recommended (only contains the five most recently recommended).

Favorited Listings

Favorited listings are structured in the following manner:

Field Type Description
id String The unique identifier for the listing.
price Number The listing price of the listing.
mls_number String The identifier of the listing in the MLS.
favorited_date Date The timestamp of when the listing was favorited by the lead.
total_beds Number The total number of bedrooms in the listing.
total_baths Number The total number of bathrooms in the listing.
address Object The address of the listing.
address.street String The street of the listing.
address.city String The city of the listing.
address.state String The state of the listing.
address.postal_or_zip String The postal/zip code of the listing.
address.county String The county of the listing.
address.unit String The unit of the listing.

Recommended listings are structured in the following manner:

Field Type Description
id String The unique identifier for the listing.
price Number The listing price of the listing.
mls_number String The identifier of the listing in the MLS.
recommended_date Date The timestamp of when the listing was recommended to the lead.
recommended_by String The user that recommended the liting to the lead.
total_beds Number The total number of bedrooms in the listing.
total_baths Number The total number of bathrooms in the listing.
address Object The address of the listing.
address.street String The street of the listing.
address.city String The city of the listing.
address.state String The state of the listing.
address.postal_or_zip String The postal/zip code of the listing.
address.county String The county of the listing.
address.unit String The unit of the listing.

Lead Labels

Example object: Lead Labels

{
    "label": {
        "id":"LDID0",
        "created_date":"2023-06-01T10:02:12.297Z",
        "updated_date": "2023-06-11T12:04:11.297Z",
        "name":"Chimichanga",
        "color":"#0B5C7A",
        "created_by":"AGENT_MDID0",
        "applied_date": "2023-04-14 19:44:14.347Z"
    }
}

Lead labels are structured in the following manner:

Field Type Description
id String The unique identifier for the lead label.
name String The custom display name for the lead label.
color String The color for the lead label as (hex color code).
created_date Date The timestamp of when the lead label was created (ISO 8601).
updated_date Date The timestamp of when the lead label was updated (ISO 8601).
applied_date Date The timestamp of when the lead label was applied (ISO 8601). This is a read only field available through the lead HTTP GET endpoints.
created_by String The unique identifier of the agent who created the lead label.

Valid Lead Label Hex Colors

List of label's color supported by CINC API:

#96281B #96281B #C0392B #C0392B #CF000F #CF000F #F22613 #F22613 #D84642 #D84642
#D84642 #D84642 #E74C3C #E74C3C #E08283 #E08283 #F1A9A0 #F1A9A0 #D2527E #D2527E
#D2527E #D2527E #DB0A5B #DB0A5B #F62459 #F62459 #DCC6E0 #DCC6E0 #AEA8D3 #AEA8D3
#AEA8D3 #AEA8D3 #BE90D4 #BE90D4 #BF55EC #BF55EC #9A12B3 #9A12B3 #663399 #663399
#663399 #663399 #674172 #674172 #3A539B #3A539B #446CB3 #446CB3 #1E8BC3 #1E8BC3
#1E8BC3 #1E8BC3 #19B5FE #19B5FE #34495E #34495E #336E7B #336E7B #1BA39C #1BA39C
#1BA39C #1BA39C #4ECDC4 #4ECDC4 #3FC380 #3FC380 #019875 #019875 #1E824C #1E824C
#1E824C #1E824C #F4D03F #F4D03F #F4B350 #F4B350 #EB974E #EB974E #F2784B #F2784B
#F2784B #F2784B #F9690E #F9690E #E67E22 #E67E22 #F89406 #F89406 #6C7A89 #6C7A89
#6C7A89 #6C7A89 #95A5A6 #95A5A6 #BDC3C7 #BDC3C7 #D2D8D4 #D2D8D4 #000000 #000000

Lead Notes

Example object: Lead Notes

"note": {
    "id": "LN0001",
    "content": "Nipugima rohubo uhebece revme acodeucu pecpuehi viok ugivepsuw ime ucho ja gefa kafhega tiwe. Zitatuwo dawvumka onzesda zuwek fuw ji hegmor med ohi lu tachobev lehlu fohiki no raduvu ta mulgot gofowo. Vutehnow re corhezte hepba zokozhih tot pujvuc badraiko rif pid vunujku onsiv otu subuka pa.",
    "category": "call",
    "created_by": "agentid",
    "created_date": "2023-04-14 19:44:14.285Z",
    "updated_date": "2023-04-14 21:53:25.748Z",
    "is_pinned": true,
    "notified_agents": ["AGENT_MDID6", "AGENT_MDID45", "AGENT_MDID11"]
}

The lead note information is structured in the following manner:

Field Type Description
id String The unique identifier for the note.
content String The string content of the note. This field will NOT be available in the HTTP GET get all notes endpoint (#get-site-leads-lead_id-notes). Limit of 5,000 characters before trimming occurs.
category String The CINC category for the different notes.
creator_by String The unique identifier of the agent that created the note.
created_date Date The timestamp of when the note was created (ISO 8601).
updated_date Date The timestamp of when the note was last updated (ISO 8601).
is_pinned Bool A flag indicating if the note stays static to the top of the notes.
notified_agents Array[String] An optional field of an array of unique identifiers of agents that you want to be notified within the CINC platform that this note was created. This field will NOT be available in any HTTP GET endpoints.

Lead Note Category

The following are valid lead note categories:

Category Description
call The note contains info from an agent that has been on a phone/video call with a lead.
general A general note that can be about anything. We will default to this category if there is no category provided.
email An agent has emailed the lead.
info The note contains information on a lead. For example, seller properties or listings a buyer is interested in.
inquiry A lead has filled out an inquiry form and this note is the content of the form filled out.
landing_page A lead has visited a landing page and this note usually has the lead name and the url of the landing page.
other A note that can be about anything. This is usually used by integrators for actions that do not correlate to the categories.
searching A lead has clicked the promo banner on a CINC lender site. This note usually contains the promo banner link and the amount of clicks the lead did on banners.

Lead Pipeline Structure

Example object: Pipeline Structure

"pipeline":{
    "stage": "New Lead",
    "history": [
        {
            "stage": "New Lead",
            "staged_date": "2022-04-14T09:21:43Z"
        }, //...
    ]
}

The pipeline information is structured in the following manner:

Field Type Description
stage String The name of the lead pipeline stage that the lead is currently in as shown in CINC.
history Array[Object] An ordered list from newest to oldest of staged events tracking the name of the stage shown in CINC along with the date (ISO 8601) that the event occurred.

Lead Pipeline History

Example object: Pipeline Structure

"history": [
    {
        "stage": "Attempted Contact",
        "staged_date": "2022-04-15T13:13:36Z"
    },
    {
        "stage": "New Lead",
        "staged_date": "2022-04-14T09:21:43Z"
    }, //...
]

The pipeline history events are structured in the following manner:

Field Type Description
stage String The name of the lead pipeline stage as shown in CINC.
staged_date Date The timestamp of when the lead was placed in this stage (ISO 8601).

Webhooks

Welcome to our webhook registration page! Here, you can easily register your webhook URL to receive real-time updates and notifications. Here is the list of all webhook endpoints supported by our service.

By registering your webhook, you can receive updates from leads and agents as soon as they happen, without needing to constantly check for changes.

To get started, simply complete the request body with events you want to subscribe, optional customer headers you want to include in your webhook, and the URL of your webhook endpoint. You can specify which events should trigger the webhook from this event list, then use this endpoint to complete your registration. Your webhook will be active and ready to receive incoming data from our service once this step is completed successfully.

We understand that integrating webhooks can be complex, so we have provided helpful documentation and resources to guide you through the process. Our goal is to make the registration process as simple and user-friendly as possible, so that you can start receiving webhook updates and streamlining your workflows right away.

Webhook Event Meta Structure

Example object: Webhook Event Meta Structure

"meta": {
    "webhook": {
        "user_id": "MM123456",
        "client_id": "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
    },
    "site_id": "D1234567",
    "event_id": "e1f2g3h4-i5j6-k7l8-m9n0-o1p2q3r4s5t6",
    "published_date": "2023-12-12T04:03:34.529Z"
}
Field Type Description
meta Object Contains all the meta information on an event.
meta.webhook Object Contains the meta information pertaining to the registered webhook.
meta.webhook.user_id String The CINC agent identifier that the webhook was registered for.
meta.webhook.client_id String The client credentials identifier used to register the webhook.
meta.site_id String The CINC site identifier that the event occurred on.
meta.event_id String The identifier of the event that was published within the CINC site.
meta.published_date Date The time when the event was published within the CINC site (ISO 8601).

Webhook Event Filters

The CINC API provides a way to filter events to reduce the traffic being called to the webhook. Events can be filtered explicitly by type or by using an expression.

Event Type Filters

The CINC API allows you to explicitly filter events by type by providing a list of event types to filter on. Or, if all events of any type are desired, you can use the "*" operator. These types to support a single wildcard allowed within an event type (i.e. "lead.*.update" which will match any event prefixed with lead. and ends with .updated). Anything that matches the filter will be let through and behaves as a white-list.

Event Expression Filters

The CINC API allows you to filter events using an expression. An expression is detected by starting with { and ending with } and is provided in the same list of event types. Anything between the braces is considered an expression and will be evaluated as such. The contents of an event can be accessed through the event variable. For ISO-8601 formatted dates, the parse_date function can be used to convert it into the number of seconds since the epoch. This is useful when comparing dates or tracking amount of time between dates.

Standard Webhook Headers

These are the standard headers included in every webhook request.

Example object: Standard Webhook Headers

{
    "x-cinc-event-id": "e1f2g3h4-i5j6-k7l8-m9n0-o1p2q3r4s5t6",
    "x-cinc-event-type": "lead.created",
    "x-cinc-site-id": "D1234567",
    "x-cinc-user-id": "MM123456"
}
Field Type Description
x-cinc-event-id String The identifier of the event that was published within the CINC site.
x-cinc-event-type String The type of event that was sent.
x-cinc-site-id String The identifier for the CINC site that the event occurred on.
x-cinc-user-id String The identifier for the CINC agent that the webhook was registered for.

Webhook Events

The following are the events that are supported:

Agent Events

agent.created

Triggered when a new agent has been created on the CINC site.

Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "agent.created" representing the type of the event.
agent Object All information pertaining to the agent that was created that can be passed as an event.
agent.id String The identifier of the agent that was created.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE001"
  },
  "type": "agent.created",
  "agent": { "id": "AGENT01" }
}

agent.info.updated

Triggered when any data in the agent.info structured has been updated on the CINC site.

Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "agent.info.updated" representing the type of the event.
agent Object All information pertaining to the agent that was updated that can be passed as an event.
agent.id String The identifier of the agent that was updated.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE002"
  },
  "type": "agent.info.updated",
  "lead": { "id": "AGENT01" }
}

agent.logged_in

Triggered when an agent has logged in on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-08-29 03:00:02Z",
    "site_id": "SITE003"
  },
  "type": "agent.logged_in",
  "agent": {
        "id": "AGENT01",
        "logged_in_date": "2023-08-29 02:59:44Z"
    },
    "last_logged_in_date": "2023-07-29 02:59:44Z"
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "agent.logged_in" representing the type of the event.
agent Object All information pertaining to the agent that had logged in that can be passed as an event.
agent.id String The identifier of the agent that logged in.
agent.logged_in_date Date The time when the agent logged in.
last_logged_in_date Date The time when the agent had previously logged in.

Lead Events

lead.created

Triggered when a new lead has been created on the CINC site.

Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.created" representing the type of the event.
lead Object All information pertaining to the lead that was created that can be passed as an event.
lead.id String The identifier of the lead that was created.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE001"
  },
  "type": "lead.created",
  "lead": { "id": "LEAD01" }
}

lead.inquired

Trigger when a lead has inquired on a property on the CINC site.

Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.inquired" representing the type of the event.
listing Object All information pertaining to the listing that was inquired on that can be passed as an event.
listing.id String The unique identifier for the listing.
listing.price Number The price of the listing that was inquired on.
listing.mls_number String The MLS number of the listing that was inquired on.
listing.address Object The address of the listing that was inquired on.
listing.address.street String The street address of the listing that was inquired on.
listing.address.city String The city of the listing that was inquired on.
listing.address.state String The state of the listing that was inquired on.
listing.address.postal_or_zip String The zip code of the listing that was inquired on.
listing.address.unit String The unit of the listing that was inquired on.
lead Object All information pertaining to the lead that inquired on the listing that can be passed as an event.
lead.id String The identifier of the lead that inquired on the listing.
inquiry Object All information pertaining to the inquiry that was made on the listing that can be passed as an event.
inquiry.showing_date Date The date that the user chose to request a showing of the listing (for "showing" inquiry types).
inquiry.type String The type of inquiry that was made on the listing. The current types are "showing" and "listing".

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE002"
  },
  "type": "lead.inquired",
  "listing": {
    "id": "P002",
    "price": 4200000.00,
    "mls_number":"8287212",
    "address": {
      "street": "123 Main St",
      "city": "San Diego",
      "state": "CA",
      "postal_or_zip": "92101",
      "unit": "Apt 1"
    }
  },
  "lead": { "id": "LEAD01" },
  "inquiry": {
    "type": "listing"
  }
},
{
  "meta": {
    "event_id": "EVENT02",
    "published_date": "2023-04-15 22:39:16Z",
    "site_id": "SITE003"
  },
  "type": "lead.inquired",
  "listing": {
    "price": 4200000.00,
    "mls_number":"8287212",
    "address": {
      "street": "123 Main St",
      "city": "San Diego",
      "state": "CA",
      "postal_or_zip": "92101",
      "unit": "Apt 1"
    }
  },
  "lead": { "id": "LEAD01" },
  "inquiry": {
    "type": "showing",
    "showing_date" : "2023-04-17 00:00:00Z"
  }
}

lead.info.updated

Triggered when any data in the lead.info structured has been updated on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE001"
  },
  "type": "lead.info.updated",
  "lead": { "id": "LEAD01" }
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.info.updated" representing the type of the event.
lead Object All information pertaining to the lead that was updated that can be passed as an event.
lead.id String The identifier of the lead that was updated.

lead.info.status.updated

Triggered when the status in the lead.info structured has been updated on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE002"
  },
  "type": "lead.info.status.updated",
  "lead": { "id": "LEAD01" }
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.info.status.updated" representing the type of the event.
lead Object All information pertaining to the lead that was updated that can be passed as an event.
lead.id String The identifier of the lead that was updated.

lead.assigned_agents.primary_agent.updated

Triggered when any data in the lead.assigned_agents.primary_agent structured has been updated on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE003"
  },
  "type": "lead.assigned_agents.primary_agent.updated",
  "lead": { "id": "LEAD01" },
  "agent": { "id": "AGENT01"}
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.assigned_agents.primary_agent.updated" representing the type of the event.
lead Object All information pertaining to the lead that was updated that can be passed as an event.
lead.id String The identifier of the lead that was updated.
agent Object All information pertaining to the agent that was assigned to the lead that can be passed as an event.
agent.id String The identifier of the agent that was assigned.

lead.assigned_agents.listing_agent.updated

Triggered when any data in the lead.assigned_agents.listing_agent structured has been updated on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE001"
  },
  "type": "lead.assigned_agents.listing_agent.updated",
  "lead": { "id": "LEAD01" },
  "agent": { "id": "AGENT01"}
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.assigned_agents.listing_agent.updated" representing the type of the event.
lead Object All information pertaining to the lead that was updated that can be passed as an event.
lead.id String The identifier of the lead that was updated.
agent Object All information pertaining to the agent that was assigned to the lead that can be passed as an event.
agent.id String The identifier of the agent that was assigned.

lead.assigned_agents.partner.updated

Triggered when any data in the lead.assigned_agents.partner structured has been updated on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE002"
  },
  "type": "lead.assigned_agents.partner.updated",
  "lead": { "id": "LEAD01" },
  "agent": { "id": "AGENT01"}
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.assigned_agents.partner.updated" representing the type of the event.
lead Object All information pertaining to the lead that was updated that can be passed as an event.
lead.id String The identifier of the lead that was updated.
agent Object All information pertaining to the agent that was assigned to the lead that can be passed as an event.
agent.id String The identifier of the agent that was assigned.

lead.label.applied

Triggered when a lead label has been applied to a lead on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE002"
  },
  "type": "lead.label.applied",
  "lead": { "id": "LEAD01" },
  "label": { 
    "id": "LABEL01",
    "name": "Hot Lead"
  }
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.label.applied" representing the type of the event.
lead Object All information pertaining to the lead where the label was applied to that can be passed as an event.
lead.id String The identifier of the lead that the label was applied to.
label Object All information pertaining to the applied label that can be passed as an event.
label.id String The identifier of the label that was applied to the lead.
label.name String The name of the label that was applied to the lead.

lead.label.removed

Triggered when a lead label has been removed to a lead on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE002"
  },
  "type": "lead.label.removed",
  "lead": { "id": "LEAD01" },
  "label": { "id": "LABEL01" }
}

lead.listing.viewed

Trigger when a lead has viewed on a property on the CINC site.

Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.listing.viewed" representing the type of the event.
listing Object All information pertaining to the listing that was viewed on that can be passed as an event.
listing.id String The unique identifier for the listing.
listing.price Number The price of the listing that the lead viewed.
listing.mls_number String The MLS number of the listing that the lead viewed.
listing.address Object The address of the listing tthat the lead viewed.
listing.address.street String The street address of the listing that the lead viewed.
listing.address.city String The city of the listing that the lead viewed.
listing.address.state String The state of the listing tthat the lead viewed.
listing.address.postal_or_zip String The zip code of the listing that the lead viewed.
listing.address.unit String The unit of the listing that the lead viewed.
lead Object All information pertaining to the lead that viewed the listing that can be passed as an event.
lead.id String The identifier of the lead that viewed the listing.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE001"
  },
  "type": "lead.listing.viewed",
  "listing": {
    "id": "P001",
    "price": 4200000.00,
    "mls_number":"8287212",
    "address": {
      "street": "123 Main St",
      "city": "San Diego",
      "state": "CA",
      "postal_or_zip": "92101",
      "unit": "Apt 1"
    }
  },
  "lead": { "id": "LEAD01" }
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.label.removed" representing the type of the event.
lead Object All information pertaining to the lead where the label was removed from that can be passed as an event.
lead.id String The identifier of the lead that the label was removed from.
label Object All information pertaining to the removed label that can be passed as an event.
label.id String The identifier of the label that was removed from the lead.

lead.logged_in

Triggered when a lead has logged in on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-08-29 03:00:02Z",
    "site_id": "SITE001"
  },
  "type": "lead.logged_in",
  "lead": {
        "id": "LEAD01",
        "logged_in_date": "2023-08-29 02:59:44Z"
    },
    "last_logged_in_date": "2023-07-29 02:59:44Z"
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.logged_in" representing the type of the event.
lead Object All information pertaining to the lead that had logged in that can be passed as an event.
lead.id String The identifier of the lead that logged in.
lead.logged_in_date Date The time when the lead logged in.
last_logged_in_date Date The time when the lead had previously logged in.

lead.note.created

Triggered when a note has been created on a lead on the CINC site.

Example Structure

{
  "meta": {
    "event_id": "EVENT01",
    "published_date": "2023-04-15 21:39:16Z",
    "site_id": "SITE001"
  },
  "type": "lead.note.created",
  "lead": { "id": "LEAD01" },
  "note": {
    "id": "NOTE01",
    "category": "General",
    "created_by": "AGENT_MDID0"
  }
}
Field Type Description
meta Object Contains all the meta information on an event.
type String Set to "lead.note.created" representing the type of the event.
lead Object All information pertaining to the lead where the note was created on that can be passed as an event.
lead.id String The identifier of the lead that the note was created on.
note Object All information pertaining to the created note that can be passed as an event.
note.id String The identifier of the note that was created on the lead.
note.category String The category of the note that was created on the lead.
note.created_by String The id of the agent that created the note.

API Endpoints

The CINC API follows a simple HTTP API. Developers can integrate to this interface following the authorization requirements.

Agent Endpoints

GET site/me

version 2.0

This endpoint gets the current agent information that is making the request. It is purely provided for testing and verifying that the current access token contains a valid user. For more information, read the section on rate limits. The required scope to access this endpoint is api:read.

Example request: GET site/me

curl -X GET -G "https://public.cincapi.com/v2/site/me" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/me"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/me', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/me', headers=headers)

Example response

"body": {
    "id": "AGENT0",
    "username": "buum@cu.com",
    "roles": ["client", "broker"]
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1677130510
}

Response Object

Name Type Description
id String The identifier representing the agent.
username String The username of the agent that authorized the access token.
roles Array[String] Contains a list of roles representing individual permissions of the agent pertaining to the access token.

GET site/agents

version 2.0

This endpoint allows for getting all existing agents based on their offset. For more information, read the sections on pagination and rate limits. The required scope to access this endpoint is api:read.

Example request: GET site/agents

curl -X GET -G "https://public.cincapi.com/v2/site/agents" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
  -d "offset=0" \
  -d "limit=2"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/agents?offset=0&limit=2"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/agents?offset=0&limit=2', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

params = {
    'offset': '0',
    'limit': '2',
}

response = requests.get('https://public.cincapi.com/v2/site/agents', params=params, headers=headers)

Example response

"body": {
    "paging":{
        "offset":0,
        "next":"8",
        "limit":2,
        "count":2
    },

    "agents": [
        {
            "id": "AGENT1",
            "logged_in_date": "2023-05-11T22:27:25.558Z",
            "registered_date": "2022-12-18T20:27:25.558Z",
            "username": "jane.doe@email.com",
            "info": {
                "status": "active",
                "contact": {
                    "first_name": "Janis",
                    "last_name": "A. Doe",
                    "phone_numbers": {
                        "cell_phone":"4044041234"
                    },
                    "email": "jane.doe@email.com"
                },
                "updated_date": "2022-12-18T20:27:25.558Z"
            },
            "roles":["broker", "owner"]
        },
        {
            "id": "AGENT0",
            "logged_in_date": "2023-05-11T22:27:25.987Z",
            "registered_date": "2022-01-11T09:32:05.987Z",
            "username": "pume@efpu.bj",
            "info": {
                "status": "active",
                "contact": {
                    "first_name": "Eddie",
                    "last_name": "Mellor",
                    "phone_numbers": {
                        "cell_phone":"4628874518"
                    },
                    "email":"pume@efpu.bj"
                },
                "updated_date": "2023-01-11T09:32:05.987Z",
                "url": "https://test.com/dashboard/spa#settings/profile/profile/AGENT0"
            },
            "roles":["agent"]
        }
    ]
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

Query Parameters

Name Type Description
offset Number Optional The number of agents to skip before starting to return new agents result from the query. Without specifying, the default is 0.
limit Number Optional The max number of agents that should be returned. The default is 10 and the max is 500.

GET site/agents/{agent_id}

version 2.0

This endpoint gets the current specified agent's data. For more information, read the section on rate limits. The required scope to access this endpoint is api:read.

Example request: GET site/agents/{agent_id}

curl -X GET -G "https://public.cincapi.com/v2/site/agents/AGENT0" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/agents/AGENT0"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/agents/AGENT0', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/agents/AGENT0', headers=headers)

Example response

"body": {
  "agent": {
    "id": "AGENT1",
    "logged_in_date": "2023-05-11T22:27:25.258Z",
    "registered_date": "2022-12-18T20:27:25.258Z",
    "username": "jane.doe@email.com",
    "info": {
      "status": "active",
      "contact": {
        "first_name": "Janis",
        "last_name": "A. Doe",
        "phone_numbers": {
          "cell_phone":"4044041234"
        },
        "email":"jane.doe@email.com"
      },
      "updated_date":"2023-05-11T22:27:25.258Z"
    },
    "roles":["agent", "team_lead"]
  }
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

Path Parameters

Name Type Description
agent_id String Required Unique agent identifier.

Lead Endpoints

GET site/leads

version 2.0

This endpoint allows for getting all existing leads based on their offset. For more information, read the sections on pagination and rate limits. The required scope to access this endpoint is api:read.

Example request: GET site/leads

curl -X GET -G "https://public.cincapi.com/v2/site/leads" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
  -d "offset=0" \
  -d "limit=2"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/leads?offset=0&limit=2"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/leads?offset=0&limit=2', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

params = {
    'offset': '0',
    'limit': '2',
}

response = requests.get('https://public.cincapi.com/v2/site/leads', params=params, headers=headers)

Example response

"body": {
    "paging":{
        "offset":0,
        "next":"9",
        "limit":2,
        "count":2
   },

  "leads": [
      {
        "id":"LEAD_ID0",
        "logged_in_date": "2023-07-15T01:02:18.173Z",
        "username": "anaheard@capi.test",
        "registered_date":"2023-01-18T20:27:25.589Z",
        "info": {
            "is_partial": false,
            "is_buyer": false,
            "is_seller": true,
            "seller": {
                "timeline": "4 to 6 weeks"
            },
            "source"  : "Facebook",
            "status"  : "unworked",
            "contact": {
                "first_name":"Ana",
                "last_name":"Heard",
                "phone_numbers": {
                    "cell_phone":"4706996288"
                },
                "email":"anaheard@capi.test",
                "is_validated_email":true,
            },
            "updated_date":"2023-05-31T18:42:21.640Z",
            "url": "test.com/dashboard/spa#leads/details/LEADID0"
        },
        "pipeline":{
            "stage":"New Lead",
            "history":[
                {
                    "stage":"New Lead",
                    "staged_date":"2023-01-18T20:27:25.244Z"
                }
            ]
        },
        "assigned_agents": {
            "primary_agent": { 
                "id": "AGENT1" 
            },
            "listing_agent": { 
                "id": "AGENT4" 
            },
            "partner": { 
                "id": "AGENT9" 
            }
        }
      },
      {
        "id":"LEAD0",
        "logged_in_date": "2023-07-15T01:02:18.173Z",
        "username": "mo@rijegmo.fk",
        "registered_date":"2022-11-06T21:41:00.345Z",
        "info":{
            "is_partial": false,
            "is_buyer": true,
            "buyer": {
                "median_price"  : 0.00,
                "average_price" : 250000.00,
                "favorite_city" : "Dallas",
                "timeline"      : "4 to 6 weeks"
            },
            "is_seller": false,
            "source"  : "Facebook",
            "status"  : "unworked",
            "contact": {
                "first_name":"Devin",
                "last_name":"Norton",
                "phone_numbers": {
                    "cell_phone":"3703089435"
                },
                "email":"mo@rijegmo.fk",
                "is_validated_email":true,
            },
            "updated_date":"2021-07-22T09:23:10.547Z"
        },
        "assigned_agents": {
            "primary_agent": { 
                "id": "AGENT3" 
            },
            "listing_agent": { 
                "id": "AGENT5" 
            },
            "partner": { 
                "id": "AGENT7" 
            }
        }
      }
   ]
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

Query Parameters

Name Type Description
offset Number Optional The number of leads to skip before starting to return new leads result from the query. Without specifying, the default is 0.
limit Number Optional The max number of leads that should be returned. The default is 10 and the max is 500.

GET site/leads/{lead_id}

version 2.0

This endpoint gets the current specified lead's data. For more information, read the section on rate limits. The required scope to access this endpoint is api:read.

Example request: GET site/leads/{lead_id}

curl -X GET -G "https://public.cincapi.com/v2/site/leads/LEAD0" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/leads/LEAD0"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/leads/LEAD0', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/leads/LEAD0', headers=headers)

Example response

"body": {
    "lead": {
        "id": "LEAD_MDID0",
        "logged_in_date": "2023-07-15T01:02:18.173Z",
        "username": "89yguibnjokl@iuy87.com",
        "registered_date": "2023-03-22T13:24:07.543Z",
        "info": {
            "is_partial": false,
            "is_buyer": false,
            "is_seller": true,
            "seller": {
                "properties": [
                    {
                        "asking_price": 0.00,
                        "id": "SP04",
                        "address": {
                            "street": "15151 San Fernando Mission Boulevard",
                            "city": "Los Angeles",
                            "state": "CA",
                            "postal_or_zip": "91345"
                        },
                        "total_beds": 0,
                        "total_baths": 0
                    },
                    {
                        "asking_price": 0.00,
                        "id": "SP03",
                        "address": {
                            "street": "15151 San Fernando Mission Boulevard",
                            "city": "Los Angeles",
                            "state": "CA",
                            "postal_or_zip": "91345"
                        },
                        "total_beds": 0,
                        "total_baths": 0
                    }
                ]
            },
            "source": "www.test.com",
            "status": "unworked",
            "contact": {
                "first_name": "Devin",
                "last_name": "Norton",
                "phone_numbers": {
                    "cell_phone": "12312312333"
                },
                "email": "89yguibnjokl@iuy87.com",
                "is_validated_email":true,
            },
            "updated_date": "2023-07-15T01:02:18.173Z",
            "url": "https://test.com/dashboard/spa#leads/details/LEAD_MDID0"
        },
        "pipeline": {
            "stage": "Attempted Contact",
            "history": [
                {
                    "stage": "Attempted Contact",
                    "staged_date": "2023-07-15T01:02:18.300Z"
                },
                {
                    "stage": "New Lead",
                    "staged_date": "2023-07-15T01:02:18.300Z"
                }
            ]
        },
        "listings": {
            "favorited": [
                {
                    "mls_number": "11123",
                    "price": 59900.0000,
                    "favorited_date": "2023-09-20T14:17:20.940Z",
                    "id": "P05",
                    "address": {
                        "street": "139 Arlington Park Drive",
                        "city": "Hot Springs",
                        "state": "AR",
                        "postal_or_zip": "71901",
                        "county": "Garland"
                    },
                    "total_beds": 2,
                    "total_baths": 5
                },
                {
                    "mls_number": "11124",
                    "price": 59900.0000,
                    "favorited_date": "2023-09-22T14:17:20.940Z",
                    "id": "P04",
                    "address": {
                        "street": "209 Arlington Park Drive",
                        "city": "Hot Springs",
                        "state": "AR",
                        "postal_or_zip": "71901",
                        "county": "Garland"
                    },
                    "total_beds": 1,
                    "total_baths": 4
                }
            ],
            "recommended": [
                {
                    "mls_number": "11125",
                    "price": 59900.00,
                    "recommended_by": "AGENT0",
                    "recommended_date": "2023-09-20T14:17:20.950Z",
                    "id": "P05",
                    "address": {
                        "street": "123 Arlington Park Drive",
                        "city": "Hot Springs",
                        "state": "AR",
                        "postal_or_zip": "71901",
                        "county": "Garland"
                    },
                    "total_beds": 2,
                    "total_baths": 5
                },
                {
                    "mls_number": "11126",
                    "price": 59900.00,
                    "recommended_by": "AGENT1",
                    "recommended_date": "2023-09-20T14:17:20.943Z",
                    "id": "P04",
                    "address": {
                        "street": "789 Arlington Park Drive",
                        "city": "Hot Springs",
                        "state": "AR",
                        "postal_or_zip": "71901",
                        "county": "Garland"
                    },
                    "total_beds": 1,
                    "total_baths": 4
                }
            ]
        },
        "labels": [
            {
                "id": "LDID0",
                "name": "Chimichanga",
                "color": "#0B5C7A",
                "created_by": "AGENT_MDID0",
                "applied_date": "2023-07-15T01:02:18.320Z"
            },
            {
                "id": "LDID1",
                "name": "Guacamole",
                "color": "#0B5C7A",
                "created_by": "AGENT_MDID0",
                "applied_date": "2023-07-15T01:02:18.323Z"
            }
        ],
        "assigned_agents": {
            "primary_agent": {
                "id": "AGENT_MDID0"
            },
            "agent": {
                "id": "AGENT_MDID1"
            }
        }
    }
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

Path Parameters

Name Type Description
lead_id String Required Unique lead identifier.

POST site/leads

version 2.0

This endpoint can be used as an upsert function to create or update a lead. If the id is not provided, the function will attempt to create a new lead. In this case, either username and email must be provided as a unique identifier for the lead. If the id is provided, the function will attempt to update the existing lead with that id. In this case, the username field will be considered for an email change. If the username does not match an existing email in the system, the lead's email will be updated to the new username. If the username matches an existing email, the function will throw an error. Please note that the upsert function assumes that the id is a unique identifier for a lead, and that the username and email are unique among all leads. If these assumptions are not met, the function may not behave as expected. The call is currently a synchronous creation. For more information, read the section on rate limits. The required scope to access this endpoint is api:create.

Example request: POST site/leads

curl -X POST -G "https://public.cincapi.com/v2/site/leads" \
  -H "Content-Type: application/json" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
  -d '{
    "registered_date": "2022-04-14T09:21:43.371Z",
    "created_by": "AGENT11",
    "info": {
        "contact": {
            "first_name": "Janis",
            "last_name": "A. Doe",
            "phone_numbers": {
                "cell_phone": "9127562309"
            },
            "email": "jane.doe@email.com",
            "mailing_address": {
                "street": "9390 Ford Ave",
                "city": "Richmond Hill",
                "state": "Georgia",
                "postal_or_zip": "31324"
            }
        },
        "is_buyer": true,
        "buyer": {
            "median_price": 0,
            "average_price": 250000,
            "favorite_city": "Dallas",
            "timeline": "4 to 6 weeks"
        },
        "is_seller": false,
        "seller": {
            "timeline": "4 to 6 weeks"
        }
    }
    "assigned_agents": {
        "primary_agent": {
            "id": "AGENT3"
        },
        "listing_agent": {
            "id": "AGENT5"
        },
        "partner": {
            "id": "AGENT7"
        }
    },
    "notes": [
        {
            "content": "Note Content 1",
            "category": "call",
            "created_by": "AGENT_MDID0",
            "is_pinned": true,
            "notified_agents": ["AGENT_MDID2", "AGENT_MDID3"]
        },
        {
            "content": "Note Content 2",
            "category": "email",
            "created_by": "AGENT_MDID0",
            "is_pinned": true,
            "notified_agents": ["AGENT_MDID2"]
        }
    ]
}'
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://public.cincapi.com/v2/site/leads"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 
        request.Content = new StringContent(@"{
                ""registered_date"" : ""2022-04-14T09:21:43.371Z"",
                ""created_by"": ""AGENT11"",
                ""info"" : {
                    ""contact"" : {
                        ""first_name""  : ""Janis"",
                        ""last_name""   : ""A. Doe"",
                        ""phone_numbers"" : {
                            ""cell_phone""   : ""9127562309""
                        },
                        ""email""       : ""jane.doe@email.com"",
                        ""mailing_address"" : {
                            ""street""      : ""9390 Ford Ave"",
                            ""city""        : ""Richmond Hill"",
                            ""state""       : ""Georgia"",
                            ""postal_or_zip"" : ""31324""
                        }
                    },
                    ""is_buyer""  : true,
                    ""buyer""     : {
                        ""median_price""  : 0,
                        ""average_price"" : 250000,
                        ""favorite_city"" : ""Dallas"",
                        ""timeline""      : ""4 to 6 weeks""
                    },
                    ""is_seller""  : false,
                    ""seller""    : {
                        ""timeline"":""4 to 6 weeks""
                    }
                },
                ""assigned_agents"" : {
                    ""primary_agent"" : { 
                        ""id"" : ""AGENT3"" 
                    },
                    ""listing_agent"" : { 
                        ""id"" : ""AGENT5"" 
                    },
                    ""partner""       : { 
                        ""id"" : ""AGENT7"" 
                    }
                },
                ""notes"": [
                    {
                        ""content"": ""Note Content 1"",
                        ""category"": ""call"",
                        ""created_by"": ""AGENT_MDID0"",
                        ""is_pinned"": true,
                        ""notified_agents"": [""AGENT_MDID2"", ""AGENT_MDID3""]
                    },
                    {
                        ""content"": ""Note Content 2"",
                        ""category"": ""email"",
                        ""created_by"": ""AGENT_MDID0"",
                        ""is_pinned"": true,
                        ""notified_agents"": [""AGENT_MDID2""]
                    }
                ]
            }
        ",
        Encoding.UTF8,
        "application/json")
    }
}
const data = {
    registered_date: '2022-04-14T09:21:43.371Z',
    created_by: "AGENT11",
    info: {
        is_buyer: true,
        buyer: {
            median_price: 0,
            average_price: 250000,
            favorite_city: "Dallas",
            timeline: "4 to 6 weeks"
        },
        is_seller: true,
        seller: {
            timeline: "4 to 6 weeks"
        },
        contact: {
            first_name: "Janis",
            last_name: "A. Doe",
            phone_numbers: {
                cell_phone: "9127562309"
            },
            email: "jane.doe@email.com",
            mailing_address: {
                street: "9390 Ford Ave",
                city: "Richmond Hill",
                state: "Georgia",
                postal_or_zip: "31324"
            }
        }
    },
    assigned_agents: {
        primary_agent: {
            id: "AGENT3"
        },
        listing_agent: {
            id: "AGENT5"
        },
        partner: {
            id: "AGENT7"
        }
    },
    notes: [
        {
            content: "Note Content 1",
            category: "call",
            created_by: "AGENT_MDID0",
            is_pinned: true,
            notified_agents: ["AGENT_MDID2", "AGENT_MDID3"]
        },
        {
            content: "Note Content 2",
            category: "email",
            created_by: "AGENT_MDID0",
            is_pinned: true,
            notified_agents: ["AGENT_MDID2"]
        }
    ]
}
fetch('https://public.cincapi.com/v2/site/leads', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    },
    body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests
data = {
    "registered_date": "2022-04-14T09:21:43.371Z",
    "created_by": "AGENT11",
    "is_buyer": True,
    "buyer": {
        "median_price": 0,
        "average_price": 250000,
        "favorite_city": "Dallas",
        "timeline": "4 to 6 weeks"
    },
    "is_seller": True,
    "seller": {
        "timeline": "4 to 6 weeks"
    },
    "info": {
        "contact": {
            "first_name": "Janis",
            "last_name": "A. Doe",
            "phone_numbers": {
                "cell_phone": "9127562309"
            },
            "email": "jane.doe@email.com",
            "mailing_address": {
                "street": "9390 Ford Ave",
                "city": "Richmond Hill",
                "state": "Georgia",
                "postal_or_zip": "31324"
            }
        }
    },
    "assigned_agents": {
        "primary_agent": {
            "id": "AGENT3"
        },
        "listing_agent": {
            "id": "AGENT5"
        },
        "partner": {
            "id": "AGENT7"
        }
    },
    "notes": [
        {
            "content": "Note Content 1",
            "category": "call",
            "created_by": "AGENT_MDID0",
            "is_pinned": True,
            "notified_agents": ["AGENT_MDID2", "AGENT_MDID3"]
        },
        {
            "content": "Note Content 2",
            "category": "email",
            "created_by": "AGENT_MDID0",
            "is_pinned": True,
            "notified_agents": ["AGENT_MDID2"]
        }
    ]
}

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.post('https://public.cincapi.com/v2/site/leads', headers=headers, json=data)

Example response

"body": {
    {
        "id": "LEAD0"
    }
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1677130510
}

Request Body

The request body is a lead object structured as a JSON object. The field id will be ignored and not respected when generating a lead. The only required field when creating a new lead is lead.info.contact.email. This value is used to register the lead uniquely on that site.

Response Body

The response will contain the lead object with the newly constructed identifier. This identifier can immediately be used to get the lead. The response code will be an HTTP 201 (Created) if the lead was created and an HTTP 200 (Success) if the lead already exists.

Create Lead Request Body

Field Type Description Default
registered_date Date The timestamp of when the lead was registered (ISO 8601). current date
created_by String The user that created the lead. the user from the access token
assigned_agents Object Contains the assigned agent information of the lead.
assigned_agents.primary_agent.id String Sets the ID of the assigned agent. N/A
assigned_agents.listing_agent.id String Sets the ID of the assigned listing agent. N/A
assigned_agents.partner.id String Sets the ID of the assigned partner. N/A
info Object Contains the base level information of the lead.
info.buyer Object Contains the buyer information of the lead if they are a buyer.
info.buyer.median_price Number Sets the median price of housing that the lead is looking for. N/A
info.buyer.average_price Number Sets the average price of housing that the lead is looking for. N/A
info.buyer.favorite_city String Sets the lead's favorite city. N/A
info.buyer.timeline String Sets the timeline when the lead wants to buy. N/A
info.contact Object The general contact information of the lead.
info.contact.first_name String Sets the first name of the lead. N/A
info.contact.last_name String Sets the last name of the lead (This may include middle name). N/A
info.contact.phone_numbers Object The registered phone numbers provided by the lead.
info.contact.phone_numbers.cell_phone String Sets the registered primary phone number provided by the lead. N/A
info.contact.phone_numbers.home_phone String Sets the registered home phone number provided by the lead. N/A
info.contact.phone_numbers.work_phone String Sets the registered work phone number provided by the lead. N/A
info.contact.email String Sets the registered email provided by the lead and is the only required field. N/A
info.contact.mailing_address Object The address in order to send mail to the lead. N/A
info.contact.mailing_address.street String Sets the street for the mailing address of the lead. N/A
info.contact.mailing_address.city String Sets the city for the mailing address of the lead. N/A
info.contact.mailing_address.state String Sets the state for the mailing address of the lead. N/A
info.contact.mailing_address.postal_or_zip String Sets the postal/zip code for the mailing address of the lead. N/A
info.is_buyer Boolean Sets whether or not a lead is a buyer. false
info.is_seller Boolean Sets whether or not a lead is a seller. false
info.seller Object Contains the seller information of the lead if they are a seller.
info.seller.timeline String Sets the timeline when the lead wants to sell. N/A
info.secondary Object Contains the secondary contact information of the lead.
info.secondary.relation String Sets the secondary relation to the lead. N/A
info.secondary.contact Object The secondary contact information of the lead.
info.secondary.contact.first_name String Sets the first name of the secondary contact. N/A
info.secondary.contact.last_name String Sets the last name of the secondary contact (This may include middle name). N/A
info.secondary.contact.phone_numbers Object The registered phone numbers provided by the lead for the secondary contact.
info.secondary.contact.phone_numbers.cell_phone String Sets the registered primary phone number for the secondary contact. N/A
info.secondary.contact.email String Sets the email for the secondary contact. N/A
info.secondary.contact.mailing_address Object The address in order to send mail to the lead. N/A
info.secondary.contact.mailing_address.street String Sets the street for the mailing address of the secondary contact. N/A
info.secondary.contact.mailing_address.city String Sets the city for the mailing address of the secondary contact. N/A
info.secondary.contact.mailing_address.state String Sets the state for the mailing address of the secondary contact. N/A
info.secondary.contact.mailing_address.postal_or_zip String Sets the postal/zip code for the mailing address of the secondary contact. N/A
info.source String The source to set the lead as to where it is from. the client name from the token
info.status String The status to change the lead to if it is not already. N/A
pipeline Object Contains the pipeline data of the lead.
pipeline.stage String The name of the lead pipeline stage to move the lead into if it is not already in. "New Lead"

Update Lead Request Body

Field Type Description
id String The lead to be updated and is required if email is not provided.
registered_date Date The timestamp of when the lead was registered (ISO 8601).
assigned_agents Object Contains the assigned agent information of the lead.
assigned_agents.primary_agent.id String Sets the ID of the assigned agent.
assigned_agents.listing_agent.id String Sets the ID of the assigned listing agent.
assigned_agents.partner.id String Sets the ID of the assigned partner.
info Object Contains the base level information of the lead.
info.buyer Object Contains the buyer information of the lead if they are a buyer.
info.buyer.median_price Number Sets the median price of housing that the lead is looking for.
info.buyer.average_price Number Sets the average price of housing that the lead is looking for.
info.buyer.favorite_city String Sets the lead's favorite city.
info.buyer.timeline String Sets the timeline when the lead wants to buy.
info.contact Object The general contact information of the lead.
info.contact.first_name String Sets the first name of the lead.
info.contact.last_name String Sets the last name of the lead (This may include middle name).
info.contact.phone_numbers Object The registered phone numbers provided by the lead.
info.contact.phone_numbers.cell_phone String Sets the registered primary phone number provided by the lead.
info.contact.phone_numbers.home_phone String Sets the registered home phone number provided by the lead.
info.contact.phone_numbers.work_phone String Sets the registered work phone number provided by the lead.
info.contact.email String Cannot be changed and is required if the id is not provided.
info.contact.mailing_address Object The address in order to send mail to the lead.
info.contact.mailing_address.street String Sets the street for the mailing address of the lead.
info.contact.mailing_address.city String Sets the city for the mailing address of the lead.
info.contact.mailing_address.state String Sets the state for the mailing address of the lead.
info.contact.mailing_address.postal_or_zip String Sets the postal/zip code for the mailing address of the lead.
info.is_buyer Boolean Sets whether or not a lead is a buyer.
info.is_seller Boolean Sets whether or not a lead is a seller.
info.seller Object Contains the seller information of the lead if they are a seller.
info.seller.timeline String Sets the timeline when the lead wants to sell.
info.secondary Object Contains the secondary contact information of the lead.
info.secondary.relation String Sets the secondary relation to the lead.
info.secondary.contact Object The secondary contact information of the lead.
info.secondary.contact.first_name String Sets the first name of the secondary contact.
info.secondary.contact.last_name String Sets the last name of the secondary contact (This may include middle name).
info.secondary.contact.phone_numbers Object The registered phone numbers provided by the lead for the secondary contact.
info.secondary.contact.phone_numbers.cell_phone String Sets the registered primary phone number for the secondary contact.
info.secondary.contact.email String Sets the email for the secondary contact.
info.secondary.contact.mailing_address Object The address in order to send mail to the lead.
info.secondary.contact.mailing_address.street String Sets the street for the mailing address of the secondary contact.
info.secondary.contact.mailing_address.city String Sets the city for the mailing address of the secondary contact.
info.secondary.contact.mailing_address.state String Sets the state for the mailing address of the secondary contact.
info.secondary.contact.mailing_address.postal_or_zip String Sets the postal/zip code for the mailing address of the secondary contact.
info.source String The source to set the lead as to where it is from.
info.status String The status to change the lead to if it is not already.
pipeline Object Contains the pipeline data of the lead.
pipeline.stage String The name of the lead pipeline stage to move the lead into if it is not already in.

Create Lead Notes Request Body

Notes will always be created if appended to the body of either the lead update or lead create request. The only required fields are either the lead's email or identifier.

Field Type Description
id String The lead to add notes to and is required if email is not provided.
info Object Contains the base level information of the lead.
info.contact Object The general contact information of the lead.
info.contact.email String Cannot be changed and is required if the id is not provided.
notes Array[Object] A list of note objects that will be added to the lead upon creation or after updates.
notes[#] Object An individual lead note object.
notes[#].content String The string content for the note. Limit of 5,000 characters before trimming occurs.
notes[#].category String The note category.
notes[#].created_by String An optional field for the agent that placed the note on the lead.
notes[#].is_pinned Boolean Pins the note to the top of the lead activities.
notes[#].notified_agents Array[String] An optional field of an array of unique identifiers of agents that you want to be notified within the CINC platform that this note was created.

Lead Note Endpoints

GET site/leads/{lead_id}/notes

version 2.1

This endpoint gets all the notes from a specified lead ignoring the content of the note to reduce the size. For more information, read the section on rate limits. The required scope to access this endpoint is api:read.

Example request: GET site/leads/{lead_id}/notes

curl -X GET -G "https://public.cincapi.com/v2/site/leads/LEAD0/notes" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/leads/LEAD0/notes"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/leads/LEAD0/notes', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/leads/LEAD0/notes', headers=headers)

Example response

"body": {
    "paging":{
      "limit":500,
      "count":5,
      "offset":0
   },
    "notes":[
      {
         "id":"LN0001",
         "category":"call",
         "created_by":"agentid",
         "created_date":"2023-04-14 19:44:14.576Z",
         "is_pinned":true
      },
      {
         "id":"LN0002",
         "category":"info",
         "created_by":"agentid",
         "created_date":"2023-04-14 19:44:14.576Z",
         "is_pinned":true
      },
      {
         "id":"LN0003",
         "category":"general",
         "created_by":"agentid",
         "created_date":"2023-04-14 19:44:14.576Z",
         "is_pinned":true
      },
      {
         "id":"LN0004",
         "category":"call",
         "created_by":"agentid",
         "created_date":"2023-04-14 19:44:14.576Z",
         "is_pinned":true
      },
      {
         "id":"LN0005",
         "category":"email",
         "created_by":"agentid",
         "created_date":"2023-04-14 19:44:14.576Z",
         "is_pinned":true
      }
    ]
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

Path Parameters

Name Type Description
lead_id String Required Unique lead identifier.

GET site/leads/notes/{note_id}

version 2.1

This endpoint gets the specified note's data. For more information, read the section on rate limits. The required scope to access this endpoint is api:read. This is the only endpoint where the [content] field is available to view.

Example request: GET site/leads/notes/{note_id}

curl -X GET -G "https://public.cincapi.com/v2/site/leads/notes/LN0001" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/leads/notes/LN0001"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/leads/notes/LN0001', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/leads/notes/LN0001', headers=headers)

Example response

"body": {
    "note":{
      "id":"LN0001",
      "content":"Nipugima rohubo uhebece revme acodeucu pecpuehi viok ugivepsuw ime ucho ja gefa kafhega tiwe. Zitatuwo dawvumka onzesda zuwek fuw ji hegmor med ohi lu tachobev lehlu fohiki no raduvu ta mulgot gofowo. Vutehnow re corhezte hepba zokozhih tot pujvuc badraiko rif pid vunujku onsiv otu subuka pa.",
      "category":"call",
      "created_by": "agentid",
      "created_date":"2023-04-14 19:44:14.286Z",
      "is_pinned":true
   }
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

Path Parameters

Name Type Description
note_id String Required Unique note identifier.

Lead Label Endpoints

GET /site/leads/labels

version 2.2

This endpoint gets all the labels from the site in the access token. The required scope to access this endpoint is api:read.

Example request: GET /site/leads/labels

curl -X GET -G "https://public.cincapi.com/v2/site/leads/labels" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/leads/labels"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/leads/labels', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/leads/labels', headers=headers)

Example response

"body": {
   "paging":{
      "limit":500,
      "count":5,
      "offset":0
   },
   "labels":[
      {
         "id":"LDID0",
         "created_date":"2023-06-01T10:02:12.297Z",
         "updated_date":"2023-06-11T14:19:16.000Z",
         "name":"Chimichanga",
         "color":"#0B5C7A",
         "created_by":"AGENT_MDID0"
      },
      {
         "id":"LDID1",
         "created_date":"2023-06-01T10:02:12.297Z",
         "updated_date":"2023-06-11T14:19:16.000Z",
         "name":"Guacamole",
         "color":"#0B5C7A",
         "created_by":"AGENT_MDID0"
      },
      {
         "id":"LDID2",
         "created_date":"2023-06-01T10:02:12.297Z",
         "updated_date":"2023-06-11T14:19:16.000Z",
         "name":"Horchata",
         "color":"#0B5C7A",
         "created_by":"AGENT_MDID0"
      },
      {
         "id":"LDID3",
         "created_date":"2023-06-01T10:02:12.297Z",
         "updated_date":"2023-06-11T14:19:16.000Z",
         "name":"Churros",
         "color":"#0B5C7A",
         "created_by":"AGENT_MDID0"
      },
      {
         "id":"LDID4",
         "created_date":"2023-06-01T10:02:12.323Z",
         "updated_date":"2023-06-11T14:19:16.000Z",
         "name":"Chicken Biryani",
         "color":"#0B5C7A",
         "created_by":"AGENT_MDID0"
      }
   ]
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

GET site/leads/labels/{label_id}

version 2.2

This endpoint gets the specified label's data. For more information, read the section on rate limits. The required scope to access this endpoint is api:read.

Example request: GET site/leads/labels/{label_id}

curl -X GET -G "https://public.cincapi.com/v2/site/leads/labels/LDID0" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/leads/labels/LDID0"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/leads/labels/LDID0', {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/leads/labels/LDID0', headers=headers)

Example response

"body": { 
    "label": { 
        "id" :"LDID0",
        "created_date" :"2023-06-01T10:02:12.297Z",
        "updated_date" :"2023-06-21T10:02:12.297Z",
        "name" :"Chimichanga",
        "color" :"#0B5C7A",
        "created_by" :"AGENT_MDID0" 
    } 
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1653051600
}

Path Parameters

Name Type Description
label_id String Required Unique label identifier.

POST /site/leads/labels

version 2.2

This endpoint is used to create a new label. The required scope to access this endpoint is api:create.

Example request: POST /site/leads/labels

curl -X POST -G "https://public.cincapi.com/v2/site/leads/labels" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
  -d '{
        "name": "VALUE",
        "color": "#DB0A5B"
    }
    '
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://public.cincapi.com/v2/site/leads/labels"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd");
        request.Content = new StringContent(@"
        {
            ""name"": ""VALUE"",
            ""color"": ""#DB0A5B""
        }
        ",
        Encoding.UTF8,
        "application/json") 

        var response = await httpClient.SendAsync(request);
    }
}
const data = {
    name: "VALUE",
    color: "#DB0A5B"
}
fetch('https://public.cincapi.com/v2/site/leads/labels', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    },
    body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

data = {
    "name": "VALUE",
    "color": "#DB0A5B"
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.POST('https://public.cincapi.com/v2/site/leads/labels', headers=headers, json=data)

Example response

"body": {
    {
        "id": "LDID0"
    }
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : 1677130510
}

Query Parameters

Parameter Type Description
is_name_distinct Boolean An optional flag that determines how the label name is handled. If the flag is set to true, the system will first check if a label with the given name already exists. If it does, the newest existing label will be returned. If it does not, a new label will be created. If the flag is set to false, a new label will always be created regardless of whether a label with the same name already exists. The default is false.

Request Body

The request body is a label object structured as a JSON object. The field name is required for creating a new label.

Response Body

The response will contain the unique identifier of the new label. The response code will be an HTTP 201 (Created) if the label was created successfully.

Request Body

Field Type Description Default
name String A required field that will be the display name of the label and is not unique. N/A
color String An optional field that must be a valid lead label hex color. N/A

POST /site/leads/{lead_id}/labels/apply

version 2.2

This endpoint is used to apply labels to a specified lead. The required scope to access this endpoint is api:update.

Example request: POST /site/leads/{lead_id}/labels/apply

curl -X POST -G "https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/apply" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
  -d '{
        "labels": [
            {
                "id":"LDID0"
            },
            {
                "id":"LDID1"
            },
            {
                "id":"LDID2"
            }
        ]
    }
  '
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/apply"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd");
        request.Content = new StringContent(@"
        {
            ""labels"": [
                {
                    ""id"":""LDID0""
                },
                {
                    ""id"":""LDID1""
                },
                {
                    ""id"":""LDID2""
                }
            ]
        }
        ",
        Encoding.UTF8,
        "application/json") 

        var response = await httpClient.SendAsync(request);
    }
}
const data = {
    labels: [
        {
            id:"LDID0"
        },
        {
            id:"LDID1"
        },
        {
            id:"LDID2"
        }
    ]
}
fetch('https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/apply', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    },
    body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

data = {
    "labels": [
        {
            "id":"LDID0"
        },
        {
            "id":"LDID1"
        },
        {
            "id":"LDID2"
        }
    ]
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.POST('https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/apply', headers=headers, json=data)

Request Body

The request body is a list of label objects structured as a JSON object. The field id is required and used for applying the lead label to a lead.

Response Body The response code will be an HTTP 200 (OK) if the labels were applied successfully. Otherwise, the error message will be shown with a proper HTTP status code.

Request Body

Field Type Description Default
labels Array[Object] A list of label objects with label ids to be applied to the lead.
labels[#].id String The unique identifier for the lead label.

Example response

"body": {
   "message": "All given labels have been applied on leadid LEAD_MDID0"
}

Path Parameters

Name Type Description
lead_id String Required Unique lead identifier.

POST /site/leads/{lead_id}/labels/remove

version 2.2

This endpoint is used to remove labels from a specified lead. The required scope to access this endpoint is api:update.

Example request: POST /site/leads/{lead_id}/labels/remove

curl -X POST -G "https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/remove" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
  -d '{
        "labels": [
            {
                "id":"LDID0"
            },
            {
                "id":"LDID1"
            },
            {
                "id":"LDID2"
            }
        ]
    }
  '
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/remove"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd");
        request.Content = new StringContent(@"
        {
            ""labels"": [
                {
                    ""id"":""LDID0""
                },
                {
                    ""id"":""LDID1""
                },
                {
                    ""id"":""LDID2""
                }
            ]
        }
        ",
        Encoding.UTF8,
        "application/json") 

        var response = await httpClient.SendAsync(request);
    }
}
const data = {
    labels: [
        {
            id:"LDID0"
        },
        {
            id:"LDID1"
        },
        {
            id:"LDID2"
        }
    ]
}
fetch('https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/remove', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    },
    body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

data = {
    "labels": [
        {
            "id":"LDID0"
        },
        {
            "id":"LDID1"
        },
        {
            "id":"LDID2"
        }
    ]
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.POST('https://public.cincapi.com/v2/site/leads/LEAD_MDID0/labels/remove', headers=headers, json=data)

Request Body The request body is a list of label objects structured as a JSON object. The field id is required and used for removing the lead label from the lead.

Response Body {#webhook-post-request-body} The response code will be an HTTP 200 (OK) if the labels were removed successfully. Otherwise, the error message will be shown with a proper HTTP status code.

Request Body

Field Type Description Default
labels Array[Object] A list of label objects with label ids to be removed from the lead.
labels[#].id String The unique identifier for the lead label.

Example response

"body": {
   "message": "All given labels have been removed on leadid LEAD_MDID0"
}

Path Parameters

Name Type Description
lead_id String Required Unique lead identifier.

DELETE /site/leads/labels/{label_id}

version 2.2

This endpoint status deletes a label. It will no longer be visible inside the CINC crm dashboard user interface. The required scope to access this endpoint is api:delete.

Example request: DELETE /site/leads/labels

curl -X DELETE -G "https://public.cincapi.com/v2/site/leads/labels/LDID0" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("DELETE"), "https://public.cincapi.com/v2/site/leads/labels/LDID0"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd");
        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/leads/labels/LDID0', {
    method: 'DELETE',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.DELETE('https://public.cincapi.com/v2/site/leads/labels', headers=headers)

Response Body

The response code will be an HTTP 200 (OK) if the label was deleted successfully. Otherwise, the error message will be shown with a proper HTTP status code.

Example response

"body": {
   "message": "Deletion of labelID LDID0 is successful"
}

Path Parameters

Name Type Description
label_id String Required Unique label identifier.

Webhook Endpoints

GET site/webhook

version 2.1

This endpoint gets the registered webhook information for the site. If the request is successful, the response body will include the url, headers' values, event filters, and whether or not the webhook is enabled.

Example request: GET site/webhook

curl -X GET -G "https://public.cincapi.com/v2/site/webhook" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://public.cincapi.com/v2/site/webhook"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/webhook', {
    headers: {
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.get('https://public.cincapi.com/v2/site/webhook', headers=headers)

Example response

"body": {
   "event_filters":[
      "lead.created",
      "lead.info.updated",
      "agent.created"
   ],
   "headers":{
      "header_name1":"header_value1",
      "header_name2":"header_value2"
   },
   "is_enabled":true
}

POST site/webhook

version 2.1

This endpoint can be used as upsert operation given the request body. If the webhook already existed, it will be updated; otherwise, a new webhook will be created. Users can specify headers they want to include when sending events and events to receive through the webhook.

Example request: POST site/webhook

curl -X POST -G "https://public.cincapi.com/v2/site/webhook" \
  -H "Content-Type: application/json" \
  -H "Authorization: Ad3Zjsd4tU209aJd" \
  -d '{
   "url": "test.com",
   "event_filters":[
      "lead.label.applied",
      "lead.label.removed"
   ],
   "headers":{
      "XX_XX":"somevalue",
      "YY_YY":"anothervalue"
   }
}'
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://public.cincapi.com/v2/site/webhook"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 
        request.Content = new StringContent(@"
        {
            ""url"": ""test.com"",
            ""event_filters"":[
                ""lead.label.applied"",
                ""lead.label.removed""
            ],
            ""headers"":{
                ""XX_XX"":""somevalue"",
                ""YY_YY"":""anothervalue""
            }
        }
        ",
        Encoding.UTF8,
        "application/json")
    }
}
const data = {
    url: "test.com",
    event_filters:[
        "lead.label.applied",
        "lead.label.removed"
    ],
    headers:{
        XX_XX:"somevalue",
        YY_YY:"anothervalue"
    }
}
fetch('https://public.cincapi.com/v2/site/webhook', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
        'Authorization': 'Ad3Zjsd4tU209aJd'
    },
    body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests
data = {
    "url": "test.com",
    "event_filters":[
        "lead.label.applied",
        "lead.label.removed"
    ],
    "headers":{
        "XX_XX":"somevalue",
        "YY_YY":"anothervalue"
    }
}

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.post('https://public.cincapi.com/v2/site/webhook', headers=headers, json=data)

Example response

"body": {
    "message": "Updated webhook successfully."
}

Request Body

Field Type Description Default
url String The webhook url to send events to. N/A
event_filters Array[String] A list of filters to check. N/A
headers Object All header values to be included when sending out webhook events. N/A
is_enabled Boolean Whether or not the webhook will be enabled. true

Response Body

The response message will simply a message let users know if the upsert operation is successful or not.

POST site/webhook/enable

version 2.1

In order to start receiving events after disabling, use an empty POST request to enable the registered webhook.

Example request: POST site/webhook/enable

curl -X POST -G "https://public.cincapi.com/v2/site/webhook/enable" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://public.cincapi.com/v2/site/webhook/enable"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/webhook/enable', {
    method: 'POST',
    headers: {
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.post('https://public.cincapi.com/v2/site/webhook/enable', headers=headers)

Example response

"body": {
   "message": "Enabled webhook successfully."
}

POST site/webhook/disable

version 2.1

In order to stop receiving events, use an empty POST request to disable the registered webhook.

Example request: POST site/webhook/disable

curl -X POST -G "https://public.cincapi.com/v2/site/webhook/disable" \
  -H "Authorization: Ad3Zjsd4tU209aJd"
// In production code, don't destroy the HttpClient through using, but better use IHttpClientFactory factory or at least reuse an existing HttpClient instance
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests
// https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://public.cincapi.com/v2/site/webhook/disable"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Ad3Zjsd4tU209aJd"); 

        var response = await httpClient.SendAsync(request);
    }
}
fetch('https://public.cincapi.com/v2/site/webhook/disable', {
    method: 'POST',
    headers: {
        'Authorization': 'Ad3Zjsd4tU209aJd'
    }
})
  .then(response => response.json())
  .then(data => console.log(data));
import requests

headers = {
    'Authorization': 'Ad3Zjsd4tU209aJd',
}

response = requests.post('https://public.cincapi.com/v2/site/webhook/disable', headers=headers)

Example response

"body": {
   "message": "Disabled webhook successfully."
}

Pagination

All successful API responses upon paginated requests will include the field paging. The query parameters that were present in the request, will also be included under the paging field unless overridden by the call. The following table describes the common attributes associated with pagination.

Name Type Description
offset Number The number of rows to skip before starting to return rows from the query.
limit Number Either the max limit allowed by the endpoint or the limit provided in the query parameters.
next String A hash code that represents the starting point for the next page.
count Number The amount of resources returned by the endpoint. The number has a ceiling up to the max limit.

Rate Limits

Every response will include the current available rate for that endpoint in the header.

Header Name Description
x-rate-limit-limit The maximum number of requests you are permitted to make per 20 seconds.
x-rate-limit-remaining The number of requests remaining in the current rate limit window.
x-rate-limit-reset The time at which the current rate limit window resets in UTC epoch milliseconds.

Endpoint Limits

The following table lists the starting rate limits for each endpoint per CINC site.

Endpoint Action Limit per 20 Seconds
site/webhook GET 256
site/webhook POST 256
site/webhook/enable POST 256
site/webhook/disable POST 256
site/agents GET 256
site/agents GET 256
site/agents/{agent_id} GET 256
site/leads GET 256
site/leads POST 256
site/leads/{lead_id} GET 256
site/leads/{lead_id}/notes GET 256
site/leads/notes/{note_id} GET 256
site/leads/labels GET 256
site/leads/labels/{label_id} GET 256
site/leads/labels POST 256
site/leads/{lead_id}/labels/apply POST 256
site/leads/{lead_id}/labels/remove POST 256
site/leads/labels/{label_id} DELETE 256
site/me GET 256

Too Many Requests

The HTTP error 429 (Too Many Requests) will be returned if the your request limits have been exhausted. It is standard and good practice to always properly handle and respond to this status code. Even if the returned values are indicating that some bandwidth in a previous request remained. This ensures that your requests are not ever lost. In some cases, this response may occur due to a high volume of requests hitting the API and the rates are temporarily lowered to investigate root cause.

Examples

The following examples demonstrate how to use the CINC API.

Authentication

CINC API utilizes the OAuth 2.0 protocol for authentication and authorization. To use the API, you must first obtain an access token. For more information, see Authentication.

Creating and Updating Leads

CINC API provides an "upsert" operation for managing lead creation and updates. For more information, see Upsert a Lead.