AWS Marketplace

Integrate your CRM system with AWS Partner Central using the AWS Partner Central API for Selling

Amazon Web Services (AWS) Partner Central is a self-service portal where AWS Partners manage their sales opportunities with AWS. Many AWS Partners find it beneficial to streamline management of these engagements by integrating their Customer Relationship Management (CRM) systems with AWS Partner Central.

AWS Partner Central provides Application Programming Interfaces (APIs) that enable partners to automate tracking of joint business activities efficiently. By integrating with their CRM systems using the AWS Partner Central APIs, partners can create automated workflows to update their CRM with real-time data from AWS Partner Central. This integration enables consistency and efficiency in managing partnerships, such as synchronizing opportunity information. The APIs allow partners to reduce manual effort and improve collaboration by programmatically accessing and managing their data within AWS Partner Central

In this blog post, we show you how to programmatically integrate your CRM systems with AWS Partner Central to automate and streamline your interactions. Using the AWS Partner Central API, you can create efficient workflows that provide real-time data synchronization, reduce manual effort, and improve collaboration.

Solution Overview

The following diagrams demonstrate the relationship between the AWS Partner Network environment and the Partner environment. They also show the event flow between the two and how the API can be used to manage opportunities via API actions.

The AWS Partner Central APIs help partners manage several key entities that are essential to the sales process.

Opportunity

The Opportunity entity encapsulates all relevant sales information, such as customer contact details, the business problem, and the proposed solution. The following actions are available for managing your opportunities:

  • CreateOpportunity
  • GetOpportunity
  • ListOpportunities
  • UpdateOpportunity
  • AssociateOpportunity
  • DisassociateOpportunity
  • AssignOpportunity.

For each opportunity in a partner’s account, there is a corresponding record in the AWS CRM, which is used by AWS sales representatives to manage their own opportunity lifecycle.

The GetAwsOpportunitySummary API allows partners to retrieve a summary of the opportunity details as recorded in the AWS CRM.

Engagements

The Engagement entity represents the collaboration between AWS and the partner, where opportunities are shared with participants. Partners receive EngagementInvitations, which invite them to join these collaborations. Key actions include:

  • GetEngagementInvitation
  • ListEngagementInvitations
  • RejectEngagementInvitation
  • StartEngagementFromOpportunityTask
  • StartEngagementByAcceptingInvitationTask

Solution

The Solution entity refers to the partner’s offering. Partners can list all the solutions in their Partner Central account using the ListSolutions action.

Event Notifications

To keep data synchronized, are supported:

  • Opportunity Created
  • Opportunity Updated
  • Engagement Invitation Created
  • Engagement Invitation Accepted
  • Engagement Invitation Rejected.

These actions and events provide partners with the tools to automate workflows and enhance collaboration with AWS

Prerequisites – Accounts and IAM role setup

To automate CRM integration with Partner Central via AWS Marketplace Partner Central API, you must meet the following prerequisites:

  1. You must have an AWS Marketplace seller account
  2. You need an AWS Identity and Access Management (IAM) role and/or an IAM user to make API calls. Associate the AWSPartnerCentralOpportunityManagement managed policy to gain access to the APIs.
  3. Your AWS Marketplace Seller account (where you created the IAM role/user) must be linked to your AWS Partner Central account.

Streamlining the integration of CRM with Partner Central

In the following examples, we look at two practical use cases for streamlining CRM integration using Partner Central APIs.

Note on JSON payload

When testing, set the Catalog to ‘Sandbox‘, for production, set the Catalog to ‘AWS‘.

Use case 1: Use Viewing the opportunity pipeline

For partners managing a high volume of opportunities, the ListOpportunities API enables rapid querying of opportunities in bulk, providing a seamless way to synchronize data with your CRM in near real-time.

Use an API development tool like Postman to send a sample request with the following request parameters:

  • URL https://partnercentral-selling.us-east-1.api.aws/ListOpportunities
  • Authorization:
    • Authorization Type: AWS
    • Enter: < AccessKey/ SecretKey> and Region
    • Service Name: partnercentral-selling
  • Headers:
  • Body {"MaxResults": 14, "Catalog":"AWS"}
  • Select Send

The results will be sent back.

This shows the listOpportunities API call, the parameters and the JSON returned

Use case 2: Submitting an ACE opportunity

Let’s look at how to create and submit an opportunity using the Partner Central APIs in a few simple steps.

The steps that follow show how to create and submit a business opportunity to AWS. Creating an opportunity sets its LifeCycle.ReviewStatus to Pending Submission.

To submit an opportunity, partners need to make the following API requests:

  1. Use CreateOpportunity to create the opportunity.
  2. Use ListSolutions to get a complete list of solutions among which you can choose a Solution ID.
  3. Use AssociateOpportunity to associate a solution with the opportunity.
  4. Use StartEngagementFromOpportunityTask to submit the opportunity for review.

Let’s take a closer look at each step along with the API requests and responses.

Step 1: CreateOpportunity

The following is a sample json payload to create an opportunity:  Use this JSON with the CreateOpportunity API action.

Sample Create JSON:

Use the sample create opportunity JSON payload to make a request to the CreateOpportunity API. This API call will return the following json response with an HTTP 200 response:

{
	"Identifier": "O4035221",
	"LastModifiedDate": "2024-07-03T22:37:29Z",
	"PartnerOpportunityIdentifier": "12045678"
}

The Identifier field contains the newly created opportunity identifier. When you create an opportunity, it is added to your account but has not yet been submitted to AWS. The LifeCycle.ReviewStatus is set to “Pending Submission,” meaning the opportunity requires additional actions before it can be submitted for review.

AssociateOpportunity

Next, use the AssociateOpportunity API to associate this new opportunity with a solution:

{
   "Catalog": "AWS",
   "OpportunityIdentifier": "O4035221",
   "RelatedEntityIdentifier": "S-0050016",
   "RelatedEntityType": "Solutions"
}

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.

Step 2: Querying the list of solutions

Once you have the opportunity created in the Pending status, you will need to associate a solution. However, to get a list complete list of solutions among which you will select a solution, you need a ListSolution action as shown below.

{ "Catalog": "AWS","MaxResults": 20}

The response should give you a list of solutions like:

{
	"NextToken": null,
	"SolutionSummaries": [
		{
			"Arn": "arn:aws:partnercentral:us-east-1:123456789012:catalog/AWS/solution/S-0000001",
			"Catalog": "AWS",
			"Category": "Software Product",
			"CreatedDate": "2024-01-24T07:08:31Z",
			"Id": "S-0000001",
			"Name": "SampleSolution1",
			"Status": "Inactive"
		},
. . .
	]
}

Step 3: Associating the solutions to the opportunity

Now that you have a list of solutions to choose from, use the AssociateOpportunity API to associate the solution with the opportunity.

{
   "Catalog": "AWS",
   "OpportunityIdentifier": "O4035221",
   "RelatedEntityIdentifier": " S-0000002",
   "RelatedEntityType": "Solutions"
}

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body. Optionally, you can associate the AWS Products that are associated with this opportunity.

Step 4: Starting an Engagement with the Opportunity

Lastly, use StartEngagementFromOpportunityTask to initiate the engagement process from an existing opportunity. This action creates an Engagement and invites AWS to collaborate on the opportunity. This is equivalent to submission. The following is the request JSON payload syntax:

{
   "AwsSubmission": { 
      "InvolvementType": "Co-Sell",
      “Visibility”: “Full”
   },
   "Catalog": "AWS",
   "ClientToken": "xyz9876-abcd-4321-efgh-5678ijklmnop",
   "Identifier": "O4397574"
}

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.

Once StartEngagementFromOpportunityTask is initiated, the opportunity cannot be edited until the review is complete. Partners can update the opportunity while the LifeCycle.ReviewStatus is Pending Submission state. Updates cannot be made if the LifeCycle.ReviewStatus is Submitted or In-Review.

For details on updating opportunity, please refer to Working with Opportunity Updates.

The following diagram maps out the Partner Originated (PO) opportunity workflow, and also show how events flow to Amazon EventBridge.

Use case 2: Engaging with AWS on an AWS referral

When an AWS sales representative shares an opportunity with a partner, the partner receives an Engagement Invitation Created event notification from AWS. Partners can listen to this event and then programmatically accept the invitation and engage with AWS right within their CRM. Alternately, partners can periodically poll for Engagement Invitations and work on any new EngagementInvitation. Let us look at how this works.

Step 1: Get the engagement invitation using the API

Partners can also use ListEngagementInvitations to see all open invitations in their account. The ListEngagementInvitations actions gives a range of filters that allow you to narrow the results to only those invitations that you wish to see.

JSON Request payload:

In use case 2, we walk through a simulation of a partner getting a list of opportunities and then programmatically accepting one through their CRM.

Step 1: List the opportunities using the API

Use the ListEngagementInvitations action, setting filters as necessary.

Json payload:

{
   "Catalog":"AWS",
   "MaxResults":10
}

Step 2: Retrieve the opportunity details

We can now use the identifier returned from the ListEngagementInvitations API call to retrieve the opportunity details.

Select an opportunity ID from the ListOpportunityEngagementInvitations response and use the get GetOpportunity action.

JSON payload:

{
   "Catalog":"AWS",
   "MaxResults":10
}

The response will give you a list of the invitations, like this:

{
    "EngagementInvitationSummaries":
    [
        {
            "Arn": "arn:aws:partnercentral:us-east-1::catalog/AWS/engagement-invitation/engi-0000000000001",
            "Catalog": "AWS",
            "EngagementId": null,
            "EngagementTitle": "Sample Engagement 01",
            "ExpirationDate": "2024-10-22T0 ",
            "Id": "engi-0000000000001",
            "InvitationDate": "2024-10-16T04:28:37Z",
            "PayloadType": "OpportunityInvitation",
            "Receiver":
            {
                "Account":
                {
                    "Alias": "SampleAlias",
                    "AwsAccountId": "123456789012"
                }
            },
            "SenderAwsAccountId": "aws",
            "SenderCompanyName": "AWS",
            "Status": "PENDING"
        }
    ],
    "NextToken": null
}

 

The list will give you the Identifier for the Engagement Invitation. Use the GetEngagementInvitation to see details of a particular invitation: JSON payload:

{
   "Catalog": "AWS",
   "Identifier": " arn:aws:partnercentral:us-east-1::catalog/AWS/engagement-invitation/engi-0000000000001"
}

The API call will return the following JSON payload.

{
	"Arn": "arn:aws:partnercentral-selling:us-east-1:aws:catalog/AWS/engagement-invitation/engi-00000000001",
	"Catalog": "AWS",
	"ExpirationDate": "2024-10-03T06:00:00Z",
	"Id": "engi-00000000001",
	"InvitationDate": "2024-09-26T13:20:23Z",
	"Payload": {
		"OpportunityInvitation": {
			"Customer": {
				"CompanyName": "SampleCompany",
				"CountryCode": "US",
				"Industry": "Life Sciences",
				"WebsiteUrl": "www.samplecompany.com"
			},
			"Project": {
				"BusinessProblem": "SampleProjectDescriptionGreaterThanFiftyCharacters",
				"TargetCompletionDate": "2029-05-05",
				"ExpectedCustomerSpend": [
					{
						"Amount": "12500",
						"CurrencyCode": "USD",
						"EstimationUrl": null,
						"Frequency": "Monthly",
						"TargetCompany": "AWS"
					}
				],
				"Title": "SampleProjectTitle"
			},
			"SenderContacts": [
				{
					"BusinessTitle": "PDM",
					"Email": "sample-pdm@domain.com",
					"FirstName": "SampleFirstName",
					"LastName": "SampleLastName",
					"Phone": null
				}
			]
		}
	},
	"PayloadType": "OpportunityInvitation",
	"Receiver": {
		"Account": {
			"Alias": "SampleTestPartner",
			"AwsAccountId": "123456789012"
		}
	},
	"RejectionReason": null,
	"SenderAwsAccountId": "aws",
	"SenderCompanyName": "AWS",
	"Status": "PENDING"
}

The response gives partner sufficient information to make a decision of whether or not to accept the invitation to collaborate on the opportunity.

Step 2: Start the engagement by accepting invitation task
Assuming that the partner wants to engage on the opportunity, the partner can use the StartEngagementByAcceptingInvitationTask action. This action Accepts the engagement invitation, and starts the engagement with AWS.

JSON Payload:

{
	"Catalog": "AWS",
	"Identifier": "arn:aws:partnercentral-selling:us-east-1:aws:catalog/Sandbox/engagement-invitation/engi-0000000IS0Sga",
	"ClientToken": "test-annjqwe"
}

The API call will return the following JSON payload. (Need to add details once this API issue call is fixed)

{
   "EngagementInvitationId": "arn:aws:partnercentral-selling:us-east-1:aws:catalog/AWS/engagement-invitation/engi-0000000IS0Sg ",
   "Message": null,
   "OpportunityId": " O1952682 ",
   "ReasonCode": null,
   "StartTime": "2024-09-27T04:30:45Z ",
   "TaskArn": "string",
   "TaskId": "string",
   "TaskStatus": "COMPLETE "
}

Step 3: Updating the opportunity as it proceeds through its lifecycle
Let us assume that the partner needs to update the stage of the opportunity to Technical Validation, then the Request would be like this:

API call: UpdateOpportunity

Sample Update JSON Payload:

The API call will return the following JSON payload.

{
   "Identifier":" O12345678",
   "LastModifiedDate":" 2024-10-18T07:24:20Z"
}

Listening to AWS Partner Central API events using AWS Event Bridge:

AWS Partner Central events open up a whole new world of possibilities for partners to automate and streamline their workflows. With these events, partners can trigger actions in their own systems, making their operations more efficient and responsive. For example, partners can use events to send automated emails, push notifications on Slack, or initiate workflows within their CRM systems.

Consider a scenario where an AWS referral comes in—partners can instantly identify the territory, assign the opportunity to the appropriate sales rep, and ensure immediate follow-up. In addition, a notification containing the most critical information can be sent to the relevant stakeholders, ensuring quick action. You can even prioritize opportunities based on the AWS Marketplace Engagement Score, focusing on high-potential leads.

This section describes how event flows from the AWS CRM into the partner’s account AWS EventBridge. Events like create, update, and accept opportunities are sent to AWS EventBridge in the partner’s account that can then trigger event actions.

Background Information – API CRM opportunity work flow

APN Event bridge events:

This section describes how event flows from the AWS Partner Central into the partner’s account AWS Eventbridge. Events like create, update, and accept opportunities are sent to AWS EventBridge in the partner’s account that can then trigger event actions.

Event flow overview:

A. AWS CRM manages the opportunities, performing create, update, and accept functions. These actions generate events that are sent to Amazon Event Bridge in step B.

B. An Event Bridge rule is triggered when an event is created, which triggers AWS Lambda function in step C.

C. AWS Lambda processes the event and can be configured to execute a task for each type of event (create, update, accept, etc.) in the Partner CRM in step D.

D. The Partner CRM subprocess is invoked from Step C. Based on the task, it invokes Step E, the ACE CRM API, to perform a task on the opportunity in Step A.

E. The ACE CRM API performs the necessary task on the opportunity in the AWS CRM (Step A), completing the cycle.

Methods for creating an Event Bridge rule

1. AWS console setup Follow the steps on Creating Amazon EventBridge rules that react to events in the Amazon EventBridge guide to set up an EventBridge rule through the AWS Management Console.

2. SDK setup You can also create and manage EventBridge rules programmatically using the AWS SDKs. Here is an example of how you might do this using the AWS SDK for Python (Boto3):

import boto3
client = boto3.client('events')
response = client.put_rule(
	Name='MyOpportunityCreatedRule',
	EventPattern='{"source": ["aws.partnercentral-selling"],"detail-type":["Opportunity Created"], "detail": {"catalog": ["AWS"]}}',
	State='ENABLED')
print('Rule ARN:', response['RuleArn'])

Types of events:

  • Opportunity Created: Triggered when a new opportunity is created.
  • Opportunity Updated: Triggered when an opportunity (Opportunity or its corresponding AWS Opportunity Summary) is updated.
  • Engagement Invitation Created: Triggered when an AWS Referral invitation is created.
  • Engagement Invitation Accepted: This event is triggered when a partner accepts an AWS Engagement Invitation, confirming their interest in collaborating with AWS on the opportunity.
  • Engagement Invitation Rejected: This event is triggered when an AWS Engagement Invitation is rejected.
{
       "version": "1",
       "id": "d1example-0c9c-4655-15bf-c5exampleb08",
	"source": "aws.partnercentral-selling",
		"detail-type": "Opportunity Created",
		"time": "2023-10-28T13:31:05Z",
		"region": "us-east-1",
		"account": "123456789123",
		"detail": {
			"schemaVersion": "1",
			"catalog": "AWS",
			"opportunity": {
				"identifier": "O1234567",
				"url": "<Partner Central Opportunity Page URL>"
			}
		}
}

Example Event Rule

{

"source": ["aws.partnercentral-selling"]

}

Example event processing Lambda

import json
def lambda_handler(event, context):
    print(json.dumps(event))
    if event['detail-type'] ==  "Opportunity Created":
    	#perform Opportunity Created steps
    	print(event['detail-type'])
    if event['detail-type'] ==  "Opportunity Updated":
    	#perform Opportunity Updated steps
    	print(event['detail-type'])
if event['detail-type'] ==  "Opportunity Engagement Invitation Created":
    	#perform Opportunity Engagement Invitation Created steps
    	print(event['detail-type'])
    if event['detail-type'] ==  "Opportunity Engagement Invitation Accepted":
    	#perform Opportunity Engagement Invitation Accepted  steps
    	print(event['detail-type'])
    if event['detail-type'] ==  "Opportunity Engagement Invitation  Rejected":
    	#perform Opportunity Engagement Invitation  Rejected steps
    	print(event['detail-type'])
    return {
        'statusCode': 200,
        'body': json.dumps(event['detail-type'])
    }

Cleanup

To avoid ongoing charges, delete the resources you created:

EventBridge rules

  1. Go to the Event Bridge console.
  2. Select the rule you created.
  3. Select the Delete button.

AWS Lambda functions

  1. Go to the Lambda console.
  2. Select the Lambda function you created.
  3. Select the Actions button then select Delete

Conclusion

The AWS Partner Central provides Application Programming Interfaces (APIs) offers a transformative solution to automate and streamline AWS Partners’ interactions with AWS Partner Central. In this blog post, you’ve discovered how to use Partner Central API to create opportunity, associate a solution and submit the opportunity for review. You also learned how to share opportunities between partners and AWS. We recommend the reader to consult the AWS Partner Central API Sample Code Library repository, which contains code samples for other use cases that streamline AWS Partners and AWS Partner Central integrations.

About the authors

Kenneth Walsh

Kenneth Walsh

Kenneth Walsh is a New York-based Solutions Architect whose focus is AWS Marketplace. Kenneth is passionate about cloud computing and loves being a trusted advisor for his customers. When he’s not working with customers on their journey to the cloud, he enjoys cooking, audio books, movies, and spending time with his family and dog.

Ming Zhu

Ming Zhu is a Marketplace Specialist Solution Architect who focuses on supporting sellers to list their products on AWS Marketplace. Her responsibilities focus on automating and streamlining the partners’ onboarding experience. Besides work, her favorite things to do are swimming, traveling and cooking.

Akshay Menon

Akshay Menon is a Senior Product Manager focused on building products that help AWS Partners streamline and automate their partnership activities with AWS. His work spans CRM Integration, AWS Partner Central APIs and Slack-based collaboration tools. Akshay is an avid podcast listener.