TipsProfile tips.profile@1

Generated at from openvibe-contracts v0.53.0 and openvibe-sdk v0.11.0.

Version
1.0.0
Owner
tips
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/tips/profile.v1.json

tips.profile@1: a creator's tip profile on OpenVibe.Tips (server/domain/profiles.js present). page_enabled is the creator's switch for the public page (off: it answers 404 to everyone else); accepting takes new tips; minimums are in Vibes bits (tts and media_request null while switched off); page is what the public pages show. The creator and granted services also get filter (the word filter for paid messages), revision, created_at and updated_at.

Fields

FieldTypeRequiredDescriptionConstraints
creatoridentity.subject-refyes
handlestringyes
  • pattern ^[a-z0-9][a-z0-9_.-]{0,39}$
display_namestringyes
avatar_urlstring | nullyes
headlinestring | nullyes
page_enabledbooleanyes
acceptingbooleanyes
urlstringyes
minimumsobjectyes
minimums.tipintegeryes
  • minimum 1
minimums.paid_messageintegeryes
  • minimum 1
minimums.ttsinteger | nullyes
  • minimum 1
minimums.media_requestinteger | nullyes
  • minimum 1
ttsobjectyes
tts.enabledbooleanyes
tts.max_charsintegeryes
tts.voicestringyes
media_requestsobjectyes
media_requests.enabledbooleanyes
media_requests.max_secondsintegeryes
pageobjectyes
page.goal_amountsbooleanyes
page.goal_supportersbooleanyes
page.supporters_pagebooleanyes
page.supporters_amountsbooleanyes
page.supporters_messagesbooleanyes
supporters_urlstring | nullyes
currencyconstyes
  • = "vibes-bits"
filterobject
filter.wordsarray of stringyes
filter.actionenumyes
  • one of "mask", "hold"
filter.linksbooleanyes
revisioninteger
  • minimum 1
created_atstring
updated_atstring

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: owner
{
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "handle": "moosefan",
  "display_name": "Moose Fan",
  "avatar_url": "https://openvibe.media/avatar/moosefan",
  "headline": "Late-night builds and chill.",
  "page_enabled": true,
  "accepting": true,
  "url": "https://openvibe.tips/moosefan",
  "minimums": {
    "tip": 1,
    "paid_message": 100,
    "tts": 100,
    "media_request": null
  },
  "tts": {
    "enabled": true,
    "max_chars": 200,
    "voice": "gary"
  },
  "media_requests": {
    "enabled": false,
    "max_seconds": 600
  },
  "page": {
    "goal_amounts": true,
    "goal_supporters": false,
    "supporters_page": true,
    "supporters_amounts": false,
    "supporters_messages": true
  },
  "supporters_url": "https://openvibe.tips/moosefan/supporters",
  "currency": "vibes-bits",
  "filter": {
    "words": [
      "spoiler"
    ],
    "action": "mask",
    "links": true
  },
  "revision": 4,
  "created_at": "2026-09-01T12:00:00.000Z",
  "updated_at": "2026-09-25T09:12:40.118Z"
}
Valid: public
{
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "handle": "moosefan",
  "display_name": "Moose Fan",
  "avatar_url": "https://openvibe.media/avatar/moosefan",
  "headline": "Late-night builds and chill.",
  "page_enabled": true,
  "accepting": true,
  "url": "https://openvibe.tips/moosefan",
  "minimums": {
    "tip": 1,
    "paid_message": 100,
    "tts": 100,
    "media_request": null
  },
  "tts": {
    "enabled": true,
    "max_chars": 200,
    "voice": "gary"
  },
  "media_requests": {
    "enabled": false,
    "max_seconds": 600
  },
  "page": {
    "goal_amounts": true,
    "goal_supporters": false,
    "supporters_page": true,
    "supporters_amounts": false,
    "supporters_messages": true
  },
  "supporters_url": "https://openvibe.tips/moosefan/supporters",
  "currency": "vibes-bits"
}
Rejected: bad-filter-action
{
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "handle": "moosefan",
  "display_name": "Moose Fan",
  "avatar_url": "https://openvibe.media/avatar/moosefan",
  "headline": "Late-night builds and chill.",
  "page_enabled": true,
  "accepting": true,
  "url": "https://openvibe.tips/moosefan",
  "minimums": {
    "tip": 1,
    "paid_message": 100,
    "tts": 100,
    "media_request": null
  },
  "tts": {
    "enabled": true,
    "max_chars": 200,
    "voice": "gary"
  },
  "media_requests": {
    "enabled": false,
    "max_seconds": 600
  },
  "page": {
    "goal_amounts": true,
    "goal_supporters": false,
    "supporters_page": true,
    "supporters_amounts": false,
    "supporters_messages": true
  },
  "supporters_url": "https://openvibe.tips/moosefan/supporters",
  "currency": "vibes-bits",
  "filter": {
    "words": [],
    "action": "block",
    "links": true
  },
  "revision": 4,
  "created_at": "2026-09-01T12:00:00.000Z",
  "updated_at": "2026-09-25T09:12:40.118Z"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('tips.profile@1', value);   // { valid, errors: [{ path, message }] }