Skip to content

The finished price for a merchant's choices, before a store exists

GET
/pricing/quote
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>'

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.

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

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

3
approval_mode
string
default: auto
Allowed values: auto sample_review
postal_code
string
/^\d{5}(-\d{4})?$/

Example

95050

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

{
"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"
}

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

{
"error": {
"code": "unauthorized"
}
}

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

{
"error": {
"code": "unauthorized"
}
}

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

{
"error": {
"code": "unauthorized"
}
}