NAV
cURL C# JavaScript Python

Introduction

Welcome to the CINC API! This API provides access to a CINC site through a HTTP API. Allowing developers to integrate applications with your CINC site. Make sure the desired application has registered as a developer.

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.

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://auth.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://auth.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://auth.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://auth.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://auth.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://auth.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://auth.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://auth.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":"AGENT_MDID0",
    "registered_date":"2022-05-06T17:01:49Z",
    "info":{
        "contact": {
            "first_name":"Rebecca",
            "last_name":"Lejeune",
            "phone_numbers":{
                "cell_phone":"6109586760",
                "office_phone":"5555555555",
                "home_phone":"5555555555",
                "work_phone":"5555555555"
            },
            "email":"buum@cu.com",
            "mailing_address":{
                "street":"444 Office St",
                "city":"Marietta",
                "state":"GA",
                "postal_or_zip":"30067"
            }
        },
        "status": "active"
    }
}

The agent information is structured in the following manner:

Field Type Description
id String The unique identifier for the agent.
registered_date Date The timestamp of when the agent was registered ISO 8601).
info Object Contains the agent information of the agent.

Agent Info Structure

Example object: Agent Info Structure

"info":{
    "contact": {
        "first_name":"Rebecca",
        "last_name":"Lejeune",
        "phone_numbers":{
            "cell_phone":"6109586760",
            "office_phone":"5555555555",
            "home_phone":"5555555555",
            "work_phone":"5555555555"
        },
        "email":"buum@cu.com",
        "mailing_address":{
            "street":"444 Office St",
            "city":"Marietta",
            "state":"GA",
            "postal_or_zip":"30067"
        }
    },
    "status": "active"
}

The agent information is structured in the following manner:

Field Type Description
contact Object The general contact information provided by the agent.
status String The current status of the agent.

Agent Contact Info Structure

Example object: Agent Contact Info Structure

"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"
    }
}

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 provided by the agent.
phone_numbers.cell_phone String The registered primary phone number provided by the agent.
phone_numbers.home_phone String The registered home phone number provided by the agent.
phone_numbers.work_phone String The registered work phone number provided by the agent.
phone_numbers.office_phone String The registered office phone number provided by the agent.
email String The registered email provided by the agent.
mailing_address Object The address in order to send mail to the agent.
mailing_address.street String The street for the mailing address of the agent.
mailing_address.city String The city for the mailing address of the agent.
mailing_address.state String The state for the mailing address of the agent.
mailing_address.postal_or_zip String The postal/zip code for the mailing address 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":"LEAD_MDID0",
    "registered_date" : "2022-04-14T09:21:43Z",
    "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_code" : "31324"
            }
        },
        "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"
        },
        "assigned_agents" : {
            "primary_agent" : { 
                "id" : "AGENT_MDID3" 
            },
            "listing_agent" : { 
                "id" : "AGENT_MDID5" 
            },
            "partner"        : { 
                "id" : "AGENT_MDID7" 
            }
        },
        "source"  : "Facebook",
        "status"  : "unworked"
    }
}

The lead information is structured in the following manner:

Field Type Description
id String The unique identifier for the lead.
registered_date Date The timestamp of when the lead was registered (ISO 8601).
info Object Contains the lead information of the lead.

Lead Info Structure

Example object: Lead Info Structure

"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": true,
    "seller": {
        "timeline": "4 to 6 weeks"
    },
    "assigned_agents": {
        "primary_agent": { 
            "id": "AGENT_MDID3" 
        },
        "listing_agent": { 
            "id": "AGENT_MDID5" 
        },
        "partner": { 
            "id": "AGENT_MDID7" 
        }
    },
    "source"  : "Facebook",
    "status"  : "unworked"
}

The user info information is structured in the following manner:

Field Type Description
assigned_agents Object Contains the assigned agent information of the lead.
buyer Object Contains the buyer information of the lead if they are a buyer.
contact Object The general contact information of the lead.
is_buyer Boolean Check if the lead is a buyer. This will determine if the info.buyer object is present or not.
is_seller Boolean Check if the lead is a seller. This will determine if the info.seller object is present or not.
seller Object Contains the seller information of the lead if they are a seller.
source String The source from which the lead came into the CINC platform.
status String The current status of the lead.

Lead Assigned Agents Structure

Example object: Assigned Agents Structure

"assigned_agents" : {
    "primary_agent" : { 
        "id" : "AGENT_MDID3" 
    },
    "listing_agent" : { 
        "id" : "AGENT_MDID5" 
    },
    "partner"        : { 
        "id" : "AGENT_MDID7" 
    }
}

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 Buyer Info Structure

Example object: Buyer Info Structure

"buyer_info":{
    "median_price":0,
    "average_price":250000,
    "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",
    "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.
phone_numbers.office_phone String The registered office phone number provided by the lead.
email String The registered 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 Seller Info Structure

Example object: Seller Info Structure

"seller_info":{
    "timeline":"4 to 6 weeks"
}

The seller information is structured in the following manner:

Field Type Description
timeline String The timeline when the lead wants to sell.

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:

API Endpoints

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

site/agents

version 2.0

The top level agents endpoint provides a listing of all existing agents. The information is presented at the level of broker. This means the calls to these endpoints must be accomplished with an access token with broker privileges. In order to get from these endpoints, the scope api:read must be present.

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/site/agents" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Bearer: 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/site/agents?offset=0&limit=2"))
    {
        request.Headers.TryAddWithoutValidation("Bearer", "Ad3Zjsd4tU209aJd"); 

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

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

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

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

Example response

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

    "agents": [
        {
            "id":"agentid",
            "registered_date":"2022-12-18T20:27:25Z",
            "info": {
                "contact": {
                    "first_name":"Agent",
                    "last_name":"Peepeepoopoo",
                    "email":"agentpeepoo@capi.test",
                    "phone_numbers": {
                        "cell_phone":"4044041234"
                    }
                },
                "status": "active"
            }
        },
        {
            "id":"AGENT_MDID0",
            "registered_date":"2022-01-11T09:32:05Z",
            "info":{
                "contact": {
                    "first_name":"Eddie",
                    "last_name":"Mellor",
                    "email":"pume@efpu.bj",
                    "phone_numbers": {
                        "cell_phone":"4628874518"
                    }
                },
                "status": "active"
            }
        }
    ]
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : "2022-05-20T09:00:00Z"
}

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/site/agents/agentid" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Bearer: 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/site/agents/agentid"))
    {
        request.Headers.TryAddWithoutValidation("Bearer", "Ad3Zjsd4tU209aJd"); 

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

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

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

Example response

"body": {
  "agent":{
        "id":"agentid",
        "registered_date":"2022-12-18T20:27:25Z",
        "info":{
        "contact": {
          "first_name":"Agent",
          "last_name":"Peepeepoopoo",
          "email":"agentpeepoo@capi.test",
          "phone_numbers":{
            "cell_phone":"4044041234"
          },
          "status": "active"
        }
      }
       }
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : "2022-05-20T09:00:00Z"
}

Path Parameters

Name Type Description
agent_id String Required Unique agent identifier.

site/leads

version 2.0

The top level leads endpoint provides a listing of all existing leads. The information is presented at the level of a broker. This means the calls to these endpoints must be accomplished with an access token with broker privileges. In order to get from these endpoints, the scope api:read must be present. The post endpoint for upserting leads will require scope api:create.

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/site/leads" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Bearer: 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/site/leads?offset=0&limit=2"))
    {
        request.Headers.TryAddWithoutValidation("Bearer", "Ad3Zjsd4tU209aJd"); 

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

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

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

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

Example response

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

  "leads": [
      {
        "id":"mymdidwoah",
        "registered_date":"2023-01-18T20:27:25Z",
        "info": {
            "contact": {
                "first_name":"Ana",
                "last_name":"Heard",
                "email":"anaheard@capi.test",
                "phone_numbers": {
                    "cell_phone":"4706996288"
               }
            },
            "is_buyer": false,
            "is_seller": true,
            "seller": {
                "timeline": "4 to 6 weeks"
            },
            "assigned_agents": {
                "primary_agent": { 
                    "id": "AGENT_MDID1" 
                },
                "listing_agent": { 
                    "id": "AGENT_MDID4" 
                },
                "partner": { 
                    "id": "AGENT_MDID9" 
                }
            },
            "source"  : "Facebook",
            "status"  : "unworked"
        },
      },
      {
        "id":"LEAD_MDID0",
        "registered_date":"2022-11-06T21:41:00Z",
        "info":{
            "contact": {
                "first_name":"Devin",
                "last_name":"Norton",
                "email":"mo@rijegmo.fk",
                "phone_numbers": {
                    "cell_phone":"3703089435"
               }
            },
            "is_buyer": true,
            "buyer": {
                "median_price"  : 0,
                "average_price" : 250000,
                "favorite_city" : "Dallas",
                "timeline"      : "4 to 6 weeks"
            },
            "is_seller": false,
            "assigned_agents": {
                "primary_agent": { 
                    "id": "AGENT_MDID3" 
                },
                "listing_agent": { 
                    "id": "AGENT_MDID5" 
                },
                "partner": { 
                    "id": "AGENT_MDID7" 
                }
            },
            "source"  : "Facebook",
            "status"  : "unworked"
        },
      }
   ]
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : "2022-05-20T09:00:00Z"
}

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/site/leads/LEAD_MDID0" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Bearer: 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/site/leads/LEAD_MDID0"))
    {
        request.Headers.TryAddWithoutValidation("Bearer", "Ad3Zjsd4tU209aJd"); 

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

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

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

Example response

"body": {
    "lead": {
        "id":"LEAD_MDID0",
        "registered_date":"2022-11-06T21:41:00Z",
        "info": {
            "contact": {
                "first_name": "Devin",
                "last_name": "Norton",
                "email": "mo@rijegmo.fk",
                "phone_numbers": {
                    "cell_phone": "3703089435"
                }
            },
            "is_buyer": true,
            "buyer": {
                "median_price": 0,
                "average_price": 550000,
                "favorite_city": "Atlanta",
                "timeline": ""
            },
            "is_seller": false,
            "assigned_agents": {
                "primary_agent": { 
                    "id": "AGENT_MDID3" 
                },
                "listing_agent": { 
                    "id": "AGENT_MDID5" 
                },
                "partner": { 
                    "id": "AGENT_MDID7" 
                }
            },
            "source": "Facebook",
            "status": "unworked"
        },
    }
},
"header": {
  "x-rate-limit-limit"     : 100,
  "x-rate-limit-remaining" : 91,
  "x-rate-limit-reset"     : "2022-05-20T09:00:00Z"
}

Path Parameters

Name Type Description
lead_id String Required Unique lead identifier.

POST site/leads

version 2.0

This endpoint creates a new lead if there are no conflicts with the info.lead.contact.email attribute. 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/site/leads" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Bearer: Ad3Zjsd4tU209aJd" \
  -d '{
    "registered_date": "2022-04-14T09:21:43.371Z",
    "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_code": "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": "AGENT_MDID3"
            },
            "listing_agent": {
                "id": "AGENT_MDID5"
            },
            "partner": {
                "id": "AGENT_MDID7"
            }
        }
    }
}'
// 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/site/leads"))
    {
        request.Headers.TryAddWithoutValidation("Bearer", "Ad3Zjsd4tU209aJd"); 
        request.Content = new StringContent(@"{
                ""registered_date"" : ""2022-04-14T09:21:43.371Z"",
                ""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_code"" : ""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"" : ""AGENT_MDID3"" 
                        },
                        ""listing_agent"" : { 
                            ""id"" : ""AGENT_MDID5"" 
                        },
                        ""partner""       : { 
                            ""id"" : ""AGENT_MDID7"" 
                        }
                    }
                }
            }
        ",
        Encoding.UTF8,
        "application/json")
    }
}
const data = {
    registered_date: '2022-04-14T09:21:43.371Z',
    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_code: "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: "AGENT_MDID3"
            },
            listing_agent: {
                id: "AGENT_MDID5"
            },
            partner: {
                id: "AGENT_MDID7"
            }
        }
    }
}
fetch('https://public.cincapi.com/site/leads', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        'Bearer': '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",
    "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_code": "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": "AGENT_MDID3"
            },
            "listing_agent": {
                "id": "AGENT_MDID5"
            },
            "partner": {
                "id": "AGENT_MDID7"
            }
        }
    }
}

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

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

Example response

"body": {
    "lead": {
        "id": "LEAD_MDID0"
    }
},
"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.

site/me

version 2.0

This endpoint provides detection for who the current user is that has consented to allowing access. It is purely provided for testing and verifying that the current access token contains a valid user. Calls to this endpoints must be accomplished with an access token with broker privileges. In order to get from this endpoints, the scope api:read must be present.

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/site/me" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Bearer: 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/site/me"))
    {
        request.Headers.TryAddWithoutValidation("Bearer", "Ad3Zjsd4tU209aJd"); 

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

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

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

Example response

"body": {
    "id": "AGENT_MDID0",
    "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.

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 ISO 8601.

Endpoint Limits

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

Endpoint Action Limit per 20 Seconds
site/agents GET 15
site/agents/{agent_id} GET 15
site/leads GET 15
site/leads POST 15
site/leads/{lead_id} GET 15
site/me GET 15

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.