TipsModerationResult tips.moderation-result@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/moderation-result.v1.json
tips.moderation-result@1: answers of tips.interaction.moderate on OpenVibe.Tips. Moderation never touches the money (no refund, no uncounting). GET /api/v1/moderation → { creator, interactions, next_cursor }: the review queue, newest first (moderators' view). GET /api/v1/moderation/log → { log }: the latest 100 outcomes (held and filtered by the word filter at settlement; hidden and restored by the creator, a moderator or a service). POST /api/v1/interactions/:id/hide → { interaction, changed, cancelled_effects } (chat, TTS and media deliveries still queued are cancelled; overlays drop the alert); POST …/restore → the same, cancelled_effects empty (a held interaction is released now; what a hide cancelled stays cancelled). changed false when it already was in that state.
Fields
This schema has no named fields.
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: hidden
{
"interaction": {
"id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
"kind": "paid_message",
"created_at": "2026-09-25T09:12:40.118Z",
"settled_at": "2026-09-25T09:12:41.530Z",
"payment_state": "settled",
"test": false,
"moderation": {
"state": "hidden",
"at": "2026-09-25T09:20:02.771Z",
"filtered": false
},
"supporter_name": "moosefan",
"amount": 500,
"message": "Great stream tonight!",
"tts_text": null,
"media_url": null,
"public": {
"interaction_id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
"kind": "paid_message",
"amount": null,
"amount_hidden": false,
"currency": "vibes-bits",
"settlement": "billing",
"test": false,
"at": "2026-09-25T09:12:41.530Z",
"supporter_name": null,
"message": null,
"tts": null,
"media": null,
"hidden": true
}
},
"changed": true,
"cancelled_effects": [
"paid_message"
]
}Valid: log
{
"log": [
{
"interaction_id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
"action": "hidden",
"by_role": "moderator",
"actor": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
"reason": "spam link",
"created_at": "2026-09-25T09:20:02.771Z"
}
]
}Valid: queue
{
"creator": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"interactions": [
{
"id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
"kind": "paid_message",
"created_at": "2026-09-25T09:12:40.118Z",
"settled_at": "2026-09-25T09:12:41.530Z",
"payment_state": "settled",
"test": false,
"moderation": {
"state": "hidden",
"at": "2026-09-25T09:20:02.771Z",
"filtered": false
},
"supporter_name": "moosefan",
"amount": 500,
"message": "Great stream tonight!",
"tts_text": null,
"media_url": null,
"public": {
"interaction_id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
"kind": "paid_message",
"amount": null,
"amount_hidden": false,
"currency": "vibes-bits",
"settlement": "billing",
"test": false,
"at": "2026-09-25T09:12:41.530Z",
"supporter_name": null,
"message": null,
"tts": null,
"media": null,
"hidden": true
}
}
],
"next_cursor": null
}Rejected: bad-effect
{
"interaction": {
"id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
"kind": "paid_message",
"created_at": "2026-09-25T09:12:40.118Z",
"settled_at": "2026-09-25T09:12:41.530Z",
"payment_state": "settled",
"test": false,
"moderation": {
"state": "hidden",
"at": "2026-09-25T09:20:02.771Z",
"filtered": false
},
"supporter_name": "moosefan",
"amount": 500,
"message": "Great stream tonight!",
"tts_text": null,
"media_url": null,
"public": {
"interaction_id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
"kind": "paid_message",
"amount": null,
"amount_hidden": false,
"currency": "vibes-bits",
"settlement": "billing",
"test": false,
"at": "2026-09-25T09:12:41.530Z",
"supporter_name": null,
"message": null,
"tts": null,
"media": null,
"hidden": true
}
},
"changed": true,
"cancelled_effects": [
"overlay_alert"
]
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('tips.moderation-result@1', value); // { valid, errors: [{ path, message }] }