VipPlanVersion vip.plan-version@1
Generated at from
openvibe-contracts v0.53.0 and
openvibe-sdk v0.11.0.
- Version
- 1.0.0
- Owner
- vip
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/vip/plan-version.v1.json
vip.plan-version@1: one immutable version of a membership plan on OpenVibe.VIP (server/domain/plans.js presentVersion). An edit always creates version N+1; members keep the version they joined under. terms is the snapshot a member buys (never a price: OpenVibe.Billing prices and charges); perks lists the perks this version includes, by the id, key and name they had when it was written.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes |
| |
version | integer | yes |
| |
name | string | yes |
| |
description | string | null | yes |
| |
benefits | array of string | yes |
| |
perks | array of object | yes | ||
perks[].id | string | yes |
| |
perks[].key | string | yes | ||
perks[].name | string | yes | ||
terms | object | yes | ||
terms.name | string | yes | ||
terms.description | string | null | yes | ||
terms.benefits | array | null | yes | ||
terms.perks | array of object | yes | ||
terms.perks[].key | string | yes | ||
terms.perks[].name | string | yes | ||
terms.perks[].kind | enum | yes |
| |
terms.perks[].scope | enum | yes |
| |
terms.billing_kind | enum | yes |
| |
terms.price | string | null | yes | Never an amount: a note that Billing sets and charges the price, or null. | |
terms.digest | string | yes |
| |
change_note | string | null | yes | ||
created_at | string | yes |
| |
published_at | string | null | yes | null while a draft. |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: published
{
"id": "vpv_01JAB2C3D4E5F6G7H8J9K0MNPT",
"version": 2,
"name": "Supporter",
"description": "Back the stream every month.",
"benefits": [
"Supporter badge in chat",
"Members-only VOD chapters"
],
"perks": [
{
"id": "vpk_01JAB2C3D4E5F6G7H8J9K0MNPV",
"key": "chat-badge",
"name": "Chat badge"
}
],
"terms": {
"name": "Supporter",
"description": "Back the stream every month.",
"benefits": [
"Supporter badge in chat",
"Members-only VOD chapters"
],
"perks": [
{
"key": "chat-badge",
"name": "Chat badge",
"kind": "badge",
"scope": "creator"
}
],
"billing_kind": "channel_subscription",
"price": "set and charged by OpenVibe.Billing",
"digest": "3fa9c0d27e5b8814"
},
"change_note": "added VOD chapters",
"created_at": "2026-09-20T18:04:11.402Z",
"published_at": "2026-09-20T18:04:11.402Z"
}Rejected: version-zero
{
"id": "vpv_01JAB2C3D4E5F6G7H8J9K0MNPT",
"version": 0,
"name": "Supporter",
"description": "Back the stream every month.",
"benefits": [
"Supporter badge in chat",
"Members-only VOD chapters"
],
"perks": [
{
"id": "vpk_01JAB2C3D4E5F6G7H8J9K0MNPV",
"key": "chat-badge",
"name": "Chat badge"
}
],
"terms": {
"name": "Supporter",
"description": "Back the stream every month.",
"benefits": [
"Supporter badge in chat",
"Members-only VOD chapters"
],
"perks": [
{
"key": "chat-badge",
"name": "Chat badge",
"kind": "badge",
"scope": "creator"
}
],
"billing_kind": "channel_subscription",
"price": "set and charged by OpenVibe.Billing",
"digest": "3fa9c0d27e5b8814"
},
"change_note": "added VOD chapters",
"created_at": "2026-09-20T18:04:11.402Z",
"published_at": "2026-09-20T18:04:11.402Z"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('vip.plan-version@1', value); // { valid, errors: [{ path, message }] }