There are more AWS SDK examples available in the AWS Doc SDK Examples
Amend a SaaS contract agreement renewal term using an AWS SDK
The following code examples show how to amend a SaaS contract agreement to add or update its renewal term.
- Java
-
- SDK for Java 2.x
-
Note
There's more on GitHub. Find the complete example and learn how to set up and run in the AWS Marketplace API Reference Code Library
repository. package com.example.awsmarketplace.agreementapi.buyer; import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.marketplaceagreement.MarketplaceAgreementClient; import software.amazon.awssdk.services.marketplaceagreement.model.AcceptAgreementRequestRequest; import software.amazon.awssdk.services.marketplaceagreement.model.AcceptAgreementRequestResponse; import software.amazon.awssdk.services.marketplaceagreement.model.ConfigurableUpfrontPricingTermConfiguration; import software.amazon.awssdk.services.marketplaceagreement.model.CreateAgreementRequestRequest; import software.amazon.awssdk.services.marketplaceagreement.model.CreateAgreementRequestResponse; import software.amazon.awssdk.services.marketplaceagreement.model.Dimension; import software.amazon.awssdk.services.marketplaceagreement.model.GetAgreementEntitlementsResponse; import software.amazon.awssdk.services.marketplaceagreement.model.Intent; import software.amazon.awssdk.services.marketplaceagreement.model.RenewalTermConfiguration; import software.amazon.awssdk.services.marketplaceagreement.model.RequestedTerm; import software.amazon.awssdk.services.marketplaceagreement.model.RequestedTermConfiguration; import utils.AgreementApiUtils; /** * Demonstrates how to create a SaaS agreement with CONTRACT pricing model and then turn on * the auto-renewal setting using the AWS Marketplace Agreement Service APIs. * * <p>Scenario: A buyer subscribes to a SaaS product using a public offer that supports * auto-renewal. After acceptance, the buyer decides to amend the agreement to enable * auto-renewal via the RenewalTerm configuration. * * <p>Before running this sample, replace the placeholder constants below with values from * your AWS Marketplace offer: * <ul> * <li>{@code AGREEMENT_PROPOSAL_IDENTIFIER} — the agreementProposalId from the offer.</li> * <li>Term IDs (starting with {@code term-}) — found in the offer's term list.</li> * <li>{@code SELECTOR_VALUE} — duration for the agreement (e.g., {@code P1M} for 1 month).</li> * <li>{@code DIMENSION_1_KEY} — the dimension key defined in the offer.</li> * </ul> */ public class AmendSaaSContractRenewalTerm { // The agreementProposalId from the offer. private static final String AGREEMENT_PROPOSAL_IDENTIFIER = "<your-agreement-proposal-identifier>"; // Term ID for the ConfigurableUpfrontPricingTerm in your offer. private static final String CONFIGURABLE_UPFRONT_PRICING_TERM_ID = "<your-configurable-upfront-pricing-term-id>"; // Duration for the agreement (e.g., "P1M" for 1 month, "P12M" for 1 year). private static final String SELECTOR_VALUE = "<your-selector-value>"; // The dimension key defined in your offer. private static final String DIMENSION_1_KEY = "<your-dimension-key>"; // Quantity for the dimension. private static final int DIMENSION_1_VALUE = 1; // Term ID for the RenewalTerm in your offer. private static final String RENEWAL_TERM_ID = "<your-renewal-term-id>"; // Term ID for the LegalTerm in your offer. private static final String LEGAL_TERM_ID = "<your-legal-term-id>"; // Term ID for the SupportTerm in your offer. private static final String SUPPORT_TERM_ID = "<your-support-term-id>"; public static void main(String[] args) { amendSaaSContractAgreementRenewalTerm(); } /** * Full end-to-end flow: * 1. Create a SaaS agreement with CONTRACT pricing model with auto-renewal disabled. * 2. Wait for entitlements to become active. * 3. Amend the agreement to enable auto-renewal. */ private static void amendSaaSContractAgreementRenewalTerm() { MarketplaceAgreementClient marketplaceAgreementClient = MarketplaceAgreementClient.builder() .httpClient(ApacheHttpClient.builder().build()) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); RequestedTerm configurableUpfrontPricingTerm = RequestedTerm.builder() .id(CONFIGURABLE_UPFRONT_PRICING_TERM_ID) .configuration(RequestedTermConfiguration.fromConfigurableUpfrontPricingTermConfiguration( ConfigurableUpfrontPricingTermConfiguration.builder() .selectorValue(SELECTOR_VALUE) .dimensions(Dimension.builder() .dimensionKey(DIMENSION_1_KEY) .dimensionValue(DIMENSION_1_VALUE) .build()) .build())) .build(); // Initial agreement: auto-renewal disabled. RequestedTerm renewalTerm = RequestedTerm.builder() .id(RENEWAL_TERM_ID) .configuration(RequestedTermConfiguration.fromRenewalTermConfiguration( RenewalTermConfiguration.builder() .enableAutoRenew(false) .build())) .build(); RequestedTerm legalTerm = RequestedTerm.builder().id(LEGAL_TERM_ID).build(); RequestedTerm supportTerm = RequestedTerm.builder().id(SUPPORT_TERM_ID).build(); // --- Create and accept the initial SaaS agreement request with CONTRACT pricing model --- CreateAgreementRequestRequest createAgreementRequestRequest = CreateAgreementRequestRequest.builder() .clientToken(AgreementApiUtils.generateClientToken()) .intent(Intent.NEW) .requestedTerms(configurableUpfrontPricingTerm, renewalTerm, legalTerm, supportTerm) .agreementProposalIdentifier(AGREEMENT_PROPOSAL_IDENTIFIER) .build(); CreateAgreementRequestResponse createAgreementRequestResponse = marketplaceAgreementClient.createAgreementRequest(createAgreementRequestRequest); System.out.println("Agreement request created. AgreementRequestId: " + createAgreementRequestResponse.agreementRequestId()); AcceptAgreementRequestRequest acceptAgreementRequestRequest = AcceptAgreementRequestRequest.builder() .agreementRequestId(createAgreementRequestResponse.agreementRequestId()) .build(); AcceptAgreementRequestResponse acceptAgreementRequestResponse = marketplaceAgreementClient.acceptAgreementRequest(acceptAgreementRequestRequest); System.out.println("Agreement request accepted. AgreementId: " + acceptAgreementRequestResponse.agreementId()); // Wait for entitlements to become active before amending. System.out.println("Waiting for entitlements to become active..."); GetAgreementEntitlementsResponse entitlementsResponse = AgreementApiUtils.pollUntilEntitlementsAvailable( marketplaceAgreementClient, acceptAgreementRequestResponse.agreementId()); System.out.println("Entitlements are now active."); AgreementApiUtils.formatOutput(entitlementsResponse); // --- Amend: enable auto-renewal --- RequestedTerm renewalTermAmended = RequestedTerm.builder() .id(RENEWAL_TERM_ID) .configuration(RequestedTermConfiguration.fromRenewalTermConfiguration( RenewalTermConfiguration.builder() .enableAutoRenew(true) .build())) .build(); // Use Intent.AMEND and sourceAgreementIdentifier to target the existing agreement. CreateAgreementRequestRequest carRequest = CreateAgreementRequestRequest.builder() .clientToken(AgreementApiUtils.generateClientToken()) .intent(Intent.AMEND) .requestedTerms(configurableUpfrontPricingTerm, renewalTermAmended, legalTerm, supportTerm) .sourceAgreementIdentifier(acceptAgreementRequestResponse.agreementId()) .build(); CreateAgreementRequestResponse carResponse = marketplaceAgreementClient.createAgreementRequest(carRequest); System.out.println("Amend agreement request created. AgreementRequestId: " + carResponse.agreementRequestId()); AcceptAgreementRequestRequest aarRequest = AcceptAgreementRequestRequest.builder() .agreementRequestId(carResponse.agreementRequestId()) .build(); AcceptAgreementRequestResponse aarResponse = marketplaceAgreementClient.acceptAgreementRequest(aarRequest); System.out.println("Amendment accepted. Auto-renewal enabled. New AgreementId: " + aarResponse.agreementId()); } }-
For API details, see CreateAgreementRequest in AWS SDK for Java 2.x API Reference.
-
- JavaScript
-
- SDK for JavaScript (v3)
-
Note
There's more on GitHub. Find the complete example and learn how to set up and run in the AWS Marketplace API Reference Code Library
repository. const { MarketplaceAgreementClient, CreateAgreementRequestCommand, AcceptAgreementRequestCommand, } = require("@aws-sdk/client-marketplace-agreement"); const { generateClientToken, formatOutput, pollUntilEntitlementsAvailable } = require("./utils/AgreementApiUtils"); /** * Demonstrates how to create a SaaS agreement with CONTRACT pricing model and then turn on * the auto-renewal setting using the AWS Marketplace Agreement Service APIs. * * Scenario: A buyer subscribes to a SaaS product using a public offer that supports * auto-renewal. After acceptance, the buyer decides to amend the agreement to enable * auto-renewal via the RenewalTerm configuration. * * Before running this sample, replace the placeholder constants below with values from * your AWS Marketplace offer: * - AGREEMENT_PROPOSAL_IDENTIFIER — the agreementProposalId from the offer. * - Term IDs (starting with "term-") — found in the offer's term list. * - SELECTOR_VALUE — duration for the agreement (e.g., "P1M" for 1 month). * - DIMENSION_1_KEY — the dimension key defined in the offer. */ // The agreementProposalId from the offer. const AGREEMENT_PROPOSAL_IDENTIFIER = "<your-agreement-proposal-identifier>"; // Term ID for the ConfigurableUpfrontPricingTerm in your offer. const CONFIGURABLE_UPFRONT_PRICING_TERM_ID = "<your-configurable-upfront-pricing-term-id>"; // Duration for the agreement (e.g., "P1M" for 1 month, "P12M" for 1 year). const SELECTOR_VALUE = "<your-selector-value>"; // The dimension key defined in your offer. const DIMENSION_1_KEY = "<your-dimension-key>"; // Quantity for the dimension. const DIMENSION_1_VALUE = 1; // Term ID for the RenewalTerm in your offer. const RENEWAL_TERM_ID = "<your-renewal-term-id>"; // Term ID for the LegalTerm in your offer. const LEGAL_TERM_ID = "<your-legal-term-id>"; // Term ID for the SupportTerm in your offer. const SUPPORT_TERM_ID = "<your-support-term-id>"; /** * Full end-to-end flow: * 1. Create a SaaS agreement with CONTRACT pricing model with auto-renewal disabled. * 2. Wait for entitlements to become active. * 3. Amend the agreement to enable auto-renewal. */ async function amendSaaSContractAgreementRenewalTerm() { const client = new MarketplaceAgreementClient(); const configurableUpfrontPricingTerm = { id: CONFIGURABLE_UPFRONT_PRICING_TERM_ID, configuration: { configurableUpfrontPricingTermConfiguration: { selectorValue: SELECTOR_VALUE, dimensions: [ { dimensionKey: DIMENSION_1_KEY, dimensionValue: DIMENSION_1_VALUE }, ], }, }, }; // Initial agreement: auto-renewal disabled. const renewalTerm = { id: RENEWAL_TERM_ID, configuration: { renewalTermConfiguration: { enableAutoRenew: false, }, }, }; const legalTerm = { id: LEGAL_TERM_ID }; const supportTerm = { id: SUPPORT_TERM_ID }; // --- Create and accept the initial SaaS agreement request with CONTRACT pricing model --- const createAgreementRequestResponse = await client.send( new CreateAgreementRequestCommand({ clientToken: generateClientToken(), intent: "NEW", requestedTerms: [configurableUpfrontPricingTerm, renewalTerm, legalTerm, supportTerm], agreementProposalIdentifier: AGREEMENT_PROPOSAL_IDENTIFIER, }) ); console.log("Agreement request created. AgreementRequestId: " + createAgreementRequestResponse.agreementRequestId); const acceptAgreementRequestResponse = await client.send( new AcceptAgreementRequestCommand({ agreementRequestId: createAgreementRequestResponse.agreementRequestId, }) ); console.log("Agreement request accepted. AgreementId: " + acceptAgreementRequestResponse.agreementId); // Wait for entitlements to become active before amending. console.log("Waiting for entitlements to become active..."); const entitlementsResponse = await pollUntilEntitlementsAvailable(client, acceptAgreementRequestResponse.agreementId); console.log("Entitlements are now active."); formatOutput(entitlementsResponse); // --- Amend: enable auto-renewal --- const renewalTermAmended = { id: RENEWAL_TERM_ID, configuration: { renewalTermConfiguration: { enableAutoRenew: true, }, }, }; // Use Intent.AMEND and sourceAgreementIdentifier to target the existing agreement. const carResponse = await client.send( new CreateAgreementRequestCommand({ clientToken: generateClientToken(), intent: "AMEND", requestedTerms: [configurableUpfrontPricingTerm, renewalTermAmended, legalTerm, supportTerm], sourceAgreementIdentifier: acceptAgreementRequestResponse.agreementId, }) ); console.log("Amend agreement request created. AgreementRequestId: " + carResponse.agreementRequestId); const aarResponse = await client.send( new AcceptAgreementRequestCommand({ agreementRequestId: carResponse.agreementRequestId, }) ); console.log("Amendment accepted. Auto-renewal enabled. New AgreementId: " + aarResponse.agreementId); } amendSaaSContractAgreementRenewalTerm();-
For API details, see CreateAgreementRequest in AWS SDK for JavaScript API Reference.
-
- Python
-
- SDK for Python (Boto3)
-
Note
There's more on GitHub. Find the complete example and learn how to set up and run in the AWS Marketplace API Reference Code Library
repository. """ Demonstrates how to create a SaaS agreement with CONTRACT pricing model and then turn on the auto-renewal setting using the AWS Marketplace Agreement Service APIs. Scenario: A buyer subscribes to a SaaS product using a public offer that supports auto-renewal. After acceptance, the buyer decides to amend the agreement to enable auto-renewal via the RenewalTerm configuration. Before running this sample, replace the placeholder constants below with values from your AWS Marketplace offer: - AGREEMENT_PROPOSAL_IDENTIFIER — the agreementProposalId from the offer. - Term IDs (starting with term-) — found in the offer's term list. - SELECTOR_VALUE — duration for the agreement (e.g., P1M for 1 month). - DIMENSION_1_KEY — the dimension key defined in the offer. """ import boto3 from utils.agreement_api_utils import ( format_output, generate_client_token, poll_until_entitlements_available, ) class AmendSaaSContractRenewalTerm: # The agreementProposalId from the offer. AGREEMENT_PROPOSAL_IDENTIFIER = "<your-agreement-proposal-identifier>" # Term ID for the ConfigurableUpfrontPricingTerm in your offer. CONFIGURABLE_UPFRONT_PRICING_TERM_ID = "<your-configurable-upfront-pricing-term-id>" # Duration for the agreement (e.g., "P1M" for 1 month, "P12M" for 1 year). SELECTOR_VALUE = "<your-selector-value>" # The dimension key defined in your offer. DIMENSION_1_KEY = "<your-dimension-key>" # Quantity for the dimension. DIMENSION_1_VALUE = 1 # Term ID for the RenewalTerm in your offer. RENEWAL_TERM_ID = "<your-renewal-term-id>" # Term ID for the LegalTerm in your offer. LEGAL_TERM_ID = "<your-legal-term-id>" # Term ID for the SupportTerm in your offer. SUPPORT_TERM_ID = "<your-support-term-id>" @staticmethod def amend_saas_contract_agreement_renewal_term(): """ Full end-to-end flow: 1. Create a SaaS agreement with CONTRACT pricing model with auto-renewal disabled. 2. Wait for entitlements to become active. 3. Amend the agreement to enable auto-renewal. """ client = boto3.client("marketplace-agreement") cls = AmendSaaSContractRenewalTerm configurable_upfront_pricing_term = { "id": cls.CONFIGURABLE_UPFRONT_PRICING_TERM_ID, "configuration": { "configurableUpfrontPricingTermConfiguration": { "selectorValue": cls.SELECTOR_VALUE, "dimensions": [ { "dimensionKey": cls.DIMENSION_1_KEY, "dimensionValue": cls.DIMENSION_1_VALUE, }, ], } }, } # Initial agreement: auto-renewal disabled. renewal_term = { "id": cls.RENEWAL_TERM_ID, "configuration": { "renewalTermConfiguration": { "enableAutoRenew": False, } }, } legal_term = {"id": cls.LEGAL_TERM_ID} support_term = {"id": cls.SUPPORT_TERM_ID} # --- Create and accept the initial SaaS agreement request with CONTRACT pricing model --- create_response = client.create_agreement_request( clientToken=generate_client_token(), intent="NEW", requestedTerms=[configurable_upfront_pricing_term, renewal_term, legal_term, support_term], agreementProposalIdentifier=cls.AGREEMENT_PROPOSAL_IDENTIFIER, ) agreement_request_id = create_response["agreementRequestId"] print("Agreement request created. AgreementRequestId: " + agreement_request_id) accept_response = client.accept_agreement_request( agreementRequestId=agreement_request_id ) agreement_id = accept_response["agreementId"] print("Agreement request accepted. AgreementId: " + agreement_id) # Wait for entitlements to become active before amending. print("Waiting for entitlements to become active...") entitlements_response = poll_until_entitlements_available(client, agreement_id) print("Entitlements are now active.") format_output(entitlements_response) # --- Amend: enable auto-renewal --- renewal_term_amended = { "id": cls.RENEWAL_TERM_ID, "configuration": { "renewalTermConfiguration": { "enableAutoRenew": True, } }, } # Use Intent.AMEND and sourceAgreementIdentifier to target the existing agreement. car_response = client.create_agreement_request( clientToken=generate_client_token(), intent="AMEND", requestedTerms=[configurable_upfront_pricing_term, renewal_term_amended, legal_term, support_term], sourceAgreementIdentifier=agreement_id, ) print("Amend agreement request created. AgreementRequestId: " + car_response["agreementRequestId"]) aar_response = client.accept_agreement_request( agreementRequestId=car_response["agreementRequestId"] ) print("Amendment accepted. Auto-renewal enabled. New AgreementId: " + aar_response["agreementId"]) if __name__ == "__main__": AmendSaaSContractRenewalTerm.amend_saas_contract_agreement_renewal_term()-
For API details, see CreateAgreementRequest in AWS SDK for Python (Boto3) API Reference.
-