Modification History
Date | Author | Description of Change |
---|---|---|
10/11/2020 | Vikas Rometra | New document |
10/27/2020 | Vikas Rometra | 1. Renamed dealerCode to catDealerCode in the GET call Response. 2. Added following fields to the POST call - dealerLeadId - dealerSalesRepNumber - primaryClosedReason 3. Delete fields - primaryClosedLostReason (replaced byprimaryClosedReason )- primaryClosedWonReason (replaced by primaryClosedReason )- PrimaryClosedWonReasonComments (duplicate for closedReasonComments ) |
11/17/2020 | Vikas Paul | Added list of Standard primaryClosedReason |
11/30/2020 | Vikas Rometra | To make it simple, removed leadUpdates request. Updated leads will be included in the primary GET end point https://services.cat.com/marketing/ecrm/leadManagement/v2/leads) .A new field leadState was added to indicate if the lead is NEW or UPDATED .This removes the need to call two different end points to get new leads and lead updates. As of now, only one field catPrequalificationStatus will get updated. |
12/6/2020 | Vikas Rometra | Changed the values of the following 1. customerAlreadyKnown 2. customerContacted 3. opportunityAlreadyKnown from existing values Y and N to Boolean values (it’s a checkbox field in Salesforce) true and false |
12/16/2020 | Vikas Rometra | Remove ClosedDisqualified Opportunity StageRemoved closedDisqualified indicator in the POST call |
01/19/2021 | Vikas Rometra | Added "dealerCustomerNumber ": "123433" to the POST call examples |
01/26/2021 | Vikas Rometra | Add new leadState SENT for historical end point. |
01/27/2021 | Vikas Rometra | 1. leadStatus – changed the values (ACCEPTED , REJECTED , DISQUALIFIED ) from all CAPS to regular case (Accepted , Rejected , Disqualified ). Same was reflected wherever leadStatus field value was being used for other fields which included disqualifiedReasonWhy .2. rejectedReasonWhy - Removed “Other” from valid values for rejectedReasonWhy .3. rejectedReasonComments (a) Removed “Other” from the required condition since “Other” was removed from rejectedReasonWhy . (b) Added three new conditions when this field will be required for the following values of rejectedReasonWhy - End-user , end-use or end-destination may be restricted- Product/Service Not offered - For Another Dealer 4. primaryClosedReason – updated the condition when this field is required.- If probabilityOfClosurePercentage = (0 and closedNoDeal =0) or 100 then this field is required.- Changed example to one of the reasons given in the description. 5. closedReasonComments – Updated field from conditionally required to not required and removed the condition.6. customerContacted – Updated to NOT required and removed the condition since it was incorrectly added for this field instead of dealerContactDateTime field.7. dealerContactDateTime – Updated to conditionally (C) required field and added the condition.8. comments – cleaned up description and added a valid example 9. Changed isoCurrencyCode to currencyIsoCode in two POST examples for Accepted and Disqualified 10. Updated the POST example to reflect above changes. |
01/29/2021 | Vikas Rometra | Updated following fields in the POST Request 1. customerAlreadyKnown (Boolean – true, false) to customerPreviouslyKnown (String – Yes, No).2. customerContacted type from (Boolean – true, false) to (String – Yes, No).3. dealerContactDateTime (DateTime) to dateContacted (Date). Also update the condition value from Boolean true to String” Yes.”4. opportunityAlreadyKnown (Boolean – true , false ) to leadAlreadyKnown (String – Yes, No).5. quoteDateTime (DateTime) to quoteSentDate (Date).6. Length of dealerSalesRep to from 200 to 50. |
02/2/2021 | Vikas Rometra | Following POST Request BODY API fields updated to conditional from required 1. opportunityAmount 2. probabilityOfClosurePercentage 3. targetDate dealerOpportunityId updated to conditionally required. |
02/16/2021 | Vikas Rometra | GET Request: Updated leadId to required (Y)POST Request: Corrected the type for comments from Integer to String and updated the length to 1000 |
3/2/2021 | Vikas Rometra | quoteId and quoteSentDate are required when probabilityOfClosurePercentage is 100 or 0.Updated POST examples to reflect the same for Closed Won, Closed Lost and Closed No Deal opportunity stages Added test procedures required other than normal integration testing. |
03/18/2021 | Vikas Rometra | Updated the value of rejectedReason from Product / Service not offered at dealership to Product/Service Not Offered at DealershipquoteSentDate and quoteId updated to not required fields |
03/22/2021 | Vikas Rometra | DCN is only required when an Opportunity is Closed Lost or Closed Won or Closed No Deal |
04/05/2021 | Vikas Rometra | Changed the length of callCenterComments from 255 to 5000 |
04/08/2021 | Vikas Rometra | primaryClosedReason is not required for Closed Won Opportunities (probabilityOfClosurePercentage = 100) |
04/19/2021 | Vikas Rometra | Updated ASR to ISR for Sales Lead Community definition on page 6. - leadAlreadyknown – This field is DEPRECATED. Dealers will not be required to send this field anymore. This value was also removed from POST samples.- Added option “Lead Already Known” to the list of disqualifiedReasonWhy options.- disqualifiedReasonComments is also required when disqualifiedReasonWhy = “Lead Already Known” |
04/26/2021 | Vikas Rometra | Updated catPrequalificationStatus example value from “True” to “Cat Finance Pre-Qualification Completed” to correctly reflect that catPrequalificationStatus field is a text field and not a Boolean field. |
5/11/2021 | Vikas Rometra | Rolled back catPrequalificationStatus to Boolean instead of text field. |
6/21/2021 | Vikas Rometra | Removed default Currency Code “USD” for currencyIsoCode field. Currency code doesn’t get defaulted to USD |
7/21/2021 | Vikas Rometra | Added new Rejection Reason - Duplicate Lead Received |
10/01/2021 | Vikas Rometra | Added new Rejection Reason - Spam/Inappropriate Lead Submission |
03/17/2022 | Prafulla Nandhip | Updated dealerOpportunityId description in Dealer to CAT sectionRemoved stateCode from CAT to dealer section Increased the length ofstateOrProvince field from 80 to 255. This field is used to send state/province codes/names or UNKNOWN. Example data values are: “OH”, “NSW”, “UNKNOWN” |
04/30/2022 | Prafulla Nandhip | Added process flow diagrams 1. Prioritized Lead/Opportunity Process Flow Review 2. PP+SL Process Flow Added verbiage for Dealer Mapping |
06/05/2023 | Prafulla Nandhip | Changed QA URLs to below URL https://services-stg.cat.com/marketing/ecrm/leadManagement/v2/leads |
All interface modifications (except corrections for typographical errors) should be accompanied by a change communication notice in accordance with the Dealer Facing Interface Documentation Enterprise Architecture (EA) Standard. The date on which the modifications are implemented, as well as the retirement of any previous format, is noted within that communication. Each Caterpillar application owner reserves the right to determine the date(s) on which an interface change is implemented as well as when previous versions of the interfaces are retired, as long as the advance notification of the change is provided in accordance with this standard.
This is a link to the location where all interface change communications are posted for review: Digital Integration Services Portal - DICE Communications
Glossary
CRM
Customer relationship management (CRM) is a technology for managing all your company’s relationships and interactions with customers and potential customers. A CRM system helps companies stay connected to customers, streamline processes, and improve profitability.
Leads
Leads generated by Caterpillar marketing ecosystem.
Dealer Management System
Dealer Management System is a bundled management information system containing software that supports all aspects of running a Dealership
JSON (JavaScript Object Notification)
JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.
Salesforce
Salesforce is a CRM system that allows salespeople to track their sales, support people to track their cases, and the entire company’s employees to collaborate with each other.
Sales Lead Community
Community for dealers to Collaborate with Caterpillar ISRs on Sales Opportunities.
API
Application programming interface to download Marketing Opportunities on Sales Community and send updates for Marketing Opportunities that are acted upon by dealer in their CRM.
Ping Federate
OAuth 2.0 client credentials identity management service provider
Process Overview
Leads are generated via different resources. Deploying new technology-enabled Lead Distribution and Management processes can greatly improve speed-to-market. These can be pulled by dealers through an API.
This will pave the way to our blue dot vision of NextGen Lead Distribution and Management to help:
- Drive Growth & Efficiency
- Achieve Scalability & Flexibility
- Provide Enhanced Customer Experience
- Enable Faster Decision and Management Support
Dealers follow up on these opportunities and process them via their sales funnel process. Dealers are required to send updates back to Caterpillar through an API. This feedback is made available in the Caterpillar lead sales community built on Salesforce CRM.
This document will describe the API interface that will enable NextGen Lead Distribution and Management
https://cat.com is one of the sources of leads.
Process Flows
Prioritized Lead/Opportunity Process Flow
PP + SL V2 Process(Connected Dealer)
Dealer Mapping
This mapping will be entered in Dealer CRM Mapping Area. Following mapping are required
- Rejection Reason
- Disqualification Rason
- Closed Lost Reason
- Sales Stage
Interface Type and Transmission Method
This interface requires using REST API to GET Leads and POST opportunity sales funnel updates from dealer’s CRM.
Caterpillar Preferred Option
N/A
Related Interfaces
N/A
Owner | Click on link below to find the interface owner Go to https://dealer.cat.com/DealerITServices then click on the link Application Interface Contact List under the Contacts in the right column. |
---|---|
Author | See modification log for Authors |
Email DICE_Sales@cat.com to contact the appropriate DICE Team Member for this interface.
Field Types and Definitions
The following list provides the references to element types that will be used in this document.
Reference | Description | Example |
---|---|---|
JSON array |
An ordered sequence of values formatted using JavaScript Object Notation (JSON). | [0,”value”] |
JSON object |
An unordered collection of name/value pairs formatted using JavaScript Object Notation (JSON). | {“name”:”value”} |
boolean |
Algebraic expression used for creating true false statement | true or false |
string |
Composed of letters, punctuation, and the numbers 0-9 represented as characters | This repair is for the 1S2255 that was put into…. |
int |
Numeric integer values of 0-9 | 25 |
date |
Composed of date | YYYY-MM-DD |
dateTime |
Composed of date + time + Time Zone For time zone specify offset from the UTC time by adding a positive or negative value in the format of hh:mm. |
2015-05-30T09:30:10-06:00 OR 2015-05-30T09:30:10+10:00 * where +06:00 or -06:00 represents the offset from the UTC time |
Null |
Field with one possible value, null, to represent missing data. | null |
number |
Composed of numeric values 0-9 with a decimal For this application, a decimal place has been assigned |
16,2 (16 positions total, with 2 decimal places) 12345.77 |
Caterpillar Opportunity Stages
Caterpillar Opportunity Stage | Probability of Closure Percentage |
---|---|
Qualification | 1%-20% |
Develop Solution | 21%-40% |
Proposal/Negotiation | 41%-99% |
Closed Won | 100% |
Closed Lost | 0% |
Closed No Deal | 0% |
General Comments & Definitions
Comments
This solution provides a simple REST Web service that enables pulling lead that have not been pulled earlier. The client will invoke the service at regular intervals of time and frequently to retrieve new leads, act on those and send feedback to Caterpillar
Process Summary:
- CAT will engage Dealer to onboard Lead NextGen Lead Distribution and Management program.
- Cat ECRM team receives request from CAT Marketing to setup dealer to access Lead API
- Cat ECRM requests Client ID from CAT Identity Access Management (IAM) group
- Corporate Identity Access Management creates Client ID for dealer in PingFederate environment (usually within 1 working day for QA and every Thursday for production)
- Dealer connects to API’s frequently (recommended to make GET call every 15 minutes) to pull new Leads
- Dealer connects to API’s and send updates to Leads in real time by POSTing the updates.
https://services-stg.cat.com/marketing/ecrm/leadManagement/v2/leads
https://services.cat.com/marketing/ecrm/leadManagement/v2/leads
Invoking the Service (GET)
The REST web service is designed for program-to-program integration technology. Access to the service can be broken into three steps.
Step 1 - Open a connection
Open a connection the OAuth service using the QA or Production URL.
QA URL - https://fedloginqa.cat.com/as/token.oauth2
Production URL
Step 2 – Provide authentication
Set the Header and Body key and value information of the request. The basic credentials are the Client ID and secret provided to the dealer as a Base64 encoded ASCII string.
Header (key: value)
Content-Type: application/x-www-form-urlencoded
Authorization: Basic \<credentials\>
Body (key: value)
grant_type: client_credentials
scope: manage:all
The Body content type may need to be set to x-www-form-urlencoded manually depending on your application.
Step 3 – Execute the Fed Login POST request
Executing the POST request successfully will return a JSON object containing the access token.
{"access_token": “eyJhbtpZCI…”, "token_type": "Bearer", "expires_in": 3599}
All access tokens expire in 60 minutes. HTTPS 200 (OK) is sent to the client when the operation is successful. The connection is released at the end of the operation. The REST service provides only JSON responses.
Step 4 – Execute the GET request
Invoking the Service (POST)
Step 4 – Execute the POST request
** Available only with the use of test credentials which are available upon request see “Testing Procedure”
Error Architecture, Error Codes, and Error Messages
Possible responses:
Response 200 | Ok |
---|---|
Response 400 | Bad Request - Invalid parameters |
Response 401 | Unauthorized |
Response 403 | Forbidden |
Response 404 | Endpoint Not Found |
Response 500 | Internal Server Error - Try again if you like |
Error messages are returned as JSON objects indicating the issue to be resolved. The list of possible error messages is below.
{"message": "Invalid access token."}
{"message": "Invalid request header."}
{"message": "You are not authorized to perform that action."}
Elements, Characteristics, Operator Symbols
All character sets (Double byte, Eastern European, etc.) are supported in this interface.
Array Sizes
N/A
Currency Considerations
N/A
Regional Considerations
None
Layouts
Layout Comments
N/A
Layout Types / General API Information
Request | GET body parameters – leads |
---|---|
AUTHORIZATION: | Bearer <AccessToken> |
CONTENT-TYPE: | application/json |
ACCEPT: | application/json |
GET | leads |
Example | https://services.cat.com/marketing/ecrm/leadManagement/v2/leads |
Parameter | Type | MaxLength | Description | Required (Y/N/C) |
Sample |
---|---|---|---|---|---|
Authorization |
String | Time limited Bearer token returned from OAuth server to access Partner API. | Y | Bearer eyJhbGc… | |
limit |
integer | Query pram to limit the number of leads in the GET call to prevent Max limit will be set to 100 limiting number of records to 100 from a single GET call If there are 150 Leads, since the max number of Leads in one GET call is 100, a second GET call will required to get remaining 50 Leads. In the third GET call you will not receive any Leads, no further GET calls should be made after an empty response is received. https://services.cat.com/marketing/ecrm/leadManagement/v2/leads?limit=50 |
Response JSON – Leads object
Parameter | Type | MaxLength | Description | Required (Y/N/C) |
Sample |
---|---|---|---|---|---|
additionalInformationMaster |
String | 32768 | Additional Information for the request | N | “additionalInformationMaster”: “Financing Options:Extended Protection or Insurance Options:Parts Information:Service Options:Training Opportunities” |
address1 |
String | 255 | Street Address line 1 of the contact person | N | “address1”: “100 N. Main St.” |
address2 |
String | 255 | Street address line 2 of the contact person | N | “address2”: “Suite 100” |
address3 |
String | 255 | Street Address line 3 of the contact person | N | “address3”: “Main St.” |
agreeToContact |
Boolean | Willingness to be contacted (Add to Lead API and filter the leads by this indicator when it’s value if “Y”) Note: Only for China Leads |
N | “agreeToContact”: true | |
bcpNewUsedRental |
Enum | New, Used, Rental | N | “bcpNewUsedRental”: “Rental” | |
businessPhone |
String | 255 | Business phone of contact person Country code + Local Number |
N | “businessPhone”: “+1 +1 (309)-654-5555” |
businessUnit |
String | 255 | CAT business unit BCP Cat Financial Cat Rental CD&T Electric Power Enterprise/Brand eCommerce Equipment Training Solutions Forestry GCI GASD Governmental Industrial Power Industrial and Waste Marine Mining Oil and Gas On Highway Truck Paving Portable Generators Product Support Safety Technology Used Work Tools |
N | “businessUnit”: “BCP” |
callCenterComments |
String | 5000 | Field for call center comments only | N | “callCenterComments”: “No plans to purchase at this time” |
callCenterFollowUpStatus |
String | 255 | Enterprise field for call center follow up status, standard values exist Contact - No Purchase Contact - Nurture Contact - Purchased Caterpillar Contact - Purchased Competitor Contact - Redistribute No Contact - No Action No Contact - No Purchase No Contact - Nurture No Contact - Purchased Caterpillar No Contact - Purchased Competitor No Contact - Redistribute |
N | “callCenterFollowUpStatus”: “No Purchase” |
callCenterProcessDate1 |
Date | Date when this lead was processed by the call center | N | “callCenterProcessDate1”: “2019-08-24” | |
catCampaignMostRecent |
String | 255 | Most recent CAT campaign | N | “catCampaignMostRecent”: “Cat.com Request a Quote” |
catDealerCode |
String | 255 | The dealer code associated with the legal dealer’s name | N | “catDealerCode”: “B330” |
catPrequalificationStatus |
Boolean | CAT Financial qualification either based on payment history and/or credit score true false |
N | “catPrequalificationStatus”: true | |
clFleetSize |
String | 255 | Size of the fleet | N | “clFleetSize”: “1” |
city |
String | 40 | Address city of contact person | N | “city”: “Peoria” |
commentsMaster |
String | 32768 | Comments | N | “commentsMaster”: “I’m looking for a rental price by the day on a 90hp high flow track machine with a forestry mulching attachment.” |
company |
String | 255 | Name of customer’s company | N | “company”:” Future Innovations Inc.” |
companySize |
String | 255 | Number of employees in the company | N | “companySize”: “1000” |
contactForQuestions |
String | 255 | Customer contact for questions | N | “contactForQuestion”: “John Doe” |
contactSourceOriginal |
String | 255 | Indicates which type of campaign the contact was part of - Form Submission - Dealer Upload -Event List -Database List -Purchased List -Call Center Integration |
N | “contactSourceOriginal”: “Tradeshow List” |
country |
String | 100 | Contact person address country | N | “country”: “United States of America” |
countryCode |
String | 10 | 2 Alpha ISO country code of contact person | N | countryCode”: “US” |
county |
String | 100 | Address CountyNote: Only for China Leads |
N | “county”:”Peoria” |
currentProductMaster |
String | 32768 | Current Product Master | N | “currentProductMaster”: “Serial #: TAW05166Box #:549-3131Harness #:532-5452” |
dateCreated |
Date | Lead creation date time | N | “dateCreate”:” 2020-04-19T20:31:04+00:00” | |
dateRegistered |
Date | Registration Date Note: Only for China Leads |
N | “dateRegistered”:”2020-01-23 T20:31:04+00:00” | |
digitalActivity |
String | 255 | Aggregate measurement of Google Analytics activity | N | “digitalActivity”: “45” |
emailAddress |
String | 80 | Email Address of the Contact | N | “emailAddress”: “John.doe@gmail.com” |
enginePerformanceNumber | String | 255 | Performance number of the engine | N | “enginePerformanceNumber”: “60” |
equipmentNumber |
String | 255 | Equipment Number | N | “equipmentNumber”: “966K” |
featureCode |
String | 255 | An external code that is provided by a Dealer or Campaign to use in a promotional type event | N | “featureCode”: “CI5DECE” |
financingMethod |
String | 255 | Method of financing the purchase | N | “financingMethod”: “Buy” |
firstName |
String | 40 | First name of the contact person | N | “firstName”: “John” |
gender |
String | 50 | Contact person gender MALE FEMALE Note: Only for China Leads |
N | “gender”:”F” |
industry |
String | 255 | Company industry - Agriculture - Caterpillar Defense - Governmental Local/State - Construction - Demolition & Scrap/Recycling - Electric Power - Forestry - Industrial Power - Landscaping - Marine - Material Handling with Forklifts - Mining - Oil and Gas - On-Highway Trucks - Paving - Pipeline - Powerplants - Quarry, Aggregates and Cement - Snow Removal - Waste Industry |
N | “industry”: “Agriculture” |
jobRole |
String | 255 | Employment | N | “jobRole”:” Owner/Operator” |
jobsiteAddress1 |
String | 255 | Street address of job site | N | “jobsiteAddress1”: “6614 N. Wild Dr.” |
jobsiteAddress2 |
String | 255 | Extended address of job site | N | “jobsiteAddress2”: “Floor 2” |
jobsiteCity |
String | 255 | Job site city name | N | “jobsiteCity”: “Peoria” |
jobsiteCountry |
String | 255 | 2 Alpha ISO country code of job site country | N | “jobsiteCountry”: “US” |
jobsiteStateProv |
String | 255 | Alpha ISO State code of job site | N | “jobsiteStateProv”: “IL” |
jobsiteZipPostal |
String | 255 | Job site zip of postal code | N | “jobsiteZipPostal”: “61533” |
lastName |
String | 80 | Last name of the contact person | N | “lastName”: “Doe” |
leadId |
String | 255 | Caterpillar lead ID | Y | “leadId”: “ab0b1G00000EuLYGQU” |
leadScore |
String | 255 | Aggregate score prioritizing leads within the DCC | N | “leadScore”: “86” |
leadSourceMostRecent |
String | 255 | The last Lead activity | N | “leadSourceMostRecent”: “NA” |
leadState |
String | 10 | State of the Lead NEW UPDATED SENT (Only for historic end point) |
Y | “leadState” : “NEW” |
levelOfInterest |
String | 255 | Level of Interest to buy or lease the product | N | “levelOfInterest”: “Requesting dealer consultation” |
liftingCapacity |
String | 255 | Lifting Capacity | N | “liftingCapacity”: “ 10,000-14,000 lbs” |
mobilePhone |
String | 255 | Mobile phone of contact person | N | “mobilePhone”: “309-111-2222” |
name |
String | 120 | Full Name | N | “name”:”John Doe” |
partQuoteNumber |
String | 255 | Part quote number | N | “partQuoteNumber”: “3572518” |
partShoppingCart |
String | 32768 | Part shopping cart | N | “partShoppingCart”: ““<tr > <td style=”font:12px Arial;” bgcolor=“#dfdfdf”376-1410 </td> <td style=“font:12px Arial;” bgcolor=“#dfdfdf”> 376-1410 </td> <td> style=“font:12px Arial;” align=“right” bgcolor=“#dfdfdf”> 1 </td> </tr>” |
powerRating1 |
String | 255 | Power Rating 1 of the equipment | N | “powerRating1”: “” |
powerRating2 |
String | 255 | Power Rating 2 of the equipment | N | “powerRating2”: “” |
powerRating3 |
String | 255 | Power Rating 3 of the equipment | N | “powerRating3”: “” |
productOfInterest |
String | 1000 | Captures individual product identification via PIM on Product pages | N | “productOfInterest”: “Selected Gensets: Number of Gensets: 1, Model: DE18E3, Duty: Standby” |
productOfInterestList |
String | 32768 | Unstructured data capture for a customer | N | “productOfInterestList”: “Skid Steer Loaders” |
productOfInterestQuantity |
Int | 6 | This field was created for use in BuyerZone contacts to collect amount of order | N | “productOfInterestQuantity”: “100” |
purchaseTimeframe |
String | 255 | Timeframe within which this deal can be closed - Less Than A Week - One Month or Less - 1-3 Months - 4-6 Months -7-9 Months - 10-12 Months - 12-24 Month - More than 24 Month |
N | “purchaseTimeframe “: “1-3 months” |
rentalEndDate |
Date | End date of rental | N | “rentalEndDate”: “2019-11-04” | |
rentalStartDate |
Date | Start Date of a Customer needed to Rent a machine | N | “rentalStartDate”: “2019-10-24” | |
serialNumber |
String | 255 | Serial number of machines for service leads | N | “serialNumber”: “MLW00643” |
sfmcActivity |
String | 255 | Aggregate measurement of Google Analytics activity | N | “sfmcActivity”: “56” |
shippingInformation |
String | 32768 | Shipping information of customer | NN | “shippingInformation”: “100 N W Columbus Rd, Washington” |
stateOrProvince |
String | 255 | For all countries, provided contact person’s state name. Field is used to send state/province codes/names or UNKNOWN. Example data values are: “OH”, “NSW”, “UNKNOWN” | N | “stateOrProvince”: “OH” |
systemFamily |
String | 255 | System Field name used to capture family name from cat.com | N | “systemFamily”: “Electric Power Generation” |
systemLanguage |
String | 255 | Language associated to lead - en_ZA -es_ES -es_MX - es_US -fr_DZ - fr_FR -fr_US -id_ID - it_IT -ja_JP - ko_KR -nl_NL -pl_PL - pt_BR - ru_RU -sv_SE - zh_CN - zh_TW - zh_ZA |
N | “systemLanguage”: “en_US” |
systemModel |
String | 255 | Product Model | N | “systemModel”: “416F2” |
systemModelId |
String | 255 | Product Model ID | N | “systemModelId”: “10084” |
systemScore |
String | 255 | Combined score using a letter (A-E) and Number (1-5) | N | “systemScore”: “A3” |
systemSubFamily |
String | 255 | System Field name used to capture Sub Family name from cat.com | N | “systemSubFamily”: “Diesel Generator Sets” |
utmCampaign |
String | 255 | Campaign associated to Lead | N | “utmCampaign”: “ep_pd_email1” |
zipOrPostal |
String | 20 | Address Zip or Postal code of contact person | N | “zipOrPostal”: “61615” |
When we send Marketing Opportunity record | What do we send? | Comments |
---|---|---|
Lead records that have not been distributed to dealer | List of Marketing Opportunities (all elements) | Marketing Opportunity records not distributed to dealers will be sent when an API call is made to GET Leads |
Request | GET By Date Range (only returns already Pulled Leads) body parameters – leads |
---|---|
AUTHORIZATION | Bearer <AccessToken> |
CONTENT-TYPE | application/json |
ACCEPT | application/json |
GET | leads |
Example | https://services.cat.com/marketing/ecrm/leadManagement/v2/leads/historic?startdate=2020-04-01&enddate=2020-04-03&offset=0&limit=100 |
Parameter | Type | MaxLength | Description | Required (Y/N/C) |
Sample |
---|---|---|---|---|---|
Authorization |
string | Time limited Bearer token returned from OAuth server to access Partner API. | Y | Bearer eyJhbGc… | |
limit |
Int | Query parameter to limit the number of Leads in the GET call response JSON. Max limit = 100 |
N | 50 | |
offset |
Int | Query parameter to for pagination used in combination with limit parameter Default:0 |
N | 2 offset=0&limit=100 gives first 100 leads offset=100 &limit=100 gives next 100 leads as long as there are more than 100 leads. If there are only 55 leads, then JSON response will only contain data for 55 leads |
|
startdate |
date | Leads created as the start date of the date range (yyyy-mm-dd) | Y | 2020-04-02 | |
enddate |
date | Leads created date as the end date of the date range (yyyy-mm-dd) | Y | 2020-04-03 |
This end point provides latest snapshot of the lead with all current values.
Request | POST body parameters – leads |
---|---|
AUTHORIZATION | Bearer <AccessToken> |
CONTENT-TYPE | application/json |
ACCEPT | application/json |
GET | leads |
Example | https://services.cat.com/marketing/ecrm/leadManagement/v2/leads |
Parameter | Type | MaxLength | Description | Required (Y/N/C) |
Sample |
---|---|---|---|---|---|
Authorization |
String | Time limited Bearer token returned from OAuth server to access Partner API. | Y | Bearer eyJhbGc… |
Request JSON – Leads object
Parameter | Type | MaxLength | Description | Required (Y/N/C) |
Sample |
---|---|---|---|---|---|
closedNoDeal |
Integer | 0 | Field to indicate if opportunity was closed due to no deal 1- Lost due to no deal 0- Lost for other reason Conditional: If probabilityOfClosurePercentage = 0 and opportunity was not lost to competitor or disqualified |
C | “closedNoDeal”: 1 |
closedReasonComments |
String | 255 | Additional comments for Closed Leads | N | “closedReasonComments”: “Customer negotiated for additional discount” |
comments |
String | 1000 | It is a free text field to inform Caterpillar on how dealer is interacting with the customer and other related information, examples: Phone Consultation In-Person-Visit Scheduled Demo |
N | “comments: “Working with customer on detailed configuration” |
currencyIsoCode |
String | 3 | 3 Alpha currency iso code of the amount | Y | “currencyIsoCode”: “USD” |
currentProductOfInterestDetails |
String | 255 | Current Product & Quantity details | N | “currentProductOfInterestDetails: “Excavator:2; Dozer:3” |
customerPreviouslyKnown |
String | 1 | Do you already know this customer? - Yes - No |
N | “customerPreviouslyKnown”: “Yes” |
customerContacted |
String | 1 | Did you make contact with the customer? -Yes -No |
N | “customerContacted”: “No” |
dateContacted |
Date | Date when dealer contacted the customer If customerCont acted = “Yes” then this field is required |
C | “dateContacted”: ”2020-04-19” | |
dealerCustomerNumber |
String | 40 | Dealer Customer Account Id DCN is only required when an Opportunity is Closed Lost/Closed Won or Closed No Deal | C | “dealerCustomerNumber”: “123453” |
dealerLeadId |
String | 80 | The Dealer’s lead unique identifier. This will be used to reference dealer’s lead id | Y | “dealerLeadId”: “LEAD-1234454” |
dealerOpportunityId |
String | 80 | Dealer opportunity unique identifier. This will be used to reference dealer’s opportunity id Only required when lead is converted to an opportunity or when Dealer lead stages are mapped to CAT opportunity stages |
C | “dealerOpportunityId”: “OPP-1234454” |
dealerSalesRep |
String | 50 | Dealer Sales Rep assigned to marketing opportunity | Y | “dealerSalesRep”: “John Doe” |
dealerSalesRepNumber |
String | 100 | Dealer Sales Rep Number of the dealer sales rep assigned to marketing opportunity | Y | “dealerSalesRepNumber”: “AB12496” |
disqualifiedReasonComments |
String | 255 | Conditional: < br>- If disqualifiedReasonWhy = “End-user, end-use or end-destination may be restricted” or “Other” or “Lead Already Known” - Conditional prompt if selected option is “End-user, end-use or end-destination may be restricted”: Provide a contact name at the dealer for Caterpillar to determine if further actions are required (i.e., add entity to Caterpillar restricted party list). |
C | “disqualifiedReasonComments”: “After discussing with customer requirements couldn’t be met” |
disqualifiedReasonWhy |
String | 255 | If leadStatus = ’Disqualified” then provide one of the following reasons - Cannot reach/no response from customer - Purchase time frame changed - No budget - No longer a product need/want - Customer already purchased - End-user, end-use or end-destination may be restricted - Dealer not interested in pursuing - Lead Already Known - Other |
C | “disqualifiedReasonWhy” : “No budget” |
leadId |
String | 80 | Unique identifier of the marketing opportunity from Caterpillar CRM system This is the key element required on the updates returned by dealers. |
Y | “opportunityId”: “ab0b1G00000EuLYGQ2” |
leadStatus |
String | 20 | LeadStatus Accepted Rejected Disqualified |
Y | “leadStatus”:” Accepted” |
opportunityAmount |
Decimal | 16,2 | Potential opportunity amount. When lead is converted to an Opportunity this field is required. |
C | “opportunityAmount”: “142410.00” |
primaryClosedReason |
String | 255 | Reason why opportunity was Closed Lost If probabilityOfClosurePercentage = 0 and closedNoDeal = 0 then this field is required Standard Closed Reason: - Products/Parts Not in Cat Network -Products/Parts Not in Dealer’s Network - Inconvenient Service Location -Dealer Operating hours - Dealer Service Capability -Sales Capability (Expertise/ Coverage / Participation / SFM) -Quote Processing Time -Competitive Financial (Term/Rates/Scope) - Warranty Term (Term/Rate/Scope) -Product Durability - Product Family Quality -Application Fit -Product Serviceability (access, ease of maintenance) - Product Specification -Mixed/Full Fleet Solution Not Available -Used Parts/Equipment not Available - Cat Price too High -Cat Value story not Convincing -Cat Value story - Not available - Competition lifetime value superior |
C | “primaryClosedReason”: “Products/Parts Not in Dealer’s Network” |
probabilityOfClosurePercentage |
Number | 3,0 | Probability of Closure in percentage This field is required when lead is converted to an Opportunity. Note: Please see Caterpillar Opportunity stage percentage ranges Dealer Opportunity stage mapping to Caterpillar Opportunity stage percentage will be required. |
C | “probabilityOfClosurePercentage”: “50” |
quoteSentDate |
Date | Date of quote | N | “quoteSentDate”:” 2020-04-19” | |
quoteId |
String | 255 | Quote Id for the opportunity | N | “quoteId”: “12322” |
rating |
String | 20 | Rating of opportunity, possible values -High - Low -Medium |
N | “Rating”: “High” |
rejectedReasonComments |
String | 1000 | Comments entered for Rejection Conditional: If rejectedReasonWhy = “End-user, end-use or end-destination may be restricted” or “For Another Dealer” or “Product / Service not offered at dealership” Conditional prompt if selected option is “End-user, end-use or end-destination may be restricted”: Provide a contact name at the dealer for Caterpillar to determine if further actions are required (i.e., add entity to Caterpillar restricted party list). |
C | “rejectedReasonComments”: “Sales Rep called customer and found this was not a valid requirement” |
rejectedReasonWhy |
String | 1000 | If leadStatus = “Rejected” then this value must be provided Reason for rejection - Bad Contact Information - For Another Dealer - Product/Service Not Offered at Dealership - End-user, end-use or end-destination may be restricted - Duplicate Lead Received - Spam/Inappropriate Lead Submission |
C | “rejectedReasonWhy”: Bad Contact Information” |
secondaryClosedReason |
String | 2500 | Secondary reason for closing (Lost or Won or No Deal) the opportunity | N | “secondaryClosedReason”: “Change of Ownership” |
targetDate |
Date | target date of closure. When lead is converted to an Opportunity this field is required. | C | “targetDate”: “2019-10-24” |
Sample POST body for Scenario: Lead Status = Rejected and rejectedReasonComments
is not required
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "AO12CD",
"leadStatus": "Rejected",
"rejectedReasonWhy": "Bad Contact Information",
"currencyIsoCode":"USD"
}
]
Sample POST body for Scenario: Lead Status = Rejected and rejectedReasonComments
is required due to value of rejectedReasonWhy
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "AO12CD",
"leadStatus": "Rejected",
"rejectedReasonWhy": " For Another Dealer ",
"rejectedReasonComments": " Incorrectly routed to our dealership",
"currencyIsoCode":"USD"
}
]
OR
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
“dealerOpportunityId”: null,
"targetDate":null,
"probabilityOfClosurePercentage":null,
"rating":null,
"dealerSalesRep":"JOHN DOE",
"opportunityAmount": 0,
"leadStatus":"Rejected",
"rejectedReasonWhy": " For Another Dealer ",
"rejectedReasonComments": " Incorrectly routed to our dealership",
"currencyIsoCode":"USD",
“comments”: null
}
]
Sample POST body for Scenario: Lead Status = Accepted
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “Yes”,
“dateContacted”: “2020-04-19”
"dealerCustomerNumber ": "123433",
"dealerSalesRep":"JOHN DOE",
"leadStatus": "Accepted",
"currencyIsoCode ":"CNY"
}
]
Sample POST body for Scenario: Lead Status = Disqualified and Customer was contacted
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: true,
“dateContacted”: ”2020-04-19”
"dealerCustomerNumber ": "123433",
"dealerSalesRep":"JOHN DOE",
"leadStatus": "Disqualified",
“disqualifiedReasonWhy” : “No budget”,
"currencyIsoCode ":"CNY"
}
]
OR
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
“dealerOpportunityId”: null,
"targetDate":null,
"probabilityOfClosurePercentage":null,
"rating":null,
"dealerSalesRep":"JOHN DOE",
"opportunityAmount": 0,
"leadStatus":"Disqualified",
"currencyIsoCode":"USD",
“disqualifiedReasonWhy”: “No budget”,
“comments”: null
}
]
Sample POST body for Scenario: Lead Status = Disqualified and disqualifiedReasonWhy
is Other
or End-user
, end-use or end-destination may be restricted or Lead Already Known”
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: true,
“dateContacted”: ”2020-04-19”
"dealerCustomerNumber ": "123433",
"dealerSalesRep":"JOHN DOE",
"leadStatus": "Disqualified",
“disqualifiedReasonWhy” : “Other”,
“disqualifiedReasonComments” : “After discussing with customer requirements couldn’t be met”,
"currencyIsoCode ":"CNY"
}
]
Sample POST body for Scenario: Opportunity Stages = Qualification
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“dealerOpportunityId”: “B23445232ASSDDV”,
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
"targetDate": “2021-09-23”,
"probabilityOfClosurePercentage":10,
"rating":"Low",
"dealerSalesRep":"JOHN DOE",
"opportunityAmount":1999.45,
"leadStatus":" Accepted ",
"currencyIsoCode":"USD"
}
]
Sample POST body for Scenario: Opportunity Stages = Develop Solution
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“dealerOpportunityId”: “B23445232ASSDDV”,
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
"targetDate": “2021-09-23”,
"probabilityOfClosurePercentage":35,
"rating":"Medium",
"dealerSalesRep":"JOHN DOE",
"opportunityAmount":1999.45,
"leadStatus":" Accepted ",
"currencyIsoCode":"USD"
}
]
Sample POST body for Scenario: Opportunity Stages = Proposal/Negotiation
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“dealerOpportunityId”: “B23445232ASSDDV”,
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
"targetDate": “2021-09-23”,
"probabilityOfClosurePercentage":70,
"rating":"High",
"dealerSalesRep":"JOHN DOE",
"opportunityAmount":1999.45,
"leadStatus":" Accepted",
“quoteSentDate”: “2020-08-18”,
“quoteId”: “12AS223”,
"currencyIsoCode":"USD"
}
]
Sample POST body for Scenario: Opportunity Stage = Closed Won
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“dealerOpportunityId”: “B23445232ASSDDV”,
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
"targetDate": “2021-09-23”,
"probabilityOfClosurePercentage":100,
"rating":"High",
"dealerSalesRep":"JOHN DOE",
"opportunityAmount":1999.45,
"leadStatus":" Accepted",
“quoteSentDate”: “2020-08-18”,
“quoteId”: “12AS223”,
"currencyIsoCode":"USD"
“primaryClosedReason”: “Warranty Term (Term/Rate/Scope)”,
“secondayClosedReason”: “Deal was closed with additional discount”,
“closedReasonComments”: “Customer negotiated for additional discount”
}
]
Sample POST body for Scenario: Opportunity Stage = Closed No Deal
[
{
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“dealerOpportunityId”: “B23445232ASSDDV”,
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
"targetDate": “2021-09-23”,
"probabilityOfClosurePercentage":0,
"rating":"low",
"dealerSalesRep":"JOHN DOE",
"opportunityAmount":1999.45,
"leadStatus":" Accepted",
"currencyIsoCode":"USD"
“closedNoDeal”: 1,
“quoteSentDate”: “2020-08-18”,
“quoteId”: “12AS223”,
“primaryClosedReason”: “Products/Parts Not in Cat Network”,
“secondayClosedReason”: “Products were not available within CAT Network since they were discontinued”
}
]
Sample POST body for Scenario: Opportunity Stage = Closed Lost
[
{"
"leadId": "00Q1W00001SmV5oUAF",
"dealerLeadId": "A123VSDFDFF",
“dealerOpportunityId”: “B23445232ASSDDV”,
“customerPreviouslyKnown”: “Yes”,
“customerContacted”: “No”,
"dealerCustomerNumber ": "123433",
"targetDate": “2019-09-23”,
"probabilityOfClosurePercentage":0,
"rating":"low",
"dealerSalesRep":"JOHN DOE",
"opportunityAmount":1999.45,
"leadStatus": " Accepted",
"currencyIsoCode": "USD"
“closedNoDeal”: 0,
“quoteSentDate”: “2020-08-18”,
“quoteId”: “12AS223”,
“primaryClosedReason”: “Competitive Financial (Term/Rates/Scope)”,
“secondayClosedReason”: “None”,
}
]
The primary key for a Leads is:
leadId
Transmission/Media Type
- Mailbox
- Web service
- LU6.2
- XML
- API
- PC to Client
- Web Download/SIFT
- CD
Testing Procedures
For testing with Caterpillar QA environment:
Description | URL |
---|---|
Obtain Bearer token for QA | https://fedloginqa.cat.com/as/token.oauth2 |
Invoke service in QA | https://services-qa.cat.com/marketing/ecrm/leadManagememt/v2/leads |
You must have valid Client ID credentials for QA environment. Contact ECRM team for help.
In addition to System Integration testing, following tests should be completed by the consumer of the API
- Load testing
- Ability to make consecutive GET calls until all PSEs are ingested and GET call returns 0 leads (Note: Since Lead API GET call will only deliver 100 leads, this capability is required to make sure that dealers can pull all leads if the number of leads exceed 100).
- Dealer error handling
- Any response code received other than 200 OK or 204 No Content,
- Retry mechanism should make API call at least 5 times before failing.
- After Retry failure, it is recommended to trigger an email alert to dealer CRM team to review the error including error details and take necessary actions to fix the error.
- Any response code received other than 200 OK or 204 No Content,
Testing Coordination
- Testing can be performed without Caterpillar DICE Team assistance
- Testing requires coordination with the Caterpillar ECRM team
Testing Comments
- Use Postman to test the interface process before deploying more advanced applications using the Partner API.
Who To Contact
For scheduling your testing needs, please contact you assigned Program Manager
Testing will be coordinated by ECRM deployment team
Test Configuration
N/A
Production Information
Production Comment
Production Endpoints:
Description | URL |
---|---|
Obtain Bearer token for PROD | https://fedlogin.cat.com/as/token.oauth2 |
Invoke service in PROD | https://services.cat.com/marketing/ecrm/leadManagement/v2/leads |
You must have valid Client ID credentials for PROD environment. Contact ECRM team for help.
Production Configuration
N/A