NetworkPresenceUpdateRequest network.presence-update-request@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- network
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/network/presence-update-request.v1.json
network.presence-update-request@1: the body of PUT /api/v1/me/presence on OpenVibe.Network. Every field is optional; only the fields sent change. state is the person's chosen state (auto: online or away from heartbeats, dnd, invisible); status_text and emoji are theirs; show_status is the 'Show my status' switch. An empty body is refused.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
state | enum | The chosen state. auto derives online or away from the newest heartbeat and the last input. |
| |
status_text | string | null | The status line; null clears it. Markup and control characters are stripped. |
| |
emoji | string | null | One emoji, or null to clear it. More than one grapheme cluster is refused. |
| |
show_status | boolean | The 'Show my status' switch (default on). Off reads as offline to everyone, like invisible. |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: clear
{
"status_text": null,
"emoji": null,
"show_status": false
}Valid: state-only
{
"state": "dnd"
}Valid: text-and-emoji
{
"status_text": "Out for lunch",
"emoji": "🍜"
}Rejected: empty
{}Rejected: long-emoji
{
"emoji": "not-an-emoji-at-all"
}Rejected: unknown-field
{
"state": "auto",
"last_seen": "2026-11-07T09:00:00.000Z"
}Rejected: unknown-state
{
"state": "online"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('network.presence-update-request@1', value); // { valid, errors: [{ path, message }] }