---
title: "network.label-prefs@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/network.label-prefs"
updated: null
---

# network.label-prefs@1 · OpenVibe.Services

HTML: [network.label-prefs@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/network.label-prefs)

# NetworkLabelPrefs `network.label-prefs@1`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

- Version: 1.0.0
- Owner: network
- Visibility: public
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/network/label-prefs.v1.json`](/docs/contracts/network.label-prefs.json)

network.label-prefs@1 (L1, labels and choices, 2026-10-31): what one person sees for each content label, on every OpenVibe site. One setting per label, stored in Network's site prefs, so the choice follows the account across Stream, Video, Pics and every other site. GET and PUT /api/v1/me/label-prefs; the response and the request are this shape. The web default is show for every label; the native apps hide nudity and 18+ until the person turns them on here (pinned by the app stores' user-content rules). The home page shows nothing labelled 18+ whatever the prefs say: it is the owner's one clean page.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `prefs` | object | yes | One choice for every label. A missing label is not a choice: a client asks Network and gets all six. | - `no other fields` |
| `prefs.nudity` | `https://openvibe.network/contracts/network/label-prefs.v1.json#/$defs/choice` | yes |  |  |
| `prefs.language` | `https://openvibe.network/contracts/network/label-prefs.v1.json#/$defs/choice` | yes |  |  |
| `prefs.graphic` | `https://openvibe.network/contracts/network/label-prefs.v1.json#/$defs/choice` | yes |  |  |
| `prefs.18+` | `https://openvibe.network/contracts/network/label-prefs.v1.json#/$defs/choice` | yes |  |  |
| `prefs.flashing` | `https://openvibe.network/contracts/network/label-prefs.v1.json#/$defs/choice` | yes |  |  |
| `prefs.spoilers` | `https://openvibe.network/contracts/network/label-prefs.v1.json#/$defs/choice` | yes |  |  |

## Examples

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

 Valid: all-show

~~~~
{
  "prefs": {
    "nudity": "show",
    "language": "show",
    "graphic": "show",
    "18+": "show",
    "flashing": "show",
    "spoilers": "show"
  }
}
~~~~

Valid: mixed

~~~~
{
  "prefs": {
    "nudity": "hide",
    "language": "show",
    "graphic": "blur",
    "18+": "hide",
    "flashing": "blur",
    "spoilers": "blur"
  }
}
~~~~

Rejected: extra-label

~~~~
{
  "prefs": {
    "nudity": "show",
    "language": "show",
    "graphic": "show",
    "18+": "show",
    "flashing": "show",
    "spoilers": "show",
    "gore": "show"
  }
}
~~~~

Rejected: missing-label

~~~~
{
  "prefs": {
    "nudity": "show",
    "language": "show",
    "graphic": "show",
    "flashing": "show",
    "spoilers": "show"
  }
}
~~~~

Rejected: unknown-choice

~~~~
{
  "prefs": {
    "nudity": "sometimes",
    "language": "show",
    "graphic": "show",
    "18+": "show",
    "flashing": "show",
    "spoilers": "show"
  }
}
~~~~

## Validate

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