{ "schemas": { "AvailableProject": { "type": "object", "additionalProperties": false, "required": [ "project_id", "revision", "name", "organisation", "lifecycle" ], "properties": { "project_id": { "type": "string", "format": "uuid" }, "revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }, "name": { "type": "string", "minLength": 1, "maxLength": 256 }, "organisation": { "type": "string", "maxLength": 256 }, "lifecycle": { "type": "string", "enum": [ "active" ] } } }, "MyProjectsPage": { "type": "object", "additionalProperties": false, "required": [ "items", "next_cursor" ], "properties": { "items": { "type": "array", "maxItems": 100, "items": { "$ref": "#/schemas/AvailableProject" } }, "next_cursor": { "type": "string", "format": "uuid", "nullable": true } } }, "Projects": { "type": "array", "items": { "$ref": "#/schemas/Project" } }, "Project": { "type": "object", "additionalProperties": false, "required": [ "id", "name", "path", "full_path", "description", "visibility", "avatar_url", "web_url", "created_at", "updated_at" ], "properties": { "id": { "type": "integer", "format": "int64", "description": "Opaque legacy provider identifier, not a canonical Pharos ID." }, "name": { "type": "string" }, "path": { "type": "string" }, "full_path": { "type": "string" }, "description": { "type": "string", "nullable": true }, "visibility": { "type": "string" }, "avatar_url": { "type": "string", "nullable": true }, "web_url": { "type": "string" }, "created_at": { "type": "string", "format": "date-time" }, "updated_at": { "type": "string", "format": "date-time" } } }, "ProjectMember": { "type": "object", "additionalProperties": false, "required": [ "party_id", "roles", "asserted_name", "asserted_name_revision" ], "properties": { "party_id": { "type": "string", "format": "uuid" }, "roles": { "type": "array", "maxItems": 2, "uniqueItems": true, "items": { "type": "string", "enum": [ "developer", "project-administrator" ] } }, "asserted_name": { "type": "string", "nullable": true, "maxLength": 1024, "description": "Current trusted AAI name. Null when unavailable or absent; no profile or email fallback." }, "asserted_name_revision": { "type": "integer", "nullable": true, "minimum": 1, "maximum": 9007199254740991, "description": "Independent identity-attributes revision. Null when no current qualified projection is available; may be present when asserted_name is null." } } }, "ProjectMembers": { "type": "object", "additionalProperties": false, "required": [ "project_id", "revision", "items", "pending_member_count", "membership_complete" ], "properties": { "project_id": { "type": "string", "format": "uuid" }, "revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991, "description": "Project membership revision; does not version asserted names." }, "items": { "type": "array", "maxItems": 256, "items": { "$ref": "#/schemas/ProjectMember" } }, "pending_member_count": { "type": "integer", "minimum": 0, "maximum": 256, "description": "Unresolved or no longer qualified member bindings. Diagnostic information, never an invitation count." }, "membership_complete": { "type": "boolean", "description": "True exactly when pending_member_count is zero. Names do not affect roster completeness." } } }, "ProjectInvitation": { "type": "object", "additionalProperties": false, "required": [ "invitation_id", "recipient_email", "roles", "state", "expires_at" ], "properties": { "invitation_id": { "type": "string", "minLength": 1, "maxLength": 256, "description": "Opaque invitation reference; grants no acceptance authority." }, "recipient_email": { "type": "string", "format": "email", "maxLength": 320 }, "roles": { "type": "array", "minItems": 1, "maxItems": 2, "uniqueItems": true, "items": { "type": "string", "enum": [ "developer", "project-administrator" ] } }, "state": { "type": "string", "enum": [ "pending" ] }, "expires_at": { "type": "string", "format": "date-time" } } }, "ProjectInvitations": { "type": "object", "additionalProperties": false, "required": [ "project_id", "project_revision", "read_at", "items" ], "properties": { "project_id": { "type": "string", "format": "uuid" }, "project_revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991, "description": "Project revision whose administrator authority was checked; does not version invitations." }, "read_at": { "type": "string", "format": "date-time", "description": "Completion time of the successful complete read; the provider supplies no atomic collection revision." }, "items": { "type": "array", "maxItems": 256, "description": "Complete pending, unexpired Project invitations, ordered by expires_at then invitation_id. Overflow or incomplete provider reads fail with 503.", "items": { "$ref": "#/schemas/ProjectInvitation" } } } } } }