Skip to content

Publish the draft: its price in Stripe, the shop and its pages

POST
/api/v1/workspaces/{workspace}/products/{product}/publish
curl --request POST \
--url https://reputecast.example.com/api/v1/workspaces/acme-newsletter/products/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/publish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "confirmPrice": true }'

Permission: products:publish (sensitive)

Blocked until every publish check passes. A new price on a published product needs confirmPrice: existing buyers keep their access.

workspace
required

Workspace slug

string
/^[a-z0-9][a-z0-9-]{1,62}$/

Workspace slug

product
required
string format: uuid
Media typeapplication/json
object
confirmPrice
boolean

Example generated

{
"confirmPrice": true
}

OK

Media typeapplication/json
object
archivedAt
string format: date-time
changes
required

The draft’s fields that differ from what’s live

Array<string>
checks
required
Array<object>
object
account
string
at
string format: date-time
bytes
integer format: int64
default

No sales page chosen: the default product page

boolean
draft

The template has a draft but no published version

boolean
file
string
key
required
string
Allowed values: stripe file price template route cover_alt sales_page
mode
string
ok
required
boolean
path
string
route
string
template
string
templateId
string
version
integer format: int32
chunkBytes
required
integer format: int64
createdBy
required
string
draft
required
object
coverAlt
required
string
<= 300 characters
coverUrl
required
string
<= 1000 characters
delivery
required
object
downloads
required
integer format: int32
>= 1 <= 20
linkDays
required
integer format: int32
>= 1 <= 30
revokeOnRefund
required

Revoke access when a payment is refunded or disputed

boolean
templateId
required

The transactional template of the delivery email

string
longDescription
required
string
<= 4000 characters
name
required
string
<= 120 characters
offer
required
object
listId
required

The list a buyer who ticks it joins, with its double opt-in

string
on
required
boolean
text
required

The exact text, kept as consent

string
<= 160 characters
price
required
object
amountCents
required
integer format: int64
<= 100000000
kind
required
string
Allowed values: one_time pwyw
minimumCents
required
integer format: int64
<= 100000000
suggestedCents
required
integer format: int64
<= 100000000
salesPageId
required

Empty for the default product page

string
shortDescription
required
string
<= 120 characters
showInShop
required
boolean
slug
required
string
<= 80 characters
files
required
Array<object>
object
contentType
required
string
id
required
string
kind
required

What the content is: pdf, zip, xlsx…, empty when it couldn’t be told

string
kindLabel
required

PDF, ZIP, XLSX

string
name
required
string
pages
required
integer format: int64
sizeBytes
required
integer format: int64
uploadedAt
required
string format: date-time
uploadedBy
required
string
filesBytes
required
integer format: int64
helpers
required
object
edit
required
Array<string>
export
required
Array<string>
orders
required
Array<string>
publish
required
Array<string>
id
required
string
lists
required
Array<object>
object
doubleOptIn
required
boolean
id
required
string
name
required
string
live
object
coverAlt
required
string
<= 300 characters
coverUrl
required
string
<= 1000 characters
delivery
required
object
downloads
required
integer format: int32
>= 1 <= 20
linkDays
required
integer format: int32
>= 1 <= 30
revokeOnRefund
required

Revoke access when a payment is refunded or disputed

boolean
templateId
required

The transactional template of the delivery email

string
longDescription
required
string
<= 4000 characters
name
required
string
<= 120 characters
offer
required
object
listId
required

The list a buyer who ticks it joins, with its double opt-in

string
on
required
boolean
text
required

The exact text, kept as consent

string
<= 160 characters
price
required
object
amountCents
required
integer format: int64
<= 100000000
kind
required
string
Allowed values: one_time pwyw
minimumCents
required
integer format: int64
<= 100000000
suggestedCents
required
integer format: int64
<= 100000000
salesPageId
required

Empty for the default product page

string
shortDescription
required
string
<= 120 characters
showInShop
required
boolean
slug
required
string
<= 80 characters
maxBytes
required
integer format: int64
maxFile
required
integer format: int64
numbers
object
automation
object
contacts
required
integer format: int64
entered
required

Contacts still in the flow or through it

integer format: int64
id
required
string
name
required
string
refunded
required

Contacts who left because their payment was refunded

integer format: int64
contacts
required
integer format: int64
fromDefault
required
integer format: int64
fromPage
required
integer format: int64
fromShop
required
integer format: int64
grossCents
required
integer format: int64
joined
required
integer format: int64
none
required
integer format: int64
offerList
required
string
orders
required
integer format: int64
refundedCents
required
integer format: int64
refunds
required
integer format: int64
since
required
string format: date-time
test
required
boolean
orders
required
integer format: int64
pageUrl
required
string
pages
required
Array<object>
object
id
required
string
name
required
string
path
required
string
status
required
string
Allowed values: draft scheduled published unpublished
payments
required
object
account
required
string
connected
required
boolean
currency
required
string
hasLive
required
boolean
mode
required
string
Allowed values: live test ""
pricesIncludeTax
required
boolean
provider
required
string
taxAtCheckout
required
boolean
publishedAt
string format: date-time
publishedBy
required
string
route
required
string
salesPage
required
object
name
required
string
pageId

Empty for the default product page

string
path
required
string
publishedAt
string format: date-time
status
required
string
Allowed values: draft scheduled published unpublished default
shopUrl
required
string
siteHost
required
string
status
required
string
Allowed values: draft published archived
templates
required
Array<object>
object
category
required
string
id
required
string
key
required
string
kind
required

Essential or optional

string
name
required
string
version
required

The live version; 0 when none is published

integer format: int32
updatedAt
required
string format: date-time
updatedBy
required
string

Example

{
"checks": [
{
"key": "stripe",
"route": "Postmark, then Amazon SES"
}
],
"draft": {
"price": {
"kind": "one_time"
}
},
"live": {
"price": {
"kind": "one_time"
}
},
"pages": [
{
"status": "draft"
}
],
"payments": {
"mode": "live"
},
"salesPage": {
"path": "/field-guide",
"status": "draft"
},
"status": "draft"
}

Error

Media typeapplication/problem+json
object
code

Stable error code, e.g. permission_denied

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object>
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

helpers

Members who hold the missing permission

Array<string>
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
meta
object
key
additional properties
permission

The missing permission key

string
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank

Example

{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}