TipsExternalResult tips.external-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/external-result.v1.json

tips.external-result@1: the answer of tips.interaction.record on OpenVibe.Tips. POST /api/v1/interactions/external → { interaction, duplicate } (201 when recorded; 200 with duplicate true when that provider_ref was recorded before, answering the first interaction). The interaction is funding external, settlement external, in the service view.

Fields

FieldTypeRequiredDescriptionConstraints
interactiontips.interactionyes
duplicatebooleanyes

Examples

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

Valid: recorded
{
  "interaction": {
    "id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
    "creator": {
      "type": "user",
      "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
    },
    "supporter": {
      "type": "user",
      "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
    },
    "supporter_name": "moosefan",
    "kind": "tip",
    "amount": 500,
    "currency": "vibes-bits",
    "message": "Great stream tonight!",
    "tts": null,
    "media": null,
    "goal_id": null,
    "funding": "external",
    "settlement": "external",
    "origin": "external",
    "test": false,
    "privacy": {
      "anonymous": false,
      "hide_amount": false,
      "private_message": false
    },
    "public": {
      "interaction_id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
      "kind": "tip",
      "amount": 500,
      "amount_hidden": false,
      "currency": "vibes-bits",
      "settlement": "external",
      "test": false,
      "at": "2026-09-25T09:12:41.530Z",
      "supporter_name": "moosefan",
      "message": "Great stream tonight!",
      "tts": null,
      "media": null,
      "hidden": false
    },
    "erased_at": null,
    "moderation": {
      "state": "visible",
      "filtered": false,
      "at": null
    },
    "payment": {
      "state": "settled",
      "billing_txn_id": null,
      "reversal_txn_ids": [],
      "reversed_amount": 0,
      "failure": null,
      "settled_at": "2026-09-25T09:12:41.530Z",
      "reversed_at": null
    },
    "delivery": {
      "state": "delivered",
      "delivered_at": "2026-09-25T09:12:43.004Z"
    },
    "created_at": "2026-09-25T09:12:40.118Z",
    "updated_at": "2026-09-25T09:12:43.004Z",
    "effects": [
      {
        "effect": "overlay_alert",
        "adapter": "overlay",
        "state": "delivered",
        "attempts": 1,
        "last_error": null,
        "updated_at": "2026-09-25T09:12:41.530Z"
      },
      {
        "effect": "paid_message",
        "adapter": "live-chat",
        "state": "delivered",
        "attempts": 1,
        "last_error": null,
        "updated_at": "2026-09-25T09:12:43.004Z"
      }
    ],
    "provider": "powerchat",
    "provider_ref": "pcevt_7730021",
    "legacy_source": null
  },
  "duplicate": false
}
Rejected: no-duplicate-flag
{
  "interaction": {
    "id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
    "creator": {
      "type": "user",
      "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
    },
    "supporter": {
      "type": "user",
      "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
    },
    "supporter_name": "moosefan",
    "kind": "paid_message",
    "amount": 500,
    "currency": "vibes-bits",
    "message": "Great stream tonight!",
    "tts": null,
    "media": null,
    "goal_id": null,
    "funding": "credit",
    "settlement": "billing",
    "origin": "tips",
    "test": false,
    "privacy": {
      "anonymous": false,
      "hide_amount": false,
      "private_message": false
    },
    "public": {
      "interaction_id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ5",
      "kind": "paid_message",
      "amount": 500,
      "amount_hidden": false,
      "currency": "vibes-bits",
      "settlement": "billing",
      "test": false,
      "at": "2026-09-25T09:12:41.530Z",
      "supporter_name": "moosefan",
      "message": "Great stream tonight!",
      "tts": null,
      "media": null,
      "hidden": false
    },
    "erased_at": null,
    "moderation": {
      "state": "visible",
      "filtered": false,
      "at": null
    },
    "payment": {
      "state": "settled",
      "billing_txn_id": "txn_01JAB2C3D4E5F6G7H8J9K0MNQ6",
      "reversal_txn_ids": [],
      "reversed_amount": 0,
      "failure": null,
      "settled_at": "2026-09-25T09:12:41.530Z",
      "reversed_at": null
    },
    "delivery": {
      "state": "delivered",
      "delivered_at": "2026-09-25T09:12:43.004Z"
    },
    "created_at": "2026-09-25T09:12:40.118Z",
    "updated_at": "2026-09-25T09:12:43.004Z",
    "effects": [
      {
        "effect": "overlay_alert",
        "adapter": "overlay",
        "state": "delivered",
        "attempts": 1,
        "last_error": null,
        "updated_at": "2026-09-25T09:12:41.530Z"
      },
      {
        "effect": "paid_message",
        "adapter": "live-chat",
        "state": "delivered",
        "attempts": 1,
        "last_error": null,
        "updated_at": "2026-09-25T09:12:43.004Z"
      }
    ],
    "provider": null,
    "provider_ref": null,
    "legacy_source": null
  }
}

Validate

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