HostProject host.project@1

Generated at from openvibe-contracts v0.53.0 and openvibe-sdk v0.11.0.

Version
1.0.0
Owner
host
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/host/project.v1.json

host.project@1: one OpenVibe.Host tenant project (server/http/serialize.js project): owned by a person (usr_…), production or sandbox, with the caller's role in it and any staff takedown. POST /api/v1/projects and GET /api/v1/projects/:id add the effective quota and the usage.

Fields

FieldTypeRequiredDescriptionConstraints
idstringyes
  • pattern ^prj_[0-9A-HJKMNP-TV-Z]{26}$
namestringyes
  • minLength 1
  • maxLength 80
environmentenumyes
  • one of "production", "sandbox"
network_project_idstring | nullyesThe OpenVibe.Network project once Network has projects.
ownerstringyes
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
roleenumyesThe caller's role (staff: a Network admin who is not a member).
  • one of "owner", "maintainer", "deployer", "staff", null
created_atstringyes
  • format date-time
takedownobject | nullyesA staff takedown covering it: serving stops while the content is kept for review.
quotaobjectThe effective quota: the project's override where set, else its environment's default.
quota.storage_bytesintegeryes
  • minimum 0
quota.deploys_per_dayintegeryes
  • minimum 0
quota.max_filesintegeryes
  • minimum 0
quota.max_file_bytesintegeryes
  • minimum 0
quota.sitesintegeryes
  • minimum 0
quota.custom_domainsintegeryes
  • minimum 0
usageobject
usage.storage_bytesintegeryes
  • minimum 0
usage.objectsintegeryes
  • minimum 0
usage.deploys_last_24hintegeryes
  • minimum 0
usage.sitesintegeryes
  • minimum 0
usage.custom_domainsintegeryes
  • minimum 0

Examples

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

Valid: listed
{
  "id": "prj_01JAD1P2R3J4K5M6N7P8Q9R0S1",
  "name": "Harbour Radio",
  "environment": "production",
  "network_project_id": null,
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "role": "owner",
  "created_at": "2026-09-24T08:15:00.000Z",
  "takedown": null
}
Valid: owner
{
  "id": "prj_01JAD1P2R3J4K5M6N7P8Q9R0S1",
  "name": "Harbour Radio",
  "environment": "production",
  "network_project_id": null,
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "role": "owner",
  "created_at": "2026-09-24T08:15:00.000Z",
  "takedown": null,
  "quota": {
    "storage_bytes": 1073741824,
    "deploys_per_day": 50,
    "max_files": 5000,
    "max_file_bytes": 26214400,
    "sites": 5,
    "custom_domains": 5
  },
  "usage": {
    "storage_bytes": 482113,
    "objects": 37,
    "deploys_last_24h": 3,
    "sites": 1,
    "custom_domains": 1
  }
}
Rejected: bad-environment
{
  "id": "prj_01JAD1P2R3J4K5M6N7P8Q9R0S1",
  "name": "Harbour Radio",
  "environment": "staging",
  "network_project_id": null,
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "role": "owner",
  "created_at": "2026-09-24T08:15:00.000Z",
  "takedown": null
}

Validate

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