---
search:
  tags:
    - Operations
    - POST
seo:
  description: Create offer. Reference for the POST / endpoint in the Offers API.
sidebar:
  label: Create offer
  badge: POST
title: Create offer
type: openapi-operation
---
`POST /`

**Request body** (`application/json`)

- `customer` (Customer, required)
- `address` (object, required) — Delivery address details
- `product` (object, required) — Replacement product and add-ons covered by warranty
- `sendOfferImmediately` (boolean) — Whether to send the offer email immediately after creation
- `allowCommonCarrier` (boolean) — Whether to allow offers for common carrier delivery properties
- `externalJobID` (string)
- `buyoutAmount` (number) — Buyout amount in cents (e.g., 50000 = $500.00). Customer can opt to receive this amount instead of a replacement product.
- `creditAmount` (integer) — Credit amount in cents (e.g., 200000 = $2,000.00) that the customer has to spend in the marketplace. When omitted, defaults to the price of the replacement product and add-ons.
- `includeUpsells` (boolean) — Whether to include upsells in the offer
- `subBrandId` (string, required) — The ID of the sub-brand used to determine customer-facing branding for the offer

Request body example:

```json
{
  "customer": {
    "firstName": "John",
    "lastName": "Doe",
    "email": "john@example.com",
    "phone": "+1 (123) 456-7890"
  },
  "address": {
    "line1": "123 Main St",
    "line2": "Apt 101",
    "city": "Springfield",
    "stateOrProvince": "IL",
    "postalCode": "62701"
  },
  "product": {
    "sku": "GDF511PGRBB",
    "addons": [
      {
        "id": "install-aggregate-id",
        "quantity": 1
      },
      {
        "sku": "M007",
        "quantity": 1
      },
      {
        "sku": "M021",
        "quantity": 1
      }
    ]
  },
  "sendOfferImmediately": true,
  "allowCommonCarrier": true,
  "externalJobID": "string",
  "buyoutAmount": 50000,
  "creditAmount": 200000,
  "includeUpsells": true,
  "subBrandId": "string"
}
```

**Responses**

- `201` — Offer created successfully
- `400` — Bad request - Invalid input data
- `401` — Unauthorized - Missing or invalid authentication
- `403` — Forbidden - The presented token does not carry the required scope
- `500` — Internal server error

Response example, 201:

```json
{
  "id": "testofferid",
  "address": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "stateOrProvince": "st",
    "postalCode": "string",
    "country": "USA"
  },
  "createdAt": "2024-01-20T12:00:00Z",
  "customerOfferLink": "string",
  "warnings": [
    "This product is only available via common carrier delivery for the selected address."
  ]
}
```

Response example, 400 · validationError:

```json
{
  "code": "VALIDATION_ERROR",
  "message": "Invalid input parameters",
  "details": [
    {
      "field": "customer.email",
      "error": "Invalid email"
    },
    {
      "field": "address.postalCode",
      "error": "Invalid"
    }
  ]
}
```

Response example, 400 · invalidAddress:

```json
{
  "code": "ADDRESS_PROCESSING_ERROR",
  "message": "The provided address is invalid or could not be found"
}
```

Response example, 400 · invalidSubBrandId:

```json
{
  "code": "INVALID_SUB_BRAND_ID",
  "message": "The provided sub-brand ID is invalid or not found"
}
```

Response example, 400 · productOutOfStock:

```json
{
  "code": "PRODUCT_OUT_OF_STOCK",
  "message": "Product 123 is out of stock for the selected address."
}
```

Response example, 401:

```json
{
  "code": "UNAUTHORIZED",
  "message": "Missing authentication token"
}
```

Response example, 403:

```json
{
  "code": "INSUFFICIENT_SCOPE",
  "message": "The presented token is missing the `write:offers` scope, which this endpoint requires. Create a token with the scopes you need at https://developer.sibipro.com."
}
```

Response example, 500:

```json
{
  "code": "INTERNAL_SERVER_ERROR",
  "message": "An unexpected error occurred"
}
```
