NetworkProjectReadResult network.project-read-result@1
Generated at from
openvibe-contracts v0.97.0 and
openvibe-sdk v0.26.0.
- Version
- 1.0.0
- Owner
- network
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Decision
- ADR-014
- Schema
https://openvibe.network/contracts/network/project-read-result.v1.json
network.project-read-result@1: the service-facing answer from OpenVibe.Network GET /internal/projects/:project_id (network.project.read). It carries project tenancy, allowances, quotas, apps and each app's grants (requested, approved, denied or revoked) without credentials or member identities beyond the owner.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
project | object | yes |
| |
project.id | string | yes |
| |
project.name | string | yes | ||
project.owner | object | yes |
| |
project.owner.type | const | yes |
| |
project.owner.id | string | yes |
| |
project.environment_policy | string | yes | ||
project.home_cell | string | null | yes | ||
project.residency | string | null | yes | ||
project.preferred_regions | array of string | yes | ||
project.archived_at | string | null | yes | ||
project.created_at | string | yes | ||
allowance | array of string | yes | ||
quotas | array of object | yes |
| |
quotas[].capability | string | yes | ||
quotas[].limit | number | yes |
| |
quotas[].window | string | yes | ||
quotas[].unit | string | yes | ||
quotas[].enforced_by | string | null | yes | ||
apps | array of object | yes |
| |
apps[].id | string | yes |
| |
apps[].name | string | yes | ||
apps[].environment | string | yes | ||
apps[].status | enum | yes |
| |
apps[].created_at | string | yes | ||
apps[].revoked_at | string | null | yes | ||
grants | array of object | yes |
| |
grants[].app_id | string | yes |
| |
grants[].capability | string | yes | ||
grants[].audience | string | yes | ||
grants[].status | enum | yes |
| |
grants[].decided_at | string | null | yes |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: project
{
"project": {
"id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"name": "Example",
"owner": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"environment_policy": "production",
"home_cell": null,
"residency": null,
"preferred_regions": [],
"archived_at": null,
"created_at": "2026-10-03T00:00:00Z"
},
"allowance": [],
"quotas": [],
"apps": [],
"grants": []
}Valid: tenancy-with-apps-and-grants
{
"project": {
"id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"name": "Tenancy",
"owner": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"environment_policy": "sandbox",
"home_cell": "cel_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"residency": "eu-west",
"preferred_regions": [],
"created_at": "2026-10-03T00:00:00Z",
"archived_at": null
},
"allowance": [
"media.object.read",
"media.object.upload"
],
"quotas": [
{
"capability": "media.object.upload",
"limit": 1073741824,
"window": "total",
"unit": "bytes",
"enforced_by": "openvibe.media"
}
],
"apps": [
{
"id": "app_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"name": "Uploader",
"environment": "sandbox",
"status": "active",
"created_at": "2026-10-03T00:00:00Z",
"revoked_at": null
},
{
"id": "app_01JAB2C3D4E5F6G7H8J9K0MPRQ",
"name": "Reader",
"environment": "sandbox",
"status": "revoked",
"created_at": "2026-10-03T00:00:00Z",
"revoked_at": "2026-10-03T01:00:00Z"
}
],
"grants": [
{
"app_id": "app_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"capability": "media.object.upload",
"audience": "openvibe.media",
"status": "approved",
"decided_at": "2026-10-03T00:30:00Z"
},
{
"app_id": "app_01JAB2C3D4E5F6G7H8J9K0MPRQ",
"capability": "media.object.read",
"audience": "openvibe.media",
"status": "revoked",
"decided_at": "2026-10-03T01:00:00Z"
}
]
}Rejected: secret
{
"project": {
"id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"name": "Example",
"owner": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"environment_policy": "production",
"home_cell": null,
"residency": null,
"preferred_regions": [],
"archived_at": null,
"created_at": "2026-10-03T00:00:00Z"
},
"allowance": [],
"quotas": [],
"apps": [
{
"id": "app_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"name": "App",
"environment": "production",
"status": "active",
"created_at": "2026-10-03T00:00:00Z",
"revoked_at": null,
"client_secret": "must never be exposed"
}
],
"grants": []
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('network.project-read-result@1', value); // { valid, errors: [{ path, message }] }