Skip to content

Create an offer, and its coupon and codes in the payment provider

POST
/api/v1/workspaces/{workspace}/earn/offers
curl --request POST \
--url https://reputecast.example.com/api/v1/workspaces/acme-newsletter/earn/offers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "amountOffCents": 1, "applies": [ { "period": "month", "tierId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" } ], "byCode": true, "byLink": true, "code": "example", "codeDays": 1, "discountType": "percent", "duration": "once", "endsOn": "example", "kind": "signup", "limit": 1, "minPaidMonths": 1, "months": 1, "name": "example", "newOnly": true, "percentOff": 1 }'

Permission: earn:edit (sensitive)

Without a connected provider the offer is saved as a draft and created there once one is connected and it’s saved again.

workspace
required

Workspace slug

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

Workspace slug

Media typeapplication/json
object
amountOffCents
integer format: int64
applies
required
Array<object>
<= 40 items
object
period
required
string
Allowed values: month year
tierId
required
string format: uuid
byCode
boolean
byLink
boolean
code
string
<= 40 characters
codeDays
integer format: int64
discountType
required
string
Allowed values: percent amount
duration
required
string
Allowed values: once months forever
endsOn

YYYY-MM-DD

string
kind
required
string
Allowed values: signup retention referral
limit
integer format: int64
minPaidMonths
integer format: int64
months
integer format: int64
name
required
string
<= 80 characters
newOnly
boolean
percentOff
integer format: int64

Created

Media typeapplication/json
object
account
required
string
amountOffCents
integer format: int64
applies
required
Array<object>
object
currency
required
string
period
required
string
Allowed values: month year
priceCents
required
integer format: int64
short
required
string
tier
required
string
tierId
required
string
byCode
required
boolean
byLink
required
boolean
canEdit
required
boolean
choices
required
Array<object>
object
currency
required
string
period
required
string
Allowed values: month year
priceCents
required
integer format: int64
short
required
string
tier
required
string
tierId
required
string
code
required
string
codeDays
required
integer format: int64
codes
required
Array<object>
object
code
required
string
expiresAt
required
string format: date-time
issuedAt
required
string format: date-time
issuedTo
required
string
redeemedAt
string format: date-time
status
required
string
Allowed values: not_redeemed redeemed expired
connected
required
boolean
currency
required
string
discountType
required
string
Allowed values: percent amount
duration
required
string
Allowed values: once months forever
endedAt
string format: date-time
endedBy
string
endedReason
string
Allowed values: date limit early
endsAt
string format: date-time
helpers
required
Array<string>
id
required
string
kind
required
string
Allowed values: signup retention referral
limit
integer format: int64
link
string
linkHost
string
minPaidMonths
required
integer format: int64
months
integer format: int64
name
required
string
newOnly
required
boolean
percentOff
integer format: int64
provider
required
string
results
required
object
acceptRate
number format: double
accepted
required
integer format: int64
codesIssued
required
integer format: int64
codesRedeemed
required
integer format: int64
mrrCents
required
integer format: int64
newMembers
required
integer format: int64
redemptions
required
integer format: int64
shown
required
integer format: int64
startedAt
required
string format: date-time
startedBy
string
state
required
string
Allowed values: live limit ended missing draft
status
required
string
Allowed values: live ended
stripe
required
object
coupon
string
couponUrl
string
missing
required
boolean
mode
string
promotionCode
string
sync
required
string
Allowed values: draft synced failed
syncError
string
upgradeHost
required
string

Example

{
"applies": [
{
"period": "month"
}
],
"choices": [
{
"period": "month"
}
],
"codes": [
{
"status": "not_redeemed"
}
],
"discountType": "percent",
"duration": "once",
"endedReason": "date",
"kind": "signup",
"state": "live",
"status": "live",
"sync": "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"
}