{
  "openapi": "3.1.0",
  "info": {
    "title": "RSX Registry",
    "version": "v1",
    "description": "Software distribution for RSX-built packages: npm and Cargo packages, platform binaries, and OCI images."
  },
  "servers": [
    {
      "url": "https://api.rsx.group"
    }
  ],
  "components": {
    "schemas": {
      "RegistryNativeFinding": {
        "type": "object",
        "properties": {
          "check": {
            "type": "string",
            "example": "manifest.identity"
          },
          "message": {
            "type": "string",
            "example": "The manifest names 'goodbye', but the release was declared as 'hello'."
          }
        },
        "required": [
          "check",
          "message"
        ]
      },
      "RegistryNativeManifest": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "format": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "example": 3
          },
          "description": {
            "type": "string",
            "example": "Says hello."
          },
          "requires": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "example": "libfoo"
                },
                "version": {
                  "type": "string",
                  "description": "`*` for any installed version, or `=VERSION` for exactly one.",
                  "example": "*"
                }
              },
              "required": [
                "name",
                "version"
              ]
            }
          }
        },
        "required": [
          "format",
          "description",
          "requires"
        ]
      },
      "RegistryNativeRelease": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "architecture": {
            "type": "string",
            "enum": [
              "x86_64",
              "any"
            ],
            "description": "The archive's declared architecture, as its manifest spells it.",
            "example": "x86_64"
          },
          "digest": {
            "type": "string",
            "example": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
          },
          "size": {
            "type": "integer",
            "example": 10240
          },
          "status": {
            "type": "string",
            "enum": [
              "staging",
              "published"
            ]
          },
          "reviewState": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "invalid",
              "pending",
              "approved",
              "rejected",
              "revoked"
            ],
            "description": "The release's review state.",
            "example": "pending"
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegistryNativeFinding"
            }
          },
          "manifest": {
            "$ref": "#/components/schemas/RegistryNativeManifest"
          },
          "supersedes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "isDefault": {
            "type": "boolean"
          },
          "reviewReason": {
            "type": [
              "string",
              "null"
            ]
          },
          "reviewedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "revokeCode": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "security",
              "broken",
              "withdrawn"
            ],
            "description": "Why a release was withdrawn from new installs.",
            "example": "broken"
          },
          "revokeReason": {
            "type": [
              "string",
              "null"
            ]
          },
          "revokedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "firstGeneration": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "package",
          "version",
          "architecture",
          "digest",
          "size",
          "status",
          "reviewState",
          "findings",
          "manifest",
          "supersedes",
          "isDefault",
          "reviewReason",
          "reviewedAt",
          "revokeCode",
          "revokeReason",
          "revokedAt",
          "firstGeneration"
        ]
      },
      "RegistryNativeAdminRelease": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RegistryNativeRelease"
          },
          {
            "type": "object",
            "properties": {
              "reviewedBy": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "revokedBy": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "reviewedBy",
              "revokedBy"
            ]
          }
        ]
      },
      "RegistryNativeReleaseUpdate": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "reviewState": {
            "type": "string",
            "enum": [
              "approved",
              "rejected",
              "revoked"
            ]
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 160,
            "pattern": "^[\\x20-\\x7e]+$",
            "example": "Fixes a crash on start when /etc/hello.conf is missing."
          },
          "supersedes": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "maxItems": 32
          },
          "revokeCode": {
            "type": "string",
            "enum": [
              "security",
              "broken",
              "withdrawn"
            ],
            "description": "Why a release was withdrawn from new installs.",
            "example": "broken"
          }
        },
        "required": [
          "package",
          "version",
          "reviewState",
          "reason"
        ]
      },
      "RegistryNativePackageUpdate": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "defaultVersion": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          }
        },
        "required": [
          "package",
          "defaultVersion"
        ]
      },
      "RegistryNativeSnapshot": {
        "type": "object",
        "properties": {
          "generation": {
            "type": "integer"
          },
          "state": {
            "type": "string",
            "enum": [
              "writing",
              "current",
              "superseded",
              "abandoned"
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "publish",
              "refresh"
            ]
          },
          "keysVersion": {
            "type": "integer"
          },
          "keyId": {
            "type": "string"
          },
          "signedAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "payloadSha256": {
            "type": [
              "string",
              "null"
            ]
          },
          "size": {
            "type": [
              "integer",
              "null"
            ]
          },
          "releaseCount": {
            "type": "integer"
          },
          "publishedBy": {
            "type": "string"
          }
        },
        "required": [
          "generation",
          "state",
          "kind",
          "keysVersion",
          "keyId",
          "signedAt",
          "expiresAt",
          "payloadSha256",
          "size",
          "releaseCount",
          "publishedBy"
        ]
      },
      "RegistryNativeSnapshotPreview": {
        "type": "object",
        "properties": {
          "currentGeneration": {
            "type": [
              "integer",
              "null"
            ]
          },
          "added": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                },
                "architecture": {
                  "type": "string"
                }
              },
              "required": [
                "package",
                "version",
                "architecture"
              ]
            }
          },
          "removed": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                },
                "architecture": {
                  "type": "string"
                }
              },
              "required": [
                "package",
                "version",
                "architecture"
              ]
            }
          },
          "revoked": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                }
              },
              "required": [
                "package",
                "version"
              ]
            }
          },
          "defaultsChanged": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "from": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "to": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "package",
                "from",
                "to"
              ]
            }
          },
          "releaseCount": {
            "type": "integer"
          },
          "unchanged": {
            "type": "boolean"
          }
        },
        "required": [
          "currentGeneration",
          "added",
          "removed",
          "revoked",
          "defaultsChanged",
          "releaseCount",
          "unchanged"
        ]
      },
      "RegistryNativeSnapshotPublish": {
        "type": "object",
        "properties": {
          "expectGeneration": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "expectGeneration"
        ]
      },
      "RegistryNativeKeysStatus": {
        "type": "object",
        "properties": {
          "repository": {
            "type": "string"
          },
          "rootKeyIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "keysVersion": {
            "type": [
              "integer",
              "null"
            ]
          },
          "expiresAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "onlineKeyIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "signingKeyId": {
            "type": [
              "string",
              "null"
            ]
          },
          "signingKeyListed": {
            "type": "boolean"
          }
        },
        "required": [
          "repository",
          "rootKeyIds",
          "keysVersion",
          "expiresAt",
          "onlineKeyIds",
          "signingKeyId",
          "signingKeyListed"
        ]
      },
      "RegistryNativeKeysUpdate": {
        "type": "object",
        "properties": {
          "envelope": {
            "type": "string",
            "minLength": 1,
            "maxLength": 65536
          }
        },
        "required": [
          "envelope"
        ]
      },
      "RegistryAppApplication": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "visibility": {
            "type": "string",
            "enum": [
              "internal",
              "public"
            ],
            "description": "`internal` (staff tooling, key-only repository) or `public` (the public repository).",
            "example": "public"
          },
          "appId": {
            "type": [
              "string",
              "null"
            ]
          },
          "displayName": {
            "type": [
              "string",
              "null"
            ]
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "homepageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "docsUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "channels": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "releaseCount": {
            "type": "integer"
          },
          "pendingCount": {
            "type": "integer"
          },
          "identities": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "platform": {
                  "type": "string",
                  "enum": [
                    "windows-x86_64-msix",
                    "windows-x86_64-exe",
                    "debian-amd64-deb",
                    "android-arm64-v8a-apk"
                  ],
                  "description": "Platform key: operating system, architecture and installer format.",
                  "example": "windows-x86_64-msix"
                },
                "identity": {
                  "type": "string"
                },
                "pinnedVersion": {
                  "type": "string"
                },
                "pinnedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "platform",
                "identity",
                "pinnedVersion",
                "pinnedAt"
              ]
            }
          },
          "updatedBy": {
            "type": [
              "string",
              "null"
            ]
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "package",
          "visibility",
          "appId",
          "displayName",
          "summary",
          "homepageUrl",
          "docsUrl",
          "channels",
          "releaseCount",
          "pendingCount",
          "identities",
          "updatedBy",
          "updatedAt"
        ]
      },
      "RegistryAppApplicationUpdate": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "visibility": {
            "type": "string",
            "enum": [
              "internal",
              "public"
            ],
            "description": "`internal` (staff tooling, key-only repository) or `public` (the public repository).",
            "example": "public"
          },
          "appId": {
            "type": "string",
            "maxLength": 128,
            "pattern": "^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+$",
            "example": "group.rsx.link"
          },
          "displayName": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 80
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 280
          },
          "homepageUrl": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512,
            "format": "uri"
          },
          "docsUrl": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512,
            "format": "uri"
          }
        },
        "required": [
          "package"
        ]
      },
      "RegistryAppFinding": {
        "type": "object",
        "properties": {
          "check": {
            "type": "string",
            "example": "apk.signature"
          },
          "message": {
            "type": "string",
            "example": "No v2 or v3 signer verifies."
          }
        },
        "required": [
          "check",
          "message"
        ]
      },
      "RegistryAppAsset": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "enum": [
              "windows-x86_64-msix",
              "windows-x86_64-exe",
              "debian-amd64-deb",
              "android-arm64-v8a-apk"
            ],
            "description": "Platform key: operating system, architecture and installer format.",
            "example": "windows-x86_64-msix"
          },
          "os": {
            "type": "string"
          },
          "arch": {
            "type": "string"
          },
          "format": {
            "type": "string"
          },
          "mediaType": {
            "type": "string"
          },
          "digest": {
            "type": "string",
            "example": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
          },
          "size": {
            "type": "integer"
          },
          "uploaded": {
            "type": "boolean"
          },
          "outcome": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "valid",
              "invalid"
            ]
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegistryAppFinding"
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegistryAppFinding"
            }
          },
          "identity": {
            "type": [
              "string",
              "null"
            ]
          },
          "facts": {
            "type": "object",
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        },
        "required": [
          "platform",
          "os",
          "arch",
          "format",
          "mediaType",
          "digest",
          "size",
          "uploaded",
          "outcome",
          "findings",
          "notes",
          "identity",
          "facts"
        ]
      },
      "RegistryAppRequirement": {
        "type": "object",
        "properties": {
          "minOsVersion": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 64,
            "pattern": "^[0-9A-Za-z][0-9A-Za-z._-]*$",
            "example": "10.0.22621.0"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 500
          }
        }
      },
      "RegistryAppRelease": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "status": {
            "type": "string",
            "enum": [
              "staging",
              "published"
            ]
          },
          "reviewState": {
            "type": "string",
            "enum": [
              "staging",
              "invalid",
              "pending",
              "approved",
              "rejected",
              "revoked"
            ],
            "example": "pending"
          },
          "assets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegistryAppAsset"
            }
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "requirements": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/RegistryAppRequirement"
            }
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "stable",
                "beta",
                "canary"
              ],
              "example": "stable"
            }
          },
          "reviewReason": {
            "type": [
              "string",
              "null"
            ]
          },
          "reviewedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "revokeCode": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "security",
              "broken",
              "withdrawn"
            ],
            "description": "Why a release was withdrawn.",
            "example": "security"
          },
          "revokeReason": {
            "type": [
              "string",
              "null"
            ]
          },
          "revokedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "firstGeneration": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "package",
          "version",
          "status",
          "reviewState",
          "assets",
          "notes",
          "requirements",
          "channels",
          "reviewReason",
          "reviewedAt",
          "revokeCode",
          "revokeReason",
          "revokedAt",
          "firstGeneration"
        ]
      },
      "RegistryAppAdminRelease": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RegistryAppRelease"
          },
          {
            "type": "object",
            "properties": {
              "visibility": {
                "type": "string",
                "enum": [
                  "internal",
                  "public"
                ],
                "description": "`internal` (staff tooling, key-only repository) or `public` (the public repository).",
                "example": "public"
              },
              "reviewedBy": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "revokedBy": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "createdAt": {
                "type": "string",
                "format": "date-time"
              }
            },
            "required": [
              "visibility",
              "reviewedBy",
              "revokedBy",
              "createdAt"
            ]
          }
        ]
      },
      "RegistryAppReleaseDecision": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RegistryAppAdminRelease"
          },
          {
            "type": "object",
            "properties": {
              "publication": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "repository": {
                        "type": "string",
                        "enum": [
                          "public",
                          "internal"
                        ],
                        "example": "public"
                      },
                      "generation": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "repository",
                      "generation"
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "repository": {
                        "type": "string",
                        "enum": [
                          "public",
                          "internal"
                        ],
                        "example": "public"
                      },
                      "error": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "repository",
                      "error"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "publication"
            ]
          }
        ]
      },
      "RegistryAppReleaseUpdate": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "reviewState": {
            "type": "string",
            "enum": [
              "approved",
              "rejected",
              "revoked"
            ]
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 160,
            "pattern": "^[\\x20-\\x7e]+$",
            "example": "Fixes a crash on start when /etc/hello.conf is missing."
          },
          "revokeCode": {
            "type": "string",
            "enum": [
              "security",
              "broken",
              "withdrawn"
            ],
            "description": "Why a release was withdrawn.",
            "example": "security"
          }
        },
        "required": [
          "package",
          "version",
          "reviewState",
          "reason"
        ]
      },
      "RegistryAppChannelUpdate": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "channel": {
            "type": "string",
            "enum": [
              "stable",
              "beta",
              "canary"
            ],
            "example": "stable"
          },
          "version": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 160,
            "pattern": "^[\\x20-\\x7e]+$",
            "example": "Fixes a crash on start when /etc/hello.conf is missing."
          },
          "allowDowngrade": {
            "type": "boolean"
          }
        },
        "required": [
          "package",
          "channel",
          "version",
          "reason"
        ]
      },
      "RegistryAppSnapshot": {
        "type": "object",
        "properties": {
          "repository": {
            "type": "string",
            "enum": [
              "public",
              "internal"
            ],
            "example": "public"
          },
          "generation": {
            "type": "integer"
          },
          "state": {
            "type": "string",
            "enum": [
              "writing",
              "current",
              "superseded",
              "abandoned"
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "publish",
              "refresh"
            ]
          },
          "keysVersion": {
            "type": "integer"
          },
          "keyId": {
            "type": "string"
          },
          "signedAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "payloadSha256": {
            "type": [
              "string",
              "null"
            ]
          },
          "size": {
            "type": [
              "integer",
              "null"
            ]
          },
          "releaseCount": {
            "type": "integer"
          },
          "publishedBy": {
            "type": "string"
          }
        },
        "required": [
          "repository",
          "generation",
          "state",
          "kind",
          "keysVersion",
          "keyId",
          "signedAt",
          "expiresAt",
          "payloadSha256",
          "size",
          "releaseCount",
          "publishedBy"
        ]
      },
      "RegistryAppSnapshotPreview": {
        "type": "object",
        "properties": {
          "repository": {
            "type": "string",
            "enum": [
              "public",
              "internal"
            ],
            "example": "public"
          },
          "currentGeneration": {
            "type": [
              "integer",
              "null"
            ]
          },
          "added": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                }
              },
              "required": [
                "package",
                "version"
              ]
            }
          },
          "removed": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                }
              },
              "required": [
                "package",
                "version"
              ]
            }
          },
          "revoked": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                }
              },
              "required": [
                "package",
                "version"
              ]
            }
          },
          "channelsChanged": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "package": {
                  "type": "string"
                },
                "channel": {
                  "type": "string"
                },
                "from": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "to": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "package",
                "channel",
                "from",
                "to"
              ]
            }
          },
          "applicationCount": {
            "type": "integer"
          },
          "releaseCount": {
            "type": "integer"
          },
          "unchanged": {
            "type": "boolean"
          }
        },
        "required": [
          "repository",
          "currentGeneration",
          "added",
          "removed",
          "revoked",
          "channelsChanged",
          "applicationCount",
          "releaseCount",
          "unchanged"
        ]
      },
      "RegistryAppSnapshotPublish": {
        "type": "object",
        "properties": {
          "repository": {
            "type": "string",
            "enum": [
              "public",
              "internal"
            ],
            "example": "public"
          },
          "expectGeneration": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1
          }
        },
        "required": [
          "repository",
          "expectGeneration"
        ]
      },
      "RegistryAppKeysStatus": {
        "type": "object",
        "properties": {
          "rootKeyIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "keysVersion": {
            "type": [
              "integer",
              "null"
            ]
          },
          "expiresAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "onlineKeyIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "signingKeyId": {
            "type": [
              "string",
              "null"
            ]
          },
          "signingKeyListed": {
            "type": "boolean"
          }
        },
        "required": [
          "rootKeyIds",
          "keysVersion",
          "expiresAt",
          "onlineKeyIds",
          "signingKeyId",
          "signingKeyListed"
        ]
      },
      "RegistryAppKeysUpdate": {
        "type": "object",
        "properties": {
          "envelope": {
            "type": "string",
            "minLength": 1,
            "maxLength": 65536
          }
        },
        "required": [
          "envelope"
        ]
      },
      "RegistryCatalogueApplication": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "link"
          },
          "appId": {
            "type": [
              "string",
              "null"
            ]
          },
          "displayName": {
            "type": "string"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "homepageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "docsUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "channels": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "platforms": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "platform": {
                  "type": "string",
                  "enum": [
                    "windows-x86_64-msix",
                    "windows-x86_64-exe",
                    "debian-amd64-deb",
                    "android-arm64-v8a-apk"
                  ],
                  "description": "Platform key: operating system, architecture and installer format.",
                  "example": "windows-x86_64-msix"
                },
                "os": {
                  "type": "string"
                },
                "arch": {
                  "type": "string"
                },
                "format": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                }
              },
              "required": [
                "platform",
                "os",
                "arch",
                "format",
                "label"
              ]
            }
          }
        },
        "required": [
          "name",
          "appId",
          "displayName",
          "summary",
          "homepageUrl",
          "docsUrl",
          "channels",
          "platforms"
        ]
      },
      "RegistryCatalogueRelease": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string"
          },
          "publishedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "stable",
                "beta",
                "canary"
              ],
              "example": "stable"
            }
          },
          "revoked": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "security",
                  "broken",
                  "withdrawn"
                ],
                "description": "Why a release was withdrawn.",
                "example": "security"
              },
              "reason": {
                "type": "string"
              },
              "revokedAt": {
                "type": "string",
                "format": "date-time"
              }
            },
            "required": [
              "code",
              "reason",
              "revokedAt"
            ]
          },
          "assets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "platform": {
                  "type": "string",
                  "enum": [
                    "windows-x86_64-msix",
                    "windows-x86_64-exe",
                    "debian-amd64-deb",
                    "android-arm64-v8a-apk"
                  ],
                  "description": "Platform key: operating system, architecture and installer format.",
                  "example": "windows-x86_64-msix"
                },
                "os": {
                  "type": "string"
                },
                "arch": {
                  "type": "string"
                },
                "format": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "sha256": {
                  "type": "string"
                },
                "minOsVersion": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "requirementNotes": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "identity": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "filename": {
                  "type": "string"
                },
                "downloadUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "platform",
                "os",
                "arch",
                "format",
                "label",
                "size",
                "sha256",
                "minOsVersion",
                "requirementNotes",
                "identity",
                "filename",
                "downloadUrl"
              ]
            }
          },
          "signedIn": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "generation": {
                "type": "integer"
              },
              "snapshotUrl": {
                "type": "string"
              }
            },
            "required": [
              "generation",
              "snapshotUrl"
            ]
          }
        },
        "required": [
          "version",
          "publishedAt",
          "notes",
          "channels",
          "revoked",
          "assets",
          "signedIn"
        ]
      },
      "RegistryPackage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "018f3b1c-9a2e-7c31-8f4d-2a6b5c7e9d10"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "protocol": {
            "type": "string",
            "enum": [
              "npm",
              "cargo",
              "binary",
              "oci",
              "native",
              "app"
            ],
            "description": "Distribution protocol the package is published under.",
            "example": "npm"
          },
          "scope": {
            "type": [
              "string",
              "null"
            ],
            "description": "npm scope the package belongs to, where it has one.",
            "example": "@rsx"
          },
          "visibility": {
            "type": "string",
            "enum": [
              "internal"
            ],
            "description": "Who may consume the package. Every v1 package is internal.",
            "example": "internal"
          },
          "owner": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "The RSX principal that owns the package.",
            "example": "3f1c9b02-7a54-4a0e-9c1f-2b8d4e6a1c77"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "What the package is, shown wherever the registry is browsed.",
            "example": "Roblox place and asset build tooling."
          },
          "latest": {
            "type": [
              "string",
              "null"
            ],
            "description": "Highest published version, or null when nothing is published yet.",
            "example": "0.6.0"
          },
          "versionCount": {
            "type": "integer",
            "example": 12
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-09-04T10:15:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-09-04T10:15:00.000Z"
          }
        },
        "required": [
          "id",
          "name",
          "protocol",
          "scope",
          "visibility",
          "owner",
          "description",
          "latest",
          "versionCount",
          "createdAt",
          "updatedAt"
        ]
      },
      "RegistryArtefact": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "018f3b1c-9a2e-7c31-8f4d-2a6b5c7e9d10"
          },
          "platform": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 64,
            "pattern": "^[a-z0-9][a-z0-9._-]*$",
            "description": "Platform identifier, for a release that ships more than one artefact.",
            "example": "linux-x86_64"
          },
          "mediaType": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Media type of the stored bytes.",
            "example": "application/vnd.npm.install-v1+tgz"
          },
          "digest": {
            "type": "string",
            "description": "SHA-256 content digest, as stored.",
            "example": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
          },
          "size": {
            "type": "integer",
            "example": 8419372
          },
          "stored": {
            "type": "boolean",
            "description": "Whether the bytes have arrived and matched the declared digest.",
            "example": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-09-04T10:15:00.000Z"
          }
        },
        "required": [
          "id",
          "platform",
          "mediaType",
          "digest",
          "size",
          "stored",
          "createdAt"
        ]
      },
      "RegistryVersion": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "018f3b1c-9a2e-7c31-8f4d-2a6b5c7e9d11"
          },
          "protocol": {
            "type": "string",
            "enum": [
              "npm",
              "cargo",
              "binary",
              "oci",
              "native",
              "app"
            ],
            "description": "Distribution protocol the package is published under.",
            "example": "npm"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "status": {
            "type": "string",
            "enum": [
              "staging",
              "published"
            ],
            "description": "Whether every declared artefact has arrived and been verified.",
            "example": "published"
          },
          "digest": {
            "type": [
              "string",
              "null"
            ],
            "description": "Digest of the release's primary artefact.",
            "example": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
          },
          "size": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total size of the release's artefacts in bytes.",
            "example": 8419372
          },
          "artefacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegistryArtefact"
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-09-04T10:15:00.000Z"
          },
          "publishedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the last declared artefact arrived. Null while publication is incomplete.",
            "example": "2026-09-04T10:16:30.000Z"
          }
        },
        "required": [
          "id",
          "protocol",
          "name",
          "version",
          "status",
          "digest",
          "size",
          "artefacts",
          "createdAt",
          "publishedAt"
        ]
      },
      "RegistryResolvedManifest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "reference": {
            "type": "string",
            "example": "2.1.0"
          },
          "digest": {
            "type": "string",
            "example": "sha256:435afee8e09be01ef873f7a72438f5d43f8589a20019803941357dcd7d482a95"
          },
          "mediaType": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Media type of the stored bytes.",
            "example": "application/vnd.npm.install-v1+tgz"
          },
          "size": {
            "type": "integer",
            "example": 1022
          },
          "image": {
            "type": "string",
            "example": "registry.rsx.group/rsx/roxy@sha256:435afee8e09be01ef873f7a72438f5d43f8589a20019803941357dcd7d482a95"
          }
        },
        "required": [
          "name",
          "reference",
          "digest",
          "mediaType",
          "size",
          "image"
        ]
      },
      "RegistryBinaryArtefact": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "platform": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 64,
            "pattern": "^[a-z0-9][a-z0-9._-]*$",
            "description": "Platform identifier, for a release that ships more than one artefact.",
            "example": "linux-x86_64"
          },
          "mediaType": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Media type of the stored bytes.",
            "example": "application/vnd.npm.install-v1+tgz"
          },
          "digest": {
            "type": "string",
            "example": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
          },
          "size": {
            "type": "integer",
            "example": 41983122
          },
          "download": {
            "type": "string",
            "description": "Path to fetch the bytes from, using the same API key.",
            "example": "/registry/v1/binary/download?package=rsx-node&version=0.8.0&platform=linux-x86_64"
          }
        },
        "required": [
          "package",
          "version",
          "platform",
          "mediaType",
          "digest",
          "size",
          "download"
        ]
      },
      "RegistryAuditEvent": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "018f3b1c-9a2e-7c31-8f4d-2a6b5c7e9d12"
          },
          "actor": {
            "type": "string",
            "example": "018f3b1c-9a2e-7c31-8f4d-2a6b5c7e9d13"
          },
          "action": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "Dotted and past tense, matching the platform's other trails.",
            "example": "version.published"
          },
          "targetType": {
            "type": "string",
            "enum": [
              "package",
              "version",
              "snapshot",
              "keys"
            ],
            "description": "What the event was about.",
            "example": "version"
          },
          "targetId": {
            "type": "string",
            "example": "018f3b1c-9a2e-7c31-8f4d-2a6b5c7e9d10"
          },
          "targetLabel": {
            "type": [
              "string",
              "null"
            ],
            "example": "@rsx/metal 1.4.0"
          },
          "protocol": {
            "type": "string",
            "enum": [
              "npm",
              "cargo",
              "binary",
              "oci",
              "native",
              "app"
            ],
            "description": "Distribution protocol the package is published under.",
            "example": "npm"
          },
          "at": {
            "type": "string",
            "format": "date-time",
            "example": "2026-09-04T10:16:30.000Z"
          },
          "detail": {
            "type": [
              "string",
              "null"
            ],
            "example": "3 artefacts, 41.9 MB"
          }
        },
        "required": [
          "id",
          "actor",
          "action",
          "targetType",
          "targetId",
          "targetLabel",
          "protocol",
          "at",
          "detail"
        ]
      },
      "RegistryAppReleaseDetails": {
        "type": "object",
        "properties": {
          "package": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 20000
          },
          "requirements": {
            "type": "object",
            "properties": {
              "windows-x86_64-msix": {
                "$ref": "#/components/schemas/RegistryAppRequirement"
              },
              "windows-x86_64-exe": {
                "$ref": "#/components/schemas/RegistryAppRequirement"
              },
              "debian-amd64-deb": {
                "$ref": "#/components/schemas/RegistryAppRequirement"
              },
              "android-arm64-v8a-apk": {
                "$ref": "#/components/schemas/RegistryAppRequirement"
              }
            }
          }
        },
        "required": [
          "package",
          "version"
        ]
      },
      "RegistryAddPackage": {
        "type": "object",
        "properties": {
          "protocol": {
            "type": "string",
            "enum": [
              "npm",
              "cargo",
              "binary",
              "oci",
              "native",
              "app"
            ],
            "description": "Distribution protocol the package is published under.",
            "example": "npm"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "description": {
            "type": "string",
            "maxLength": 512
          }
        },
        "required": [
          "protocol",
          "name"
        ]
      },
      "RegistryUpdatePackage": {
        "type": "object",
        "properties": {
          "protocol": {
            "type": "string",
            "enum": [
              "npm",
              "cargo",
              "binary",
              "oci",
              "native",
              "app"
            ],
            "description": "Distribution protocol the package is published under.",
            "example": "npm"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "owner": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Transfer ownership. The current owner only.",
            "example": "3f1c9b02-7a54-4a0e-9c1f-2b8d4e6a1c77"
          }
        },
        "required": [
          "protocol",
          "name"
        ]
      },
      "RegistryRemovePackage": {
        "type": "object",
        "properties": {
          "protocol": {
            "type": "string",
            "enum": [
              "npm",
              "cargo",
              "binary",
              "oci",
              "native",
              "app"
            ],
            "description": "Distribution protocol the package is published under.",
            "example": "npm"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          }
        },
        "required": [
          "protocol",
          "name"
        ]
      },
      "RegistryArtefactDeclaration": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "pattern": "^[a-z0-9][a-z0-9._-]*$",
            "description": "Platform identifier, for a release that ships more than one artefact.",
            "example": "linux-x86_64"
          },
          "mediaType": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Media type of the stored bytes.",
            "example": "application/vnd.npm.install-v1+tgz"
          },
          "digest": {
            "type": "string",
            "description": "SHA-256 content digest of the artefact bytes.",
            "example": "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
          },
          "size": {
            "type": "integer",
            "minimum": 0,
            "description": "Size of the artefact in bytes.",
            "example": 8419372
          }
        },
        "required": [
          "mediaType",
          "digest",
          "size"
        ]
      },
      "RegistryAddVersion": {
        "type": "object",
        "properties": {
          "protocol": {
            "type": "string",
            "enum": [
              "npm",
              "cargo",
              "binary",
              "oci",
              "native",
              "app"
            ],
            "description": "Distribution protocol the package is published under.",
            "example": "npm"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Package name, in the naming rules of its own ecosystem.",
            "example": "@rsx/metal"
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "Package version, or an OCI tag.",
            "example": "0.6.0"
          },
          "artefacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegistryArtefactDeclaration"
            },
            "minItems": 1,
            "maxItems": 64
          }
        },
        "required": [
          "protocol",
          "name",
          "version",
          "artefacts"
        ]
      }
    },
    "parameters": {}
  },
  "paths": {
    "/registry/v1/admin/native/releases/list": {
      "get": {
        "operationId": "adminListNativeReleases",
        "summary": "List native releases, newest first, optionally by review state",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "invalid",
                "pending",
                "approved",
                "rejected",
                "revoked"
              ],
              "description": "The release's review state.",
              "example": "pending"
            },
            "required": false,
            "name": "reviewState",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": false,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0,
              "default": 0
            },
            "required": false,
            "name": "offset",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Releases",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryNativeAdminRelease"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/releases/get": {
      "get": {
        "operationId": "adminGetNativeRelease",
        "summary": "Read one native release, with its findings and review history",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The release",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeAdminRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/releases/update": {
      "post": {
        "operationId": "adminUpdateNativeRelease",
        "summary": "Approve, reject or revoke a native release",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryNativeReleaseUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The release after the decision",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeAdminRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/packages/update": {
      "post": {
        "operationId": "adminUpdateNativePackage",
        "summary": "Set or clear a native package's default release",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryNativePackageUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The package's default after the change",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "package": {
                          "type": "string"
                        },
                        "defaultVersion": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "package",
                        "defaultVersion"
                      ]
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/snapshots/list": {
      "get": {
        "operationId": "adminListNativeSnapshots",
        "summary": "List signed generations, newest first",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0,
              "default": 0
            },
            "required": false,
            "name": "offset",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Generations",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryNativeSnapshot"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/snapshots/preview": {
      "get": {
        "operationId": "adminPreviewNativeSnapshot",
        "summary": "What a publication would change against the current generation",
        "tags": [
          "admin"
        ],
        "responses": {
          "200": {
            "description": "The difference a publish would sign",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeSnapshotPreview"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/snapshots/publish": {
      "post": {
        "operationId": "adminPublishNativeSnapshot",
        "summary": "Sign and publish the next generation of the repository",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryNativeSnapshotPublish"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The new current generation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeSnapshot"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/keys/get": {
      "get": {
        "operationId": "adminGetNativeKeys",
        "summary": "The repository's root keys, keys document and signing key status",
        "tags": [
          "admin"
        ],
        "responses": {
          "200": {
            "description": "Key status. Never any private key material.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeKeysStatus"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/native/keys/update": {
      "post": {
        "operationId": "adminUpdateNativeKeys",
        "summary": "Upload a keys document signed offline with a root key",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryNativeKeysUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Key status after the upload",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeKeysStatus"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/applications/list": {
      "get": {
        "operationId": "adminListApplications",
        "summary": "List applications with visibility, channels and pending reviews",
        "tags": [
          "admin"
        ],
        "responses": {
          "200": {
            "description": "Applications",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryAppApplication"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/applications/get": {
      "get": {
        "operationId": "adminGetApplication",
        "summary": "Read one application",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The application",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppApplication"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/applications/update": {
      "post": {
        "operationId": "adminUpdateApplication",
        "summary": "Change an application's visibility, app id or catalogue metadata",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAppApplicationUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The application after the change",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppApplication"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/releases/list": {
      "get": {
        "operationId": "adminListAppReleases",
        "summary": "List application releases, newest first, optionally by review state",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "staging",
                "invalid",
                "pending",
                "approved",
                "rejected",
                "revoked"
              ],
              "example": "pending"
            },
            "required": false,
            "name": "reviewState",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": false,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0,
              "default": 0
            },
            "required": false,
            "name": "offset",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Releases",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryAppAdminRelease"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/releases/get": {
      "get": {
        "operationId": "adminGetAppRelease",
        "summary": "Read one application release with its assets, findings and review history",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The release",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppAdminRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/releases/update": {
      "post": {
        "operationId": "adminUpdateAppRelease",
        "summary": "Approve, reject or revoke an application release",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAppReleaseUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The release after the decision, and for a revocation the publication",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppReleaseDecision"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/channels/update": {
      "post": {
        "operationId": "adminUpdateAppChannel",
        "summary": "Point a channel at an approved release, or clear it",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAppChannelUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The application after the change",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppApplication"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/snapshots/list": {
      "get": {
        "operationId": "adminListAppSnapshots",
        "summary": "List one repository's signed generations, newest first",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "public",
                "internal"
              ],
              "example": "public"
            },
            "required": true,
            "name": "repository",
            "in": "query"
          },
          {
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0,
              "default": 0
            },
            "required": false,
            "name": "offset",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 30
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Generations",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryAppSnapshot"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/snapshots/preview": {
      "get": {
        "operationId": "adminPreviewAppSnapshot",
        "summary": "What a publication of one repository would change",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "public",
                "internal"
              ],
              "example": "public"
            },
            "required": true,
            "name": "repository",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The difference a publish would sign",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppSnapshotPreview"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/snapshots/publish": {
      "post": {
        "operationId": "adminPublishAppSnapshot",
        "summary": "Sign and publish the next generation of one repository",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAppSnapshotPublish"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The new current generation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppSnapshot"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/keys/get": {
      "get": {
        "operationId": "adminGetAppKeys",
        "summary": "The application repositories' root keys, keys document and signing key status",
        "tags": [
          "admin"
        ],
        "responses": {
          "200": {
            "description": "Key status. Never any private key material.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppKeysStatus"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/keys/update": {
      "post": {
        "operationId": "adminUpdateAppKeys",
        "summary": "Upload a keys document signed offline with a root key",
        "tags": [
          "admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAppKeysUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Key status after the upload",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppKeysStatus"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/app/assets/download": {
      "get": {
        "operationId": "adminDownloadAppAsset",
        "summary": "Download one stored installer, of any visibility or review state",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "windows-x86_64-msix",
                "windows-x86_64-exe",
                "debian-amd64-deb",
                "android-arm64-v8a-apk"
              ],
              "description": "Platform key: operating system, architecture and installer format.",
              "example": "windows-x86_64-msix"
            },
            "required": true,
            "name": "platform",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The installer bytes",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/catalogue/applications/list": {
      "get": {
        "operationId": "catalogueListApplications",
        "summary": "Public applications in the current signed repository",
        "tags": [
          "catalogue"
        ],
        "responses": {
          "200": {
            "description": "Applications with at least one eligible release",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryCatalogueApplication"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/catalogue/applications/get": {
      "get": {
        "operationId": "catalogueGetApplication",
        "summary": "One public application",
        "tags": [
          "catalogue"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The application",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryCatalogueApplication"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/catalogue/releases/list": {
      "get": {
        "operationId": "catalogueListReleases",
        "summary": "A public application's signed releases, newest first, revoked ones marked",
        "tags": [
          "catalogue"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Releases",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryCatalogueRelease"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/catalogue/releases/get": {
      "get": {
        "operationId": "catalogueGetRelease",
        "summary": "One signed release of a public application, with its downloads",
        "tags": [
          "catalogue"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The release",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryCatalogueRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/packages/list": {
      "get": {
        "operationId": "adminListRegistryPackages",
        "summary": "What there is to choose from",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "cargo",
                "binary",
                "oci",
                "native",
                "app"
              ],
              "description": "Distribution protocol the package is published under.",
              "example": "npm"
            },
            "required": false,
            "name": "protocol",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 128,
              "example": "@rsx"
            },
            "required": false,
            "name": "scope",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 128
            },
            "required": false,
            "name": "owner",
            "in": "query"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "cursor",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "example": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Packages, with each one's newest published version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryPackage"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "cursor"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/versions/list": {
      "get": {
        "operationId": "adminListRegistryVersions",
        "summary": "A package's versions, newest first",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "cargo",
                "binary",
                "oci",
                "native",
                "app"
              ],
              "description": "Distribution protocol the package is published under.",
              "example": "npm"
            },
            "required": true,
            "name": "protocol",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "name",
            "in": "query"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "cursor",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "example": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Versions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryVersion"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "cursor"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/oci/resolve": {
      "get": {
        "operationId": "adminResolveRegistryManifest",
        "summary": "Turn a tag into the digest a node is given",
        "description": "The one route here that is not a listing. A deployment is pinned to a digest, never a tag, so something has to do this lookup — and doing it once, centrally, at the moment an operator chooses, is what stops a digest being copied by hand out of a CI run summary.",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "name",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "example": "2.1.0"
            },
            "required": true,
            "name": "reference",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The manifest the reference names",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryResolvedManifest"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/binary/list": {
      "get": {
        "operationId": "adminListRegistryBinaries",
        "summary": "Builds of a binary package",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Restrict to one release. Omitted, every published release is listed.",
              "example": "0.6.0"
            },
            "required": false,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Every platform artefact of every published release",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryBinaryArtefact"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/binary/get": {
      "get": {
        "operationId": "adminGetRegistryBinary",
        "summary": "One platform artefact, with its digest",
        "description": "What `node/v1` turns into an update command. The version, the digest and the path to the bytes come back together or not at all, which is the whole reason this beats three fields pasted from a run summary.",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "pattern": "^[a-z0-9][a-z0-9._-]*$",
              "description": "Platform identifier, for a release that ships more than one artefact.",
              "example": "linux-x86_64"
            },
            "required": false,
            "name": "platform",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The artefact, and where to fetch its bytes",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryBinaryArtefact"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/admin/audit/list": {
      "get": {
        "operationId": "adminListRegistryAudit",
        "summary": "What has been published, withdrawn and transferred",
        "description": "Newest first. Publication is the one write on this service a non-operator key can reach, so `actor` is usually an API key id rather than a person.",
        "tags": [
          "admin"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "cargo",
                "binary",
                "oci",
                "native",
                "app"
              ],
              "description": "Distribution protocol the package is published under.",
              "example": "npm"
            },
            "required": false,
            "name": "protocol",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "package",
                "version",
                "snapshot",
                "keys"
              ],
              "description": "What the event was about.",
              "example": "version"
            },
            "required": false,
            "name": "targetType",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 128
            },
            "required": false,
            "name": "targetId",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 128
            },
            "required": false,
            "name": "actor",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "description": "Dotted and past tense, matching the platform's other trails.",
              "example": "version.published"
            },
            "required": false,
            "name": "action",
            "in": "query"
          },
          {
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0,
              "default": 0,
              "example": 0
            },
            "required": false,
            "name": "offset",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50,
              "example": 50
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Audit events",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryAuditEvent"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "offset": {
                          "type": "integer"
                        },
                        "limit": {
                          "type": "integer"
                        },
                        "more": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "offset",
                        "limit",
                        "more"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/binary/list": {
      "get": {
        "operationId": "listRegistryBinaries",
        "summary": "List a binary package's platform artefacts",
        "tags": [
          "binary"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Restrict to one release. Omitted, every published release is listed.",
              "example": "0.6.0"
            },
            "required": false,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Artefacts across the requested releases",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryBinaryArtefact"
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/binary/get": {
      "get": {
        "operationId": "getRegistryBinary",
        "summary": "Read one platform artefact's metadata",
        "tags": [
          "binary"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "pattern": "^[a-z0-9][a-z0-9._-]*$",
              "description": "Platform identifier, for a release that ships more than one artefact.",
              "example": "linux-x86_64"
            },
            "required": false,
            "name": "platform",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The artefact, and where to fetch its bytes",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryBinaryArtefact"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/binary/download": {
      "get": {
        "operationId": "downloadRegistryBinary",
        "summary": "Fetch a platform artefact's bytes",
        "tags": [
          "binary"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "pattern": "^[a-z0-9][a-z0-9._-]*$",
              "description": "Platform identifier, for a release that ships more than one artefact.",
              "example": "linux-x86_64"
            },
            "required": false,
            "name": "platform",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The artefact bytes, with their verified digest in Docker-Content-Digest",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/binary/upload": {
      "put": {
        "operationId": "uploadRegistryBinary",
        "summary": "Send a declared artefact's bytes",
        "tags": [
          "binary"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "description": "SHA-256 content digest of the artefact bytes.",
              "example": "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
            },
            "required": true,
            "name": "digest",
            "in": "query"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The artefact bytes. Must declare a Content-Length, and must hash to the digest the release declared.",
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The release, published once this was the last outstanding artefact",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryVersion"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/native/get": {
      "get": {
        "operationId": "getRegistryNativeRelease",
        "summary": "Read a native release's validation and review state",
        "tags": [
          "native"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The release: whether it validated, how it was reviewed, and whether it is in the repository",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/native/upload": {
      "put": {
        "operationId": "uploadRegistryNativeArchive",
        "summary": "Send a declared native release's archive",
        "tags": [
          "native"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "description": "SHA-256 content digest of the artefact bytes.",
              "example": "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
            },
            "required": true,
            "name": "digest",
            "in": "query"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The .native archive. Must declare a Content-Length, hash to the declared digest, pass Native's archive validation, and be the release that was declared.",
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The release, published and pending review",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryNativeRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/app/get": {
      "get": {
        "operationId": "getRegistryAppRelease",
        "summary": "Read an application release's validation and review state",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The release: each asset's validation, the review, channels and revocation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/app/update": {
      "post": {
        "operationId": "updateRegistryAppRelease",
        "summary": "Set a release's notes and per-platform requirements before it is reviewed",
        "tags": [
          "app"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAppReleaseDetails"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The release with its details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/app/upload": {
      "put": {
        "operationId": "uploadRegistryAppAsset",
        "summary": "Send one declared installer of an application release",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "package",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "description": "SHA-256 content digest of the artefact bytes.",
              "example": "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
            },
            "required": true,
            "name": "digest",
            "in": "query"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The installer. Must declare a Content-Length, hash to a declared digest, and pass validation for its platform.",
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The release; pending review once its last asset has validated",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryAppRelease"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/packages/list": {
      "get": {
        "operationId": "listRegistryPackages",
        "summary": "List packages",
        "tags": [
          "packages"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "cargo",
                "binary",
                "oci",
                "native",
                "app"
              ],
              "description": "Distribution protocol the package is published under.",
              "example": "npm"
            },
            "required": false,
            "name": "protocol",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 128,
              "example": "@rsx"
            },
            "required": false,
            "name": "scope",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 128
            },
            "required": false,
            "name": "owner",
            "in": "query"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "cursor",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "example": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Packages, ordered by protocol and name",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryPackage"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "cursor"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/packages/get": {
      "get": {
        "operationId": "getRegistryPackage",
        "summary": "Read package metadata",
        "tags": [
          "packages"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "cargo",
                "binary",
                "oci",
                "native",
                "app"
              ],
              "description": "Distribution protocol the package is published under.",
              "example": "npm"
            },
            "required": true,
            "name": "protocol",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "name",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The package",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryPackage"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/packages/add": {
      "post": {
        "operationId": "addRegistryPackage",
        "summary": "Create a package identity",
        "tags": [
          "packages"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAddPackage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The package",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryPackage"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/packages/update": {
      "post": {
        "operationId": "updateRegistryPackage",
        "summary": "Amend package metadata",
        "tags": [
          "packages"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryUpdatePackage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The package",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryPackage"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/packages/remove": {
      "post": {
        "operationId": "removeRegistryPackage",
        "summary": "Withdraw a package from discovery",
        "tags": [
          "packages"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryRemovePackage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The package was withdrawn",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "protocol": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "removed": {
                          "type": "boolean",
                          "enum": [
                            true
                          ]
                        }
                      },
                      "required": [
                        "protocol",
                        "name",
                        "removed"
                      ]
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/versions/list": {
      "get": {
        "operationId": "listRegistryVersions",
        "summary": "List a package's versions",
        "tags": [
          "versions"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "cargo",
                "binary",
                "oci",
                "native",
                "app"
              ],
              "description": "Distribution protocol the package is published under.",
              "example": "npm"
            },
            "required": true,
            "name": "protocol",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "name",
            "in": "query"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "cursor",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "example": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Versions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistryVersion"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "cursor"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/versions/get": {
      "get": {
        "operationId": "getRegistryVersion",
        "summary": "Read one version",
        "tags": [
          "versions"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "cargo",
                "binary",
                "oci",
                "native",
                "app"
              ],
              "description": "Distribution protocol the package is published under.",
              "example": "npm"
            },
            "required": true,
            "name": "protocol",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Package name, in the naming rules of its own ecosystem.",
              "example": "@rsx/metal"
            },
            "required": true,
            "name": "name",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "description": "Package version, or an OCI tag.",
              "example": "0.6.0"
            },
            "required": true,
            "name": "version",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryVersion"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/registry/v1/versions/add": {
      "post": {
        "operationId": "addRegistryVersion",
        "summary": "Declare a version and the artefacts it consists of",
        "tags": [
          "versions"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistryAddVersion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The declared version, staging until every artefact has arrived",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistryVersion"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "webhooks": {}
}
