openvibers/openvibe.contracts Commits
OpenVibe.Git's manifest and the git.repo.read / git.repo.write capabilities (#387)
Changes
@@@ -1,5 +1,9 @@# Changelog++## 0.373.0 — 2026-11-09++++- The git service: its manifest, git.repo.read and git.repo.write, git.access-request@1 and git.access-result@1 (OpenVibe.Git)++## 0.372.0 — 2026-11-09- The machine product Node became OpenVibe Link. The network registry contracts are `network.link@1`,@@@ -10836,6 +10836,24 @@"compatibility": "backward","status": "active","adr": "ADR-025"++ },++ {++ "id": "git.access-request",++ "version": "1.0.0",++ "owner": "git",++ "schema": "git/access-request.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "git.access-result",++ "version": "1.0.0",++ "owner": "git",++ "schema": "git/access-result.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,66 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/git/access-request.v1.json",++ "title": "GitAccessRequest",++ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "owner",++ "name"++ ],++ "properties": {++ "owner": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",++ "description": "The repository owner's lower-case OpenVibe username."++ },++ "name": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",++ "description": "The repository name, lower-case and never ending in .git."++ },++ "ref": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "path": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "branch": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "message": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "files": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ }++ }++}nnew file mode 100644@@@ -0,0 +1,46 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/git/access-result.v1.json",++ "title": "GitAccessResult",++ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "full_name"++ ],++ "properties": {++ "full_name": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"++ },++ "html_url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "clone_url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "visibility": {++ "type": "string",++ "enum": [++ "public",++ "private"++ ]++ },++ "default_branch": {++ "type": "string",++ "maxLength": 255++ },++ "branch": {++ "type": "string",++ "maxLength": 255++ },++ "sha": {++ "type": "string",++ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,4 @@++{++ "owner": "ada",++ "name": "ada/my-site"++}\\ No newline at end of filennew file mode 100644@@@ -0,0 +1,3 @@++{++ "owner": "ada"++}\\ No newline at end of filennew file mode 100644@@@ -0,0 +1,6 @@++{++ "owner": "ada",++ "name": "my-site",++ "ref": "main",++ "path": "README.md"++}\\ No newline at end of filennew file mode 100644@@@ -0,0 +1,9 @@++{++ "owner": "ada",++ "name": "my-site",++ "branch": "agent/run-1",++ "message": "Write the title without a clone",++ "files": [++ { "path": "notes.txt", "content": "made by the API\n" }++ ]++}\\ No newline at end of filennew file mode 100644@@@ -0,0 +1,4 @@++{++ "full_name": "ada/my-site",++ "clone_url": "http://git.openvibe.codes/ada/my-site.git"++}\\ No newline at end of filennew file mode 100644@@@ -0,0 +1,3 @@++{++ "full_name": "ada"++}\\ No newline at end of filennew file mode 100644@@@ -0,0 +1,5 @@++{++ "full_name": "ada/my-site",++ "branch": "agent/run-1",++ "sha": "0123456789abcdef0123456789abcdef01234567"++}\\ No newline at end of filennew file mode 100644@@@ -0,0 +1,7 @@++{++ "full_name": "ada/my-site",++ "html_url": "https://git.openvibe.codes/ada/my-site",++ "clone_url": "https://git.openvibe.codes/ada/my-site.git",++ "visibility": "private",++ "default_branch": "main"++}\\ No newline at end of file@@@ -119262,6 +119262,128 @@},"additionalProperties": false}++ },++ "git.access-request": {++ "version": "1.0.0",++ "owner": "git",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/git/access-request.v1.json",++ "title": "GitAccessRequest",++ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "owner",++ "name"++ ],++ "properties": {++ "owner": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",++ "description": "The repository owner's lower-case OpenVibe username."++ },++ "name": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",++ "description": "The repository name, lower-case and never ending in .git."++ },++ "ref": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "path": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "branch": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "message": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "files": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ }++ }++ }++ },++ "git.access-result": {++ "version": "1.0.0",++ "owner": "git",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/git/access-result.v1.json",++ "title": "GitAccessResult",++ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "full_name"++ ],++ "properties": {++ "full_name": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"++ },++ "html_url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "clone_url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "visibility": {++ "type": "string",++ "enum": [++ "public",++ "private"++ ]++ },++ "default_branch": {++ "type": "string",++ "maxLength": 255++ },++ "branch": {++ "type": "string",++ "maxLength": 255++ },++ "sha": {++ "type": "string",++ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bench API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Codes API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe Connect API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Design API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Domains API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Exchange API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"nnew file mode 100644@@@ -0,0 +1,2369 @@++{++ "openapi": "3.1.0",++ "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",++ "info": {++ "title": "OpenVibe.Git API",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "license": {++ "name": "MIT",++ "identifier": "MIT"++ }++ },++ "servers": [++ {++ "url": "https://git.openvibe.codes"++ }++ ],++ "paths": {++ "/api/v1/profile/{username}": {++ "get": {++ "operationId": "get_api_v1_profile_username",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "username",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "owner",++ "in": "query",++ "required": true,++ "schema": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",++ "description": "The repository owner's lower-case OpenVibe username."++ },++ "description": "The repository owner's lower-case OpenVibe username."++ },++ {++ "name": "name",++ "in": "query",++ "required": true,++ "schema": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",++ "description": "The repository name, lower-case and never ending in .git."++ },++ "description": "The repository name, lower-case and never ending in .git."++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos": {++ "get": {++ "operationId": "get_api_v1_repos",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "query",++ "required": true,++ "schema": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",++ "description": "The repository owner's lower-case OpenVibe username."++ },++ "description": "The repository owner's lower-case OpenVibe username."++ },++ {++ "name": "name",++ "in": "query",++ "required": true,++ "schema": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",++ "description": "The repository name, lower-case and never ending in .git."++ },++ "description": "The repository name, lower-case and never ending in .git."++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ },++ "post": {++ "operationId": "post_api_v1_repos",++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.write"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.write"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-request.v1"++ }++ }++ }++ },++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/blob": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_blob",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/branches": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_branches",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/commit/{sha}": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_commit_sha",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "sha",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/commits": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_commits",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ },++ "post": {++ "operationId": "post_api_v1_repos_owner_name_commits",++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.write"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.write"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-request.v1"++ }++ }++ }++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/contributors": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_contributors",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/insights": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_insights",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/raw": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_raw",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/releases": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_releases",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ },++ "post": {++ "operationId": "post_api_v1_repos_owner_name_releases",++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.write"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.write"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-request.v1"++ }++ }++ }++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/star": {++ "post": {++ "operationId": "post_api_v1_repos_owner_name_star",++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.write"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.write"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-request.v1"++ }++ }++ }++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/tags": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_tags",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/repos/{owner}/{name}/tree": {++ "get": {++ "operationId": "get_api_v1_repos_owner_name_tree",++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.read"++ ]++ }++ ],++ "x-openvibe-input": {++ "$ref": "#/components/schemas/git.access-request.v1"++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "ref",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "description": "A branch or tag to read at; the default branch when absent."++ },++ {++ "name": "path",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "description": "A path inside the tree or a blob's path."++ },++ {++ "name": "branch",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "description": "The branch a contents write goes on."++ },++ {++ "name": "message",++ "in": "query",++ "required": false,++ "schema": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "description": "The commit message of a contents write."++ },++ {++ "name": "files",++ "in": "query",++ "required": false,++ "schema": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ },++ "description": "The files a contents write changes, by path and full content."++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/tokens": {++ "post": {++ "operationId": "post_api_v1_tokens",++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",++ "tags": [++ "git.repo"++ ],++ "x-openvibe-capabilities": [++ "git.repo.write"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.repo.write"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-request.v1"++ }++ }++ }++ },++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ }++ },++ "components": {++ "schemas": {++ "errors.problem.v1": {++ "title": "Problem",++ "description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",++ "type": "object",++ "required": [++ "type",++ "title",++ "status",++ "code"++ ],++ "additionalProperties": true,++ "properties": {++ "type": {++ "type": "string",++ "format": "uri-reference"++ },++ "title": {++ "type": "string",++ "minLength": 1++ },++ "status": {++ "type": "integer",++ "minimum": 400,++ "maximum": 599++ },++ "detail": {++ "type": "string"++ },++ "instance": {++ "type": "string",++ "format": "uri-reference"++ },++ "code": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*$"++ },++ "request_id": {++ "type": "string"++ },++ "trace_id": {++ "type": "string",++ "pattern": "^[0-9a-f]{32}$"++ },++ "errors": {++ "type": "array",++ "items": {++ "type": "object",++ "required": [++ "message"++ ],++ "properties": {++ "path": {++ "type": "string"++ },++ "message": {++ "type": "string"++ }++ }++ }++ },++ "error": {++ "type": "string",++ "description": "Deprecated compatibility field: same text as title/detail for clients that read {error}."++ }++ }++ },++ "git.access-request.v1": {++ "title": "GitAccessRequest",++ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "owner",++ "name"++ ],++ "properties": {++ "owner": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",++ "description": "The repository owner's lower-case OpenVibe username."++ },++ "name": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",++ "description": "The repository name, lower-case and never ending in .git."++ },++ "ref": {++ "type": "string",++ "maxLength": 255,++ "description": "A branch or tag to read at; the default branch when absent."++ },++ "path": {++ "type": "string",++ "maxLength": 4096,++ "description": "A path inside the tree or a blob's path."++ },++ "branch": {++ "type": "string",++ "maxLength": 255,++ "description": "The branch a contents write goes on."++ },++ "message": {++ "type": "string",++ "maxLength": 2000,++ "description": "The commit message of a contents write."++ },++ "files": {++ "type": "array",++ "maxItems": 200,++ "description": "The files a contents write changes, by path and full content.",++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path",++ "content"++ ],++ "properties": {++ "path": {++ "type": "string",++ "maxLength": 4096++ },++ "content": {++ "type": "string"++ }++ }++ }++ }++ }++ },++ "git.access-result.v1": {++ "title": "GitAccessResult",++ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "full_name"++ ],++ "properties": {++ "full_name": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"++ },++ "html_url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "clone_url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "visibility": {++ "type": "string",++ "enum": [++ "public",++ "private"++ ]++ },++ "default_branch": {++ "type": "string",++ "maxLength": 255++ },++ "branch": {++ "type": "string",++ "maxLength": 255++ },++ "sha": {++ "type": "string",++ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"++ }++ }++ }++ },++ "securitySchemes": {++ "openvibeToken": {++ "type": "http",++ "scheme": "bearer",++ "bearerFormat": "JWT",++ "description": "An OpenVibe Network token for this service: a person's token, an app token (client credentials, audience of the service) or a first-party service token. Its `cap` claim must include the capability the operation names."++ }++ }++ }++}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -127,6 +127,13 @@"operations": 12,"capabilities": 9},++ {++ "service": "git",++ "name": "OpenVibe.Git",++ "origin": "https://git.openvibe.codes",++ "operations": 18,++ "capabilities": 2++ },{"service": "host","name": "OpenVibe.Host",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Mail API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.372.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Play API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Quest API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Report API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Today API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Vision API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Zone API",-- "version": "0.372.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.373.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -323456,3 +323456,57 @@ export interface ExchangeKeyCreated {key: ExchangeKey;secret: string;}++++/** [email protected] (owner: git) */++/**++ * git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.++ */++export interface GitAccessRequest {++ /**++ * The repository owner's lower-case OpenVibe username.++ */++ owner: string;++ /**++ * The repository name, lower-case and never ending in .git.++ */++ name: string;++ /**++ * A branch or tag to read at; the default branch when absent.++ */++ ref?: string;++ /**++ * A path inside the tree or a blob's path.++ */++ path?: string;++ /**++ * The branch a contents write goes on.++ */++ branch?: string;++ /**++ * The commit message of a contents write.++ */++ message?: string;++ /**++ * The files a contents write changes, by path and full content.++ *++ * @maxItems 200++ */++ files?: {++ path: string;++ content: string;++ }[];++}++++/** [email protected] (owner: git) */++/**++ * git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.++ */++export interface GitAccessResult {++ full_name: string;++ html_url?: string;++ clone_url?: string;++ visibility?: "public" | "private";++ default_branch?: string;++ branch?: string;++ sha?: string;++}nnew file mode 100644@@@ -0,0 +1,33 @@++{++ "id": "git.repo.read",++ "version": "1.0",++ "owner": "git",++ "status": "active",++ "visibility": "first-party",++ "description": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",++ "inputSchema": "git.access-request@1",++ "outputSchema": "git.access-result@1",++ "permissions": [++ "git:read"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/repos",++ "GET /api/v1/repos/:owner/:name",++ "GET /api/v1/repos/:owner/:name/tree",++ "GET /api/v1/repos/:owner/:name/blob",++ "GET /api/v1/repos/:owner/:name/raw",++ "GET /api/v1/repos/:owner/:name/commits",++ "GET /api/v1/repos/:owner/:name/commit/:sha",++ "GET /api/v1/repos/:owner/:name/branches",++ "GET /api/v1/repos/:owner/:name/tags",++ "GET /api/v1/repos/:owner/:name/releases",++ "GET /api/v1/repos/:owner/:name/contributors",++ "GET /api/v1/repos/:owner/:name/insights",++ "GET /api/v1/profile/:username"++ ]++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "id": "git.repo.write",++ "version": "1.0",++ "owner": "git",++ "status": "active",++ "visibility": "first-party",++ "description": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",++ "inputSchema": "git.access-request@1",++ "outputSchema": "git.access-result@1",++ "permissions": [++ "git:write"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/repos",++ "POST /api/v1/tokens",++ "POST /api/v1/repos/:owner/:name/commits",++ "POST /api/v1/repos/:owner/:name/releases",++ "POST /api/v1/repos/:owner/:name/star"++ ]++}nnew file mode 100644@@@ -0,0 +1,76 @@++{++ "version": "0.1.0",++ "contractRanges": {++ "openvibe-contracts": ">=0.370.0 <1.0.0"++ },++ "id": "git",++ "name": "OpenVibe.Git",++ "status": "alpha",++ "repository": "OpenVibers/OpenVibe-Git",++ "domains": [++ "git.openvibe.codes"++ ],++ "publicOrigin": "https://git.openvibe.codes",++ "exposure": {++ "state": "live",++ "publicSite": "service"++ },++ "capabilities": [++ "git.repo.read",++ "git.repo.write"++ ],++ "eventsProduced": [],++ "eventsConsumed": [],++ "namespacesOwned": [],++ "lifecycle": {++ "liveness": {++ "endpoint": "/api/health",++ "means": "the process is up and answers HTTP; it checks nothing else"++ },++ "shutdown": {++ "signal": "SIGTERM",++ "deadlineSeconds": 10,++ "drains": [++ "HTTP server closed",++ "git http-backend requests finish"++ ]++ },++ "startupRecovery": {++ "resumes": [++ {++ "kind": "state",++ "what": "the database (repositories, stars, tokens and insights) is in PostgreSQL; the bare repositories are on disk under GIT_DATA_DIR and are the state themselves"++ }++ ]++ },++ "rollback": {++ "conditions": [++ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",++ "manual: ovhost rollback git --to <sha>"++ ],++ "window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",++ "blockers": {++ "none": "migrations are expand-only and run forward; the previous sha reads the same rows, so rolling the code back is safe"++ }++ },++ "contracts": {++ "range": ">=0.370.0 <1.0.0"++ },++ "leases": {++ "none": "no claims: one process serves the site; repository writes take their own file and database locks"++ }++ },++ "notes": "Port 5270, unit openvibe-git.service. OpenVibe's own code home at git.openvibe.codes (plan OpenVibe_Git_Plan_2026-11-09): bare repositories on disk served by git's own http-backend behind OpenVibe sign-in, our pages and API for browsing, GitHub mirrors, stars, insights and contents writes without a clone. Codes, Run and Link act for a person with a typed service token and X-OV-Subject. It replaces Forgejo (deploy/forgejo in OpenVibe.Codes), whose data was all mirrors.",++ "health": "/api/health",++ "ready": "/api/ready",++ "internalOrigin": "http://127.0.0.1:5270",++ "site": {++ "name": "Git",++ "icon": "git",++ "tagline": "Code with your OpenVibe account",++ "what": "Host code, browse it, mirror GitHub and clone it to your computer with Link, in OpenVibe's own theme.",++ "legalProfile": "public",++ "position": 33,++ "neighbourhood": "make"++ }++}@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.372.0",++ "version": "0.373.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.372.0",++ "version": "0.373.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.372.0",++ "version": "0.373.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
@@ -1,5 +1,9 @@
@@ -1,5 +1,9 @@
# Changelog
# Changelog
+## 0.373.0 — 2026-11-09
+
+- The git service: its manifest, git.repo.read and git.repo.write, git.access-request@1 and git.access-result@1 (OpenVibe.Git)
+
## 0.372.0 — 2026-11-09
## 0.372.0 — 2026-11-09
- The machine product Node became OpenVibe Link. The network registry contracts are `network.link@1`,
- The machine product Node became OpenVibe Link. The network registry contracts are `network.link@1`,
@@ -10836,6 +10836,24 @@
@@ -10836,6 +10836,24 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active",
"status": "active",
"adr": "ADR-025"
"adr": "ADR-025"
+ },
+ {
+ "id": "git.access-request",
+ "version": "1.0.0",
+ "owner": "git",
+ "schema": "git/access-request.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "git.access-result",
+ "version": "1.0.0",
+ "owner": "git",
+ "schema": "git/access-result.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/git/access-request.v1.json",
+ "title": "GitAccessRequest",
+ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "owner",
+ "name"
+ ],
+ "properties": {
+ "owner": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
+ "description": "The repository owner's lower-case OpenVibe username."
+ },
+ "name": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
+ "description": "The repository name, lower-case and never ending in .git."
+ },
+ "ref": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "path": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "message": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "files": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/git/access-result.v1.json",
+ "title": "GitAccessResult",
+ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "full_name"
+ ],
+ "properties": {
+ "full_name": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"
+ },
+ "html_url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "clone_url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ },
+ "default_branch": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "sha": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
+{
+ "owner": "ada",
+ "name": "ada/my-site"
+}
\ No newline at end of file
\ No newline at end of file
new file mode 100644
new file mode 100644
@@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
+{
+ "owner": "ada"
+}
\ No newline at end of file
\ No newline at end of file
new file mode 100644
new file mode 100644
@@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
+{
+ "owner": "ada",
+ "name": "my-site",
+ "ref": "main",
+ "path": "README.md"
+}
\ No newline at end of file
\ No newline at end of file
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "owner": "ada",
+ "name": "my-site",
+ "branch": "agent/run-1",
+ "message": "Write the title without a clone",
+ "files": [
+ { "path": "notes.txt", "content": "made by the API\n" }
+ ]
+}
\ No newline at end of file
\ No newline at end of file
new file mode 100644
new file mode 100644
@@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
+{
+ "full_name": "ada/my-site",
+ "clone_url": "http://git.openvibe.codes/ada/my-site.git"
+}
\ No newline at end of file
\ No newline at end of file
new file mode 100644
new file mode 100644
@@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
+{
+ "full_name": "ada"
+}
\ No newline at end of file
\ No newline at end of file
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "full_name": "ada/my-site",
+ "branch": "agent/run-1",
+ "sha": "0123456789abcdef0123456789abcdef01234567"
+}
\ No newline at end of file
\ No newline at end of file
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "full_name": "ada/my-site",
+ "html_url": "https://git.openvibe.codes/ada/my-site",
+ "clone_url": "https://git.openvibe.codes/ada/my-site.git",
+ "visibility": "private",
+ "default_branch": "main"
+}
\ No newline at end of file
\ No newline at end of file
@@ -119262,6 +119262,128 @@
@@ -119262,6 +119262,128 @@
},
},
"additionalProperties": false
"additionalProperties": false
}
}
+ },
+ "git.access-request": {
+ "version": "1.0.0",
+ "owner": "git",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/git/access-request.v1.json",
+ "title": "GitAccessRequest",
+ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "owner",
+ "name"
+ ],
+ "properties": {
+ "owner": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
+ "description": "The repository owner's lower-case OpenVibe username."
+ },
+ "name": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
+ "description": "The repository name, lower-case and never ending in .git."
+ },
+ "ref": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "path": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "message": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "files": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "git.access-result": {
+ "version": "1.0.0",
+ "owner": "git",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/git/access-result.v1.json",
+ "title": "GitAccessResult",
+ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "full_name"
+ ],
+ "properties": {
+ "full_name": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"
+ },
+ "html_url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "clone_url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ },
+ "default_branch": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "sha": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"
+ }
+ }
+ }
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"title": "OpenVibe.Bench API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe Connect API",
"title": "OpenVibe Connect API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Design API",
"title": "OpenVibe.Design API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Exchange API",
"title": "OpenVibe.Exchange API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
new file mode 100644
new file mode 100644
@@ -0,0 +1,2369 @@
@@ -0,0 +1,2369 @@
+{
+ "openapi": "3.1.0",
+ "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
+ "info": {
+ "title": "OpenVibe.Git API",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "license": {
+ "name": "MIT",
+ "identifier": "MIT"
+ }
+ },
+ "servers": [
+ {
+ "url": "https://git.openvibe.codes"
+ }
+ ],
+ "paths": {
+ "/api/v1/profile/{username}": {
+ "get": {
+ "operationId": "get_api_v1_profile_username",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "username",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "owner",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
+ "description": "The repository owner's lower-case OpenVibe username."
+ },
+ "description": "The repository owner's lower-case OpenVibe username."
+ },
+ {
+ "name": "name",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
+ "description": "The repository name, lower-case and never ending in .git."
+ },
+ "description": "The repository name, lower-case and never ending in .git."
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos": {
+ "get": {
+ "operationId": "get_api_v1_repos",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
+ "description": "The repository owner's lower-case OpenVibe username."
+ },
+ "description": "The repository owner's lower-case OpenVibe username."
+ },
+ {
+ "name": "name",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
+ "description": "The repository name, lower-case and never ending in .git."
+ },
+ "description": "The repository name, lower-case and never ending in .git."
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "operationId": "post_api_v1_repos",
+ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
+ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.write"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.write"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ }
+ }
+ }
+ },
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/blob": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_blob",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/branches": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_branches",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/commit/{sha}": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_commit_sha",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "sha",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/commits": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_commits",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "operationId": "post_api_v1_repos_owner_name_commits",
+ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
+ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.write"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.write"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/contributors": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_contributors",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/insights": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_insights",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/raw": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_raw",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/releases": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_releases",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "operationId": "post_api_v1_repos_owner_name_releases",
+ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
+ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.write"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.write"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/star": {
+ "post": {
+ "operationId": "post_api_v1_repos_owner_name_star",
+ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
+ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.write"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.write"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/tags": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_tags",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/repos/{owner}/{name}/tree": {
+ "get": {
+ "operationId": "get_api_v1_repos_owner_name_tree",
+ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
+ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.read"
+ ]
+ }
+ ],
+ "x-openvibe-input": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "ref",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ {
+ "name": "path",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "description": "A path inside the tree or a blob's path."
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "description": "The branch a contents write goes on."
+ },
+ {
+ "name": "message",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "description": "The commit message of a contents write."
+ },
+ {
+ "name": "files",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "description": "The files a contents write changes, by path and full content."
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/tokens": {
+ "post": {
+ "operationId": "post_api_v1_tokens",
+ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
+ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
+ "tags": [
+ "git.repo"
+ ],
+ "x-openvibe-capabilities": [
+ "git.repo.write"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.repo.write"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ }
+ }
+ }
+ },
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "errors.problem.v1": {
+ "title": "Problem",
+ "description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",
+ "type": "object",
+ "required": [
+ "type",
+ "title",
+ "status",
+ "code"
+ ],
+ "additionalProperties": true,
+ "properties": {
+ "type": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1
+ },
+ "status": {
+ "type": "integer",
+ "minimum": 400,
+ "maximum": 599
+ },
+ "detail": {
+ "type": "string"
+ },
+ "instance": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "code": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*$"
+ },
+ "request_id": {
+ "type": "string"
+ },
+ "trace_id": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{32}$"
+ },
+ "errors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "error": {
+ "type": "string",
+ "description": "Deprecated compatibility field: same text as title/detail for clients that read {error}."
+ }
+ }
+ },
+ "git.access-request.v1": {
+ "title": "GitAccessRequest",
+ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "owner",
+ "name"
+ ],
+ "properties": {
+ "owner": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
+ "description": "The repository owner's lower-case OpenVibe username."
+ },
+ "name": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
+ "description": "The repository name, lower-case and never ending in .git."
+ },
+ "ref": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "A branch or tag to read at; the default branch when absent."
+ },
+ "path": {
+ "type": "string",
+ "maxLength": 4096,
+ "description": "A path inside the tree or a blob's path."
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "The branch a contents write goes on."
+ },
+ "message": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "The commit message of a contents write."
+ },
+ "files": {
+ "type": "array",
+ "maxItems": 200,
+ "description": "The files a contents write changes, by path and full content.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "content"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "maxLength": 4096
+ },
+ "content": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "git.access-result.v1": {
+ "title": "GitAccessResult",
+ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "full_name"
+ ],
+ "properties": {
+ "full_name": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"
+ },
+ "html_url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "clone_url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ },
+ "default_branch": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "sha": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"
+ }
+ }
+ }
+ },
+ "securitySchemes": {
+ "openvibeToken": {
+ "type": "http",
+ "scheme": "bearer",
+ "bearerFormat": "JWT",
+ "description": "An OpenVibe Network token for this service: a person's token, an app token (client credentials, audience of the service) or a first-party service token. Its `cap` claim must include the capability the operation names."
+ }
+ }
+ }
+}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -127,6 +127,13 @@
@@ -127,6 +127,13 @@
"operations": 12,
"operations": 12,
"capabilities": 9
"capabilities": 9
},
},
+ {
+ "service": "git",
+ "name": "OpenVibe.Git",
+ "origin": "https://git.openvibe.codes",
+ "operations": 18,
+ "capabilities": 2
+ },
{
{
"service": "host",
"service": "host",
"name": "OpenVibe.Host",
"name": "OpenVibe.Host",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Mail API",
"title": "OpenVibe.Mail API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.372.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"title": "OpenVibe.Quest API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Report API",
"title": "OpenVibe.Report API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Today API",
"title": "OpenVibe.Today API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.372.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.373.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -323456,3 +323456,57 @@ export interface ExchangeKeyCreated {
@@ -323456,3 +323456,57 @@ export interface ExchangeKeyCreated {
key: ExchangeKey;
key: ExchangeKey;
secret: string;
secret: string;
}
}
+
+/** [email protected] (owner: git) */
+/**
+ * git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.
+ */
+export interface GitAccessRequest {
+ /**
+ * The repository owner's lower-case OpenVibe username.
+ */
+ owner: string;
+ /**
+ * The repository name, lower-case and never ending in .git.
+ */
+ name: string;
+ /**
+ * A branch or tag to read at; the default branch when absent.
+ */
+ ref?: string;
+ /**
+ * A path inside the tree or a blob's path.
+ */
+ path?: string;
+ /**
+ * The branch a contents write goes on.
+ */
+ branch?: string;
+ /**
+ * The commit message of a contents write.
+ */
+ message?: string;
+ /**
+ * The files a contents write changes, by path and full content.
+ *
+ * @maxItems 200
+ */
+ files?: {
+ path: string;
+ content: string;
+ }[];
+}
+
+/** [email protected] (owner: git) */
+/**
+ * git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.
+ */
+export interface GitAccessResult {
+ full_name: string;
+ html_url?: string;
+ clone_url?: string;
+ visibility?: "public" | "private";
+ default_branch?: string;
+ branch?: string;
+ sha?: string;
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
+{
+ "id": "git.repo.read",
+ "version": "1.0",
+ "owner": "git",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
+ "inputSchema": "git.access-request@1",
+ "outputSchema": "git.access-result@1",
+ "permissions": [
+ "git:read"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/repos",
+ "GET /api/v1/repos/:owner/:name",
+ "GET /api/v1/repos/:owner/:name/tree",
+ "GET /api/v1/repos/:owner/:name/blob",
+ "GET /api/v1/repos/:owner/:name/raw",
+ "GET /api/v1/repos/:owner/:name/commits",
+ "GET /api/v1/repos/:owner/:name/commit/:sha",
+ "GET /api/v1/repos/:owner/:name/branches",
+ "GET /api/v1/repos/:owner/:name/tags",
+ "GET /api/v1/repos/:owner/:name/releases",
+ "GET /api/v1/repos/:owner/:name/contributors",
+ "GET /api/v1/repos/:owner/:name/insights",
+ "GET /api/v1/profile/:username"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "id": "git.repo.write",
+ "version": "1.0",
+ "owner": "git",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
+ "inputSchema": "git.access-request@1",
+ "outputSchema": "git.access-result@1",
+ "permissions": [
+ "git:write"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/repos",
+ "POST /api/v1/tokens",
+ "POST /api/v1/repos/:owner/:name/commits",
+ "POST /api/v1/repos/:owner/:name/releases",
+ "POST /api/v1/repos/:owner/:name/star"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,76 @@
@@ -0,0 +1,76 @@
+{
+ "version": "0.1.0",
+ "contractRanges": {
+ "openvibe-contracts": ">=0.370.0 <1.0.0"
+ },
+ "id": "git",
+ "name": "OpenVibe.Git",
+ "status": "alpha",
+ "repository": "OpenVibers/OpenVibe-Git",
+ "domains": [
+ "git.openvibe.codes"
+ ],
+ "publicOrigin": "https://git.openvibe.codes",
+ "exposure": {
+ "state": "live",
+ "publicSite": "service"
+ },
+ "capabilities": [
+ "git.repo.read",
+ "git.repo.write"
+ ],
+ "eventsProduced": [],
+ "eventsConsumed": [],
+ "namespacesOwned": [],
+ "lifecycle": {
+ "liveness": {
+ "endpoint": "/api/health",
+ "means": "the process is up and answers HTTP; it checks nothing else"
+ },
+ "shutdown": {
+ "signal": "SIGTERM",
+ "deadlineSeconds": 10,
+ "drains": [
+ "HTTP server closed",
+ "git http-backend requests finish"
+ ]
+ },
+ "startupRecovery": {
+ "resumes": [
+ {
+ "kind": "state",
+ "what": "the database (repositories, stars, tokens and insights) is in PostgreSQL; the bare repositories are on disk under GIT_DATA_DIR and are the state themselves"
+ }
+ ]
+ },
+ "rollback": {
+ "conditions": [
+ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",
+ "manual: ovhost rollback git --to <sha>"
+ ],
+ "window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",
+ "blockers": {
+ "none": "migrations are expand-only and run forward; the previous sha reads the same rows, so rolling the code back is safe"
+ }
+ },
+ "contracts": {
+ "range": ">=0.370.0 <1.0.0"
+ },
+ "leases": {
+ "none": "no claims: one process serves the site; repository writes take their own file and database locks"
+ }
+ },
+ "notes": "Port 5270, unit openvibe-git.service. OpenVibe's own code home at git.openvibe.codes (plan OpenVibe_Git_Plan_2026-11-09): bare repositories on disk served by git's own http-backend behind OpenVibe sign-in, our pages and API for browsing, GitHub mirrors, stars, insights and contents writes without a clone. Codes, Run and Link act for a person with a typed service token and X-OV-Subject. It replaces Forgejo (deploy/forgejo in OpenVibe.Codes), whose data was all mirrors.",
+ "health": "/api/health",
+ "ready": "/api/ready",
+ "internalOrigin": "http://127.0.0.1:5270",
+ "site": {
+ "name": "Git",
+ "icon": "git",
+ "tagline": "Code with your OpenVibe account",
+ "what": "Host code, browse it, mirror GitHub and clone it to your computer with Link, in OpenVibe's own theme.",
+ "legalProfile": "public",
+ "position": 33,
+ "neighbourhood": "make"
+ }
+}
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.372.0",
+ "version": "0.373.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.372.0",
+ "version": "0.373.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.372.0",
+ "version": "0.373.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",