Skip to main content
POST
/
offerings
Create an offering
curl --request POST \
  --url https://api.qonversion.io/v4/offerings \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "id": "premium_monthly",
  "product_ids": [
    "premium_monthly_799",
    "premium_annual_4999"
  ]
}
'
{
  "object": "offering",
  "id": "premium_monthly",
  "url": "/v4/offerings/premium_monthly",
  "tag": 1,
  "product_ids": [
    "premium_monthly_799",
    "premium_annual_4999"
  ],
  "created_at": "2025-11-03T10:26:40Z",
  "updated_at": "2025-11-03T10:26:40Z"
}

Documentation Index

Fetch the complete documentation index at: https://documentation.qonversion.io/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Bearer authentication using the project Secret Key (prefixed with sk_, or test_sk_ for sandbox). All v4 public endpoints require the Secret Key — see Authentication. Never expose the Secret Key in client-side code.

Headers

Idempotency-Key
string

Body

application/json
id
string
required

1–64 chars of [a-zA-Z0-9._:- ]. Spaces and colons are accepted for parity with dashboard-created offerings. Immutable after create.

Maximum string length: 64
Pattern: ^[a-zA-Z0-9._:\- ]+$
Example:

"premium_monthly"

tag
enum<integer> | null

Only 0 and null (or omitting the field) are accepted on create. tag=1 is rejected with 400 cannot_set_main_directly — promote via POST /v4/offerings/{offering_id}/set-main (atomic). The very first offering in a project is auto-promoted to main even if tag is omitted.

Available options:
0,
null
product_ids
string[]

Product UIDs in display order. Each must already exist in this project, otherwise the request fails with 400 product_not_in_project. Up to 100 entries per request (maxItems).

Maximum array length: 100
Maximum string length: 255
Pattern: ^[a-zA-Z0-9._:\- ]+$

Response

Offering created.

object
enum<string>
required
read-only
Available options:
offering
id
string
required
Maximum string length: 64
Pattern: ^[a-zA-Z0-9._:\- ]+$
Example:

"premium_monthly"

url
string
required
read-only
Example:

"/v4/offerings/premium_monthly"

tag
integer<int16> | null
required

Offering role within the project. 1 = main offering (TAG_MAIN) — exactly one offering per project has tag=1 at any time; promote via POST /v4/offerings/{offering_id}/set-main. 0 = regular offering that was demoted from main. null = regular offering that has never been tagged. Treat 0 and null as equivalent on read. The Offerings endpoints filter out experiment-variant offerings, but legacy rows could carry historical values other than 0, 1, or null, so the response field is intentionally not enum-restricted. Write schemas restrict accepted values server-side.

product_ids
string[]
required

Product UIDs that belong to this offering, in display order.

Maximum string length: 255
Pattern: ^[a-zA-Z0-9._:\- ]+$
created_at
string<date-time>
required
read-only
Example:

"2025-09-15T12:30:00Z"

updated_at
string<date-time>
required
read-only
Example:

"2025-11-03T10:26:40Z"