VipMembersResult vip.members-result@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/members-result.v1.json
vip.members-result@1: the answer of vip.creator.members.list on OpenVibe.VIP. GET /api/v1/creators/:ref/members → { creator, source, note?, members }: the creator's active members with the membership VIP filed for each (the plan version they joined under; null when VIP has none). source billing: Billing's active subscriptions to the creator; source projection: Billing did not answer and the list is VIP's fresh projection rows, possibly incomplete (note says so). For the creator, staff or a service holding the capability; 404 vip.creator_not_found.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
creator | vip.creator | yes | ||
source | enum | yes |
| |
note | string | |||
members | array of object | yes | ||
members[].member | identity.subject-ref | yes | ||
members[].current_period_end | string | null | yes | ||
members[].cancel_at_period_end | boolean | yes | ||
members[].subscription_id | string | null | yes | The Billing subscription (sub_…). | |
members[].membership | one of | yes |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: billing
{
"creator": {
"id": "vcr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"kind": "creator",
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"username": "moosefan",
"display_name": "Moose Fan",
"bio": "Late-night builds and chill.",
"status": "active"
},
"source": "billing",
"members": [
{
"member": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"current_period_end": "2026-10-20T18:04:11.000Z",
"cancel_at_period_end": false,
"subscription_id": "sub_01JAB2C3D4E5F6G7H8J9K0MNQ3",
"membership": {
"id": "vms_01JAB2C3D4E5F6G7H8J9K0MNPX",
"member": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"creator_id": "vcr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"plan_id": "vpl_01JAB2C3D4E5F6G7H8J9K0MNPW",
"plan_version": {
"id": "vpv_01JAB2C3D4E5F6G7H8J9K0MNPT",
"version": 2,
"name": "Supporter",
"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"
}
},
"perks": [
"chat-badge"
],
"origin": "checkout",
"joined_at": "2026-09-20T18:04:11.402Z",
"terms_since": "2026-09-20T18:04:11.402Z"
}
}
]
}Valid: projection
{
"creator": {
"id": "vcr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"kind": "creator",
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"username": "moosefan",
"display_name": "Moose Fan",
"bio": "Late-night builds and chill.",
"status": "active"
},
"source": "projection",
"note": "Billing did not answer; this list is VIP's projection (fresh rows only) and may be incomplete",
"members": []
}Rejected: bad-source
{
"creator": {
"id": "vcr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"kind": "creator",
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"username": "moosefan",
"display_name": "Moose Fan",
"bio": "Late-night builds and chill.",
"status": "active"
},
"source": "cache",
"members": []
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('vip.members-result@1', value); // { valid, errors: [{ path, message }] }