Skip to Content
Technical Articles
Author's profile photo gauri nargunde

Execution of SAP CPQ API

SAP (CallidusCloud) CPQ is the industry-leading cloud-based sales tool which automates the quote and proposal process enabling companies to produce accurate and highly configured sales quotes for customers. SAP CPQ is designed to calculate even the most complicated and lengthy quotes instantly and fits perfectly between SFA, ERP, CLM, Billing. One of the key solution component is the out of box APIs which are available in order to perform multiple set of activities. It is essential to understand how the APIs can be invoked or used as part of overall solution for successful on time on budget implementation.

In this blog I have shared how out of the box API’s can be invoked from external software’s like SOAPUI or POSTMAN while working in SAP CPQ and integrating with other products. The main focus of the blog is to demonstrate XML request formation in order to trigger the API successfully for quote, product and user creation in SAP CPQ system.

First step is to download the WSDL file from SAP CPQ system.

To access SAP CPQ’s API, use the following URLs:

  • <tenant url>/wsAPI/CPQAPI.asmx – this is the set of user-level functions
  • <tenant url>/wsAPI/wssrv.asmx      – this is the set of administrator-level fu

Lets start with Examples:-

First API :- NewQuote

Endpoint URL:-  <tenant url>/wsAPI/CPQAPI.asmx

The standard web service definition gives the request as follows:-

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <NewQuote xmlns="http://webcominc.com/">
      <username>string</username>
      <password>string</password>
      <owner>string</owner>
      <xml>xml</xml>
    </NewQuote>
  </soap:Body>
</soap:Envelope>

The xml for new quote will include market code, Pricebook, Product name, Catalogue code, Customer details.

In the below XML username, password and owner needs to be replaced with actual names. I have given placeholders.

MarketCode, PriceBookCode, ProductName, CatalogueCode are also placeholders. We need to give actual code in the tags. CatalogueCode is product partnumber code.

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://webcominc.com/">
   <soap:Header/>
   <soap:Body>
      <web:NewQuote>       
         <web:username>sapcpquser#domain</web:username>         
         <web:password>password</web:password>        
         <web:owner>owner</web:owner>       
         <web:xml>
            <Cart>
               <MarketCode>MarketCode</MarketCode>
               <PricebookCode>PriceBookCode</PricebookCode>
               <ShippingMethod/>
               <ShippingPrice>1</ShippingPrice>
               <TaxExempt>0</TaxExempt>
               <CartComment/>
                <Items>
                  <Item>
                     <Quantity>1</Quantity>
                     <ProductName>Name of the Product</ProductName>
                     <CatalogueCode>PartNumber</CatalogueCode>
                     <ItemPrice>680</ItemPrice>
                     <Attributes>
                        <Attribute>
                           <Name>ExampleName</Name>
                           <Value>100</Value>
                           <Value>101</Value>
                        </Attribute>
                     </Attributes>
                  </Item>
                </Items>
               <Properties>
                  <Property>
                     <Name>Project Name</Name>
                     <Value>Pilot</Value>
                  </Property>
                 </Properties>
               <Customers>
                  <Customer CustomerRoleType="1">
                     <Id/>
                     <ExternalId/>
                     <FirstName>Harry</FirstName>
                     <LastName>Peter</LastName>
                     <Company>ABCD Company, The</Company>
                     <Address1>ABCD Plaza</Address1>
                     <Address2/>
                     <City>Cincinnati</City>
                     <StateAbbrev>OH</StateAbbrev>
                     <ZipCode>45402</ZipCode>
                     <CountryAbbrev>US</CountryAbbrev>
                     <TerritoryName/>
                     <BusinessPhone>(513) 698-6421</BusinessPhone>
                     <BusinessFax>(513) 983-4381</BusinessFax>
                     <EMail>test@gmail.com</EMail>                    
                  </Customer>
                  <Customer CustomerRoleType="2">
                     <Id/>
                     <ExternalId/>
                     <FirstName>Harry</FirstName>
                     <LastName>Peter</LastName>
                     <Company>ABCD Company, The</Company>
                     <Address1>ABCD Plaza</Address1>
                     <Address2/>
                     <City>Cincinnati</City>
                     <StateAbbrev>OH</StateAbbrev>
                     <ZipCode>45402</ZipCode>
                     <CountryAbbrev>US</CountryAbbrev>
                     <TerritoryName/>
                     <BusinessPhone>(513) 698-6421</BusinessPhone>
                     <BusinessFax>(513) 983-4381</BusinessFax>
                     <EMail>test@yahoo.com</EMail>                    
                  </Customer>
                  <Customer CustomerRoleType="3">
                     <Id/>
                     <ExternalId/>
                     <FirstName>Harry</FirstName>
                     <LastName>Peter</LastName>
                     <Company>ABCD Company, The</Company>
                     <Address1>ABCD Plaza</Address1>
                     <Address2/>
                     <City>Cincinnati</City>
                     <StateAbbrev>OH</StateAbbrev>
                     <ZipCode>45402</ZipCode>
                     <CountryAbbrev>US</CountryAbbrev>
                     <TerritoryName/>
                     <BusinessPhone>(513) 698-6421</BusinessPhone>
                     <BusinessFax>(513) 983-4381</BusinessFax>
                     <EMail>test@rediff.com</EMail>                    
                  </Customer>
               </Customers>
            </Cart>
         </web:xml>
      </web:NewQuote>
   </soap:Body>
</soap:Envelope>

Once the request is executed then Quote is created in SAP CPQ system. The output of the web service is shown as follows:-

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <NewQuoteResponse xmlns="http://webcominc.com/">
            <NewQuoteResult>
                <Result xmlns="">
                    <Status>OK</Status>
                    <Message>New Quote Created</Message>
                    <QuotationNumber>01180050</QuotationNumber>
                    <QuoteLink>http://<SAPCPQ URL>/Login.aspx?quote=CFCECEC7CFCFCACF</QuoteLink>
                </Result>
            </NewQuoteResult>
        </NewQuoteResponse>
    </soap:Body>
</soap:Envelope>

The Quote can be seen in SAP CPQ system

Second API :- UserAdministration

Endpoint URL:- <tenant url> /wsAPI/wssrv.asmx

Request for User Administration Web service part of standard documentation comprises of the following

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <UserAdministration xmlns="http://webcominc.com/">
      <userNameAtDomain>string</userNameAtDomain>
      <password>string</password>
      <action>string</action>
      <xDoc>xml</xDoc>
    </UserAdministration>
  </soap:Body>
</soap:Envelope>

To create a new user, We will use below XML request where the user related tags are passed to the XML and actual user gets created in the system

In the below XML, replace sapcpquser with actual user, domain with actual domain and password with the actual password.

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://webcominc.com/">
   <soap:Header/>
   <soap:Body>
      <web:UserAdministration>       
         <web:userNameAtDomain>sapcpquser#domain</web:userNameAtDomain>       
         <web:password>password</web:password>    
         <web:action>ADDORUPDATE</web:action>
         <web:xDoc>
            <USERPROPERTIES>
               <USERNAME>scn_test</USERNAME>
               <PASSWORD AllowSameAsExisting="1">Welcome1</PASSWORD>
               <TITLE>Mr.</TITLE>
               <FIRSTNAME>scn</FIRSTNAME>
               <LASTNAME>test</LASTNAME>
               <TYPE>Sales</TYPE>
               <EMAILADDRESS>scn_test@mycompany.com</EMAILADDRESS>
               <ADDRESS1>Malad</ADDRESS1>
               <ADDRESS2/>
               <ADMINISTRATOR>TRUE</ADMINISTRATOR>
               <CITY>Mumbai</CITY>
               <STATE>Maharashtra</STATE>
               <ZIPCODE>400097</ZIPCODE>
               <COUNTRY>India</COUNTRY>
               <PHONENUMBER>262-785-8320</PHONENUMBER>
               <FAXNUMBER/>
               <COMPANYCODE>CALD</COMPANYCODE>
               <MUSTCHANGEPASSWORD>0</MUSTCHANGEPASSWORD>
               <PASSWORDLOCKED>0</PASSWORDLOCKED>
               <DEFAULTDICTIONARY>US English</DEFAULTDICTIONARY>
            </USERPROPERTIES>
         </web:xDoc>
      </web:UserAdministration>
   </soap:Body>
</soap:Envelope>

The Response of the web service is as follows:-

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <UserAdministrationResponse xmlns="http://webcominc.com/">
            <UserAdministrationResult>
                <Response xmlns="">
                    <Result>OK</Result>
                    <Message>User scn_test added</Message>
                </Response>
            </UserAdministrationResult>
        </UserAdministrationResponse>
    </soap:Body>
</soap:Envelope>

The Results of executing the web service can be seen in SAP CPQ tenant as follows:-

Third API:-  SimpleProductAdministration

Lets check the SimpleProductAdministration web service XML request and response

Endpoint URL:- <tenant url>/wsAPI/wssrv.asmx

The standard documentation gives the XML request as follows:-

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <SimpleProductAdministration xmlns="http://webcominc.com/">
      <userName>string</userName>
      <password>string</password>
      <action>string</action>
      <xDoc>xml</xDoc>
    </SimpleProductAdministration>
  </soap:Body>
</soap:Envelope>

In this request the xml formation is shown in the below XML code snippet. The product has few tags like ProductName, Categories which have language associated with them. The value of such tags in the XML needs to be given with language tag in addition as shown below. If language tag like <USEnglish> and the description should be given in the format as <![CDATA[Description]] > to give a successful call to SAP CPQ system else the web service will give invalid product name, invalid categories, etc and won’t create product in SAP CPQ.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webcominc.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:SimpleProductAdministration>        
         <web:userName>sapcpquser#domain</web:userName>         
         <web:password>password</web:password>      
         <web:action>ADDORUPDATE</web:action>
         <web:xDoc>
            <Products SkipCategoriesOnProductUpdate="True">
            <Product>
            <ProductName>
<USEnglish><![CDATA[Product Speaker]]> </USEnglish>
</ProductName>
             <DisplayType>Simple</DisplayType>  
            <ProductType>Hardware</ProductType>
            <Categories>
      <USEnglish><![CDATA[Speakers]]></USEnglish>
    </Categories>
            </Product>
            </Products>
         </web:xDoc>
      </web:SimpleProductAdministration>
   </soapenv:Body>
</soapenv:Envelope>

Response:-

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <SimpleProductAdministrationResponse xmlns="http://webcominc.com/">
            <SimpleProductAdministrationResult>
                <Result xmlns="http://webcominc.com/">
                    <Status>OK</Status>
                    <Message>Action successful.</Message>
                </Result>
            </SimpleProductAdministrationResult>
        </SimpleProductAdministrationResponse>
    </soap:Body>
</soap:Envelope>

Web service once executed the product can be found in SAP CPQ system.

I have shown three main API in this blog. I am sure this information will be helpful to SAP CPQ consultants while execution of SAP CPQ projects.

 

Best Regards,

Gauri

 

Assigned Tags

      11 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Trilok Singh Rathore
      Trilok Singh Rathore

      Good Article. Do you have any sample Request for SearchQuotes?

      Author's profile photo gauri nargunde
      gauri nargunde
      Blog Post Author

      Thanks Trilok. I don't have sample request for searchquotes yet.

      Author's profile photo gauri nargunde
      gauri nargunde
      Blog Post Author

      Hi Trilok,

       

      Please find the request example for SearchQuotes

      <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://webcominc.com/">
         <soap:Header/>
         <soap:Body>
            <web:SearchQuotes>
               <!--Optional:-->
               <web:SearchCriteriaXML> <![CDATA[<Root> <SearchCriteria>DATE_CREATED > '12/15/2021 00:00:00'</SearchCriteria></Root>]]></web:SearchCriteriaXML>
            </web:SearchQuotes>
         </soap:Body>
      </soap:Envelope>
      Author's profile photo Nikhil Walsetwar
      Nikhil Walsetwar

      Hi Trilok,

      You'll find a sample request on below help document.

       

      http://help.webcomcpq.com/doku.php?id=appendixd:search_quotes

       

      BR,

      Nikhil

       

       

       

      Author's profile photo Anurag Vardhan
      Anurag Vardhan

      Hi Nikhil,

      Can you please share sample request for search quote? I build a sample but it keeps on ending in bad request.

      Author's profile photo Nikhil Walsetwar
      Nikhil Walsetwar

      Hi Anurag,

      Could you share the service you have built?

       

      Best,

      Nikhil

      Author's profile photo Ajith J S
      Ajith J S

      Hi,

      May i know how do you pass XML data in xDoc tag in actions like Performcartaction or Setcartproperties using absl scripting ?

      I tried to send some data and it is not flowing out of C4C.

      Thanks

      Author's profile photo Abhijit Boyjoonauth
      Abhijit Boyjoonauth

      Hi,

      Thanks for the nice blog.

      I am getting the following error when trying to call any CPQ API from SOAP UI: 'Rejected by policy'. This is an example of the result from 'Do you see me' API call:

      I have tried this on a standalone CPQ tenant, it works.

      I am getting this error on another tenant which is integrated with C4C.

       

      Do you know how we can correct this?

       

      Regards,

      Abhijit

      Author's profile photo shailesh Gupta
      shailesh Gupta

      Hi Gauri,

      Do you have a suggestion on how to do mass update on Country table in CPQ. I can query it, but not able to make any DML operations on it.

      Thanks!

      Author's profile photo Narasaiah Thottempudi
      Narasaiah Thottempudi

      Can you please provide the xml payload for create Customer for SOAP API Quote 1.0 engine

      Author's profile photo Ranjan Shetty
      Ranjan Shetty

      Hi Gauri,

      Is it possible to delete a Pricebook using SOAP API? I have already deleted all the entries within this Pricebook.

      Kindly advise

      Regards,

      Ranjan