# Create CPPO Offers for Archera Subscription

This guide provides instructions on how to extend Archera’s Channel Partner Private Offer (CPPO) to your customers through AWS Marketplace.

### ​What is Channel Partner Private Offer (CPPO)? <a href="#what-is-channel-partner-private-offer-cppo" id="what-is-channel-partner-private-offer-cppo"></a>

The Channel Partner Private Offer (CPPO) is a mechanism that allows our channel partners to extend our GRI offers to their customers directly through AWS Marketplace. The marketplace safely handles all of the billing and rev-sharing responsibilities between the customer, the partner, and Archera.

{% hint style="warning" %}
To collect any GRI Premiums, CPPOs must be set up.
{% endhint %}

### ​Requirements for Archera to Extend the CPPO <a href="#requirements-for-archera-to-extend-the-cppo" id="requirements-for-archera-to-extend-the-cppo"></a>

First, ensure that you are registered as an AWS Marketplace seller so that we can extend a CPPO to your team.

[AWS Marketplace: Channel Partner Private Offers](https://aws.amazon.com/marketplace/management/partners/incoming)

Once you are listed as a reseller, we can extend the CPPO to your organization - it’s simple as that! Reach out to [**partnersupport@archera.ai**](mailto:partnersupport@archera.ai) or in the shared Slack workspace to receive our CPPO.

You can verify Archera’s CPPO was extended here:

<https://aws.amazon.com/marketplace/management/partners/incoming>

### ​Creating Private Offers from the CPPO to Send to Customers <a href="#creating-private-offers-from-the-cppo-to-send-to-customers" id="creating-private-offers-from-the-cppo-to-send-to-customers"></a>

Once you are listed as a reseller and we have extended the CPPO to you, follow these steps:

#### ​Step 1: Create Private Offer <a href="#step-1-create-private-offer" id="step-1-create-private-offer"></a>

Navigate to [AWS Marketplace Management Portal > Offers > Create offer](https://aws.amazon.com/marketplace/management/offers)Select the following:

* **Select ISV**: Reserved AI
* **Select product**: Archera - Subscription
* **Select opportunity**: Archera-\[Partner]-Subscription-2024
* **Buyer(s)**: Enter comma separated buyer account IDs

<figure><img src="https://mintcdn.com/archera/xy53lcAFe3uDbb3I/images/cppo-step1.png?fit=max&#x26;auto=format&#x26;n=xy53lcAFe3uDbb3I&#x26;q=85&#x26;s=698df38f209a649567964eae73298b35" alt=""><figcaption></figcaption></figure>

#### ​Step 2: Configure Offer Information <a href="#step-2-configure-offer-information" id="step-2-configure-offer-information"></a>

On the offer information page:

* **Offer name**: Enter a descriptive name (e.g., “Archera - Subscription”)
* **Product**: Archera - Subscription (pre-filled)
* **Resale authorization name**: Archera-\[Partner]-Subscription-2024 (pre-filled)
* **Buyer account ID(s)**: Verify customer account IDs

<figure><img src="https://mintcdn.com/archera/xy53lcAFe3uDbb3I/images/cppo-step2.png?fit=max&#x26;auto=format&#x26;n=xy53lcAFe3uDbb3I&#x26;q=85&#x26;s=f70c64d6439e782b714ca26b20d5878c" alt=""><figcaption></figcaption></figure>

#### ​Step 3: Set Pricing and Usage Dimensions <a href="#step-3-set-pricing-and-usage-dimensions" id="step-3-set-pricing-and-usage-dimensions"></a>

The usage dimension shown will be **Guaranteed Reserved Instance Premiums**.

{% hint style="warning" %}
**Critical**: Set the markup to **25%**. This brings premiums from wholesale 0.008 to price 0.010.
{% endhint %}

{% hint style="info" %}
Higher tier markups (Silver and Gold) are available based on revenue milestones. Contact [**partnersupport@archera.ai**](mailto:partnersupport@archera.ai) to discuss tier upgrades.
{% endhint %}

<figure><img src="https://mintcdn.com/archera/xy53lcAFe3uDbb3I/images/cppo-step3.png?fit=max&#x26;auto=format&#x26;n=xy53lcAFe3uDbb3I&#x26;q=85&#x26;s=1200b716e67aa812d681359d5a40cbf9" alt=""><figcaption></figcaption></figure>

#### ​Step 4: Set Usage Duration and Offer Expiration <a href="#step-4-set-usage-duration-and-offer-expiration" id="step-4-set-usage-duration-and-offer-expiration"></a>

**Usage duration:**

* Set the end date **10 years in the future** (e.g., if today is 2025/03/05, set to 2035/03/05)
* This sets the subscription term to 10 years to avoid renewal requirements

**Offer expiration date:**

* Set when this specific offer expires (when the customer can no longer accept it)
* This is typically much shorter than the usage duration (e.g., 30-90 days)

Review all details and click **Review offer** to finalize.

<figure><img src="https://mintcdn.com/archera/xy53lcAFe3uDbb3I/images/cppo-step4.png?fit=max&#x26;auto=format&#x26;n=xy53lcAFe3uDbb3I&#x26;q=85&#x26;s=7a243939f28d3534bd998d9d10f623fb" alt=""><figcaption></figcaption></figure>

### ​Programmatic CPPO Creation <a href="#programmatic-cppo-creation" id="programmatic-cppo-creation"></a>

You can also create CPPOs programmatically using the AWS Marketplace Catalog API. This is useful for automating offer creation at scale.

#### ​Prerequisites <a href="#prerequisites" id="prerequisites"></a>

```shellscript
pip install boto3
```

Configure AWS credentials with marketplace permissions:

```bash
aws configure
```

***

#### ​Step 1: Create Draft CPPO Offer <a href="#step-1-create-draft-cppo-offer" id="step-1-create-draft-cppo-offer"></a>

```python
import boto3
import json

mp_client = boto3.client('marketplace-catalog', region_name='us-east-1')

# Create the changeset for a new CPPO offer
changeset = [
    {
        "ChangeType": "CreateOfferUsingResaleAuthorization",
        "Entity": {
            "Type": "Offer@1.0"
        },
        "DetailsDocument": {
            "ResaleAuthorizationId": "resaleauthz-rgrycwq5y6nuk",  # Archera resale auth ID
            "Name": "Archera - Subscription for Customer ABC"
        }
    }
]

response = mp_client.start_change_set(
    Catalog="AWSMarketplace",
    ChangeSet=changeset,
    ChangeSetName="Create CPPO for Customer ABC"
)

offer_id = response['ChangeSetId']
print(f"Offer creation started: {offer_id}")
```

**Save:** `offer_id` for next steps

***

#### ​Step 2: Set Pricing Markup <a href="#step-2-set-pricing-markup" id="step-2-set-pricing-markup"></a>

```python
# Apply your partner tier markup
changeset = [
    {
        "ChangeType": "UpdateMarkup",
        "Entity": {
            "Type": "Offer@1.0",
            "Identifier": offer_id
        },
        "DetailsDocument": {
            "Percentage": "25.0"  # Bronze tier: 25% markup
        }
    }
]

response = mp_client.start_change_set(
    Catalog="AWSMarketplace",
    ChangeSet=changeset,
    ChangeSetName="Set markup for Customer ABC offer"
)
```

{% hint style="info" %}
Higher tier markups (Silver and Gold) are available based on revenue milestones. Contact [**partnersupport@archera.ai**](mailto:partnersupport@archera.ai) to discuss tier upgrades.
{% endhint %}

***

#### ​Step 3: Set Usage Duration <a href="#step-3-set-usage-duration" id="step-3-set-usage-duration"></a>

```python
# Set the subscription usage duration to 10 years
changeset = [
    {
        "ChangeType": "UpdateValidityTerms",
        "Entity": {
            "Type": "Offer@1.0",
            "Identifier": offer_id
        },
        "DetailsDocument": {
            "Terms": [
                {
                    "Type": "ValidityTerm",
                    "AgreementDuration": "P3650D"  # 10 years = 3650 days
                }
            ]
        }
    }
]

response = mp_client.start_change_set(
    Catalog="AWSMarketplace",
    ChangeSet=changeset,
    ChangeSetName="Set usage duration for Customer ABC offer"
)
```

**Note:** Duration uses ISO 8601 format (e.g., `P3650D` = 3650 days = \~10 years)

***

#### ​Step 4: Add Buyer Accounts and Publish <a href="#step-4-add-buyer-accounts-and-publish" id="step-4-add-buyer-accounts-and-publish"></a>

```python
# Add buyer account IDs and publish the offer
changeset = [
    {
        "ChangeType": "UpdateTargeting",
        "Entity": {
            "Type": "Offer@1.0",
            "Identifier": offer_id
        },
        "DetailsDocument": {
            "PositiveTargeting": {
                "BuyerAccounts": ["123456789012", "987654321098"]
            }
        }
    },
    {
        "ChangeType": "ReleaseOffer",
        "Entity": {
            "Type": "Offer@1.0",
            "Identifier": offer_id
        },
        "DetailsDocument": {}
    }
]

response = mp_client.start_change_set(
    Catalog="AWSMarketplace",
    ChangeSet=changeset,
    ChangeSetName="Publish CPPO for Customer ABC"
)

print(f"Offer published: {offer_id}")
```

***

#### ​Complete Reference <a href="#complete-reference" id="complete-reference"></a>

For more examples and advanced scenarios, see the [AWS Marketplace reference code on GitHub](https://github.com/aws-samples/aws-marketplace-reference-code/tree/main/python/src/catalog_api/channel_partner_offers).

{% hint style="info" %}
If you’d like help implementing programmatic CPPO creation, reach out to [**partnersupport@archera.ai**](mailto:partnersupport@archera.ai) or in the shared Slack workspace.
{% endhint %}

### ​Important Notes <a href="#important-notes" id="important-notes"></a>

* Ensure that you have the necessary permissions to access and manage private offers
* Double-check that you are selecting the correct offer related to Archera products/services
* Contact [**partnersupport@archera.ai**](mailto:partnersupport@archera.ai) if you need assistance with CPPO setup


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.archera.ai/help-center/partner-guides/create-cppo-offers-for-archera-subscription.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
