# 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 Fours](/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 Fours 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 length: billing ends after a duration you set in whole **days, months or years** (1 year by default), or on a specific end date. Oracle's maximum total contract length is **375 days**, so anything longer — a 2-year duration, for example — is rejected at send time.

:::warning
**Oracle's contract limits are enforced by Oracle, not by Fours.** Beyond requiring a positive value, a
positive whole-number duration and dates in the right order (see the form fields below), 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 a duration longer than 375 days, 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 Fours 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). |
   | **Billing start** | **On acceptance** (default) — billing starts when the buyer accepts. **Specify date** — pick the start date. |
   | **Billing end** | **End after duration** — a whole number of **Days**, **Months** or **Years** (default 1 year), measured from the start. **End on specific date** — must be after the start date. Oracle's maximum is 375 days. |
   | **Offer expiration date** | The date by which the buyer must accept. If you leave it empty, Fours uses 30 days from creation, or the day before the billing start date if that is sooner. With a specified start date, it must be before that date — Oracle rejects the offer otherwise. |
   | **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 [Fours API](/oracle-marketplace/create-private-offer-api/). |
   | **Total contract value** | Required. The one-time amount in USD. Fours 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. |

   The form checks the offer terms before you submit, for example *"Offer expiration date must be before the billing start date: Oracle rejects the offer otherwise."*, *"Billing end date must be after the billing start date."* and *"Contract duration must be a whole number greater than 0."*

   Oracle accepts contract lengths only in days, so Fours converts months and years into the exact number of days from the start before sending — 1 year becomes 365 or 366 days. The offer's detail page shows the stored duration, for example `365 days (P365D)`.

3. Submit the offer. Fours 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 Fours waits (up to ~5 minutes) for Oracle to confirm the send. Once confirmed, the offer moves to `Pending Acceptance`. If Oracle rejects the send, the offer moves to `Create Failed`, and its **Create Offer Failed** alert shows Oracle's reason — such as `DURATION_IS_INVALID` or `TIME_ACCEPT_BY_IS_INVALID` — so you can fix the offer and resubmit it (see [Modify a Private Offer](#modify-a-private-offer)).

## Offer lifecycle

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

```d2
direction: down
a: "Create offer in Fours"
b: "Pending Create\nFours 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 Fours\nActive at once when billing starts on acceptance;\nwith a start date, Pending Start until then"
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 Fours offer statuses as follows:

| Oracle offer status | Fours 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-Fours 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 Fours 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

Fours 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 billing start:

| Offer status | Billing start date | Entitlement status |
|---|---|---|
| `Accepted` or `Active` | None — billing starts on acceptance | `Active` |
| `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 Fours right away as a `Pending Start` entitlement, and flips to `Active` on the start date without anyone touching it. An offer that starts billing on acceptance — the default — gets an `Active` entitlement straight away.

- Start time comes from the offer's billing start date, when it has one; 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.

Fours 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 Fours: the stale Oracle draft is cleaned up and a fresh offer is created and sent — no duplicates are produced.
