# Private Offers

Create a private offer to sell your SaaS listing to a specific Oracle Cloud customer at negotiated terms.

---

## Prerequisites

- The [Oracle Cloud Marketplace integration](/oracle-marketplace/integration/) is connected.
- Your SaaS listing has been [synced into Suger](/oracle-marketplace/list-product/) as a product.
- You know the buyer's **tenancy OCID** (`ocid1.tenancy.oc1..…`) — the offer is sent to this tenancy.
- Your contract document (EULA) as a **PDF file, up to 1 MB**.

## Pricing Model

Oracle Cloud Marketplace private offers created through Suger are priced as a **one-time contract value in USD**:

- The buyer commits to a single **total contract value** in USD (rounded to whole dollars) for the full contract duration.
- Billing cycle is **one-time** — no installments. The offer price itself is not usage/metered; [usage metering](/oracle-marketplace/usage-metering/) is a separate, entitlement-level capability that bills **in addition to** the contract value, not instead of it.
- Contract duration options in the console: **6 months, 1 year (default), 2 years, or 3 years**. Oracle's maximum total contract length is **375 days**, so only 6 months and 1 year fall within Oracle's range; 2 years and 3 years are rejected at send time.

:::warning
**Oracle's contract limits are enforced by Oracle, not by Suger.** Beyond requiring a positive value and one
of the four listed durations, the console does not check your offer against Oracle's own limits — it sends
what you enter, and Oracle rejects anything outside its range at send time, leaving the offer in
`Create Failed`. Oracle publishes a **minimum contract value of 10,000 USD** (or the equivalent in another
supported currency) and a **maximum total contract length of 375 days** — one year plus 10 days. So the
2-year and 3-year options in the duration picker, and any value under 10,000 USD, fall outside those limits.
See Oracle's
[Managing Private Offers](https://docs.oracle.com/en-us/iaas/Content/Marketplace/manage-private-offers.htm).
:::

## Create a Private Offer

1. On the **Offers** page in the Suger console, click `Create Private Offer` and select your Oracle product.

2. Fill in the offer details:

   | Field | Description |
   |---|---|
   | **Offer name** | Required. A descriptive name for this offer (max 128 characters). |
   | **Buyer company name** | Optional. |
   | **Buyer tenancy OCID** | Required. The OCID of the buyer's Oracle Cloud tenancy. |
   | **Buyer primary contact** | First/last name and email. The email is required. |
   | **Offer description** | Optional (max 512 characters). |
   | **Service start date** | Optional. Defaults to tomorrow. |
   | **Contract duration** | 6 months / 1 year / 2 years / 3 years. Defaults to 1 year. Oracle's maximum is 375 days — 2 years and 3 years are rejected at send time. |
   | **Offer expiration date** | The date by which the buyer must accept. Defaults to 30 days from creation. |
   | **Contract document (EULA)** | Required. A PDF file up to 1 MB. The form takes exactly one document; to attach additional contract documents, create the offer through the [Suger API](/oracle-marketplace/create-private-offer-api/). |
   | **Total contract value** | Required. The one-time amount in USD. Suger requires it to be greater than 0; Oracle additionally requires a minimum of 10,000 USD. |
   | **Seller primary contact** | First/last name and email. The email is required. |

3. Submit the offer. Suger creates the offer in Oracle Cloud, attaches the contract document, and sends it to the buyer's tenancy.

Sending is asynchronous on Oracle's side: the offer stays in `Pending Create` while Suger waits (up to ~5 minutes) for Oracle to confirm the send. Once confirmed, the offer moves to `Pending Acceptance`.

## Offer lifecycle

An offer moves from creation to a buyer entitlement like this:

```d2
direction: down
a: "Create offer in Suger"
b: "Pending Create\nSuger waits ~5 min for Oracle to confirm the send"
c: "Pending Acceptance\nsent to the buyer's tenancy"
d: Accepted
e: "Active\ncontract in effect"
f: "Entitlement created automatically in Suger\nPending Start before the start date, Active after"
g: Expired
h: "Create Failed"
a -> b
b -> c
c -> d: "Buyer accepts in the Oracle Cloud Console"
d -> e
d -> f: "on acceptance"
c -> g: "Offer expires unaccepted"
b -> h: "Send fails"
```

## Offer Status

Oracle offer statuses map to Suger offer statuses as follows:

| Oracle offer status | Suger offer status | Meaning |
|---|---|---|
| `DRAFT` | `Draft` | Created in Oracle but not yet sent. |
| `PENDING_MARKETPLACE` | `Pending Marketplace Approval` | Waiting on Oracle Marketplace review. |
| `PENDING_BUYER` | `Pending Acceptance` | Sent; waiting for the buyer to accept. |
| `ACCEPTED` | `Accepted` | The buyer accepted the offer. |
| `ACTIVE` | `Active` | The contract is in effect. |
| `ENDED` / `EXPIRED` | `Expired` | The contract ended, or the offer expired unaccepted. |
| `FAILED_SEND` / `FAILED_ACCEPT` | `Create Failed` | Oracle rejected the send or the acceptance failed. |

Buyers are matched by their Oracle **tenancy**, so repeat deals with the same buyer are recognized.

## Buyer Acceptance

The buyer reviews and accepts the private offer in their **Oracle Cloud Console** — there is no in-Suger acceptance step. The buyer's user needs tenancy-scoped IAM permission to accept offers, e.g.:

```
Allow group PrivateOfferBuyer to manage marketplace-offers in tenancy
```

See Oracle's [Required IAM Policies for private offers](https://docs.oracle.com/en-us/iaas/Content/Marketplace/privateoffers-required-iam-policies.htm).

Acceptance is reflected back into Suger when the offer status advances — the hourly sync picks it up automatically, or trigger a sync from the **Integrations** page to pull the latest statuses immediately.

## After Acceptance: Entitlement

Suger creates a private **entitlement** as soon as the offer reaches **Accepted** — it does not wait for `Active`. The entitlement's own status then follows the offer's service start date:

| Offer status | Service start date | Entitlement status |
|---|---|---|
| `Accepted` or `Active` | Still in the future | `Pending Start` |
| `Accepted` or `Active` | Reached | `Active` |

This means a deal closed today with a start date next quarter shows up in Suger right away as a `Pending Start` entitlement, and flips to `Active` on the start date without anyone touching it.

- Start time comes from the offer's service start date; end time from the offer end date (or start date + contract duration).
- The entitlement carries the offer's currency and total contract value as its commit amount.
- When the offer ends in Oracle, the entitlement is closed automatically on the next sync.

[Usage metering](/oracle-marketplace/usage-metering/) requires an active entitlement, so a `Pending Start` entitlement is not yet a metering target.

## Cancel a Private Offer

You can cancel (withdraw) a private offer **before the buyer accepts it**:

1. Select the offer on the **Offers** page.
2. Click `Cancel` and confirm in the popup dialog.

Suger withdraws the offer in Oracle, and the buyer can no longer accept it.

:::note
Oracle does not allow withdrawing an offer that the buyer has **already accepted**. Cancellation only works while the offer is pending acceptance.
:::

## Modify a Private Offer

Oracle private offers cannot be amended after they are sent. To change the terms of an unaccepted offer, cancel it and create a new offer.

If an offer failed to send (`Create Failed`) or is stuck in `Draft`, simply re-submit it from Suger: the stale Oracle draft is cleaned up and a fresh offer is created and sent — no duplicates are produced.
