<!-- Markdown copy of https://docs.creatorain.com/partner-api/reference/operations/getpartnerpricingquote/ -->
# The finished price for a merchant's choices, before a store exists

GET

/pricing/quote

Select code sampleFetchcURL

```js
const url = 'https://data.creatorain.com/partner/v1/pricing/quote?videos_per_month=2&term_months=3&approval_mode=auto&postal_code=95050';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```sh
curl --request GET \
  --url 'https://data.creatorain.com/partner/v1/pricing/quote?videos_per_month=2&term_months=3&approval_mode=auto&postal_code=95050' \
  --header 'Authorization: Bearer <token>'
```

-   Production (live stores; a live key is issued per partner)
-   Sandbox, for integration testing (test keys, test stores)

Ask for a quote on the apply screen and the Confirm screen. You do NO price maths: every number is ready to show. Show `merchant.*` on the merchant’s screens, and `creatorain` and `surcharge` on your sales screen. Change a choice and ask again; the answer reflects it.

-   `merchant.per_video` is the price per published video you charge the merchant, with your surcharge and any plan surcharge already included (base price + `surcharge.per_video` + `plan_surcharge.per_video`). It is the same for every city. `per_month` = per video x videos per month, `per_season` = per month x 3. `season_videos` = videos per month x 3.
-   `creatorain` is what we bill you, per published video: the creator’s actual cost plus our fee. `fee_per_video` is our fee. The creator cost varies per video, so it is not a fixed price: `creator_cost_per_video` is an estimate range (or null), the bill uses the actual cost.
-   `surcharge.per_video` is your surcharge (`PUT /settings`; a default applies until you set one, so editing it changes what merchants see). It is shown so you can see your share, and is already included in `merchant.per_video` (do not add it again).
-   `plan_surcharge` is its own line for a non-standard plan: fewer than 2 videos a month, or a term below 3 months (send `term_months` to include it). Such a plan is accepted, and `plan_surcharge.per_video` is added to the merchant price so you can show why it costs more (`applies` is true; 0 and false for a standard plan). `placeholder: true` means the amount is provisional and may change.
-   `valid_until` is the last day (UTC) the quote holds. A store confirmed by then is locked at the price in force when it is confirmed.

We bill by published video. `postal_code` is optional; when sent it is checked as a US ZIP (a bad one is rejected), but there is no per-area pricing, so it does not change the price.

PARTNER KEY ONLY.

## Authorizations

-   **[partnerApiKey](/partner-api/reference/#partnerapikey)**

## Parameters

### Query Parameters

**videos\_per\_month**

required

integer

\>= 1 <= 10

1 to 10. The standard plan is 2 to 10; 1 is accepted and adds the plan surcharge.

#### Example

```json
2
```

**term\_months**

integer

\>= 1 <= 120

Contract length in months, 1 to 120. The standard terms are 3, 8 and 12 (longer is allowed); below 3 adds the plan surcharge.

#### Example

```json
3
```

**approval\_mode**

string

default: auto

Allowed values: auto sample\_review

**postal\_code**

string

/^\\d{5}(-\\d{4})?$/

#### Example

```json
95050
```

## Responses

### 200

The quote.

Media typeapplication/json

object

**currency**

required

string

**billing\_unit**

required

string

Allowed values: published\_video

**creatorain**

required

What we bill the partner per published video. Not a fixed price.

object

**fee\_per\_video**

required

number

**creator\_cost\_per\_video**

required

Estimate range of the creator cost per video (on a quote, and on a store with no locked price; null on a locked store). The bill uses the actual cost.

object

**min**

number

**max**

number

**billed\_as**

required

string

Allowed values: creator\_cost\_plus\_fee

**surcharge**

required

object

**per\_video**

number

**plan\_surcharge**

required

The non-standard plan line, included in `merchant`. 0 / false for a standard plan.

object

**per\_video**

number

**applies**

boolean

**placeholder**

True while the amount is provisional.

boolean

**merchant**

required

object

**per\_video**

required

number

**per\_month**

required

Per\_video x videos per month. Null for a store with no plan.

number

nullable

**per\_season**

required

Per\_month x 3.

number

nullable

**season\_videos**

required

integer

nullable

**note**

required

string

**valid\_until**

required

string format: date

#### Example

```json
{
  "currency": "USD",
  "billing_unit": "published_video",
  "creatorain": {
    "fee_per_video": 10,
    "creator_cost_per_video": {
      "min": 20,
      "max": 40
    },
    "billed_as": "creator_cost_plus_fee"
  },
  "surcharge": {
    "per_video": 10
  },
  "plan_surcharge": {
    "per_video": 5,
    "applies": false,
    "placeholder": true
  },
  "merchant": {
    "per_video": 100,
    "per_month": 200,
    "per_season": 600
  },
  "season_videos": 6,
  "valid_until": "2026-10-31"
}
```

### 400

`validation_error`. `field` names the offending parameter.

Media typeapplication/json

object

**error**

required

object

**code**

required

The stable value to branch on.

string

Allowed values: unauthorized forbidden\_ip rate\_limited validation\_error location\_already\_exists location\_not\_found location\_terminated reservation\_not\_found conflict internal\_error

**message**

required

A human sentence. Copy, not contract; it may be reworded.

string

**field**

The request field at fault, dotted for a nested one (`plan.term_months`).

string

#### Example

```json
{
  "error": {
    "code": "unauthorized"
  }
}
```

### 401

`unauthorized`. A missing, malformed, unknown or revoked key; or an invalid, expired or wrong-store dashboard token. One answer for every case on purpose: the holder of a bad credential learns nothing from the difference.

Media typeapplication/json

object

**error**

required

object

**code**

required

The stable value to branch on.

string

Allowed values: unauthorized forbidden\_ip rate\_limited validation\_error location\_already\_exists location\_not\_found location\_terminated reservation\_not\_found conflict internal\_error

**message**

required

A human sentence. Copy, not contract; it may be reworded.

string

**field**

The request field at fault, dotted for a nested one (`plan.term_months`).

string

#### Example

```json
{
  "error": {
    "code": "unauthorized"
  }
}
```

### 429

`rate_limited`. Over this key’s requests-per-minute ceiling.

Media typeapplication/json

object

**error**

required

object

**code**

required

The stable value to branch on.

string

Allowed values: unauthorized forbidden\_ip rate\_limited validation\_error location\_already\_exists location\_not\_found location\_terminated reservation\_not\_found conflict internal\_error

**message**

required

A human sentence. Copy, not contract; it may be reworded.

string

**field**

The request field at fault, dotted for a nested one (`plan.term_months`).

string

#### Example

```json
{
  "error": {
    "code": "unauthorized"
  }
}
```
