{"openapi":"3.1.0","info":{"title":"Skore Hub","description":"\nThis REST API is divided in small services.\nEach service has its own OpenAPI specification.\n- [identity](/identity/docs)\n- [projects](/projects/docs)\n ","version":"0.1.0"},"paths":{"/identity/admin/invitations/{email}":{"get":{"tags":["identity","admin"],"summary":"List Invitations By Email","description":"List all invitations for a given email.","operationId":"list_invitations_by_email_identity_admin_invitations__email__get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Invitation"},"title":"Response List Invitations By Email Identity Admin Invitations Email Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/login":{"get":{"tags":["identity","OAuth"],"summary":"Oauth Login","description":"Initiate OAuth login flow.\n\nStarts the authorization code flow by redirecting the user to the authorization\nserver's login page.\n\n**Parameters**\n- `success_uri`: The URI to redirect the user in case of successful login flow.\n\n**Responses**:\n- `200`: Returns a response containing the IDP authorization url","operationId":"oauth_login_identity_oauth_login_get","parameters":[{"name":"success_uri","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Uri"}},{"name":"display_registration","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Display Registration"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/accept-invitation":{"get":{"tags":["identity","OAuth"],"summary":"Accept Invitation","description":"Initiate OAuth login flow.\n\nStarts the authorization code flow by redirecting the user to the authorization\nserver's login page.\n\n**Parameters**\n- `success_uri`: The URI to redirect the user in case of successful login flow.\n\n**Responses**:\n- `200`: Returns a response containing the IDP authorization url","operationId":"accept_invitation_identity_oauth_accept_invitation_get","parameters":[{"name":"success_uri","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Uri"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/device/login":{"get":{"tags":["identity","OAuth Device"],"summary":"Oauth Device","description":"Initiate device OAuth flow.\n\nInitiates the OAuth device flow.\nProvides the user with a URL and a OTP code to authenticate the device.\n\n**Parameters**:\n- `success_uri`: The URI to redirect the user in case of successful login flow.\n\n**Responses**:\n- `200`: Returns a response containing the IDP authorization url and a device code.","operationId":"oauth_device_identity_oauth_device_login_get","parameters":[{"name":"success_uri","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Uri"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateDeviceAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/callback":{"get":{"tags":["identity","OAuth"],"summary":"Oauth Callback","description":"Handle the OAuth callback with the authorization code.\n\nThis endpoint processes the callback from the authorization server,\nexchanges the authorization code for an access token, and returns the token.\n\n**Parameters**:\n- `code`: The authorization code returned by the authorization server.\n- `state`: A unique value to prevent CSRF attacks.\n\n**Responses**:\n- `200`: Returns the access token on successful exchange.\n- `400`: Returns an error if the state or code is invalid.\n- `422`: Returns an error if the state or code format is invalid.","operationId":"oauth_callback_identity_oauth_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Oauth Callback Identity Oauth Callback Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/device/callback":{"get":{"tags":["identity","OAuth Device"],"summary":"Oauth Device Callback","description":"Handle the device authorization callback.\n\nThis endpoint processes the callback from the authorization server.\nIt stores the device authorization code for later use.\n\n**Parameters**:\n- `code`: The authorization code provided by the user.\n- `state`: A unique value to identify the device flow.\n\n**Responses**:\n- `200`: Renders a template prompting the user to enter a code.\n- `422`: Returns an error if the state or code format is invalid.","operationId":"oauth_device_callback_identity_oauth_device_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Oauth Device Callback Identity Oauth Device Callback Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["identity","OAuth Device"],"summary":"Oauth Device Callback Validation","description":"Validate the user-provided device code.\n\nThis endpoint verifies the code entered by the user during the device auth flow.\n\n**Parameters**:\n- `state`: The unique value identifying the device flow.\n- `user_code`: The code entered by the user.\n\n**Responses**:\n- `201`: The device is successfully authenticated.\n- `422`: Returns an error if the state or user_code format is invalid.","operationId":"oauth_device_callback_validation_identity_oauth_device_callback_post","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_oauth_device_callback_validation_identity_oauth_device_callback_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Oauth Device Callback Validation Identity Oauth Device Callback Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/device/code-probe":{"get":{"tags":["identity","OAuth Device"],"summary":"Oauth Token Code Is Accessible","description":"Get the device access code status.\n\nAllow a device to know if the awaited `access_code` has been received by the hub\nand is ready for an exchange with the `access_token`.\n\n**Responses**:\n- `204`: The authorization code has been received and is ready for exchange.\n- `400`: The authorization code has not been received yet.\n- `404`: The authentication flow for this `device_code` has not been found.","operationId":"oauth_token_code_is_accessible_identity_oauth_device_code_probe_get","parameters":[{"name":"device_code","in":"query","required":true,"schema":{"type":"string","title":"Device Code"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/device/token":{"get":{"tags":["identity","OAuth Device"],"summary":"Oauth Device Token","description":"Exchanges the device code for an access token.\n\nThis endpoint completes the device authorization flow by exchanging the\nvalidated device code for an access token.\n\n**Parameters**:\n- `device_code`: The code provided at authentication flow initiation.\n\n**Responses**:\n- `200`: Returns the access token on successful exchange.\n- `422`: Returns an error if the device_code format is invalid.","operationId":"oauth_device_token_identity_oauth_device_token_get","parameters":[{"name":"device_code","in":"query","required":true,"schema":{"type":"string","title":"Device Code"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeCodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/token/refresh":{"post":{"tags":["identity","OAuth","OAuth Device"],"summary":"Refresh Token","description":"Refresh an access token using a provided refresh token.\n\nThis endpoint allows a client to obtain a new access token by providing a valid\nrefresh token.\nIf a `success_uri` is specified in the request, the user will be redirected to that\nURI with the new access and refresh tokens as query parameters.\n\n**Parameters**:\n- `request`: The request body containing the refresh token and optional success URI.\n\n**Responses**:\n- `200`: Returns a new access token if successful.\n- `307`: Redirects to the specified success URI with new token parameters.\n- `400`: Returns an error if the refresh process fails.","operationId":"refresh_token_identity_oauth_token_refresh_post","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Refresh Token Identity Oauth Token Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/oauth/logout":{"post":{"tags":["identity","OAuth","OAuth Device"],"summary":"Logout","description":"Log out the user (standard OIDC).\n\nRevokes the access and refresh tokens on the OAuth2 provider (when a\nrevocation endpoint is advertised) and clears authentication cookies.\n\n**Responses**:\n- `204`: The user has been logged out.","operationId":"logout_identity_oauth_logout_post","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/workspaces":{"post":{"tags":["identity","Workspace"],"summary":"Create Workspace","description":"Create and persist a new workspace.\n\n**Parameters**\n- `form`: The workspace creation form filled with the `public_id` to use.\n\n**Responses**:\n- `201`: Returns the unique identifier of the newly created workspace.","operationId":"create_workspace_identity_workspaces_post","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkspaceRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkspaceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["identity","Workspace"],"summary":"List Workspaces","description":"Return a filtered list of workspaces.\n\n**Parameters**\n- `filters`: List of filters to limit the workspace listing query.\n\n**Responses**\n- `200`: A filtered list of workspaces.","operationId":"list_workspaces_identity_workspaces_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cursor"}},{"name":"sort","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SortOrder","default":"ASC"}},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["id","created_at"],"type":"string","default":"id","title":"Sort By"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListWorkspaceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/workspaces/{workspace_id}":{"delete":{"tags":["identity","Workspace"],"summary":"Delete Workspace","description":"Delete an existing workspace.\n\nDo nothing if the workspace do not exists.\n\n**Parameters**\n- `workspace_id`: Unique identifier of the workspace to delete.\n\n**Responses**:\n- `204`: No content.","operationId":"delete_workspace_identity_workspaces__workspace_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["identity","Workspace"],"summary":"Get Workspace","description":"Retrieve a workspace from its unique identifier (ID).\n\n**Parameters**\n- `workspace_id`: The workspace's unique identifier.\n\n**Responses**\n- `200`: The requested workspace.","operationId":"get_workspace_identity_workspaces__workspace_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["identity","Workspace"],"summary":"Update Workspace","description":"Update a workspace.\n\n**Parameters**\n- `workspace_id`: The workspace to update.\n\n**Responses**\n- `204`: No content. The workspace has been updated.","operationId":"update_workspace_identity_workspaces__workspace_id__put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/workspaces/public-id-availability":{"get":{"tags":["identity","Workspace"],"summary":"Check Workspace Public Id Available","description":"Check if a workspace public id is available and get a suggestion.\n\n**Parameters**\n- `public_id`: The workspace public id to check.\n\n**Responses**\n- `200`: Returns whether the slug is available and a suggested unique slug.","operationId":"check_workspace_public_id_available_identity_workspaces_public_id_availability_get","parameters":[{"name":"public_id","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Public Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"string"},{"type":"null"}]},"title":"Response Check Workspace Public Id Available Identity Workspaces Public Id Availability Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/workspaces/{workspace_id}/invitations":{"post":{"tags":["identity","Workspace"],"summary":"Create Workspace Invitation","description":"Create a workspace invitation and send an invitation email.\n\nOnly workspace owners can invite. The invited user receives an email with a\nlink to accept; on acceptance they join the workspace with the given role\nand the permissions defined for that role in code.\n\n**Parameters**\n- `workspace_id`: The workspace to invite into.\n- `email`: Invitee email.\n- `role`: owner, contributor, or reader.\n\n**Responses**\n- `201`: The created invitation (without the secret key).\n- `403`: Caller is not a workspace owner.\n- `404`: Workspace does not exist.","operationId":"create_workspace_invitation_identity_workspaces__workspace_id__invitations_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_workspace_invitation_identity_workspaces__workspace_id__invitations_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/workspaces/{workspace_id}/invitation-link":{"post":{"tags":["identity","Workspace"],"summary":"Create Workspace Invitation Link","description":"Create a shareable invitation URL for this workspace.\n\nThe returned URL uses the same acceptance flow as email invitations.\n\n**Parameters**\n- ``workspace_id``: Target workspace.\n- ``body.role``: Role granted when the invite is accepted.\n\n**Responses**\n- ``201``: Invitation URL.\n- ``403``: Caller is not a workspace owner.","operationId":"create_workspace_invitation_link_identity_workspaces__workspace_id__invitation_link_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkspaceInvitationLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitationLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/workspaces/{workspace_id}/members/{user_id}":{"delete":{"tags":["identity","Workspace"],"summary":"Remove Member From Workspace","description":"Remove a member from a workspace.\n\n**Parameters**\n- `workspace_id`: The workspace to remove the member from.\n- `user_id`: The user to remove from the workspace.\n\n**Responses**\n- `204`: No content.","operationId":"remove_member_from_workspace_identity_workspaces__workspace_id__members__user_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/workspaces/{workspace_id}/members/{user_id}/role":{"put":{"tags":["identity","Workspace"],"summary":"Set Member Role","description":"Set a workspace member's role and replace their permissions from the static map.\n\n**Parameters**\n- `workspace_id`: The workspace.\n- `user_id`: The member whose role is updated.\n- `form.role`: owner, contributor, or reader.\n\n**Responses**\n- `204`: Role and permissions updated.\n- `403`: Caller lacks permission, or the target is the last workspace owner.\n- `404`: Target user is not a member of the workspace.","operationId":"set_member_role_identity_workspaces__workspace_id__members__user_id__role_put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetMemberRoleRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/users/me":{"get":{"tags":["identity"],"summary":"Me","description":"Get the current user profile.","operationId":"me_identity_users_me_get","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/users/{user_id}":{"get":{"tags":["identity"],"summary":"Get User","description":"Get a user profile by ID.","operationId":"get_user_identity_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/users/{user_id}/api-keys":{"post":{"tags":["identity"],"summary":"Create Api Key","description":"Create a new API key for the current user.","operationId":"create_api_key_identity_users__user_id__api_keys_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyPayload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["identity"],"summary":"List Api Keys","description":"List all API keys of the authenticated user.","operationId":"list_api_keys_identity_users__user_id__api_keys_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAPIKey"},"title":"Response List Api Keys Identity Users User Id Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/users/{user_id}/api-keys/{api_key_id}":{"delete":{"tags":["identity"],"summary":"Delete Api Key","description":"Delete an existing API key for the current user.","operationId":"delete_api_key_identity_users__user_id__api_keys__api_key_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"api_key_id","in":"path","required":true,"schema":{"type":"integer","title":"Api Key Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["identity"],"summary":"Patch Api Key","description":"Update an existing API key for the current user.","operationId":"patch_api_key_identity_users__user_id__api_keys__api_key_id__patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"api_key_id","in":"path","required":true,"schema":{"type":"integer","title":"Api Key Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAPIKeyPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}]},"title":"Response Patch Api Key Identity Users User Id Api Keys Api Key Id Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/invitations/{key}":{"get":{"tags":["identity"],"summary":"Get Invitation","description":"Check if the given invitation exists if true redirect the user to the IdP.\n\nThe route has probably been invoked by an invitation link.","operationId":"get_invitation_identity_invitations__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"success_uri","in":"query","required":true,"schema":{"type":"string","title":"Success Uri"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}":{"post":{"tags":["projects","Projects"],"summary":"Create Project","description":"Create a project; idempotent (201 created, 208 already exists).","operationId":"create_project_projects__workspace_public_id___project_name__post","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":150,"description":"The project name.","title":"Project Name"},"description":"The project name."},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"}]},"title":"Response Create Project Projects Workspace Public Id Project Name Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["projects","Projects"],"summary":"Get Project","description":"Endpoint to read a project from its ID.","operationId":"get_project_projects__workspace_public_id___project_name__get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":150,"title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects","Projects"],"summary":"Delete Project","description":"Endpoint to delete a project.","operationId":"delete_project_projects__workspace_public_id___project_name__delete","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":150,"title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}":{"get":{"tags":["projects","Projects"],"summary":"List Workspace Projects","description":"Endpoint to list projects.","operationId":"list_workspace_projects_projects__workspace_public_id__get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Workspace Public Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Project"},"title":"Response List Workspace Projects Projects Workspace Public Id Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/admin":{"get":{"tags":["projects","Admin"],"summary":"List All Projects","description":"Endpoint to list all projects.","operationId":"list_all_projects_projects_admin_get","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Project"},"title":"Response List All Projects Projects Admin Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/reports":{"get":{"tags":["projects","Report"],"summary":"List Reports","description":"List estimator and cross-validation report summaries for a project.\n\nSupports equality filters, metric range filters, sorting by one column, and\ncursor pagination. Report kind is encoded in each item's ``urn``.\n\n**Metric filters and ``sort_by``**\n\nAlways use the *base* metric name — never a ``_mean`` suffix — even when the\nproject only contains cross-validation reports.\n\n- Example: ``accuracy__gte=0.8`` and ``sort_by=accuracy`` match estimator\n metrics named ``accuracy`` and CV aggregates named ``accuracy_mean``.\n- Do **not** use ``accuracy_mean__gte`` / ``sort_by=accuracy_mean``.\n- Std aggregates keep their suffix: ``accuracy_std__gte`` /\n ``sort_by=accuracy_std``.\n\nOptional variant constraints disambiguate multiclass / multioutput metrics:\n\n- ``precision__label=1``\n- ``r2__output=0``\n- ``recall__average=macro``\n\nMetric values in the response follow the same rule: CV ``*_mean`` metrics are\nexposed under the base name (e.g. ``accuracy_mean`` → ``accuracy``).","operationId":"list_reports_projects__workspace_public_id___project_name__reports_get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"canonical_report_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"}]}},{"type":"null"}],"title":"Canonical Report Ids"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cursor"}},{"name":"sort","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SortOrder","default":"DESC"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Sort By"}},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"}},{"name":"creator_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Id"}},{"name":"dataset_fingerprint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Fingerprint"}},{"name":"report_type","in":"query","required":false,"schema":{"anyOf":[{"enum":["estimator","cross-validation"],"type":"string"},{"type":"null"}],"title":"Report Type"}},{"name":"data_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"}]}},{"type":"null"}],"title":"Canonical Report Ids"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListReportsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/estimator-reports":{"get":{"tags":["projects","EstimatorReport"],"summary":"Filter","description":"Endpoint to list every project's estimator reports.","operationId":"filter_projects__workspace_public_id___project_name__estimator_reports_get","deprecated":true,"parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"dataset_fingerprint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Fingerprint"}},{"name":"ml_task","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ml Task"}},{"name":"estimator_class_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimator Class Name"}},{"name":"data_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor_created_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cursor Created At"}},{"name":"cursor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Cursor Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EstimatorReportSummary"},"title":"Response Filter Projects Workspace Public Id Project Name Estimator Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects","EstimatorReport"],"summary":"Create","description":"Create a new estimator report.\n\n**Parameters**\n- `workspace_public_id`: The workspace owner of the project\n- `project_name`: The project to query\n\n**Responses**\n- `201`: The ID of the created estimator report.\n- `400`: Invalid input data.\n- `404`: The project was not found.","operationId":"create_projects__workspace_public_id___project_name__estimator_reports_post","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEstimatorReportParameters"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/estimator-reports/groups":{"get":{"tags":["projects","EstimatorReport"],"summary":"List Groups","description":"List all estimator reports stored in a project.\n\nReports are grouped by dataset fingerprint and sorted by ascending\nreport creation date.\n\nThis route is a lightweight overview of the available estimator reports.\nTo get more details about estimator report, use the `get_estimator_report` route.\n\n**Parameters**\n- `workspace_public_id`: The workspace owner of the project\n- `project_name`: The project to query\n\n**Responses**\n- `200`: A list of estimator reports, grouped by dataset fingerprint.","operationId":"list_groups_projects__workspace_public_id___project_name__estimator_reports_groups_get","deprecated":true,"parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportGroup"},"title":"Response List Groups Projects Workspace Public Id Project Name Estimator Reports Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/estimator-reports/{report_id}":{"get":{"tags":["projects","EstimatorReport"],"summary":"Get","description":"Get a specific estimator report by its ID.\n\n**Parameters**\n- `workspace_public_id`: The workspace owner of the project\n- `project_name`: The project to query\n- `report_id`: The ID of the estimator report\n\n**Responses**\n- `200`: The requested estimator report.\n- `404`: The estimator report was not found.","operationId":"get_projects__workspace_public_id___project_name__estimator_reports__report_id__get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimatorReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/cross-validation-reports":{"post":{"tags":["projects","CrossValidationReport"],"summary":"Create","description":"Create a new cross validation report.","operationId":"create_projects__workspace_public_id___project_name__cross_validation_reports_post","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCrossValidationReportParameters"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["projects","CrossValidationReport"],"summary":"Filter","description":"List all cross-validation reports for a given dataset.","operationId":"filter_projects__workspace_public_id___project_name__cross_validation_reports_get","deprecated":true,"parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"dataset_fingerprint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Fingerprint"}},{"name":"ml_task","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ml Task"}},{"name":"estimator_class_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimator Class Name"}},{"name":"data_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CrossValidationReportSummary"},"title":"Response Filter Projects Workspace Public Id Project Name Cross Validation Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/cross-validation-reports/groups":{"get":{"tags":["projects","CrossValidationReport"],"summary":"List Groups","description":"List all cross validation reports stored in a project.\n\nCV reports are grouped by dataset fingerprint and sorted by ascending\nreport creation date.\n\nThis route is a lightweight overview of the available cross validation reports.\nTo get more details about cross validation report,\nuse the `get_cross_validation_report` route.\n\n**Parameters**\n- `workspace_public_id`: The workspace owner of the project\n- `project_name`: The project to query\n\n**Responses**\n- `200`: A list of cross validation reports, grouped by dataset fingerprint.","operationId":"list_groups_projects__workspace_public_id___project_name__cross_validation_reports_groups_get","deprecated":true,"parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportGroup"},"title":"Response List Groups Projects Workspace Public Id Project Name Cross Validation Reports Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/cross-validation-reports/{report_id}":{"get":{"tags":["projects","CrossValidationReport"],"summary":"Get Cross Validation Report","description":"Return details about a given cross validation report.\n\nIncluding:\n* metrics\n* related items\n* splits\n* split strategy\n* estimator ids","operationId":"get_cross_validation_report_projects__workspace_public_id___project_name__cross_validation_reports__report_id__get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossValidationReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/comparison-reports":{"get":{"tags":["projects","Comparisons"],"summary":"Filter","description":"List all comparisons of a given project.","operationId":"filter_projects__workspace_public_id___project_name__comparison_reports_get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ComparisonReport"},"title":"Response Filter Projects Workspace Public Id Project Name Comparison Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects","Comparisons"],"summary":"Create","description":"Create a comparison report.","operationId":"create_projects__workspace_public_id___project_name__comparison_reports_post","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateComparisonReportParameters"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/comparison-reports/{report_id}":{"get":{"tags":["projects","Comparisons"],"summary":"Get","description":"Get a comparison of a given project.","operationId":"get_projects__workspace_public_id___project_name__comparison_reports__report_id__get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparisonReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects","Comparisons"],"summary":"Delete","description":"Get a comparison of a given project.","operationId":"delete_projects__workspace_public_id___project_name__comparison_reports__report_id__delete","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/artifacts":{"post":{"tags":["projects","Artifacts"],"summary":"Generate Upload Url","description":"Generate a list of upload urls to add artifacts into a given project.\n\nIf an artifact with the given checksum already exists and is fully uploaded,\nno new upload URL will be generated to maintain artifact integrity and immutability.","operationId":"generate_upload_url_projects__workspace_public_id___project_name__artifacts_post","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GenerateUploadUrlRequest"},"title":"Upload Request"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GenerateUploadUrlResponse"},"title":"Response Generate Upload Url Projects Workspace Public Id Project Name Artifacts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["projects","Artifacts"],"summary":"Filter","description":"Return a list of stored artifacts for a given set of project, item/report.","operationId":"filter_projects__workspace_public_id___project_name__artifacts_get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"artifact_checksum","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Artifact Checksum"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ArtifactStatus"},{"type":"null"}],"default":"uploaded","title":"Status"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ArtifactMetadata"},"title":"Response Filter Projects Workspace Public Id Project Name Artifacts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/artifacts/complete":{"post":{"tags":["projects","Artifacts"],"summary":"Complete Upload","description":"Complete an artifact pending upload.","operationId":"complete_upload_projects__workspace_public_id___project_name__artifacts_complete_post","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompleteArtifactUpload"},"title":"Artifacts"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/artifacts/read":{"get":{"tags":["projects","Artifacts"],"summary":"Get Read Presigned Urls","description":"Return a list of temporary read-access urls to the requested artifacts.","operationId":"get_read_presigned_urls_projects__workspace_public_id___project_name__artifacts_read_get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"artifact_checksum","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"title":"Artifact Checksum"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ArtifactReadUrl"},"title":"Response Get Read Presigned Urls Projects Workspace Public Id Project Name Artifacts Read Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/goals/meeting-reports/count":{"get":{"tags":["projects","ProjectGoals"],"summary":"Count Reports Meeting Goals","description":"Count all project reports that meet every project goal.","operationId":"count_reports_meeting_goals_projects__workspace_public_id___project_name__goals_meeting_reports_count_get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGoalMeetingReportsCount"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/goals":{"get":{"tags":["projects","ProjectGoals"],"summary":"List Goals","description":"List all goals for a project.","operationId":"list_goals_projects__workspace_public_id___project_name__goals_get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGoalsList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects","ProjectGoals"],"summary":"Create Goal","description":"Create a project goal.","operationId":"create_goal_projects__workspace_public_id___project_name__goals_post","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectGoalParameters"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"integer"},"title":"Response Create Goal Projects Workspace Public Id Project Name Goals Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/goals/{goal_id}":{"put":{"tags":["projects","ProjectGoals"],"summary":"Update Goal","description":"Update a project goal constraint.","operationId":"update_goal_projects__workspace_public_id___project_name__goals__goal_id__put","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"goal_id","in":"path","required":true,"schema":{"type":"integer","title":"Goal Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectGoalParameters"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects","ProjectGoals"],"summary":"Delete Goal","description":"Delete a project goal.","operationId":"delete_goal_projects__workspace_public_id___project_name__goals__goal_id__delete","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"goal_id","in":"path","required":true,"schema":{"type":"integer","title":"Goal Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{workspace_public_id}/{project_name}/potential-goals":{"get":{"tags":["projects","ProjectGoals"],"summary":"List Potential Goals","description":"List metric variants eligible as goals for a project.","operationId":"list_potential_goals_projects__workspace_public_id___project_name__potential_goals_get","parameters":[{"name":"workspace_public_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Public Id"}},{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PotentialGoalMetric"},"title":"Response List Potential Goals Projects Workspace Public Id Project Name Potential Goals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models":{"get":{"tags":["OpenAI Compatible Agent"],"summary":"List Models","description":"Return the OpenAI-compatible model list exposed by the hub agent.","operationId":"list_models_v1_models_get","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}},{"name":"x-skore-workspace","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Skore-Workspace"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/skills/{skill}/template":{"get":{"tags":["OpenAI Compatible Agent"],"summary":"Get Skill Template","description":"Return a bundled skill file from the hub skills checkout.","operationId":"get_skill_template_v1_skills__skill__template_get","parameters":[{"name":"skill","in":"path","required":true,"schema":{"type":"string","title":"Skill"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}},{"name":"x-skore-workspace","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Skore-Workspace"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/completions":{"post":{"tags":["OpenAI Compatible Agent"],"summary":"Chat Completions","description":"Run one OpenAI-compatible chat completion turn (optionally streamed).","operationId":"chat_completions_v1_chat_completions_post","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}},{"name":"x-skore-workspace","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Skore-Workspace"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/messages":{"post":{"tags":["Anthropic Compatible Agent"],"summary":"Anthropic Messages","description":"Run one Anthropic-compatible Messages API turn (optionally streamed).","operationId":"anthropic_messages_v1_messages_post","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}},{"name":"x-skore-workspace","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Skore-Workspace"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/workspaces/{workspace_id}/providers":{"get":{"tags":["LLM Provider"],"summary":"List Providers","description":"Return the (masked) agent providers registered for a workspace.\n\n**Parameters**\n- `workspace_id`: The workspace whose providers are requested.\n\n**Responses**\n- `200`: The registered providers (secrets reported as booleans).\n- `403`: Caller is not a member of the workspace.\n- `503`: Stored credentials cannot be read (encryption key missing or\n changed).","operationId":"list_providers_agent_workspaces__workspace_id__providers_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProvidersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["LLM Provider"],"summary":"Create Provider","description":"Register a new agent provider for a workspace.\n\nThe first provider registered (when none is active yet) becomes active\nautomatically; otherwise the new provider starts inactive and must be\nactivated explicitly.\n\n**Parameters**\n- `workspace_id`: The workspace to configure.\n- `form`: The provider to register.\n\n**Responses**\n- `201`: The created provider (masked).\n- `400`: Encryption is not configured, the selected model is invalid, or a\n required provider credential is missing.\n- `403`: Caller is not a workspace owner or admin.\n- `409`: Another provider was activated concurrently; retry.\n- `503`: Stored credentials cannot be read (encryption key missing or\n changed).","operationId":"create_provider_agent_workspaces__workspace_id__providers_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProviderConfigCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProviderEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/workspaces/{workspace_id}/providers/{config_id}/activate":{"post":{"tags":["LLM Provider"],"summary":"Activate Provider","description":"Make a registered provider the active one for a workspace.\n\nActivating a provider deactivates whichever provider was active before.\n\n**Responses**\n- `204`: No content. The provider is now active.\n- `403`: Caller is not a workspace owner or admin.\n- `404`: The provider does not exist in this workspace.\n- `409`: Another provider was activated concurrently; retry.\n- `503`: Stored credentials cannot be read (encryption key missing or\n changed).","operationId":"activate_provider_agent_workspaces__workspace_id__providers__config_id__activate_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_id","in":"path","required":true,"schema":{"type":"integer","title":"Config Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/workspaces/{workspace_id}/providers/{config_id}":{"delete":{"tags":["LLM Provider"],"summary":"Delete Provider","description":"Remove a registered provider from a workspace.\n\nRemoving the active provider leaves the workspace with no active provider\n(the agent is then disabled until another provider is activated).\n\n**Responses**\n- `204`: No content. The provider has been removed.\n- `403`: Caller is not a workspace owner or admin.\n- `404`: The provider does not exist in this workspace.","operationId":"delete_provider_agent_workspaces__workspace_id__providers__config_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"config_id","in":"path","required":true,"schema":{"type":"integer","title":"Config Id"}},{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","description":"Expose health probe.\n\nThis endpoint checks the health of the application by probing various\nservices and returns the health status along with version information.\n\nReturns\n-------\n JSONResponse: A JSON response containing the readiness status and\n version information. The status code is 200 if all\n services are ready, otherwise 503.","operationId":"health_health_get","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/readiness":{"get":{"summary":"Readiness","description":"Expose readiness probe.\n\nThis endpoint checks the readiness of the application by probing various\nservices and returns the readiness status along with version information.\n\nReturns\n-------\n JSONResponse: A JSON response containing the readiness status and\n version information. The status code is 200 if all\n services are ready, otherwise 503.","operationId":"readiness_readiness_get","parameters":[{"name":"config_file","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/liveness":{"get":{"summary":"Liveness","description":"Expose liveness probe.\n\nThis endpoint checks the liveness of the application and returns version\ninformation.\n\nReturns\n-------\n dict: A dictionary containing version information.","operationId":"liveness_liveness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Liveness Liveness Get"}}}}}}}},"components":{"schemas":{"AgentProviderConfigCreate":{"properties":{"name":{"type":"string","maxLength":150,"minLength":1,"title":"Name"},"provider":{"type":"string","enum":["skore","anthropic","bedrock"],"title":"Provider"},"selected_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Model"},"anthropic_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anthropic Api Key"},"aws_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Region"},"bedrock_role_arn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedrock Role Arn"},"bedrock_external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedrock External Id"},"aws_access_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Access Key Id"},"aws_secret_access_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Secret Access Key"}},"type":"object","required":["name","provider"],"title":"AgentProviderConfigCreate","description":"Payload to register a new provider for a workspace.\n\nProviders are add/remove only (no edit), so secrets are supplied in full at\ncreation time; an empty/omitted secret simply means \"not set\"."},"AgentProviderEntryResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"provider":{"type":"string","enum":["skore","anthropic","bedrock"],"title":"Provider"},"selected_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Model"},"aws_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Region"},"bedrock_role_arn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedrock Role Arn"},"anthropic_api_key_set":{"type":"boolean","title":"Anthropic Api Key Set"},"bedrock_external_id_set":{"type":"boolean","title":"Bedrock External Id Set"},"aws_access_key_id_set":{"type":"boolean","title":"Aws Access Key Id Set"},"aws_secret_access_key_set":{"type":"boolean","title":"Aws Secret Access Key Set"}},"type":"object","required":["id","name","is_active","provider","selected_model","aws_region","bedrock_role_arn","anthropic_api_key_set","bedrock_external_id_set","aws_access_key_id_set","aws_secret_access_key_set"],"title":"AgentProviderEntryResponse","description":"Masked view of a single registered provider.\n\nSecret values are never returned; ``*_set`` booleans report whether a secret\nis stored so the UI can show a \"configured\" state without echoing it.\n``selected_model`` is ``None`` for the Skore-managed \"auto\" routing."},"AgentProvidersResponse":{"properties":{"providers":{"items":{"$ref":"#/components/schemas/AgentProviderEntryResponse"},"type":"array","title":"Providers"},"available_models":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Available Models"},"encryption_configured":{"type":"boolean","title":"Encryption Configured"}},"type":"object","required":["providers","available_models","encryption_configured"],"title":"AgentProvidersResponse","description":"The workspace's registered providers plus UI helper metadata.\n\n``available_models`` carries the per-provider selectable lists so the UI can\npopulate the dropdown without an extra request, and ``encryption_configured``\ntells the UI whether secret storage (and thus adding providers) is possible."},"ArtifactMetadata":{"properties":{"checksum":{"type":"string","maxLength":255,"title":"Checksum"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"status":{"$ref":"#/components/schemas/ArtifactStatus"}},"type":"object","required":["checksum","size_bytes","status"],"title":"ArtifactMetadata","description":"The minimal set of information about an artifact.\n\nNotes\n-----\nUser can ask only for artifact metadata, independently of its content.\n\nAttributes\n----------\nchecksum : ArtifactChecksum\n The unique checksum identifier of the artifact, used for communication\n with skore (lib).\nsize_bytes : SizeBytes | None\n The size of the artifact in bytes.\n This size is determined after the artifact has been uploaded to ensure it\n accurately represents the actual size of the stored data.\nstatus : ArtifactStatus\n Indicates the upload status of the artifact (pending, uploaded)."},"ArtifactReadUrl":{"properties":{"checksum":{"type":"string","maxLength":255,"title":"Checksum"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"status":{"$ref":"#/components/schemas/ArtifactStatus"},"url":{"type":"string","title":"Url"}},"type":"object","required":["checksum","size_bytes","status","url"],"title":"ArtifactReadUrl","description":"Represents a read-access to an artifact.\n\nAttributes\n----------\nurl : str\n A pre-signed URL that provides temporary access to the artifact in the object\n storage."},"ArtifactStatus":{"type":"string","enum":["pending","uploaded"],"title":"ArtifactStatus","description":"Upload status of an artifact in the object storage."},"Body_create_workspace_invitation_identity_workspaces__workspace_id__invitations_post":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"type":"object","required":["email","role"],"title":"Body_create_workspace_invitation_identity_workspaces__workspace_id__invitations_post"},"Body_oauth_device_callback_validation_identity_oauth_device_callback_post":{"properties":{"state":{"type":"string","title":"State"},"user_code":{"type":"string","title":"User Code"}},"type":"object","required":["state","user_code"],"title":"Body_oauth_device_callback_validation_identity_oauth_device_callback_post"},"ComparisonOperator":{"type":"string","enum":["lt","gt","lte","gte"],"title":"ComparisonOperator","description":"Comparison operator for project goal constraints."},"ComparisonReport":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"creator_id":{"type":"string","title":"Creator Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"compared_reports":{"items":{"type":"integer"},"type":"array","title":"Compared Reports"},"best_trade_offs":{"items":{"type":"integer"},"type":"array","title":"Best Trade Offs"},"best_trade_offs_explanations":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Best Trade Offs Explanations"},"urn":{"type":"string","title":"Urn","description":"URN identifying the EstimatorReport.\n\nReturns\n-------\nUrn\n The URN of the estimator report.","readOnly":true}},"type":"object","required":["id","project_id","creator_id","name","created_at","updated_at","compared_reports","best_trade_offs","best_trade_offs_explanations","urn"],"title":"ComparisonReport","description":"The result of a set of reports comparison.\n\nA comparison report is created when a user compares multiple estimator reports\nand selects the best trade-offs among them.\n\nAttributes\n----------\nid : ComparisonReportId\n The unique identifier of the comparison report in the skore hub database.\nproject_id : ProjectId\n Identifier for the project associated with the comparison report.\ncreator_id : str\n Identifier for the user who created the comparison report.\nname : str\n The name of the comparison report.\ncreated_at : datetime\n The date and time when the comparison report was created.\nupdated_at : datetime\n The date and time when the comparison report was last updated.\ncompared_reports : list[int]\n List of estimator report IDs that were compared in this comparison report.\nbest_trade_offs : list[int]\n List of estimator report IDs that represent the best trade-offs identified\n in the comparison.\nbest_trade_offs_explanations : dict[int, str | None]\n A dictionary mapping each estimator report ID in `best_trade_offs` to an\n optional explanation provided by the user."},"CompleteArtifactUpload":{"properties":{"checksum":{"type":"string","title":"Checksum"},"etags":{"additionalProperties":{"type":"string"},"type":"object","title":"Etags"}},"type":"object","required":["checksum","etags"],"title":"CompleteArtifactUpload","description":"Artifact completion request.\n\nAttributes\n----------\nchecksum : ArtifactChecksum\n The checksum of the artifact.\netags : dict[ChunkId, str]\n A mapping of chunk IDs to their corresponding ETags."},"CreateAPIKeyPayload":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"permissions":{"items":{"$ref":"#/components/schemas/Permission"},"type":"array","title":"Permissions"},"workspace_id":{"type":"integer","title":"Workspace Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["permissions","workspace_id"],"title":"CreateAPIKeyPayload","description":"API key creation payload."},"CreateAPIKeyResponse":{"properties":{"api_key_id":{"type":"integer","title":"Api Key Id"},"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["api_key_id","api_key"],"title":"CreateAPIKeyResponse","description":"Response of \"create API key\" endpoint."},"CreateComparisonReportParameters":{"properties":{"name":{"type":"string","title":"Name"},"compared_reports":{"items":{"type":"integer"},"type":"array","title":"Compared Reports"},"best_trade_offs":{"items":{"type":"integer"},"type":"array","title":"Best Trade Offs"},"explanations":{"additionalProperties":{"type":"string"},"type":"object","title":"Explanations"}},"type":"object","required":["name","compared_reports","best_trade_offs","explanations"],"title":"CreateComparisonReportParameters","description":"Parameters to create a comparison report.\n\nAttributes\n----------\nname : str\n The name of the comparison report.\ncompared_reports : list[EstimatorReportId]\n List of estimator report IDs that were compared in this comparison report.\nbest_trade_offs : list[EstimatorReportId]\n List of estimator report IDs that represent the best trade-offs identified\n in the comparison.\nexplanations : dict[EstimatorReportId, str]\n A dictionary mapping each estimator report ID in `best_trade_offs` to an\n explanation provided by the user."},"CreateCrossValidationReportParameters":{"properties":{"key":{"type":"string","title":"Key"},"canonical_report_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"},{"type":"null"}],"title":"Canonical Report Id"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"},"ml_task":{"type":"string","enum":["regression","multioutput-regression","binary-classification","multiclass-classification","multiclass-multioutput","multioutput-multiclass-classification","multioutput-binary-classification","unknown"],"title":"Ml Task"},"dataset_fingerprint":{"type":"string","title":"Dataset Fingerprint"},"metrics":{"items":{"$ref":"#/components/schemas/CreateReportMetricParameters"},"type":"array","title":"Metrics"},"medias":{"items":{"$ref":"#/components/schemas/CreateReportMediaParameters"},"type":"array","title":"Medias"},"pickle":{"$ref":"#/components/schemas/CreateReportPickleParameters"},"environment":{"anyOf":[{"$ref":"#/components/schemas/CreateReportEnvironmentParameters"},{"type":"null"}]},"splitting_strategy":{"$ref":"#/components/schemas/SplittingStrategy"},"groups":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Groups"},"class_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Class Names"},"dataset_size":{"type":"integer","title":"Dataset Size"},"target_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Target Range"},"target_ranges":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Target Ranges"},"target_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Names"},"estimators":{"items":{"$ref":"#/components/schemas/CreateEstimatorReportParameters"},"type":"array","title":"Estimators"}},"type":"object","required":["key","estimator_class_name","ml_task","dataset_fingerprint","metrics","medias","pickle","splitting_strategy","groups","class_names","dataset_size","estimators"],"title":"CreateCrossValidationReportParameters","description":"Parameters to create a cross validation report.\n\nAttributes\n----------\nsplits : Splits\n Information about the splits of the dataset.\ngroups : list[int] | None\n Index of the group for each sample in the dataset.\nclass_names : list[str] | None\n All class names of the dataset.\nclasses : list[int] | None\n Class name index for each sample in the dataset.\ndataset_size : int\n The size of the dataset.\nestimators : list[CreateEstimatorReportParameters]\n List of estimators evaluated in the cross-validation."},"CreateEstimatorReportParameters":{"properties":{"key":{"type":"string","title":"Key"},"canonical_report_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"},{"type":"null"}],"title":"Canonical Report Id"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"},"ml_task":{"type":"string","enum":["regression","multioutput-regression","binary-classification","multiclass-classification","multiclass-multioutput","multioutput-multiclass-classification","multioutput-binary-classification","unknown"],"title":"Ml Task"},"dataset_fingerprint":{"type":"string","title":"Dataset Fingerprint"},"metrics":{"items":{"$ref":"#/components/schemas/CreateReportMetricParameters"},"type":"array","title":"Metrics"},"medias":{"items":{"$ref":"#/components/schemas/CreateReportMediaParameters"},"type":"array","title":"Medias"},"pickle":{"$ref":"#/components/schemas/CreateReportPickleParameters"},"environment":{"anyOf":[{"$ref":"#/components/schemas/CreateReportEnvironmentParameters"},{"type":"null"}]}},"type":"object","required":["key","estimator_class_name","ml_task","dataset_fingerprint","metrics","medias","pickle"],"title":"CreateEstimatorReportParameters","description":"Parameter object to create a new `Item` that is an EstimatorReport.\n\nAttributes\n----------\nkey : str\n The key of the estimator report, provided by the user to identify the report.\ncanonical_report_id : UUID | None\n Canonical report identifier. Optional for older clients.\nestimator_class_name : str\n The class name of the estimator (e.g., RandomForestClassifier).\nml_task : MLTask\n The machine learning task associated with the estimator (e.g., classification,\n regression).\ndataset_fingerprint : str\n A unique fingerprint representing the dataset used for training and evaluation.\nmetrics : list[CreateReportMetricParameters]\n List of metrics associated with the estimator report.\nmedias : list[CreateReportMediaParameters]\n List of media associated with the estimator report."},"CreateProjectGoalParameters":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"output":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Output"},"average":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Average"},"constraint_operator":{"$ref":"#/components/schemas/ComparisonOperator"},"constraint_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Constraint Threshold"},"constraint_threshold_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Constraint Threshold Source"},"metric_type_id":{"type":"integer","title":"Metric Type Id"},"is_main":{"type":"boolean","title":"Is Main","default":false},"main_scope":{"anyOf":[{"$ref":"#/components/schemas/ProjectGoalMainScopeDimensions"},{"type":"null"}]}},"type":"object","required":["constraint_operator","metric_type_id"],"title":"CreateProjectGoalParameters","description":"Parameters to create a project goal."},"CreateReportEnvironmentParameters":{"properties":{"python_version":{"type":"string","title":"Python Version"},"checksum":{"type":"string","title":"Checksum"}},"type":"object","required":["python_version","checksum"],"title":"CreateReportEnvironmentParameters","description":"Parameter object to create a `ReportEnvironmentModel`.\n\nThe environment artifact is a ``requirements.txt`` lockfile.\n\nAttributes\n----------\npython_version : str\n The Python version of the environment used to create the report.\nchecksum : str\n The checksum of the ``requirements.txt`` lockfile."},"CreateReportMediaParameters":{"properties":{"name":{"type":"string","title":"Name"},"content_type":{"type":"string","title":"Content Type"},"data_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters"},"checksum":{"type":"string","title":"Checksum"}},"type":"object","required":["name","content_type","checksum"],"title":"CreateReportMediaParameters","description":"Parameter object to create a `ReportMediaModel`.\n\nAttributes\n----------\nname : str\n The name of the media (e.g., \"confusion_matrix\").\ncontent_type : str\n The type of media (e.g., \"image/png\", \"text/csv\").\ndata_source : str | None\n Optional source of the media data (e.g., \"validation\", \"test\").\nparameters : dict | None\n Optional parameters identifying the media type variant.\nchecksum : str\n The checksum of the media file for integrity verification."},"CreateReportMetricParameters":{"properties":{"name":{"type":"string","title":"Name"},"value":{"type":"number","title":"Value"},"data_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source"},"verbose_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verbose Name"},"greater_is_better":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Greater Is Better"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"output":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output"},"average":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Average"}},"type":"object","required":["name","value"],"title":"CreateReportMetricParameters","description":"Parameter object to create a `ReportMetricModel`.\n\nAttributes\n----------\nname : str\n The name of the metric (e.g., accuracy, precision).\nvalue : float\n The value of the metric.\ndata_source : str | None\n Optional source of the metric data (e.g., \"train\", \"test\").\nverbose_name : str | None\n The verbose name of the metric (how it will be displayed).\ngreater_is_better : bool | None\n Whether the metric is of type \"greater is better\" or \"lower is better\".\nlabel : str | None\n Class label for per-class classification metrics. Legacy typed scalars\n (``bool`` / ``int`` / ``float``) are coerced to strings on ingest.\noutput : int | None\n Output index for multioutput regression metrics.\naverage : str | None\n Averaging mode for metrics aggregated across labels or outputs."},"CreateReportPickleParameters":{"properties":{"checksum":{"type":"string","title":"Checksum"}},"type":"object","required":["checksum"],"title":"CreateReportPickleParameters","description":"Parameter object to create a `ReportPickleModel`.\n\nAttributes\n----------\nchecksum : str\n The checksum of the media file for integrity verification."},"CreateWorkspaceInvitationLinkRequest":{"properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"type":"object","required":["role"],"title":"CreateWorkspaceInvitationLinkRequest","description":"Create a shareable workspace invitation URL."},"CreateWorkspaceRequest":{"properties":{"public_id":{"type":"string","maxLength":64,"minLength":1,"title":"Public Id"}},"type":"object","required":["public_id"],"title":"CreateWorkspaceRequest","description":"Workspace creation request."},"CreateWorkspaceResponse":{"properties":{"id":{"type":"integer","title":"Id"}},"type":"object","required":["id"],"title":"CreateWorkspaceResponse","description":"Workspace creation response."},"CrossValidationReport":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"creator_id":{"type":"string","title":"Creator Id"},"key":{"type":"string","title":"Key"},"ml_task":{"type":"string","enum":["regression","multioutput-regression","binary-classification","multiclass-classification","multiclass-multioutput","multioutput-multiclass-classification","multioutput-binary-classification","unknown"],"title":"Ml Task"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"},"dataset_fingerprint":{"type":"string","title":"Dataset Fingerprint"},"dataset_verbose_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Verbose Name"},"metrics":{"items":{"$ref":"#/components/schemas/ReportMetric"},"type":"array","title":"Metrics"},"canonical_report_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"},{"type":"null"}],"title":"Canonical Report Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"splitting_strategy":{"$ref":"#/components/schemas/SplittingStrategy"},"groups":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Groups"},"class_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Class Names"},"target_ranges_normalized":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Target Ranges Normalized"},"target_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Names"},"dataset_size":{"type":"integer","title":"Dataset Size"},"estimators":{"items":{"type":"integer"},"type":"array","title":"Estimators"},"medias":{"items":{"$ref":"#/components/schemas/ReportMedia"},"type":"array","title":"Medias"},"pickle":{"$ref":"#/components/schemas/ReportPickle"},"environment":{"anyOf":[{"$ref":"#/components/schemas/ReportEnvironment"},{"type":"null"}]},"urn":{"type":"string","title":"Urn","description":"URN identifying the CrossValidationReport.","readOnly":true}},"type":"object","required":["id","project_id","creator_id","key","ml_task","estimator_class_name","dataset_fingerprint","metrics","created_at","updated_at","splitting_strategy","groups","class_names","target_ranges_normalized","dataset_size","estimators","medias","pickle","urn"],"title":"CrossValidationReport","description":"Across validation report.\n\nAttributes\n----------\nsplitting_strategy : SplittingStrategy\n Information about the splitting strategy used.\ngroups : list[int] | None\n Index of the group for each sample in the dataset.\nclass_names : list[str] | None\n All class names of the dataset.\ntarget_ranges_normalized : list[list[float]] | None\n The range of the target values, one [min, max] pair per output.\ntarget_names: list[str] | None\n The name of the targets.\ndataset_size : int\n The size of the dataset.\nestimators : list[EstimatorReportId]\n List of estimator report IDs evaluated in the cross-validation.\nmedias : list[ReportMedia]\n List of media associated with the cross-validation report.\npickle : ReportPickle\n The pickle associated with the estimator report."},"CrossValidationReportSummary":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"creator_id":{"type":"string","title":"Creator Id"},"key":{"type":"string","title":"Key"},"ml_task":{"type":"string","enum":["regression","multioutput-regression","binary-classification","multiclass-classification","multiclass-multioutput","multioutput-multiclass-classification","multioutput-binary-classification","unknown"],"title":"Ml Task"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"},"dataset_fingerprint":{"type":"string","title":"Dataset Fingerprint"},"dataset_verbose_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Verbose Name"},"metrics":{"items":{"$ref":"#/components/schemas/ReportMetric"},"type":"array","title":"Metrics"},"canonical_report_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"},{"type":"null"}],"title":"Canonical Report Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"splitter_type":{"type":"string","title":"Splitter Type"},"urn":{"type":"string","title":"Urn","description":"URN identifying the CrossValidationReport.","readOnly":true}},"type":"object","required":["id","project_id","creator_id","key","ml_task","estimator_class_name","dataset_fingerprint","metrics","created_at","updated_at","splitter_type","urn"],"title":"CrossValidationReportSummary","description":"Summary of cross validation report.\n\nAttributes\n----------\nsplitter_type: str\n The type of the splitter used."},"EstimatorReport":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"creator_id":{"type":"string","title":"Creator Id"},"key":{"type":"string","title":"Key"},"ml_task":{"type":"string","enum":["regression","multioutput-regression","binary-classification","multiclass-classification","multiclass-multioutput","multioutput-multiclass-classification","multioutput-binary-classification","unknown"],"title":"Ml Task"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"},"dataset_fingerprint":{"type":"string","title":"Dataset Fingerprint"},"dataset_verbose_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Verbose Name"},"metrics":{"items":{"$ref":"#/components/schemas/ReportMetric"},"type":"array","title":"Metrics"},"canonical_report_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"},{"type":"null"}],"title":"Canonical Report Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"medias":{"items":{"$ref":"#/components/schemas/ReportMedia"},"type":"array","title":"Medias"},"pickle":{"$ref":"#/components/schemas/ReportPickle"},"environment":{"anyOf":[{"$ref":"#/components/schemas/ReportEnvironment"},{"type":"null"}]},"parents_urns":{"items":{"type":"string"},"type":"array","title":"Parents Urns"},"urn":{"type":"string","title":"Urn","description":"URN identifying the EstimatorReport.\n\nReturns\n-------\nUrn\n The URN of the estimator report.","readOnly":true}},"type":"object","required":["id","project_id","creator_id","key","ml_task","estimator_class_name","dataset_fingerprint","metrics","created_at","updated_at","medias","pickle","parents_urns","urn"],"title":"EstimatorReport","description":"A full estimator report.\n\nAttributes\n----------\nmedias : list[ReportMedia]\n List of media associated with the estimator report.\npickle : ReportPickle\n The pickle associated with the estimator report.\nparents_urns: list[Urn]\n The URNs of the parent reports if applicable."},"EstimatorReportSummary":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"creator_id":{"type":"string","title":"Creator Id"},"key":{"type":"string","title":"Key"},"ml_task":{"type":"string","enum":["regression","multioutput-regression","binary-classification","multiclass-classification","multiclass-multioutput","multioutput-multiclass-classification","multioutput-binary-classification","unknown"],"title":"Ml Task"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"},"dataset_fingerprint":{"type":"string","title":"Dataset Fingerprint"},"dataset_verbose_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Verbose Name"},"metrics":{"items":{"$ref":"#/components/schemas/ReportMetric"},"type":"array","title":"Metrics"},"canonical_report_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"},{"type":"null"}],"title":"Canonical Report Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"urn":{"type":"string","title":"Urn","description":"URN identifying the EstimatorReport.\n\nReturns\n-------\nUrn\n The URN of the estimator report.","readOnly":true}},"type":"object","required":["id","project_id","creator_id","key","ml_task","estimator_class_name","dataset_fingerprint","metrics","created_at","updated_at","urn"],"title":"EstimatorReportSummary","description":"A summary of a report.\n\nAttributes\n----------\nid : EstimatorReportId\n The unique identifier of the estimator report in the skore hub database.\nproject_id : ProjectId\n Identifier for the project associated with the estimator report.\ncreator_id : str\n Identifier for the user who created the estimator report.\nkey : str\n The key of the estimator report, provided by the user to identify the report.\nml_task : MLTask\n The machine learning task associated with the estimator (e.g., classification,\n regression).\nestimator_class_name : str\n The class name of the estimator (e.g., RandomForestClassifier).\ndataset_fingerprint : str\n A unique fingerprint representing the dataset used for training and evaluation.\ndataset_verbose_name : str | None\n Human-readable dataset name inferred asynchronously (e.g. via Prefect).\nmetrics : list[ReportMetric]\n List of metrics associated with the estimator report.\ncanonical_report_id : UUID | None\n Canonical report identifier; ``None`` for legacy reports.\ncreated_at : datetime\n The date and time when the estimator report was created.\nupdated_at : datetime\n The date and time when the estimator report was last updated."},"ExchangeCodeResponse":{"properties":{"token":{"$ref":"#/components/schemas/Token"},"success_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Uri"}},"type":"object","required":["token"],"title":"ExchangeCodeResponse","description":"Response containing the exchanged token.\n\nAttributes\n----------\ntoken : Token\n The token obtained from the authorization code exchange with IDP.\nsuccess_uri : str | None\n The URI to redirect the user at in case of successful login flow."},"GenerateUploadUrlRequest":{"properties":{"checksum":{"type":"string","title":"Checksum"},"chunk_number":{"type":"integer","title":"Chunk Number","default":0},"content_type":{"type":"string","title":"Content Type"}},"type":"object","required":["checksum","content_type"],"title":"GenerateUploadUrlRequest","description":"Represent an upload URL request for a new artifact.\n\nTo request an upload URL for an artifact, the user needs to provide a checksum\nthat is unique to the project, a content type, and optionally, the number of chunks\nfor initiating a multipart upload.\n\nIn the case of a multipart upload, the user will receive as many upload URLs as\nspecified in the `chunk_number` field.\n\nIf `chunk_number` is less than `2`, a single upload URL will be generated without\nusing multipart."},"GenerateUploadUrlResponse":{"properties":{"checksum":{"type":"string","title":"Checksum"},"upload_url":{"type":"string","title":"Upload Url"},"upload_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upload Id"},"chunk_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chunk Id"}},"type":"object","required":["checksum","upload_url"],"title":"GenerateUploadUrlResponse","description":"Represent an upload URL to store an artifact in the object storage.\n\nIf the `upload_id` and `chunk_id` fields are Nonne, it's a stream upload URL.\nIf the `upload_id` and `chunk_id` fields are valued, it's a multipart upload URL."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InitiateDeviceAuthResponse":{"properties":{"authorization_url":{"type":"string","title":"Authorization Url"},"device_code":{"type":"string","title":"Device Code"},"user_code":{"type":"string","title":"User Code"}},"type":"object","required":["authorization_url","device_code","user_code"],"title":"InitiateDeviceAuthResponse","description":"Response with device authentication details."},"Invitation":{"properties":{"id":{"type":"integer","title":"Id"},"invitation_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Invitation Email"},"workspace_id":{"type":"integer","title":"Workspace Id"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"invited_by":{"type":"string","title":"Invited By"},"used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","workspace_id","role","invited_by","created_at","updated_at"],"title":"Invitation","description":"Represents a user invitation to join a Workspace."},"ListReportsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ReportSummary"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","title":"ListReportsResponse","description":"Paginated list of merged report summaries."},"ListWorkspaceResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Workspace"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"ListWorkspaceResponse","description":"List workspaces request."},"LoginResponse":{"properties":{"authorization_url":{"type":"string","title":"Authorization Url"}},"type":"object","required":["authorization_url"],"title":"LoginResponse","description":"Represents a response containing the authorization URL.\n\nAttributes\n----------\nauthorization_url : str\n The URL where the user should be redirected to complete the login."},"MainScopeBucket":{"type":"string","enum":["global","label","output","average"],"title":"MainScopeBucket","description":"Independent main-metric bucket for project goals."},"Permission":{"type":"string","enum":["create:project","read:project","update:project","delete:project","create:invitation","read:invitation","delete:invitation"],"title":"Permission","description":"A permission.\n\nThe actual ground-truth permissions are the ones stored in the\ndatabase; this type is used to avoid typos in permissions."},"PotentialGoalMetric":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","maxLength":64,"title":"Name"},"verbose_name":{"type":"string","maxLength":150,"title":"Verbose Name"},"greater_is_better":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Greater Is Better"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"output":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output"},"average":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Average"}},"type":"object","required":["id","name","verbose_name","greater_is_better"],"title":"PotentialGoalMetric","description":"A metric variant eligible as a project goal."},"Project":{"properties":{"id":{"type":"integer","title":"Id"},"public_id":{"type":"string","maxLength":64,"minLength":1,"title":"Public Id"},"name":{"type":"string","maxLength":150,"minLength":1,"title":"Name"},"workspace_id":{"type":"integer","title":"Workspace Id"},"creator_id":{"type":"string","title":"Creator Id"},"estimator_report_count":{"type":"integer","title":"Estimator Report Count"},"cross_validation_report_count":{"type":"integer","title":"Cross Validation Report Count"},"comparison_count":{"type":"integer","title":"Comparison Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","public_id","name","workspace_id","creator_id","estimator_report_count","cross_validation_report_count","comparison_count","created_at","updated_at"],"title":"Project","description":"Represents a Skore-hub Project.\n\nA Project is linked to a Workspace and a Owner.\nA Project is the\n\nAttributes\n----------\nid : ProjectId\n The unique project ID, for internal usage only.\npublic_id: ProjectPublicId\n The unique public project ID.\nname : str\n The project name. Not unique.\nworkspace_id : int\n The workspace ID, owner of the Project.\ncreator_id: str\n The user id whom created this project\nestimator_report_count: number\n The number of estimator reports in this project\ncross_validation_report_count: number\n The number of cross validation reports in this project\ncomparison_count: number\n The number of comparisons in this project"},"ProjectGoal":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"output":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Output"},"average":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Average"},"id":{"type":"integer","title":"Id"},"metric_type_id":{"type":"integer","title":"Metric Type Id"},"metric_name":{"type":"string","title":"Metric Name"},"metric_verbose_name":{"type":"string","title":"Metric Verbose Name"},"constraint_operator":{"$ref":"#/components/schemas/ComparisonOperator"},"constraint_threshold":{"type":"number","title":"Constraint Threshold"},"constraint_threshold_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Constraint Threshold Source"},"is_main":{"type":"boolean","title":"Is Main"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","metric_type_id","metric_name","metric_verbose_name","constraint_operator","constraint_threshold","is_main","created_at","updated_at"],"title":"ProjectGoal","description":"A metric constraint goal for a project."},"ProjectGoalMainScope":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"output":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Output"},"average":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Average"},"goal_id":{"type":"integer","title":"Goal Id"},"bucket":{"$ref":"#/components/schemas/MainScopeBucket"}},"type":"object","required":["goal_id","bucket"],"title":"ProjectGoalMainScope","description":"Independent main-metric pointer for a bucket."},"ProjectGoalMainScopeDimensions":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"output":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Output"},"average":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Average"},"bucket":{"anyOf":[{"$ref":"#/components/schemas/MainScopeBucket"},{"type":"null"}]}},"type":"object","title":"ProjectGoalMainScopeDimensions","description":"Dimensions identifying a main-metric bucket to set or clear.\n\n``bucket`` may be omitted; the server then derives it from the goal's own\nvariant (scalar → global, label → label, …). Providing a bucket that does\nnot match the goal is rejected."},"ProjectGoalMeetingReportsCount":{"properties":{"meeting_count":{"type":"integer","title":"Meeting Count"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["meeting_count","total_count"],"title":"ProjectGoalMeetingReportsCount","description":"Count of reports on a dataset that meet all goals."},"ProjectGoalsList":{"properties":{"goals":{"items":{"$ref":"#/components/schemas/ProjectGoal"},"type":"array","title":"Goals"},"main_scopes":{"items":{"$ref":"#/components/schemas/ProjectGoalMainScope"},"type":"array","title":"Main Scopes"}},"type":"object","required":["goals","main_scopes"],"title":"ProjectGoalsList","description":"Goals for a project plus independent main-scope pointers."},"RefreshTokenRequest":{"properties":{"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"success_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Uri"}},"type":"object","title":"RefreshTokenRequest","description":"Represents a request to refresh an access token.\n\nThe access token is refreshed using the refresh token provided during login.\nOnce a new access token is issued, the previous one becomes invalid immediately.\n\nAttributes\n----------\nrefresh_token : str\n The refresh token obtained from the most recent authorization code exchange\n with the IDP.\nsuccess_uri : str | None, optional\n The URI to redirect the user to after a successful token refresh."},"ReportEnvironment":{"properties":{"checksum":{"type":"string","maxLength":255,"title":"Checksum"},"python_version":{"type":"string","maxLength":16,"title":"Python Version"},"presigned_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Presigned Url"}},"type":"object","required":["checksum","python_version"],"title":"ReportEnvironment","description":"Python environment associated with a report.\n\nThe artifact is a ``requirements.txt`` lockfile capturing the packages\ninstalled when the report was created.\n\nAttributes\n----------\nchecksum : str\n The checksum of the ``requirements.txt`` lockfile.\npython_version : str\n The Python version of the environment used to create the report.\npresigned_url : str | None\n A presigned URL to download the artifact or ``None``."},"ReportGroup":{"properties":{"dataset":{"type":"string","title":"Dataset"},"dataset_verbose_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Verbose Name"},"reports":{"items":{"$ref":"#/components/schemas/ReportGroupEntry"},"type":"array","title":"Reports"}},"type":"object","required":["dataset","reports"],"title":"ReportGroup","description":"A group of reports.\n\nAttributes\n----------\ndataset : str\n The dataset fingerprint associated with the report group.\ndataset_verbose_name : str | None\n Human-readable dataset name when inferred; otherwise unset.\nreports : list[ReportGroupEntry]\n The list of report entries in the group."},"ReportGroupEntry":{"properties":{"report_id":{"type":"integer","title":"Report Id"},"report_key":{"type":"string","title":"Report Key"},"ml_task":{"type":"string","title":"Ml Task"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"}},"type":"object","required":["report_id","report_key","ml_task","estimator_class_name"],"title":"ReportGroupEntry","description":"An entry in a report group.\n\nAttributes\n----------\nreport_id : str\n The unique identifier of the report.\nreport_key : str\n The key of the report, provided by the user to identify the report.\nml_task : str\n The machine learning task associated with the report (e.g., \"classification\").\nestimator_class_name : str\n The class name of the estimator (e.g., \"RandomForestClassifier\")."},"ReportMedia":{"properties":{"checksum":{"type":"string","maxLength":255,"title":"Checksum"},"data_source":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Data Source"},"size_bytes":{"type":"integer","title":"Size Bytes"},"name":{"type":"string","title":"Name"},"verbose_name":{"type":"string","title":"Verbose Name"},"category":{"type":"string","title":"Category"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"content_type":{"type":"string","title":"Content Type"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters"},"presigned_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Presigned Url"}},"type":"object","required":["checksum","size_bytes","name","verbose_name","category","method","content_type"],"title":"ReportMedia","description":"Represent a media file associated with a report.\n\nAttributes\n----------\nchecksum : str\n The checksum of the media file for integrity verification.\ndata_source : str | None\n Optional source of the media data (e.g., \"validation\", \"test\").\nsize_bytes : SizeBytes\n The size of the media file in bytes.\nname : str\n The name of the media (e.g., \"confusion_matrix\").\nverbose_name : str\n The verbose name of the media type.\ncategory : str\n The category of the media type.\nmethod : str | None\n The method used to generate the media type.\ncontent_type : str\n The content type (MIME type) string.\nparameters : dict | None\n Optional parameters identifying the media type variant.\npresigned_url : str | None\n A presigned URL to download the artifact or `None`."},"ReportMetric":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","maxLength":64,"title":"Name"},"verbose_name":{"type":"string","maxLength":150,"title":"Verbose Name"},"greater_is_better":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Greater Is Better"},"data_source":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Data Source"},"value":{"type":"number","title":"Value"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"output":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output"},"average":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Average"}},"type":"object","required":["id","name","verbose_name","greater_is_better","value"],"title":"ReportMetric","description":"Represent a metric with a `float` value.\n\nAttributes\n----------\ndata_source : str | None\n Optional source of the metric data (e.g., \"validation\", \"test\").\nvalue : float\n The value of the metric.\nlabel : str | None\n Class label for per-class classification metrics. Always a string (or\n ``None``); boolean class labels are ``\\\"True\\\"`` / ``\\\"False\\\"``.\noutput : int | None\n Output index for multioutput regression metrics.\naverage : str | None\n Averaging mode for metrics aggregated across labels or outputs."},"ReportPickle":{"properties":{"checksum":{"type":"string","maxLength":255,"title":"Checksum"},"presigned_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Presigned Url"}},"type":"object","required":["checksum"],"title":"ReportPickle","description":"Represent the pickle associated with a report.\n\nAttributes\n----------\nchecksum : str\n The checksum of the pickle file.\npresigned_url : str | None\n A presigned URL to download the artifact or `None`."},"ReportSummary":{"properties":{"id":{"type":"integer","title":"Id"},"canonical_report_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"string","format":"uuid7"},{"type":"null"}],"title":"Canonical Report Id"},"key":{"type":"string","title":"Key"},"ml_task":{"type":"string","enum":["regression","multioutput-regression","binary-classification","multiclass-classification","multiclass-multioutput","multioutput-multiclass-classification","multioutput-binary-classification","unknown"],"title":"Ml Task"},"estimator_class_name":{"type":"string","title":"Estimator Class Name"},"dataset_fingerprint":{"type":"string","title":"Dataset Fingerprint"},"dataset_verbose_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Verbose Name"},"creator_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"metrics":{"items":{"$ref":"#/components/schemas/ReportMetric"},"type":"array","title":"Metrics"},"urn":{"type":"string","title":"Urn","description":"URN identifying the report (encodes estimator vs cross-validation).","readOnly":true},"type":{"type":"string","enum":["estimator","cross-validation"],"title":"Type","description":"Type of the report.","readOnly":true}},"type":"object","required":["id","canonical_report_id","key","ml_task","estimator_class_name","dataset_fingerprint","creator_id","created_at","updated_at","metrics","urn","type"],"title":"ReportSummary","description":"Lightweight summary of an estimator or cross-validation report."},"SetMemberRoleRequest":{"properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"type":"object","required":["role"],"title":"SetMemberRoleRequest","description":"Set a member's role; permissions are replaced from the static role map."},"SortOrder":{"type":"string","enum":["ASC","DESC"],"title":"SortOrder","description":"Sort order."},"SplitterInfo":{"properties":{"type":{"type":"string","title":"Type"},"n_splits":{"type":"integer","title":"N Splits"},"n_repeats":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Repeats"},"shuffle":{"type":"boolean","title":"Shuffle"},"random_state":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Random State"}},"type":"object","required":["type","n_splits","n_repeats","shuffle"],"title":"SplitterInfo","description":"Information about a splitter.\n\nAttributes\n----------\ntype : str\n The type of the splitter.\nn_splits : int\n The number of splits.\nn_repeats : int | None\n The number of repeats. None for no repeats.\nshuffle : bool\n Whether to shuffle the data.\nrandom_state : str | None\n Optional random state string (numeric seed or other serialized form)."},"SplittingStrategy":{"properties":{"splitter":{"$ref":"#/components/schemas/SplitterInfo"},"splits":{"items":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}]},"type":"array","title":"Splits"},"train_target_distributions":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Train Target Distributions"},"test_target_distributions":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Test Target Distributions"},"train_target_distributions_sample_counts":{"items":{"type":"integer"},"type":"array","title":"Train Target Distributions Sample Counts"},"test_target_distributions_sample_counts":{"items":{"type":"integer"},"type":"array","title":"Test Target Distributions Sample Counts"}},"type":"object","required":["splitter","splits","train_target_distributions","test_target_distributions","train_target_distributions_sample_counts","test_target_distributions_sample_counts"],"title":"SplittingStrategy","description":"Information about the splitting strategy used.\n\nAttributes\n----------\nsplitter: SplitterInfo\n Information about the splitter used.\nsplits: list[list[int] | None]\n The list of splits. Either every entry is ``None`` (assignments\n unavailable) or every entry is a list of int:\n - 0 if the sample is in the train set,\n - 1 if it is in the test set,\n - -1 if it is in neither set.\nsplits_train_target_distributions: list[list[float]]\n The list of train target distributions for each split.\nsplits_test_target_distributions: list[list[float]]\n The list of test target distributions for each split.\nsplits_train_target_distributions_sample_counts: list[int]\n The list of train target distributions sample counts for each split.\nsplits_test_target_distributions_sample_counts: list[int]\n The list of test target distributions sample counts for each split."},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"expires_in":{"type":"integer","title":"Expires In"},"id_token":{"type":"string","title":"Id Token"},"token_type":{"type":"string","title":"Token Type"},"scope":{"type":"string","title":"Scope"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}},"type":"object","required":["access_token","expires_in","id_token","token_type","scope"],"title":"Token","description":"Represents an access token and related details obtained during authentication.\n\nAttributes\n----------\naccess_token : str\n The token used to access protected resources.\nexpires_in : int\n The duration (in seconds) until the token expires.\nid_token : str\n The token containing identity claims for the authenticated user.\ntoken_type : str\n The type of token (e.g., \"Bearer\").\nscope : str\n The scope of permissions granted by the token.\nrefresh_token : str | None, optional\n The token used to obtain a new access token without re-authenticating.\nexpires_at: datetime | None, optional\n The access_token expiration timestamp."},"UpdateAPIKeyPayload":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"regenerate_api_key":{"type":"boolean","title":"Regenerate Api Key","default":false}},"type":"object","title":"UpdateAPIKeyPayload","description":"API key update payload."},"UpdateProjectGoalParameters":{"properties":{"constraint_operator":{"$ref":"#/components/schemas/ComparisonOperator"},"constraint_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Constraint Threshold"},"constraint_threshold_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Constraint Threshold Source"},"is_main":{"type":"boolean","title":"Is Main"},"main_scope":{"anyOf":[{"$ref":"#/components/schemas/ProjectGoalMainScopeDimensions"},{"type":"null"}]}},"type":"object","required":["constraint_operator","is_main"],"title":"UpdateProjectGoalParameters","description":"Parameters to update a project goal constraint."},"UpdateWorkspaceRequest":{"properties":{"public_id":{"type":"string","maxLength":64,"minLength":1,"title":"Public Id"}},"type":"object","required":["public_id"],"title":"UpdateWorkspaceRequest","description":"Workspace update request."},"UserAPIKey":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"string","title":"User Id"},"workspace_id":{"type":"integer","title":"Workspace Id"},"name":{"anyOf":[{"type":"string","maxLength":150},{"type":"null"}],"title":"Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["id","user_id","workspace_id","created_at","updated_at"],"title":"UserAPIKey","description":"User API key.\n\nAllows users to access the Skore Hub API without an IDP bearer token.\n\nThe API key itself (hashed version) is not accessible; users must copy\nand save it upon generation.\n\nIf the key is lost, the user must generate a new key hash."},"UserProfileDto":{"properties":{"id":{"type":"string","title":"Id"},"email_verified":{"type":"boolean","title":"Email Verified"},"can_use_managed_inference":{"type":"boolean","title":"Can Use Managed Inference"},"email":{"type":"string","maxLength":255,"format":"email","title":"Email"},"first_name":{"anyOf":[{"type":"string","maxLength":150},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":150},{"type":"null"}],"title":"Last Name"},"company":{"anyOf":[{"type":"string","maxLength":150},{"type":"null"}],"title":"Company"},"workspace_memberships":{"items":{"$ref":"#/components/schemas/WorkspaceMembershipInfo"},"type":"array","title":"Workspace Memberships"}},"type":"object","required":["id","email_verified","can_use_managed_inference","email","workspace_memberships"],"title":"UserProfileDto","description":"Public user profile: identity fields and per-workspace role and permissions."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"Workspace":{"properties":{"id":{"type":"integer","title":"Id"},"public_id":{"type":"string","maxLength":64,"minLength":1,"title":"Public Id"},"is_public":{"type":"boolean","title":"Is Public"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"members":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkspaceMember"},"type":"array"},{"type":"null"}],"title":"Members"}},"type":"object","required":["id","public_id","is_public","created_at","updated_at"],"title":"Workspace","description":"A workspace represents an isolated entity managing users, projects, and resources.\n\nA workspace can be a company, organization, or team that operates independently\nwithin the system.\n\nAttributes\n----------\n`id` (`int`): Internal unique identifier for the workspace.\n`public_id` (`str`): Publicly exposed unique identifier.\n`created_at` (`datetime`): Timestamp when the workspace was created.\n`updated_at` (`datetime`): Timestamp of the last update to the workspace.\n`deleted_at` (`datetime`): Timestamp when the workspace was deleted (if applicable)."},"WorkspaceInvitationLinkResponse":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"WorkspaceInvitationLinkResponse","description":"Shareable invitation URL (same acceptance path as email invitations)."},"WorkspaceMember":{"properties":{"workspace_id":{"type":"integer","title":"Workspace Id"},"user_id":{"type":"string","title":"User Id"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"invited_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited By"}},"type":"object","required":["workspace_id","user_id","role"],"title":"WorkspaceMember","description":"Workspace member."},"WorkspaceMembershipInfo":{"properties":{"workspace_id":{"type":"integer","title":"Workspace Id"},"public_id":{"type":"string","maxLength":64,"title":"Public Id"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"}},"type":"object","required":["workspace_id","public_id","role","permissions"],"title":"WorkspaceMembershipInfo","description":"One workspace membership with role and effective permission names."},"WorkspaceRole":{"type":"string","enum":["owner","contributor","reader"],"title":"WorkspaceRole","description":"Role of a user within a workspace."}}}}