TipsPaidResult tips.paid-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/paid-result.v1.json

tips.paid-result@1: the answer of the paid requests on OpenVibe.Tips (tips.checkout.create, tips.superchat.create, tips.tts.request, tips.media_request.create). POST /api/v1/checkout, /paid-messages, /tts-requests and /media-requests → { interaction, checkout_url, checkout_ref } (201; 200 for a replay of the same Idempotency-Key). Paid from credit, the interaction is settled at once, or still pending while Billing is retried. Through a checkout, it is pending and the supporter pays at checkout_url (https only; a PowerChat checkout may come as checkout_ref only); the paid message, TTS or media request exists only after Billing settles it. A service sees the interaction as a service (no subject for an anonymous supporter); a person as its supporter.

Fields

FieldTypeRequiredDescriptionConstraints
interactiontips.interactionyes
checkout_urlstring | nullyes
checkout_refstring | nullyes

Examples

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

Valid: checkout
{
  "interaction": {
    "id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ7",
    "creator": {
      "type": "user",
      "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
    },
    "supporter": {
      "type": "user",
      "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
    },
    "supporter_name": "moosefan",
    "kind": "tip",
    "amount": 1000,
    "currency": "vibes-bits",
    "message": null,
    "tts": null,
    "media": null,
    "goal_id": null,
    "funding": "checkout",
    "settlement": "billing",
    "origin": "tips",
    "test": false,
    "privacy": {
      "anonymous": false,
      "hide_amount": false,
      "private_message": false
    },
    "public": {
      "interaction_id": "tint_01JAB2C3D4E5F6G7H8J9K0MNQ7",
      "kind": "tip",
      "amount": 1000,
      "amount_hidden": false,
      "currency": "vibes-bits",
      "settlement": "billing",
      "test": false,
      "at": "2026-09-25T09:12:40.118Z",
      "supporter_name": "moosefan",
      "message": null,
      "tts": null,
      "media": null,
      "hidden": false
    },
    "erased_at": null,
    "moderation": {
      "state": "visible",
      "filtered": false,
      "at": null
    },
    "payment": {
      "state": "pending",
      "billing_txn_id": null,
      "reversal_txn_ids": [],
      "reversed_amount": 0,
      "failure": null,
      "settled_at": null,
      "reversed_at": null
    },
    "delivery": {
      "state": "awaiting_payment",
      "delivered_at": null
    },
    "created_at": "2026-09-25T09:12:40.118Z",
    "updated_at": "2026-09-25T09:12:40.118Z",
    "checkout": {
      "url": "https://powerchat.live/checkout/pc_91c2e7",
      "ref": "pc_91c2e7",
      "provider": "powerchat",
      "intent_id": "int_01JAB2C3D4E5F6G7H8J9K0MNQ8"
    }
  },
  "checkout_url": "https://powerchat.live/checkout/pc_91c2e7",
  "checkout_ref": "pc_91c2e7"
}
Valid: credit
{
  "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
  },
  "checkout_url": null,
  "checkout_ref": null
}
Rejected: no-interaction
{
  "checkout_url": null,
  "checkout_ref": null
}

Validate

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