{"openapi":"3.1.0","info":{"title":"Core API","version":"0.1.0"},"paths":{"/.well-known/oauth-protected-resource":{"get":{"summary":"Protected Resource Metadata","operationId":"protected_resource_metadata__well_known_oauth_protected_resource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Protected Resource Metadata  Well Known Oauth Protected Resource Get"}}}}}}},"/.well-known/oauth-protected-resource/mcp":{"get":{"summary":"Protected Resource Metadata For Mcp","operationId":"protected_resource_metadata_for_mcp__well_known_oauth_protected_resource_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Protected Resource Metadata For Mcp  Well Known Oauth Protected Resource Mcp Get"}}}}}}},"/users/authorize":{"post":{"tags":["users"],"summary":"Authorize","operationId":"authorize_users_authorize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/users/me/default-tenant":{"put":{"tags":["users"],"summary":"Set My Default Tenant","description":"Choose which tenant this user lands in at login (IBS-2469).\n\nDeliberately tenant-LESS auth: the caller is picking a tenant, so\nrequiring a session already scoped to one would make it impossible to set\na default from anywhere but the tenant you are in.","operationId":"set_my_default_tenant_users_me_default_tenant_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetDefaultTenantRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetDefaultTenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/users/me/tenants/leave-eligibility":{"get":{"tags":["users"],"summary":"Get My Leave Eligibility","description":"Whether the caller may leave each of their tenants; tenant-less auth like `leave_my_tenant`.","operationId":"get_my_leave_eligibility_users_me_tenants_leave_eligibility_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TenantLeaveEligibility"},"type":"array","title":"Response Get My Leave Eligibility Users Me Tenants Leave Eligibility Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/users/me/tenants/{tenant_id}":{"delete":{"tags":["users"],"summary":"Leave My Tenant","description":"Remove the caller from a tenant they belong to; tenant-less auth like `set_my_default_tenant`.","operationId":"leave_my_tenant_users_me_tenants__tenant_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaveTenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me/delete":{"post":{"tags":["users"],"summary":"Delete Me","description":"Erase the authenticated user (self): delete the Descope account and\noverwrite the PII on their row (IBS-2056).\n\nIdempotent — a repeat call for an account that is already erased succeeds\nand does nothing.","operationId":"delete_me_users_me_delete_post","responses":{"204":{"description":"Successful Response"}},"security":[{"HTTPBearer":[]}]}},"/users/{user}":{"get":{"tags":["users"],"summary":"Get User","operationId":"get_user_users__user__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user","in":"path","required":true,"schema":{"anyOf":[{"const":"me","type":"string"},{"type":"string","format":"uuid"}],"title":"User"}},{"name":"flags_for","in":"query","required":false,"schema":{"anyOf":[{"enum":["mine","target"],"type":"string"},{"type":"null"}],"title":"Flags For"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me":{"patch":{"tags":["users"],"summary":"Update Me","operationId":"update_me_users_me_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialUpdateUser"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{user_id}":{"patch":{"tags":["users"],"summary":"Update User","operationId":"update_user_users__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialUpdateUser"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/invite":{"post":{"tags":["users"],"summary":"Invite User","description":"Invite a user to join the current tenant with the given role (admin-only).\nSends via Descope or records our own invitation (IBS-2466), depending on\nOWN_INVITATIONS_ENABLED — see `invitations_service._invite_to_org`.","operationId":"invite_user_users_invite_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenants/members/invitations":{"delete":{"tags":["tenants"],"summary":"Revoke Invitation","operationId":"revoke_invitation_tenants_members_invitations_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberEmailRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenants/members":{"delete":{"tags":["tenants"],"summary":"Remove Member","operationId":"remove_member_tenants_members_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberEmailRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["tenants"],"summary":"Get Members","operationId":"get_members_tenants_members_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Page"}},{"name":"phrase","in":"query","required":false,"schema":{"type":"string","default":"","title":"Phrase"}},{"name":"statuses","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/InvitationStatus"}},{"type":"null"}],"title":"Statuses"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TenantMember"},"title":"Response Get Members Tenants Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenants/members/role":{"patch":{"tags":["tenants"],"summary":"Change Member Role","description":"Change a member's tenant role (admin-only).\n\nBlocks demoting the tenant's last admin to member (409), and blocks\nself-demotion (403): the caller's JWT still carries the old role until it\nrefreshes, so demoting yourself is pointless and only causes confusion.","operationId":"change_member_role_tenants_members_role_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeMemberRoleRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/invitations/{code}/redeem":{"post":{"tags":["invitations"],"summary":"Redeem Invitation","description":"Accept an invitation as the authenticated caller (IBS-2467).\n\n`AuthorizedDescopeUserDep` rather than a tenant-scoped dependency: an\ninvitee authenticates before they belong to anything, so requiring a tenant\nclaim here would make the endpoint unreachable for exactly the case it\nexists to serve.\n\nRefusals carry a machine-readable `code` (see `RedeemFailureCode`) so the\nUI can name both addresses on a mismatch instead of a bare 403.","operationId":"redeem_invitation_invitations__code__redeem_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemInvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sso/tenant-by-subdomain/{subdomain}":{"get":{"tags":["sso"],"summary":"Get Tenant By Subdomain","operationId":"get_tenant_by_subdomain_sso_tenant_by_subdomain__subdomain__get","parameters":[{"name":"subdomain","in":"path","required":true,"schema":{"type":"string","title":"Subdomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantBySubdomain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/connection_token":{"post":{"tags":["grids"],"summary":"Get Grid Connection Token","operationId":"get_grid_connection_token_grids_connection_token_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridConnectionTokenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridConnectionToken"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/agent_install_config":{"get":{"tags":["grids"],"summary":"Get Agent Install Config","description":"Installer download URL + default data dir for building a Linux Helper\nAgent install command (IBS-1457). Global, version-pinned config.","operationId":"get_agent_install_config_grids_agent_install_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstallConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/install_script":{"get":{"tags":["grids"],"summary":"Get Grid Install Script","description":"Return a ready-to-run Linux install script for the given grid.\n\nThe script embeds a fresh connection (broker) token for the grid, downloads\nthe Incredibuild for Linux installer, makes it executable, and installs it\nconnected to SaaS. The data directory defaults to a configured path and can\nbe overridden by passing an argument to the script.","operationId":"get_grid_install_script_grids__grid_id__install_script_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{public_id}":{"get":{"tags":["grids"],"summary":"Get Grid","operationId":"get_grid_grids__public_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["grids"],"summary":"Update Grid Settings","operationId":"update_grid_settings_grids__public_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGridSettings"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["grids"],"summary":"Delete Grid","operationId":"delete_grid_grids__public_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/":{"get":{"tags":["grids"],"summary":"Get Grids","operationId":"get_grids_grids__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GridResponse"},"title":"Response Get Grids Grids  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{public_id}/metrics":{"get":{"tags":["grids"],"summary":"Get Grid Metrics","description":"Get metrics for a self-hosted grid (agents, cache clusters, recent builds).","operationId":"get_grid_metrics_grids__public_id__metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/search":{"post":{"tags":["grids"],"summary":"Search Grids","operationId":"search_grids_grids_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridFilter"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GridResponse"},"title":"Response Search Grids Grids Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/agents":{"get":{"tags":["grids"],"summary":"Get Grid Agents","operationId":"get_grid_agents_grids__grid_id__agents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Search"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AgentStatus"}},{"type":"null"}],"title":"Status"}},{"name":"hide_offline","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Hide Offline"}},{"name":"builds_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Builds From"}},{"name":"builds_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Builds To"}},{"name":"sort_by","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AgentSortBy","default":"created_at"}},{"name":"sort_dir","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SortDirection","default":"desc"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_AgentResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/pending-changes":{"post":{"tags":["grids"],"summary":"Create Grid Pending Change","description":"Create a grid-level pending change (CreateBuildGroup, EditBuildGroup, or DeleteBuildGroup).","operationId":"create_grid_pending_change_grids__grid_id__pending_changes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateBuildGroupPendingChangeRequest"},{"$ref":"#/components/schemas/EditBuildGroupPendingChangeRequest"},{"$ref":"#/components/schemas/DeleteBuildGroupPendingChangeRequest"},{"$ref":"#/components/schemas/UpdateGridSettingsPendingChangeRequest"}],"discriminator":{"propertyName":"action","mapping":{"CreateBuildGroup":"#/components/schemas/CreateBuildGroupPendingChangeRequest","EditBuildGroup":"#/components/schemas/EditBuildGroupPendingChangeRequest","DeleteBuildGroup":"#/components/schemas/DeleteBuildGroupPendingChangeRequest","UpdateGridSettings":"#/components/schemas/UpdateGridSettingsPendingChangeRequest"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/version-update":{"post":{"tags":["grids"],"summary":"Trigger Manager Version Update","description":"Trigger a remote manager version-update for a Windows grid (admin-only,\nbehind ica-manager-version-update-v1). Dispatches\nmanager_version_update_async to the grid's manager using ONLY the release\ncatalog's silent-installer fields -- an unattended remote install must\nnever run the interactive/GUI installer. Writes\npending_changes.actions.VersionUpdate in the same transaction as the\nbroker command; cleared only once the manager reports the command\nCOMPLETED (verify_version restart_mode), or marked\n{\"status\": \"failed\"} on FAILED/timeout (see\ndb_model.grids.broker_queries._on_manager_version_update_async_failed).","operationId":"trigger_manager_version_update_grids__grid_id__version_update_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerVersionUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerVersionUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/agents/{agent_id}/pending-changes":{"post":{"tags":["grids"],"summary":"Create Agent Pending Change","description":"Set a pending change on an agent (AssignBuildGroup, SetHostComment, SetAgentLicense).","operationId":"create_agent_pending_change_grids__grid_id__agents__agent_id__pending_changes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AgentPendingChangeRequest"},{"$ref":"#/components/schemas/SetHostCommentPendingChangeRequest"},{"$ref":"#/components/schemas/SetAgentLicensePendingChangeRequest"},{"$ref":"#/components/schemas/SetLogLevelPendingChangeRequest"},{"$ref":"#/components/schemas/SetBuildPriorityPendingChangeRequest"},{"$ref":"#/components/schemas/SetBuildCachePendingChangeRequest"}],"discriminator":{"propertyName":"action","mapping":{"AssignBuildGroup":"#/components/schemas/AgentPendingChangeRequest","SetHostComment":"#/components/schemas/SetHostCommentPendingChangeRequest","SetAgentLicense":"#/components/schemas/SetAgentLicensePendingChangeRequest","SetLogLevel":"#/components/schemas/SetLogLevelPendingChangeRequest","SetBuildPriority":"#/components/schemas/SetBuildPriorityPendingChangeRequest","SetBuildCache":"#/components/schemas/SetBuildCachePendingChangeRequest"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/agents/pending-changes/bulk":{"post":{"tags":["grids"],"summary":"Create Bulk Agent Pending Change","description":"Create a single bulk broker command for N agents atomically.","operationId":"create_bulk_agent_pending_change_grids__grid_id__agents_pending_changes_bulk_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAgentPendingChangeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrokerCommandV2Response"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/cache-clusters":{"get":{"tags":["grids"],"summary":"Get Cache Clusters For Grid","description":"Get all cache clusters for a specific grid with pagination","operationId":"get_cache_clusters_for_grid_grids__grid_id__cache_clusters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Page Size"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_CacheClusterResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/build-cache":{"get":{"tags":["grids"],"summary":"Get Build Cache","description":"Clusters, nodes and Local endpoints with metrics, statuses and pending state.","operationId":"get_build_cache_grids__grid_id__build_cache_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildCacheResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/build-cache/candidates":{"get":{"tags":["grids"],"summary":"Get Build Cache Candidates","description":"Nodes a cluster may take (assigned first, then by name); omit cluster_id for a new cluster.","operationId":"get_build_cache_candidates_grids__grid_id__build_cache_candidates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"cluster_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cluster Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_BuildCacheCandidateResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/build-cache/clusters/pending-changes":{"post":{"tags":["grids"],"summary":"Create Build Cache Cluster Pending Change","description":"Create, edit, delete a cluster, or move or remove one of its nodes.","operationId":"create_build_cache_cluster_pending_change_grids__grid_id__build_cache_clusters_pending_changes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateClusterRequest"},{"$ref":"#/components/schemas/EditClusterRequest"},{"$ref":"#/components/schemas/DeleteClusterRequest"},{"$ref":"#/components/schemas/MoveNodeRequest"},{"$ref":"#/components/schemas/RemoveNodeRequest"}],"discriminator":{"propertyName":"action","mapping":{"CreateCluster":"#/components/schemas/CreateClusterRequest","EditCluster":"#/components/schemas/EditClusterRequest","DeleteCluster":"#/components/schemas/DeleteClusterRequest","MoveNode":"#/components/schemas/MoveNodeRequest","RemoveNode":"#/components/schemas/RemoveNodeRequest"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildCacheWriteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/build-cache/endpoints/pending-changes":{"post":{"tags":["grids"],"summary":"Create Build Cache Endpoint Pending Change","description":"Save one endpoint's settings, or run an action on an endpoint or on a cluster's nodes.","operationId":"create_build_cache_endpoint_pending_change_grids__grid_id__build_cache_endpoints_pending_changes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SaveEndpointSettingsRequest"},{"$ref":"#/components/schemas/EndpointActionRequest"},{"$ref":"#/components/schemas/ClusterActionRequest"}],"discriminator":{"propertyName":"action","mapping":{"SaveSettings":"#/components/schemas/SaveEndpointSettingsRequest","EndpointAction":"#/components/schemas/EndpointActionRequest","ClusterAction":"#/components/schemas/ClusterActionRequest"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildCacheWriteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/license":{"get":{"tags":["grids"],"summary":"Get License For Grid","description":"Get the license for a specific grid (1:1 relationship)","operationId":"get_license_for_grid_grids__grid_id__license_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/onboard_agent":{"post":{"tags":["grids"],"summary":"Onboard Agent","description":"Onboard a new agent using a registration token.\nThis endpoint is unauthenticated - it uses the registration token for auth.","operationId":"onboard_agent_grids_onboard_agent_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardGridResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/grids/request_trial_license":{"post":{"tags":["grids"],"summary":"Request Trial License","description":"Request a Linux self-hosted free-trial license for the calling grid's tenant\n(broker-authenticated).\n\nThe ib-manager sends the device key the coordinator generated; we run it\nthrough ibLicenseGenerator and return the signed `.ib_lic` file, which the\nmanager then activates. Idempotent and capped at one trial per tenant: an\nexisting Linux trial is returned as-is; a new one is not minted.","operationId":"request_trial_license_grids_request_trial_license_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerTrialLicenseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerTrialLicenseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/exchange_access_key":{"post":{"tags":["grids"],"summary":"Exchange Access Key","description":"Exchange an access key for a short-lived session token.\nThis endpoint is unauthenticated - it uses the access key for auth.","operationId":"exchange_access_key_grids_exchange_access_key_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeAccessKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeAccessKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/builds/{build_id}":{"get":{"tags":["grids"],"summary":"Get Build","description":"Get a specific build by ID","operationId":"get_build_grids_builds__build_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/build_groups":{"get":{"tags":["grids"],"summary":"Get Build Groups For Grid","description":"Get all build groups for a specific grid.","operationId":"get_build_groups_for_grid_grids__grid_id__build_groups_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BuildGroupResponse"},"title":"Response Get Build Groups For Grid Grids  Grid Id  Build Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/settings":{"get":{"tags":["grids"],"summary":"Get Settings","description":"Get the settings for a specific grid (1:1 relationship)","operationId":"get_settings_grids__grid_id__settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/data-sharing":{"get":{"tags":["grids"],"summary":"Get Data Sharing Settings","description":"Data-sharing level, both flags, and whether the grid's Manager enforces them.","operationId":"get_data_sharing_settings_grids__grid_id__data_sharing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSharingSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["grids"],"summary":"Update Data Sharing Settings","description":"Partial update of level/remote_update_enabled/debug_build_monitor_enabled. Tenant Admin only.","operationId":"update_data_sharing_settings_grids__grid_id__data_sharing_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSharingSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSharingSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/data-sharing-policy":{"get":{"tags":["grids"],"summary":"Get Data Sharing Policy","description":"The grid's own policy document, fetched when the poll's version header shows a stale copy.","operationId":"get_data_sharing_policy_grids__grid_id__data_sharing_policy_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSharingPolicyDocument"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/broker/commands":{"get":{"tags":["grids"],"summary":"Get Broker Commands V2","operationId":"get_broker_commands_v2_grids__grid_id__broker_commands_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrokerCommandV2Response"},"title":"Response Get Broker Commands V2 Grids  Grid Id  Broker Commands Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/broker/commands/{command_id}":{"patch":{"tags":["grids"],"summary":"Update Broker Command V2","operationId":"update_broker_command_v2_grids__grid_id__broker_commands__command_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrokerCommandV2Update"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrokerCommandV2Response"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/broker/commands/failed":{"get":{"tags":["grids"],"summary":"Get Failed Broker Commands For Tenant","operationId":"get_failed_broker_commands_for_tenant_grids__grid_id__broker_commands_failed_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrokerCommandV2Response"},"title":"Response Get Failed Broker Commands For Tenant Grids  Grid Id  Broker Commands Failed Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/broker/commands/{command_id}/dismiss":{"post":{"tags":["grids"],"summary":"Dismiss Broker Command","operationId":"dismiss_broker_command_grids__grid_id__broker_commands__command_id__dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrokerCommandV2Response"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/broker/commands/dismiss-batch":{"post":{"tags":["grids"],"summary":"Dismiss Broker Commands Batch","operationId":"dismiss_broker_commands_batch_grids__grid_id__broker_commands_dismiss_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrokerCommandDismissBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrokerCommandV2Response"},"title":"Response Dismiss Broker Commands Batch Grids  Grid Id  Broker Commands Dismiss Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grids/{grid_id}/vnext-data-pipeline-presigned-url":{"get":{"tags":["grids"],"summary":"Get Vnext Data Pipeline Presigned Url","description":"Get a presigned S3 POST policy for uploading files for a specific grid.\n\n`destination` is a closed enum, not a free string — see\nVNextDataPipelineDestination for why.\n\nThe `fields` model uses hyphenated AWS aliases (e.g. x-amz-security-token)\nvia Pydantic Field(alias=...). Response serialization relies on FastAPI's\ndefault response_model_by_alias=True so the client receives the exact\nkeys S3 expects in the POST form — do not flip that flag here.","operationId":"get_vnext_data_pipeline_presigned_url_grids__grid_id__vnext_data_pipeline_presigned_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grid Id"}},{"name":"destination","in":"query","required":true,"schema":{"$ref":"#/components/schemas/VNextDataPipelineDestination"}},{"name":"file_prefix","in":"query","required":true,"schema":{"type":"string","title":"File Prefix"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VNextDataPipelinePresignedUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/{build_id}/data":{"get":{"tags":["builds"],"summary":"Get Build Monitor Data","operationId":"get_build_monitor_data_builds__build_id__data_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildMonitorData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/{build_id}/tasks":{"get":{"tags":["builds"],"summary":"Get Build Monitor Tasks","operationId":"get_build_monitor_tasks_builds__build_id__tasks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":5000,"title":"Page Size"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_BuildMonitorTaskItem__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/{build_id}/build-monitor-file/availability":{"get":{"tags":["builds"],"summary":"Get Build Monitor File Availability","description":"Whether the download can be offered for this build, and if not, why.\n\nLets the UI explain itself before the user clicks instead of after a round\ntrip to a machine that was never going to answer.","operationId":"get_build_monitor_file_availability_builds__build_id__build_monitor_file_availability_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildMonitorFileAvailability"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/{build_id}/build-monitor-file":{"post":{"tags":["builds"],"summary":"Request Build Monitor File","description":"Ask the machine that ran this build to upload its Build Monitor report.\n\n202, not 201: the upload happens on a customer's machine and has not\nhappened yet. Poll the returned command id.","operationId":"request_build_monitor_file_builds__build_id__build_monitor_file_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildMonitorFileRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/{build_id}/build-monitor-file/{command_id}":{"get":{"tags":["builds"],"summary":"Get Build Monitor File Status","description":"Where the request got to, plus a short-lived download URL once the\nreport has actually been uploaded.","operationId":"get_build_monitor_file_status_builds__build_id__build_monitor_file__command_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildMonitorFileStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/search":{"post":{"tags":["builds"],"summary":"Search Builds","description":"Get all builds for a tenant with pagination","operationId":"search_builds_builds_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Page Size"}},{"name":"sort_by","in":"query","required":false,"schema":{"$ref":"#/components/schemas/BuildSortBy","default":"start_time"}},{"name":"sort_dir","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SortDirection","default":"desc"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchBuildsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_BuildResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/search/count":{"post":{"tags":["builds"],"summary":"Count Search Builds","description":"Total matches for a build search, without the rows.\n\nSame filters and the same total as POST /builds/search, for callers that\nonly need the number: fetching a large page purely to count it client\nside moves hundreds of serialized builds over the wire to answer a\nquestion the database already answered.","operationId":"count_search_builds_builds_search_count_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchBuildsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchBuildsCountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/export":{"post":{"tags":["builds"],"summary":"Export Builds","description":"Filtered builds export (IBS-1595): mirrors /builds/search's filters, sort and order; 422 above EXPORT_MAX_FILTERED_BUILDS; support-actor only.","operationId":"export_builds_builds_export_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"$ref":"#/components/schemas/BuildSortBy","default":"start_time"}},{"name":"sort_dir","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SortDirection","default":"desc"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchBuildsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/{build_id}/export":{"get":{"tags":["builds"],"summary":"Export Build Full Data","description":"Per-build full data export (IBS-1595): streamed zip (Build/Environment/Tasks/Machines/Errors_and_warnings + README); 404/503/429 as appropriate; support-actor only.","operationId":"export_build_full_data_builds__build_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/status_over_time":{"post":{"tags":["builds"],"summary":"Get Builds Status Over Time","description":"Get builds aggregated by status over time.\n\nReturns build counts grouped by status and time period. Resolution (hour/day/week)\nis auto-calculated based on date range: <2 days = hour, 2-60 days = day, >60 days = week.","operationId":"get_builds_status_over_time_builds_status_over_time_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchBuildsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildStatusOverTime"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/duration_over_time":{"post":{"tags":["builds"],"summary":"Get Builds Duration Over Time","description":"Get average build duration aggregated over time.\n\nAccepts: start_date, end_date, grid_id filters only.\nResolution (hour/day/week) is auto-calculated based on date range:\n<2 days = hour, 2-60 days = day, >60 days = week.","operationId":"get_builds_duration_over_time_builds_duration_over_time_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildDurationOverTime"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/duration_percentiles_over_time":{"post":{"tags":["builds"],"summary":"Get Builds Duration Percentiles Over Time","description":"Get p50/p95 build duration aggregated over time, plus the discrete\nperiod-level p50/p95 over the entire filtered range.\n\nAccepts: start_date, end_date, grid_id, build_group_id filters.\nResolution (hour/day/week) is auto-calculated based on date range:\n<2 days = hour, 2-60 days = day, >60 days = week. Per-bucket p50/p95 are\nnull (not 0) for buckets with no completed builds/workflows. `period` is\ncomputed independently over the whole range, not derived from the buckets.","operationId":"get_builds_duration_percentiles_over_time_builds_duration_percentiles_over_time_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildDurationPercentilesOverTime"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/failure_trend":{"post":{"tags":["builds"],"summary":"Get Build Failure Trend","description":"Get failed build percentage and counts over time.\n\nAccepts: start_date, end_date, grid_id filters only.\nReturns per-period failed and total counts plus the failure rate.\nResolution (hour/day/week) is auto-calculated based on date range.","operationId":"get_build_failure_trend_builds_failure_trend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildFailureTrend"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/total_compute_time":{"post":{"tags":["builds"],"summary":"Get Total Compute Time","description":"Get the total cache time saved across all builds matching the filters.\n\nAccepts: start_date, end_date, grid_id filters only.\nReturns the sum of all cache_time_saved values and the count of builds included.","operationId":"get_total_compute_time_builds_total_compute_time_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CacheTimeSavedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/cache_hit_rate_over_time":{"post":{"tags":["builds"],"summary":"Get Builds Cache Hit Rate Over Time","description":"Get cache hit/miss rate aggregated over time.\n\nAccepts: start_date, end_date, grid_id filters only.\nReturns per-period cache hit and miss counts plus hit/miss rates.\nRates are calculated based on total cache attempts (hits + misses).\nResolution (hour/day/week) is auto-calculated based on date range.","operationId":"get_builds_cache_hit_rate_over_time_builds_cache_hit_rate_over_time_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CacheHitRateOverTime"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/longest_tasks":{"post":{"tags":["builds"],"summary":"Get Longest Tasks","description":"Get top 10 longest build tasks ordered by duration (descending).\n\nReturns the longest-running tasks across all builds matching the filters.\nAccepts: start_date, end_date, grid_id filters only.","operationId":"get_longest_tasks_builds_longest_tasks_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LongestTasksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/longest_builds":{"post":{"tags":["builds"],"summary":"Get Longest Builds","description":"Get top 10 longest builds ordered by duration (descending).\n\nReturns the longest-running builds matching the filters, including initiator information.\nAccepts: start_date, end_date, grid_id filters only.","operationId":"get_longest_builds_builds_longest_builds_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LongestBuildsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/slowest_workloads":{"post":{"tags":["builds"],"summary":"Get Slowest Workloads","description":"Get the top 10 longest-running individual workload runs ordered by\nduration (descending), unioned across builds (self-hosted) and workflow\nspans (hosted CI).\n\nAccepts: start_date, end_date, grid_id filters only.","operationId":"get_slowest_workloads_builds_slowest_workloads_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlowestWorkloadsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/most_failing_workloads":{"post":{"tags":["builds"],"summary":"Get Most Failing Workloads","description":"Get the top failing workloads (grouped by build title / span name)\nordered by failed_count (descending).\n\nAccepts: start_date, end_date, grid_id filters only. See\nbuilds_analytics_service.get_most_failing_workloads for the union/dedupe\nbehavior.","operationId":"get_most_failing_workloads_builds_most_failing_workloads_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFilters"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MostFailingWorkloadsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/insights/":{"get":{"tags":["insights"],"summary":"Get Insights","operationId":"get_insights_insights__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsightsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/usage":{"get":{"tags":["hosted_grids"],"summary":"Get Ci Runner Usage","description":"The tenant's CI runner minutes for a month, per runner, with the cap; read-only.","operationId":"get_ci_runner_usage_hosted_grids_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^20\\d{2}-(0[1-9]|1[0-2])$"},{"type":"null"}],"description":"UTC month, YYYY-MM.","title":"Month"},"description":"UTC month, YYYY-MM."},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantCIRunnerUsage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/usage/export":{"get":{"tags":["hosted_grids"],"summary":"Export Ci Runner Usage","operationId":"export_ci_runner_usage_hosted_grids_usage_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^20\\d{2}-(0[1-9]|1[0-2])$"},{"type":"null"}],"description":"UTC month, YYYY-MM.","title":"Month"},"description":"UTC month, YYYY-MM."},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/{hosted_grid_id}/usage":{"get":{"tags":["hosted_grids"],"summary":"Get Ci Runner Usage Detail","operationId":"get_ci_runner_usage_detail_hosted_grids__hosted_grid_id__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hosted_grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hosted Grid Id"}},{"name":"period","in":"query","required":false,"schema":{"enum":["daily","weekly","monthly","overall"],"type":"string","default":"daily","title":"Period"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CIRunnerUsageDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/{hosted_grid_id}/usage/jobs":{"get":{"tags":["hosted_grids"],"summary":"List Ci Runner Jobs","operationId":"list_ci_runner_jobs_hosted_grids__hosted_grid_id__usage_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hosted_grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hosted Grid Id"}},{"name":"period","in":"query","required":false,"schema":{"enum":["daily","weekly","monthly","overall"],"type":"string","default":"daily","title":"Period"}},{"name":"bucket_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Bucket Start"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_CIRunnerJob__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/{hosted_grid_id}/usage/jobs/export":{"get":{"tags":["hosted_grids"],"summary":"Export Ci Runner Jobs","operationId":"export_ci_runner_jobs_hosted_grids__hosted_grid_id__usage_jobs_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hosted_grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hosted Grid Id"}},{"name":"period","in":"query","required":false,"schema":{"enum":["daily","weekly","monthly","overall"],"type":"string","default":"daily","title":"Period"}},{"name":"bucket_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Bucket Start"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/":{"post":{"tags":["hosted_grids"],"summary":"Create Hosted Grid","description":"Create a new hosted grid","operationId":"create_hosted_grid_hosted_grids__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedGridCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedGridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["hosted_grids"],"summary":"Get Hosted Grids","description":"Get all hosted grids for the tenant, optionally filtered by query parameters","operationId":"get_hosted_grids_hosted_grids__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Page Size"}},{"name":"project_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Key"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_HostedGridResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/{hosted_grid_id}":{"get":{"tags":["hosted_grids"],"summary":"Get Hosted Grid","description":"Get a specific hosted grid by ID","operationId":"get_hosted_grid_hosted_grids__hosted_grid_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hosted_grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hosted Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedGridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["hosted_grids"],"summary":"Update Hosted Grid","description":"Update a hosted grid","operationId":"update_hosted_grid_hosted_grids__hosted_grid_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hosted_grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hosted Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedGridUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedGridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["hosted_grids"],"summary":"Delete Hosted Grid","description":"Delete a specific hosted grid by ID","operationId":"delete_hosted_grid_hosted_grids__hosted_grid_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hosted_grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hosted Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hosted_grids/{hosted_grid_id}/metrics":{"get":{"tags":["hosted_grids"],"summary":"Get Hosted Grid Metrics","description":"Get metrics for a hosted grid.\n\nReturns build count and average duration based on root spans (builds)\nfrom the last 7 days.","operationId":"get_hosted_grid_metrics_hosted_grids__hosted_grid_id__metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hosted_grid_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hosted Grid Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedGridMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/build_groups/":{"get":{"tags":["build_groups"],"summary":"Get Build Groups","description":"Get all build groups for the authorized tenant.","operationId":"get_build_groups_build_groups__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BuildGroupResponse"},"title":"Response Get Build Groups Build Groups  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/":{"get":{"tags":["licenses"],"summary":"List Tenant Licenses","description":"List all licenses for the authenticated tenant; expired ones are included only when ica-self-payments-v1 is on.","operationId":"list_tenant_licenses_licenses__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TenantLicenseWithGridResponse"},"title":"Response List Tenant Licenses Licenses  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/{license_public_id}/deactivate":{"post":{"tags":["licenses"],"summary":"Deactivate License","description":"Deactivate a license (admin-only). Disables it in LicenseSpring and soft-deletes locally.","operationId":"deactivate_license_licenses__license_public_id__deactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/{license_public_id}/activate-offline":{"post":{"tags":["licenses"],"summary":"Activate Offline License","description":"Offline license activation (admin-only).\n\nAccepts a base64-encoded .req file in a JSON body (IBS-1694 — not a multipart\nupload, which some customer networks block), validates its HMAC signature,\nforwards to LicenseSpring, and returns the .lic file as a binary download.","operationId":"activate_offline_license_licenses__license_public_id__activate_offline_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfflineActivationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/{license_public_id}/assign-grid":{"post":{"tags":["licenses"],"summary":"Assign License To Grid","description":"Assign an unattached license to a grid (admin-only). Assign-only --\na license already attached elsewhere is rejected, never reassigned;\ncalling this again with the grid it already holds is a no-op.","operationId":"assign_license_to_grid_licenses__license_public_id__assign_grid_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignGridRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/{license_public_id}/detach-grid":{"post":{"tags":["licenses"],"summary":"Detach License From Grid","description":"Detach a license from its grid (admin-only). Idempotent: a license with\nno grid attached is a no-op. Does not dispatch any refresh -- see the\nservice function's docstring for the entitlement-convergence consequence.","operationId":"detach_license_from_grid_licenses__license_public_id__detach_grid_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/{license_public_id}/reset":{"post":{"tags":["licenses"],"summary":"Reset License","description":"Reset an Online, grid-attached license (admin-only, behind\nica-self-payments-v1 OR ica-self-payments-v2). Dispatches\nlicense_action_deactivate_async to the grid's coordinator -- a separate,\nnew trigger for this pre-existing broker command, not a change to the\nexisting detach-grid action above. grid_id is only cleared once the\nmanager reports the command COMPLETED; the returned\npending_changes.actions.ResetLicense entry is how the client tracks that\nin-flight state until then.\n\nInline flag gate (not `Depends(require_feature_enabled(...))`, which only\nsupports a single flag): expresses the v1-OR-v2 condition via\n`_self_payments_enabled`, mirroring cancel-subscription's own inline\n`_self_payments_enabled` + raise_404_if_disabled shape below.","operationId":"reset_license_licenses__license_public_id__reset_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLicenseWithGridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/{license_public_id}/cancel-subscription":{"post":{"tags":["licenses"],"summary":"Cancel Subscription","description":"Cancel a license's Paddle subscription, effective at the next billing\nperiod (admin-only, behind ica-self-payments-v1 OR ica-self-payments-v2 --\nreused, not a new flag; see the design doc's \"Cancel endpoint\" flag note,\nD-2121-COORD-14/D-2121-29, for why: production has no real subscriptions\nyet, and the render condition on `paddle_subscription` means the button\ncan't appear for anyone until a real subscription exists regardless of the\nflag, so a dedicated flag was buying no safety at the cost of a third flag\nin an epic already carrying flag-removal debt). 404s when the license has\nno Paddle subscription at all (nothing to cancel), never 403 on a\ncross-tenant license id.\n\nInline flag gate (not `Depends(require_feature_enabled(...))`, unlike\nreset/assign-grid above): the admin check above must be independently\nvisible at the route, not inferred from the flag helper also happening to\nrequire it (D-2121-USER-5) -- mirrors billing/router.py's inline\nresolve_flag + raise_404_if_disabled shape (`_self_payments_enabled` uses\n`get_all_flags` directly to check both flags in one PostHog round-trip),\npaired here with the explicit admin dependency.","operationId":"cancel_subscription_licenses__license_public_id__cancel_subscription_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLicenseWithGridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/{license_public_id}/update-payment-transaction":{"post":{"tags":["licenses"],"summary":"Update Payment Transaction","description":"Fetch a Paddle transaction id for updating a `past_due` license's\npayment method (admin-only, behind ica-self-payments-v1 OR\nica-self-payments-v2 -- same gate as cancel-subscription/reset above,\nIBS-2407). 404s when the license has no Paddle subscription at all, and\n404s (no distinct error type) when the subscription isn't `past_due` --\nthis endpoint has no reason to exist for any other state.\n\nInline flag gate (not `Depends(require_feature_enabled(...))`), mirroring\ncancel_subscription's own inline `_self_payments_enabled` +\nraise_404_if_disabled shape above (same reasoning, D-2121-USER-5).","operationId":"update_payment_transaction_licenses__license_public_id__update_payment_transaction_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePaymentTransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/trial":{"post":{"tags":["licenses"],"summary":"Create Trial License","description":"Create (or reissue) the tenant's trial license.\n\n`mark_download_started` marks the WINDOWS trial as downloaded. It defaults to\nTrue (the Windows download flow), but the Linux flow calls this only to\nobtain `linux_grid_id` and must pass False — otherwise fetching the trial for\na Linux download would wrongly flip Windows to \"downloaded\" (IBS-1483). The\nLinux download itself is marked when its install script is fetched.","operationId":"create_trial_license_licenses_trial_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mark_download_started","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Mark Download Started"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialLicenseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses/trial/status":{"get":{"tags":["licenses"],"summary":"Get Trial Status","description":"Read-only trial download state for the getting-started screen. Mints and\nmarks nothing (unlike POST /trial), so it is safe to call on page load to\nrestore the per-platform \"Download again\" state (IBS-1479).","operationId":"get_trial_status_licenses_trial_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialLicenseStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/runner_instances/admin":{"get":{"tags":["runner_instances"],"summary":"Get Runner Instances Admin","operationId":"get_runner_instances_admin_runner_instances_admin_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/RunnerInstanceStatus"},{"type":"null"}],"title":"Status"}},{"name":"repo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo"}},{"name":"instance_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance Id"}},{"name":"workflow_run_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Id"}},{"name":"github_job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github Job Id"}},{"name":"older_than_seconds","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Older Than Seconds"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Page Size"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_RunnerInstanceResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/runner_instances/admin/{public_id}":{"patch":{"tags":["runner_instances"],"summary":"Update Runner Instance Admin","operationId":"update_runner_instance_admin_runner_instances_admin__public_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerInstanceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerInstanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit_events":{"get":{"tags":["audit_events"],"summary":"Get Audit Events","operationId":"get_audit_events_audit_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"object_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type"}},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Id"}},{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Id"}},{"name":"actor_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Type"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From Timestamp"}},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To Timestamp"}},{"name":"phrase","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phrase"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Page Size"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_AuditEventResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit_events/filters":{"get":{"tags":["audit_events"],"summary":"Get Audit Event Filters","operationId":"get_audit_event_filters_audit_events_filters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditEventFiltersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit_events/admin":{"get":{"tags":["audit_events"],"summary":"Get Audit Events Admin","operationId":"get_audit_events_admin_audit_events_admin_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"object_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type"}},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Id"}},{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Id"}},{"name":"actor_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Type"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From Timestamp"}},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To Timestamp"}},{"name":"phrase","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phrase"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Page Size"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_AuditEventAdminResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit_events/filters/admin":{"get":{"tags":["audit_events"],"summary":"Get Audit Event Filters Admin","operationId":"get_audit_event_filters_admin_audit_events_filters_admin_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditEventFiltersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/":{"post":{"tags":["events"],"summary":"Handle Event","operationId":"handle_event_events__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridEventRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/analyses/run":{"post":{"tags":["builds-analyses"],"summary":"Run Analyses","description":"Trigger a build analysis. Returns the full report inline.","operationId":"run_analyses_builds_analyses_run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/builds/{build_id}/rca":{"post":{"tags":["builds-rca"],"summary":"Run Rca","description":"Return AI root-cause analysis for a failed self-hosted build.","operationId":"run_rca_builds__build_id__rca_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Build Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants":{"get":{"tags":["back-office"],"summary":"Get Tenants","description":"Paginated tenants list for the back office (IBS-1474). Supports name\nsearch and a free-trial filter; the client loads more via infinite scroll.\nDeleted tenants (IBS-2056) are hidden unless `include_deleted`.","operationId":"get_tenants_back_office_tenants_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"is_free_trial","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Free Trial"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_list_AdminTenant__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["back-office"],"summary":"Create Tenant","operationId":"create_tenant_back_office_tenants_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdminTenant"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}":{"get":{"tags":["back-office"],"summary":"Get Tenant","description":"Fetch a single tenant for the back-office detail view (IBS-1474).","operationId":"get_tenant_back_office_tenants__public_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["back-office"],"summary":"Update Tenant","operationId":"update_tenant_back_office_tenants__public_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdminTenant"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["back-office"],"summary":"Delete Tenant","description":"Delete a tenant: erase every user, then tear the tenant down (IBS-2056).\n\nIrreversible. The client gates it behind a type-the-word-\"delete\" dialog;\nthere is no undo and no soft state to restore from — the Descope tenant and\nits users are gone, and the PII they held is overwritten.\n\nReturns the tenant with its deletion fields set, which is all the detail\npage renders from then on.","operationId":"delete_tenant_back_office_tenants__public_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/export":{"get":{"tags":["back-office"],"summary":"Export Tenant Data","description":"Tenant data export (IBS-1595); 404 for unknown/deleted tenant; a Descope outage degrades Users.csv (still 200) rather than failing the whole export.","operationId":"export_tenant_data_back_office_tenants__public_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/name":{"put":{"tags":["back-office"],"summary":"Rename Tenant","description":"Rename a tenant's display name (IBS-2150).\n\nIts own endpoint rather than a field on UpdateAdminTenant: that body is a\nrequired is_free_trial, so a rename can't be expressed there without also\nrestating the trial flag.","operationId":"rename_tenant_back_office_tenants__public_id__name_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameTenantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/creator":{"put":{"tags":["back-office"],"summary":"Set Tenant Creator","description":"Set which current member is recorded as the tenant's creator.","operationId":"set_tenant_creator_back_office_tenants__public_id__creator_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTenantCreatorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/ci-runner-usage":{"get":{"tags":["back-office"],"summary":"Get Tenant Ci Runner Usage","operationId":"get_tenant_ci_runner_usage_back_office_tenants__public_id__ci_runner_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^20\\d{2}-(0[1-9]|1[0-2])$"},{"type":"null"}],"description":"UTC month, YYYY-MM.","title":"Month"},"description":"UTC month, YYYY-MM."},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantCIRunnerUsage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/ci-runner-cap":{"put":{"tags":["back-office"],"summary":"Set Tenant Ci Runner Cap","description":"The only place a tenant's monthly CI runner minutes cap can be set.","operationId":"set_tenant_ci_runner_cap_back_office_tenants__public_id__ci_runner_cap_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CIRunnerCap"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CIRunnerCap"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/ci-runner-usage":{"get":{"tags":["back-office"],"summary":"List Tenants Ci Runner Usage","operationId":"list_tenants_ci_runner_usage_back_office_ci_runner_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^20\\d{2}-(0[1-9]|1[0-2])$"},{"type":"null"}],"description":"UTC month, YYYY-MM.","title":"Month"},"description":"UTC month, YYYY-MM."},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TenantCIRunnerUsageSummary"},"title":"Response List Tenants Ci Runner Usage Back Office Ci Runner Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/trial-expiration":{"put":{"tags":["back-office"],"summary":"Update Tenant Trial Expiration","description":"Set a tenant's trial end date, syncing the LicenseSpring Windows trial\nlicense to match (IBS-1702). Not restricted to later dates — this can\nalso shorten a trial.\n\nLicenseSpring is synced FIRST — a failure there must not leave\nTenant.trial_expires_at pointing at a date LicenseSpring doesn't actually\nenforce.","operationId":"update_tenant_trial_expiration_back_office_tenants__public_id__trial_expiration_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrialExpirationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/sso-configuration":{"get":{"tags":["back-office"],"summary":"Get Tenant Sso Status","operationId":"get_tenant_sso_status_back_office_tenants__public_id__sso_configuration_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSOStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["back-office"],"summary":"Remove Tenant Sso","operationId":"remove_tenant_sso_back_office_tenants__public_id__sso_configuration_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/sso-configuration-link":{"post":{"tags":["back-office"],"summary":"Generate Tenant Sso Link","operationId":"generate_tenant_sso_link_back_office_tenants__public_id__sso_configuration_link_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSSOLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSOLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/invitations":{"post":{"tags":["back-office"],"summary":"Invite Customer","description":"Invite a customer (by email) into a tenant. The invitation link directs\nthem to the app scoped to their tenant, not the free-trial flow (IBS-1282).","operationId":"invite_customer_back_office_tenants__public_id__invitations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/members":{"get":{"tags":["back-office"],"summary":"Get Tenant Members Admin","description":"List all users of a tenant (back-office, view-only): email, Descope login\nid, role, status, created-at and last-login sourced from Descope.","operationId":"get_tenant_members_admin_back_office_tenants__public_id__members_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TenantMemberWithLoginId"},"title":"Response Get Tenant Members Admin Back Office Tenants  Public Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["back-office"],"summary":"Erase Tenant Member","description":"Erase one member of a tenant on a GDPR/CCPA request (IBS-2056).\n\nKeyed on the email, like the members list this is invoked from — that list\ncomes from Descope, and an invited user who never signed in has no `users`\nrow to address by public id.\n\nThe user row survives with its PII columns overwritten rather than being\ndeleted; see `deletion_service` for why. The returned log says what actually\nhappened, including whether the Descope account was deleted or merely\ndetached from this tenant.","operationId":"erase_tenant_member_back_office_tenants__public_id__members_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserErasureResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/users/login-id/search":{"post":{"tags":["back-office"],"summary":"Resolve Impersonation Login Id","description":"Resolve the Descope login id to impersonate for a user's email (IBS-1703).\n\nEvery impersonation entry point resolves through here instead of passing\nwhatever string the admin has at hand — see\n`users_service.resolve_impersonation_target` for why the two differ. The\nresponse also carries the user's tenants so the caller can pick which one\nthe impersonated session lands in (IBS-2055).","operationId":"resolve_impersonation_login_id_back_office_users_login_id_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpersonationLoginIdResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/licenses":{"get":{"tags":["back-office"],"summary":"Get Tenant Licenses Admin","description":"List all active licenses for a tenant (back-office).","operationId":"get_tenant_licenses_admin_back_office_tenants__public_id__licenses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TenantLicenseWithGridResponse"},"title":"Response Get Tenant Licenses Admin Back Office Tenants  Public Id  Licenses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["back-office"],"summary":"Link License Admin","description":"Manually link a license key to a tenant (back-office).\nFor Windows licenses, details are fetched from LicenseSpring automatically.","operationId":"link_license_admin_back_office_tenants__public_id__licenses_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkLicenseRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLicenseWithGridResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/licenses/{license_public_id}/deactivate":{"post":{"tags":["back-office"],"summary":"Deactivate License Admin","description":"Deactivate a license for any tenant (back-office). Disables in LicenseSpring\nand soft-deletes locally. Scoped to the target tenant, not the caller's org.","operationId":"deactivate_license_admin_back_office_tenants__public_id__licenses__license_public_id__deactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/licenses/{license_public_id}/activate-offline":{"post":{"tags":["back-office"],"summary":"Activate Offline License Admin","description":"Offline license reset for any tenant (back-office). Accepts a base64-encoded\n.req file in a JSON body (IBS-1694 — not a multipart upload, which some customer\nnetworks block), validates it, forwards to LicenseSpring, and returns the .lic\nfile. Scoped to the target tenant and NOT gated on offline capability (IBS-1511).","operationId":"activate_offline_license_admin_back_office_tenants__public_id__licenses__license_public_id__activate_offline_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfflineActivationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/licenses/{license_public_id}":{"delete":{"tags":["back-office"],"summary":"Delete License Admin","description":"Soft-delete an unconnected license from our DB only (no LicenseSpring call).\nOnly allowed when the license has no connected grid.","operationId":"delete_license_admin_back_office_tenants__public_id__licenses__license_public_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"license_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"License Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/licensespring-customers/search":{"get":{"tags":["back-office"],"summary":"Search Licensespring Customers","description":"Search LicenseSpring customers by email / name / company / numeric id.","operationId":"search_licensespring_customers_back_office_licensespring_customers_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LicenseSpringCustomerSearchResult"},"title":"Response Search Licensespring Customers Back Office Licensespring Customers Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/licensespring-customers":{"get":{"tags":["back-office"],"summary":"Get Licensespring Customers","operationId":"get_licensespring_customers_back_office_tenants__public_id__licensespring_customers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LicenseSpringCustomerResponse"},"title":"Response Get Licensespring Customers Back Office Tenants  Public Id  Licensespring Customers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["back-office"],"summary":"Add Licensespring Customer","description":"Add a LicenseSpring customer ID and automatically sync its licenses.","operationId":"add_licensespring_customer_back_office_tenants__public_id__licensespring_customers_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddLicenseSpringCustomerRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseSpringCustomerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/licensespring-customers/{customer_id}":{"delete":{"tags":["back-office"],"summary":"Remove Licensespring Customer","description":"Remove a LicenseSpring customer ID and soft-delete its unconnected licenses.","operationId":"remove_licensespring_customer_back_office_tenants__public_id__licensespring_customers__customer_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"customer_id","in":"path","required":true,"schema":{"type":"string","title":"Customer Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/licensespring-customers/{customer_id}/sync":{"post":{"tags":["back-office"],"summary":"Sync Licensespring Customer Licenses","description":"Fetch all licenses for this customer from LicenseSpring and link new ones.","operationId":"sync_licensespring_customer_licenses_back_office_tenants__public_id__licensespring_customers__customer_id__sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"customer_id","in":"path","required":true,"schema":{"type":"string","title":"Customer Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseSpringSyncResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/salesforce-accounts/search":{"get":{"tags":["back-office"],"summary":"Search Salesforce Accounts","description":"Search Salesforce Accounts by name.","operationId":"search_salesforce_accounts_back_office_salesforce_accounts_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SalesforceAccountSearchResult"},"title":"Response Search Salesforce Accounts Back Office Salesforce Accounts Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/salesforce-account":{"post":{"tags":["back-office"],"summary":"Link Salesforce Account","description":"Link a Salesforce Account to a tenant, replacing any existing link, and\nauto-sync the account's licenses (IBS-1782).\n\nThe sync is best-effort: the link is already committed, so a transient\nSalesforce/LicenseSpring failure must not fail the link — the admin can retry\nvia the \"Sync from Salesforce\" button. Errors are logged, not raised.","operationId":"link_salesforce_account_back_office_tenants__public_id__salesforce_account_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSalesforceAccountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenant"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["back-office"],"summary":"Unlink Salesforce Account","operationId":"unlink_salesforce_account_back_office_tenants__public_id__salesforce_account_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/salesforce-licenses/sync":{"post":{"tags":["back-office"],"summary":"Sync Salesforce Licenses Admin","description":"Sync this tenant's licenses from its linked Salesforce account (IBS-1782).\n\nSalesforce is the source of truth; Windows licenses are validated against\nLicenseSpring by key and skipped if missing. Same logic as the daily\nprocessing-engine sweep, triggered on demand. 400 if no account is linked.","operationId":"sync_salesforce_licenses_admin_back_office_tenants__public_id__salesforce_licenses_sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesforceLicenseSyncResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/ai/rca-prompt":{"get":{"tags":["back-office"],"summary":"Get Rca Prompt","description":"Active root-cause-analysis prompt (falls back to the in-code default).","operationId":"get_rca_prompt_back_office_ai_rca_prompt_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaPromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["back-office"],"summary":"Update Rca Prompt","description":"Save a new RCA prompt version and make it active.","operationId":"update_rca_prompt_back_office_ai_rca_prompt_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePromptRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaPromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/ai/rca-prompt/versions":{"get":{"tags":["back-office"],"summary":"Get Rca Prompt Versions","description":"Full version history for the RCA prompt, newest first.","operationId":"get_rca_prompt_versions_back_office_ai_rca_prompt_versions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AiPromptVersion"},"title":"Response Get Rca Prompt Versions Back Office Ai Rca Prompt Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/ai/rca-prompt/versions/{version}/restore":{"post":{"tags":["back-office"],"summary":"Restore Rca Prompt Version","description":"Re-activate a previous RCA prompt version (pointer flip).","operationId":"restore_rca_prompt_version_back_office_ai_rca_prompt_versions__version__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaPromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/tenants/{public_id}/notifications":{"post":{"tags":["back-office"],"summary":"Create Notification","description":"Manually create a notification for a tenant (IBS-1466). Tenant-wide when\n`user_public_ids` is empty; otherwise the notification is duplicated per\nuser, and every user must belong to the tenant. The target tenant comes from\nthe path, not the caller's own tenant.","operationId":"create_notification_back_office_tenants__public_id__notifications_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNotificationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NotificationResponse"},"title":"Response Create Notification Back Office Tenants  Public Id  Notifications Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/release-notifications/preview":{"post":{"tags":["back-office"],"summary":"Preview Release Notification","description":"What announcing this release would create, without creating it (IBS-970).\n\nThe back office shows these counts for confirmation before firing. That\nconfirmation is the only real guard against a mistyped version: notifications\nhave no delete path, and a typo produces a different dedupe_key, so re-firing\nthe correct version adds a second batch rather than replacing the bad one.\n\nPOST rather than GET because it shares the trigger's request body (and its\nvalidation) exactly; it writes nothing.","operationId":"preview_release_notification_back_office_release_notifications_preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseNotificationTarget"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseNotificationPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/back-office/release-notifications":{"post":{"tags":["back-office"],"summary":"Trigger Release Notification","description":"Announce a new release to every grid of the given platform (IBS-970).\n\nThe automated path is ib-idp emitting `release.published` when a release\nsucceeds; this is the manual trigger for releases that don't go through it\n(the \"fire it for this small release\" case in the ticket). It publishes the\nidentical message, so both land in the same processing-engine handler.\n\n202, not 201: the fan-out is asynchronous, so nothing has been created yet\nwhen this returns.","operationId":"trigger_release_notification_back_office_release_notifications_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseNotificationRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/catalogue":{"get":{"tags":["billing"],"summary":"Get Catalogue","description":"The self-serve pricing catalogue (3 packages x 2 cadences), read fresh\nfrom Paddle on every call. 404s when ica-self-payments-v1 is off (or\ncan't be resolved), so the feature's existence stays opaque to callers\nnot gated in.\n\nInline gate, not `Depends(require_feature_enabled(...))`: this route is\ndeliberately not admin-only (see test_get_catalogue_is_not_admin_only),\nand `require_feature_enabled` depends on `AuthorizedTenantAdminDep` --\nswitching this route onto it would silently lock Viewers out.","operationId":"get_catalogue_billing_catalogue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/checkout-session":{"post":{"tags":["billing"],"summary":"Create Checkout Session","description":"Creates the Paddle transaction and returns its id. Same gate as the\ncatalogue endpoint, and the same reason it stays inline rather than moving\nonto `Depends(require_feature_enabled(...))` -- not admin-only.","operationId":"create_checkout_session_billing_checkout_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/webhook":{"post":{"tags":["billing"],"summary":"Paddle Webhook","operationId":"paddle_webhook_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Paddle Webhook Billing Webhook Post"}}}}}}},"/analytics":{"post":{"tags":["analytics"],"summary":"Capture Event","operationId":"capture_event_analytics_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsEventRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/alert/webhook":{"post":{"tags":["integrations"],"summary":"Create Webhook Integration","operationId":"create_webhook_integration_integrations_alert_webhook_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookIntegrationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["integrations"],"summary":"List Webhook Integrations","operationId":"list_webhook_integrations_integrations_alert_webhook_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationResponse"},"title":"Response List Webhook Integrations Integrations Alert Webhook Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/alert/webhook/{public_id}":{"patch":{"tags":["integrations"],"summary":"Update Webhook Integration","operationId":"update_webhook_integration_integrations_alert_webhook__public_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookIntegrationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["integrations"],"summary":"Delete Webhook Integration","operationId":"delete_webhook_integration_integrations_alert_webhook__public_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/alert/webhook/{public_id}/test":{"post":{"tags":["integrations"],"summary":"Send Test Webhook","description":"Send a sample alert to verify the webhook URL. A failure is reported\nin the body, not as an error status — testing is optional and must never\nblock saving an otherwise valid webhook.","operationId":"send_test_webhook_integrations_alert_webhook__public_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/alert/webhook/{public_id}/delete-impact":{"get":{"tags":["integrations"],"summary":"Get Webhook Delete Impact","description":"Alerts that would be affected by deleting this webhook — read by the\ndelete confirmation so it can list them instead of breaking them\nsilently.","operationId":"get_webhook_delete_impact_integrations_alert_webhook__public_id__delete_impact_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeleteImpactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/alert/email/opt-outs":{"get":{"tags":["integrations"],"summary":"List Tenant Email Opt Outs","description":"Tenant-wide opt-out management: every suppressed address in the tenant.\n\nThe only admin surface for opt-outs, and the only way back in for a\nrecipient who used an unsubscribe link.","operationId":"list_tenant_email_opt_outs_integrations_alert_email_opt_outs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailOptOutResponse"},"title":"Response List Tenant Email Opt Outs Integrations Alert Email Opt Outs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/alert/email/opt-outs/{email_hash}":{"delete":{"tags":["integrations"],"summary":"Remove Tenant Email Opt Out","operationId":"remove_tenant_email_opt_out_integrations_alert_email_opt_outs__email_hash__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$","title":"Email Hash"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/definitions/options":{"get":{"tags":["alerts"],"summary":"Get Alert Options","description":"Selectable triggers, their available condition targets, and each\ntarget's operators — declared once here rather than in the UI.\n\nRegistered before `/{public_id}` so \"options\" isn't parsed as an id.","operationId":"get_alert_options_alerts_definitions_options_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertOptionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/definitions":{"post":{"tags":["alerts"],"summary":"Create Alert Definition","operationId":"create_alert_definition_alerts_definitions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDefinitionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["alerts"],"summary":"List Alert Definitions","operationId":"list_alert_definitions_alerts_definitions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertDefinitionResponse"},"title":"Response List Alert Definitions Alerts Definitions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/definitions/{public_id}":{"get":{"tags":["alerts"],"summary":"Get Alert Definition","operationId":"get_alert_definition_alerts_definitions__public_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["alerts"],"summary":"Update Alert Definition","operationId":"update_alert_definition_alerts_definitions__public_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["alerts"],"summary":"Delete Alert Definition","operationId":"delete_alert_definition_alerts_definitions__public_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/definitions/{public_id}/active":{"patch":{"tags":["alerts"],"summary":"Set Alert Definition Active","description":"Enable/disable a rule from the list without opening the edit flow.","operationId":"set_alert_definition_active_alerts_definitions__public_id__active_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertActiveUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/support/cases":{"get":{"tags":["support"],"summary":"List Support Cases","description":"List the signed-in tenant's Salesforce support cases.","operationId":"list_support_cases_support_cases_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SupportCaseSummary"},"title":"Response List Support Cases Support Cases Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["support"],"summary":"Create Support Case","description":"Open a new support case for the signed-in tenant's Salesforce Account.","operationId":"create_support_case_support_cases_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSupportCaseRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSupportCaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/support/cases/picklists":{"get":{"tags":["support"],"summary":"Get Support Case Picklists","description":"Options for the create-case form (severity levels + product values).","operationId":"get_support_case_picklists_support_cases_picklists_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportCasePicklists"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/support/cases/{case_id}":{"get":{"tags":["support"],"summary":"Get Support Case","description":"Fetch a single support case with its customer-visible timeline.","operationId":"get_support_case_support_cases__case_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportCaseDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/support/cases/{case_id}/attachments/{version_id}":{"get":{"tags":["support"],"summary":"Download Support Case Attachment","description":"Download a file attached to one of the signed-in tenant's cases.","operationId":"download_support_case_attachment_support_cases__case_id__attachments__version_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/support/cases/{case_id}/comments":{"post":{"tags":["support"],"summary":"Create Support Case Comment","description":"Post a comment on one of the signed-in tenant's support cases.","operationId":"create_support_case_comment_support_cases__case_id__comments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSupportCaseCommentRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportTimelineEvent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-migration/plan":{"get":{"tags":["workflow-migration"],"summary":"Get Migration Plan","description":"Every job in the repository's workflows, and what would change.\n\nRead-only. Returns `permissions_pending` rather than an error when the GitHub App\ninstallation has not yet been granted the permissions this needs — that is an\nexpected state for every installation predating the permission change, not a\nfailure.","operationId":"get_migration_plan_workflow_migration_plan_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"repository","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Repository to inspect, as \"owner/repo\", exactly as the user selected it in the previous wizard step. Resolved against this tenant's own hosted grids, so it can only ever name a repository the tenant has already set up a runner for; anything else answers state `no_runner`, with nothing read from GitHub. Preferred over grid_public_id.","title":"Repository"},"description":"Repository to inspect, as \"owner/repo\", exactly as the user selected it in the previous wizard step. Resolved against this tenant's own hosted grids, so it can only ever name a repository the tenant has already set up a runner for; anything else answers state `no_runner`, with nothing read from GitHub. Preferred over grid_public_id."},{"name":"grid_public_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Hosted grid whose repository to inspect. Kept for the add-another-runner surface, which holds a grid id rather than a repository. With neither given, the tenant's most recent GitHub grid is used -- the returning-user entry, which opens straight on this step with nothing selected.","title":"Grid Public Id"},"description":"Hosted grid whose repository to inspect. Kept for the add-another-runner surface, which holds a grid id rather than a repository. With neither given, the tenant's most recent GitHub grid is used -- the returning-user entry, which opens straight on this step with nothing selected."},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrationPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-migration/pull-request":{"post":{"tags":["workflow-migration"],"summary":"Open Migration Pull Request","description":"Commit the selected `runs-on` changes to a branch and open one pull request.\n\nThe repository comes from `request.repository` when the client sends one, resolved\nto one of this tenant's own hosted grids (404 otherwise) — never used as a GitHub\nidentifier as it arrived. See `migration_service._resolve_grid`.\n\nNever merges. Idempotent per grid: the branch name is deterministic, so a second\ncall finds the first call's pull request and returns `existing_pr` instead of\nopening a duplicate. A refusal comes back as `state=\"failed\"` with a typed\n`failure_reason` so the UI can explain it, rather than as a 5xx.","operationId":"open_migration_pull_request_workflow_migration_pull_request_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenPullRequestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenPullRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/alert-email/opt-out/context":{"get":{"tags":["integrations"],"summary":"Get Opt Out Context","operationId":"get_opt_out_context_public_alert_email_opt_out_context_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptOutContextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/alert-email/opt-out":{"post":{"tags":["integrations"],"summary":"Opt Out","operationId":"opt_out_public_alert_email_opt_out_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptOutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptOutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/alert-email/opt-out/one-click":{"post":{"tags":["integrations"],"summary":"Opt Out One Click","description":"RFC 8058 List-Unsubscribe-Post target — mail clients (Gmail/Yahoo\n\"Unsubscribe\" button) POST here with no body, so the token travels in the\nquery string instead of a JSON body. Always opts out of every trigger for\nthe integration: a one-click action has no way to offer a scope choice.","operationId":"opt_out_one_click_public_alert_email_opt_out_one_click_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptOutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications":{"get":{"tags":["notifications"],"summary":"List Notifications","description":"The caller's notifications (own + tenant-wide), newest first. Pass the\nreturned `next_cursor` back as `cursor` for the next page; `unseen=true`\nreturns only unseen ones.","operationId":"list_notifications_notifications_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"unseen","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unseen"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/see":{"post":{"tags":["notifications"],"summary":"Mark Notifications Seen","description":"Mark the given notifications seen, or all unseen ones when `all=true`.","operationId":"mark_notifications_seen_notifications_see_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkSeenRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/unsee":{"post":{"tags":["notifications"],"summary":"Mark Notifications Unseen","description":"Mark the given notifications unseen, or all of them when `all=true`.","operationId":"mark_notifications_unseen_notifications_unsee_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkSeenRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/{public_id}":{"delete":{"tags":["notifications"],"summary":"Delete Notification","description":"Soft-delete one notification visible to the caller.","operationId":"delete_notification_notifications__public_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/delete":{"post":{"tags":["notifications"],"summary":"Delete Notifications","description":"Delete the given notifications, or all visible ones when `all=true`\n(optionally restricted to unseen ones via `unseen_only`).","operationId":"delete_notifications_notifications_delete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteNotificationsRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/realtime/connections":{"get":{"tags":["internal"],"summary":"Realtime Connections","description":"Live WebSocket connections across the fleet.\n\nRead from Valkey on demand rather than from a cached aggregate. The\nkeyspace is one key per pod, so the scan is trivial, and KEDA polls every\n30s — caching would buy nothing and cost staleness at exactly the moment\nscaling decisions are made.","operationId":"realtime_connections_internal_realtime_connections_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-agents":{"get":{"tags":["ai-agents"],"summary":"List Ai Agents","description":"The calling user's MCP client grants, across all their tenants.","operationId":"list_ai_agents_ai_agents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiAgentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-agents/{consent_id}":{"delete":{"tags":["ai-agents"],"summary":"Revoke Ai Agent","description":"Revoke one of the calling user's own MCP client grants. 404 (never\n403) for anything not owned by the caller -- existence must not leak.","operationId":"revoke_ai_agent_ai_agents__consent_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"consent_id","in":"path","required":true,"schema":{"type":"string","title":"Consent Id"}},{"name":"x-public-tenant-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-Tenant-Id"}},{"name":"x-public-user-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Public-User-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthcheck":{"get":{"summary":"Perform Healthcheck","operationId":"perform_healthcheck_healthcheck_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AddLicenseSpringCustomerRequest":{"properties":{"customer_id":{"type":"string","maxLength":255,"title":"Customer Id"},"customer_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Customer Name"}},"type":"object","required":["customer_id"],"title":"AddLicenseSpringCustomerRequest"},"AdminTenant":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"is_onboarded":{"type":"boolean","title":"Is Onboarded"},"is_free_trial":{"type":"boolean","title":"Is Free Trial"},"is_sso_required":{"type":"boolean","title":"Is Sso Required"},"descope_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descope Name"},"descope_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descope Tenant Id"},"salesforce_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salesforce Account Id"},"salesforce_account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salesforce Account Name"},"trial_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Expires At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By"},"deletion_log":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deletion Log"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/TenantCreator"},{"type":"null"}]}},"type":"object","required":["public_id","name","is_enabled","is_onboarded","is_free_trial","is_sso_required"],"title":"AdminTenant"},"AffectedAlertResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"will_be_disabled":{"type":"boolean","title":"Will Be Disabled"}},"type":"object","required":["public_id","name","is_active","will_be_disabled"],"title":"AffectedAlertResponse"},"AgentInstallConfigResponse":{"properties":{"linux_installer_download_url":{"type":"string","title":"Linux Installer Download Url"},"linux_data_dir":{"type":"string","title":"Linux Data Dir"}},"type":"object","required":["linux_installer_download_url","linux_data_dir"],"title":"AgentInstallConfigResponse","description":"Config the frontend needs to compose a Helper Agent install command for a\nLinux grid (IBS-1457). The same incredibuild-<version>.run binary installs\nevery role; the helper is selected by flags + --coordinator-machine."},"AgentLicenseAction":{"type":"string","enum":["licenseConfig","unsubscribeAgent"],"title":"AgentLicenseAction"},"AgentLicenseType":{"type":"string","enum":["None","Floating","Fixed"],"title":"AgentLicenseType"},"AgentPendingChangeRequest":{"properties":{"agent_name":{"type":"string","title":"Agent Name"},"agent_id":{"type":"string","title":"Agent Id"},"action":{"type":"string","const":"AssignBuildGroup","title":"Action"},"build_group":{"$ref":"#/components/schemas/BuildGroupRef"}},"type":"object","required":["agent_name","agent_id","action","build_group"],"title":"AgentPendingChangeRequest","description":"Request body for AssignBuildGroup pending change."},"AgentResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"agent_id":{"type":"string","title":"Agent Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"coordinator_id":{"type":"string","format":"uuid","title":"Coordinator Id"},"name":{"type":"string","title":"Name"},"build_group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Group"},"last_connected":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Connected"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"status":{"$ref":"#/components/schemas/AgentStatus"},"roles":{"items":{"$ref":"#/components/schemas/AgentRole"},"type":"array","title":"Roles"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"pending_changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Changes"},"host_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Comment"},"build_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Build Count"},"use_local_cache":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Local Cache"},"use_build_cache_cluster":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Build Cache Cluster"},"remote_cache_server":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remote Cache Server"},"use_build_cache_read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Build Cache Read Only"},"cache_size_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Size Gb"},"cache_folder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cache Folder"},"build_cache_allowed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Build Cache Allowed"},"cpu_logical":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cpu Logical","readOnly":true},"helper_cores":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Helper Cores","readOnly":true},"helper_type":{"anyOf":[{"$ref":"#/components/schemas/AgentLicenseType"},{"type":"null"}],"readOnly":true},"initiator_type":{"anyOf":[{"$ref":"#/components/schemas/AgentLicenseType"},{"type":"null"}],"readOnly":true},"ci_initiator_type":{"anyOf":[{"$ref":"#/components/schemas/AgentLicenseType"},{"type":"null"}],"readOnly":true},"log_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Log Level","readOnly":true},"build_priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Priority","readOnly":true}},"type":"object","required":["public_id","agent_id","tenant_id","grid_id","coordinator_id","name","build_group","last_connected","created_at","status","roles","metadata","cpu_logical","helper_cores","helper_type","initiator_type","ci_initiator_type","log_level","build_priority"],"title":"AgentResponse"},"AgentRole":{"type":"string","enum":["Initiator","Initiator fixed","Initiator floating","CI Initiator","CI Initiator fixed","CI Initiator floating","Helper","Helper fixed","Helper floating","Local Cache"],"title":"AgentRole"},"AgentSortBy":{"type":"string","enum":["created_at","build_count"],"title":"AgentSortBy"},"AgentStatus":{"type":"string","enum":["online","offline","expired","working","updating"],"title":"AgentStatus"},"AiAgentListResponse":{"properties":{"clients":{"items":{"$ref":"#/components/schemas/AiAgentResponse"},"type":"array","title":"Clients"}},"type":"object","required":["clients"],"title":"AiAgentListResponse"},"AiAgentResponse":{"properties":{"id":{"type":"string","minLength":1,"title":"Id"},"client_id":{"type":"string","title":"Client Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"connected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["id","client_id","name","scopes","connected_at","expires_at"],"title":"AiAgentResponse","description":"One MCP client grant (a Descope agentic-identity consent), mapped\nfrom the raw Descope shape (IBS-2260, live-verified field names)."},"AiPromptVersion":{"properties":{"version":{"type":"integer","title":"Version"},"content":{"type":"string","title":"Content"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["version","content","is_active","created_at"],"title":"AiPromptVersion","description":"A single stored version of a prompt (one row of the ai_prompts table)."},"AlertActiveUpdate":{"properties":{"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["is_active"],"title":"AlertActiveUpdate","description":"Body of the enable/disable endpoint — toggling a rule shouldn't\nrequire replaying its whole configuration."},"AlertCondition":{"properties":{"target":{"$ref":"#/components/schemas/ConditionTarget"},"operator":{"$ref":"#/components/schemas/ConditionOperator"},"value":{"additionalProperties":true,"type":"object","title":"Value"}},"type":"object","required":["target","operator","value"],"title":"AlertCondition","description":"One `target operator value` clause. `value`'s shape depends on\n`target` — see db_model.notifications.conditions."},"AlertDefinitionCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"alert_trigger":{"$ref":"#/components/schemas/AlertTrigger"},"conditions":{"items":{"$ref":"#/components/schemas/AlertCondition"},"type":"array","maxItems":20,"title":"Conditions"},"condition_logic":{"$ref":"#/components/schemas/ConditionLogic","default":"all"},"email_recipients":{"items":{"type":"string","format":"email"},"type":"array","maxItems":25,"title":"Email Recipients"},"webhook_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Webhook Public Id"},"integration_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Public Id"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","alert_trigger"],"title":"AlertDefinitionCreate"},"AlertDefinitionResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"alert_trigger":{"$ref":"#/components/schemas/AlertTrigger"},"conditions":{"items":{"$ref":"#/components/schemas/AlertCondition"},"type":"array","title":"Conditions"},"condition_logic":{"$ref":"#/components/schemas/ConditionLogic"},"email_recipients":{"items":{"type":"string"},"type":"array","title":"Email Recipients"},"webhook":{"anyOf":[{"$ref":"#/components/schemas/AlertWebhookRef"},{"type":"null"}]},"is_active":{"type":"boolean","title":"Is Active"},"integration_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Public Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["public_id","name","description","alert_trigger","conditions","condition_logic","email_recipients","webhook","is_active","integration_public_id","created_at","updated_at"],"title":"AlertDefinitionResponse"},"AlertDefinitionUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"alert_trigger":{"anyOf":[{"$ref":"#/components/schemas/AlertTrigger"},{"type":"null"}]},"conditions":{"anyOf":[{"items":{"$ref":"#/components/schemas/AlertCondition"},"type":"array","maxItems":20},{"type":"null"}],"title":"Conditions"},"condition_logic":{"anyOf":[{"$ref":"#/components/schemas/ConditionLogic"},{"type":"null"}]},"email_recipients":{"anyOf":[{"items":{"type":"string","format":"email"},"type":"array","maxItems":25},{"type":"null"}],"title":"Email Recipients"},"webhook_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Webhook Public Id"},"integration_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Public Id"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AlertDefinitionUpdate","description":"Every field is optional; only what the client sent is applied.\n\nNullable-looking fields differ in meaning: `webhook_public_id: null`\ndetaches the webhook, while omitting it leaves the webhook as-is."},"AlertOptionsResponse":{"properties":{"triggers":{"items":{"$ref":"#/components/schemas/AlertTriggerOption"},"type":"array","title":"Triggers"},"targets":{"items":{"$ref":"#/components/schemas/ConditionTargetOption"},"type":"array","title":"Targets"},"build_results":{"items":{"type":"string"},"type":"array","title":"Build Results"},"duration_units":{"items":{"type":"string"},"type":"array","title":"Duration Units"}},"type":"object","required":["triggers","targets","build_results","duration_units"],"title":"AlertOptionsResponse"},"AlertTrigger":{"type":"string","enum":["build_started","build_ended","build_failed"],"title":"AlertTrigger"},"AlertTriggerOption":{"properties":{"trigger":{"$ref":"#/components/schemas/AlertTrigger"},"targets":{"items":{"$ref":"#/components/schemas/ConditionTarget"},"type":"array","title":"Targets"}},"type":"object","required":["trigger","targets"],"title":"AlertTriggerOption","description":"One selectable trigger and the condition targets it supports, so the\nUI hides unavailable conditions using the same matrix the API enforces\ninstead of hard-coding its own copy."},"AlertWebhookRef":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"provider":{"$ref":"#/components/schemas/WebhookProvider"},"is_deleted":{"type":"boolean","title":"Is Deleted"}},"type":"object","required":["public_id","name","provider","is_deleted"],"title":"AlertWebhookRef"},"AlternativeFix":{"properties":{"title":{"type":"string","title":"Title","description":"Short bold title for the alternative remedy."},"detail":{"type":"string","title":"Detail","description":"One line describing the alternative."},"confidence":{"type":"string","enum":["High","Medium","Low"],"title":"Confidence"}},"type":"object","required":["title","detail","confidence"],"title":"AlternativeFix"},"AnalyticsEventRequest":{"properties":{"event_name":{"type":"string","maxLength":200,"minLength":1,"title":"Event Name"},"properties":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Properties"}},"type":"object","required":["event_name"],"title":"AnalyticsEventRequest"},"AnalyticsFilters":{"properties":{"start_date":{"type":"string","format":"date-time","title":"Start Date"},"end_date":{"type":"string","format":"date-time","title":"End Date"},"grid_id":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Grid Id"},"build_group_id":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Build Group Id"}},"type":"object","required":["start_date","end_date"],"title":"AnalyticsFilters"},"AssignGridRequest":{"properties":{"grid_public_id":{"type":"string","format":"uuid","title":"Grid Public Id"}},"type":"object","required":["grid_public_id"],"title":"AssignGridRequest","description":"Assign an unattached license to a grid. Assign-only -- rejected, not\nreassigned, if the license already holds a different grid."},"AuditEventActorOption":{"properties":{"actor_id":{"type":"string","title":"Actor Id"},"actor_type":{"type":"string","title":"Actor Type"},"actor_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Email"}},"type":"object","required":["actor_id","actor_type"],"title":"AuditEventActorOption","description":"One distinct actor that appears in the tenant's own audit trail, for the\nUI's Actor filter. actor_email is resolved the same way the listing\nresolves it (see service.py's _actor_user_join_condition)."},"AuditEventAdminResponse":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"actor_type":{"type":"string","title":"Actor Type"},"actor_id":{"type":"string","title":"Actor Id"},"actor_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Email"},"actor_service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Service"},"action":{"type":"string","title":"Action"},"object_type":{"type":"string","title":"Object Type"},"object_id":{"type":"string","title":"Object Id"},"internal":{"type":"boolean","title":"Internal"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"}},"type":"object","required":["event_id","timestamp","actor_type","actor_id","actor_service","action","object_type","object_id","internal","description","context","metadata","tenant_id"],"title":"AuditEventAdminResponse","description":"Same as AuditEventResponse, plus the tenant each row belongs to — only\nmeaningful for the cross-tenant back-office listing (IBS-2181)."},"AuditEventFiltersResponse":{"properties":{"actions":{"items":{"type":"string"},"type":"array","title":"Actions"},"actors":{"items":{"$ref":"#/components/schemas/AuditEventActorOption"},"type":"array","title":"Actors"}},"type":"object","required":["actions","actors"],"title":"AuditEventFiltersResponse","description":"The distinct values the tenant's audit trail actually contains, so the\nUI's Action/Actor dropdowns list only what can return rows. Scoped and\ninternal-filtered exactly like the listing — the facets must never\nsurface a value that only appears on rows the caller can't see."},"AuditEventResponse":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"actor_type":{"type":"string","title":"Actor Type"},"actor_id":{"type":"string","title":"Actor Id"},"actor_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Email"},"actor_service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Service"},"action":{"type":"string","title":"Action"},"object_type":{"type":"string","title":"Object Type"},"object_id":{"type":"string","title":"Object Id"},"internal":{"type":"boolean","title":"Internal"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["event_id","timestamp","actor_type","actor_id","actor_service","action","object_type","object_id","internal","description","context","metadata"],"title":"AuditEventResponse"},"BrokerCommandDismissBatchRequest":{"properties":{"command_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Command Ids"}},"type":"object","required":["command_ids"],"title":"BrokerCommandDismissBatchRequest"},"BrokerCommandV2Response":{"properties":{"public_id":{"type":"string","title":"Public Id"},"public_grid_id":{"type":"string","format":"uuid","title":"Public Grid Id"},"status":{"$ref":"#/components/schemas/BrokerCommandV2Status"},"command_data":{"additionalProperties":true,"type":"object","title":"Command Data"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/FailureReason"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"dismissed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Dismissed At"},"dismissed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dismissed By"}},"type":"object","required":["public_id","public_grid_id","status","command_data","created_at"],"title":"BrokerCommandV2Response"},"BrokerCommandV2Status":{"type":"string","enum":["pending","completed","failed","partial"],"title":"BrokerCommandV2Status"},"BrokerCommandV2Update":{"properties":{"status":{"type":"string","enum":["completed","failed","partial"],"title":"Status"},"error":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Error"},"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/FailureReason"},{"type":"null"}]},"results":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Results"}},"type":"object","required":["status"],"title":"BrokerCommandV2Update"},"BuildCacheCandidateResponse":{"properties":{"endpoint_id":{"type":"string","title":"Endpoint Id"},"name":{"type":"string","title":"Name"},"is_agent":{"type":"boolean","title":"Is Agent"},"is_assigned":{"type":"boolean","title":"Is Assigned"},"agent_status":{"anyOf":[{"$ref":"#/components/schemas/AgentStatus"},{"type":"null"}]},"roles":{"items":{"$ref":"#/components/schemas/AgentRole"},"type":"array","title":"Roles"}},"type":"object","required":["endpoint_id","name","is_agent","is_assigned","agent_status","roles"],"title":"BuildCacheCandidateResponse"},"BuildCacheClusterResponse":{"properties":{"cluster_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cluster Id"},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/CacheClusterStatus"},"nodes":{"items":{"$ref":"#/components/schemas/BuildCacheEndpointResponse"},"type":"array","title":"Nodes"},"initiators":{"items":{"$ref":"#/components/schemas/BuildCacheInitiatorResponse"},"type":"array","title":"Initiators"},"pending_changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Changes"}},"type":"object","required":["cluster_id","name","status","nodes","initiators","pending_changes"],"title":"BuildCacheClusterResponse"},"BuildCacheEndpointResponse":{"properties":{"endpoint_id":{"type":"string","title":"Endpoint Id"},"name":{"type":"string","title":"Name"},"is_agent":{"type":"boolean","title":"Is Agent"},"status":{"$ref":"#/components/schemas/CacheClusterNodeStatus"},"gating_status":{"$ref":"#/components/schemas/CacheClusterNodeStatus"},"metric_statuses":{"$ref":"#/components/schemas/BuildCacheMetricStatusesResponse"},"available_cpu_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Available Cpu Percentage"},"available_memory_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Memory Bytes"},"total_memory_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Memory Bytes"},"network_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network Info"},"disk_used_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Disk Used Bytes"},"disk_free_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Disk Free Bytes"},"cache_used_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Used Bytes"},"cache_max_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Max Bytes"},"last_eviction_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Eviction Time"},"cache_size_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Size Gb"},"cache_and_db_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cache And Db Location"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"custom_host_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Host Name"},"last_report_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Report At"},"pending_changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Changes"}},"type":"object","required":["endpoint_id","name","is_agent","status","gating_status","metric_statuses","available_cpu_percentage","available_memory_bytes","total_memory_bytes","network_info","disk_used_bytes","disk_free_bytes","cache_used_bytes","cache_max_bytes","last_eviction_time","cache_size_gb","cache_and_db_location","host","custom_host_name","last_report_at","pending_changes"],"title":"BuildCacheEndpointResponse"},"BuildCacheInitiatorResponse":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["agent_id","name"],"title":"BuildCacheInitiatorResponse"},"BuildCacheMetricStatus":{"type":"string","enum":["normal","warning","error"],"title":"BuildCacheMetricStatus"},"BuildCacheMetricStatusesResponse":{"properties":{"cpu":{"anyOf":[{"$ref":"#/components/schemas/BuildCacheMetricStatus"},{"type":"null"}]},"memory":{"anyOf":[{"$ref":"#/components/schemas/BuildCacheMetricStatus"},{"type":"null"}]},"disk":{"anyOf":[{"$ref":"#/components/schemas/BuildCacheMetricStatus"},{"type":"null"}]},"cache":{"anyOf":[{"$ref":"#/components/schemas/BuildCacheMetricStatus"},{"type":"null"}]}},"type":"object","required":["cpu","memory","disk","cache"],"title":"BuildCacheMetricStatusesResponse"},"BuildCacheResponse":{"properties":{"clusters":{"items":{"$ref":"#/components/schemas/BuildCacheClusterResponse"},"type":"array","title":"Clusters"},"local_endpoints":{"items":{"$ref":"#/components/schemas/BuildCacheEndpointResponse"},"type":"array","title":"Local Endpoints"}},"type":"object","required":["clusters","local_endpoints"],"title":"BuildCacheResponse"},"BuildCacheWriteResponse":{"properties":{"command_id":{"type":"string","title":"Command Id"},"cluster_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cluster Id"},"endpoint_ids":{"items":{"type":"string"},"type":"array","title":"Endpoint Ids"}},"type":"object","required":["command_id"],"title":"BuildCacheWriteResponse"},"BuildDurationOverTime":{"properties":{"resolution":{"$ref":"#/components/schemas/TimeResolution"},"data_points":{"items":{"$ref":"#/components/schemas/BuildDurationOverTimeDataPoint"},"type":"array","title":"Data Points"}},"type":"object","required":["resolution","data_points"],"title":"BuildDurationOverTime"},"BuildDurationOverTimeDataPoint":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"average_duration":{"type":"number","title":"Average Duration"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["timestamp","average_duration","count"],"title":"BuildDurationOverTimeDataPoint"},"BuildDurationPercentilesDataPoint":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"p50_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P50 Duration"},"p95_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P95 Duration"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["timestamp","p50_duration","p95_duration","count"],"title":"BuildDurationPercentilesDataPoint"},"BuildDurationPercentilesOverTime":{"properties":{"resolution":{"$ref":"#/components/schemas/TimeResolution"},"data_points":{"items":{"$ref":"#/components/schemas/BuildDurationPercentilesDataPoint"},"type":"array","title":"Data Points"},"period":{"$ref":"#/components/schemas/BuildDurationPercentilesPeriod"}},"type":"object","required":["resolution","data_points","period"],"title":"BuildDurationPercentilesOverTime"},"BuildDurationPercentilesPeriod":{"properties":{"p50_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P50 Duration"},"p95_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P95 Duration"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["p50_duration","p95_duration","count"],"title":"BuildDurationPercentilesPeriod","description":"p50/p95 computed once over the entire filtered range (not derived from\nthe per-bucket series — a percentile of per-bucket percentiles is not the\nperiod percentile)."},"BuildFailureTrend":{"properties":{"resolution":{"$ref":"#/components/schemas/TimeResolution"},"data_points":{"items":{"$ref":"#/components/schemas/BuildFailureTrendDataPoint"},"type":"array","title":"Data Points"}},"type":"object","required":["resolution","data_points"],"title":"BuildFailureTrend"},"BuildFailureTrendDataPoint":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"failed_count":{"type":"integer","title":"Failed Count"},"total_count":{"type":"integer","title":"Total Count"},"failure_rate":{"type":"number","title":"Failure Rate"}},"type":"object","required":["timestamp","failed_count","total_count","failure_rate"],"title":"BuildFailureTrendDataPoint"},"BuildFilters":{"properties":{"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"},"status":{"anyOf":[{"items":{"$ref":"#/components/schemas/BuildStatus"},"type":"array"},{"type":"null"}],"title":"Status"},"duration":{"anyOf":[{"$ref":"#/components/schemas/DurationRange"},{"type":"null"}]},"grid_id":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Grid Id"},"job_runner":{"anyOf":[{"$ref":"#/components/schemas/JobRunner"},{"type":"null"}]}},"type":"object","title":"BuildFilters"},"BuildGroupRef":{"properties":{"name":{"type":"string","title":"Name"},"id":{"type":"string","title":"Id"}},"type":"object","required":["name","id"],"title":"BuildGroupRef"},"BuildGroupResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"build_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Group Id"},"name":{"type":"string","title":"Name"},"cloud_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cloud Enabled"},"pending_changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Changes"}},"type":"object","required":["public_id","name"],"title":"BuildGroupResponse"},"BuildMonitorAgent":{"properties":{"machine_name":{"type":"string","title":"Machine Name"},"core_count":{"type":"integer","title":"Core Count"},"task_count":{"type":"integer","title":"Task Count"},"total_duration_ms":{"type":"integer","title":"Total Duration Ms"},"tasks":{"items":{"$ref":"#/components/schemas/BuildMonitorTask"},"type":"array","title":"Tasks","default":[]}},"type":"object","required":["machine_name","core_count","task_count","total_duration_ms"],"title":"BuildMonitorAgent"},"BuildMonitorData":{"properties":{"caption":{"type":"string","title":"Caption"},"status":{"type":"string","title":"Status"},"ib_version":{"type":"string","title":"Ib Version"},"compilation_system":{"type":"string","title":"Compilation System"},"logging_level":{"anyOf":[{"$ref":"#/components/schemas/LoggingLevel"},{"type":"null"}]},"duration_ms":{"type":"integer","title":"Duration Ms"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"agent_count":{"type":"integer","title":"Agent Count"},"errors":{"items":{"$ref":"#/components/schemas/BuildMonitorErrorItem"},"type":"array","title":"Errors"},"warnings":{"items":{"$ref":"#/components/schemas/BuildMonitorErrorItem"},"type":"array","title":"Warnings"},"build_errors":{"items":{"type":"string"},"type":"array","title":"Build Errors","default":[]},"build_errors_truncated":{"type":"boolean","title":"Build Errors Truncated","default":false},"errors_number":{"type":"integer","title":"Errors Number","default":0},"warnings_number":{"type":"integer","title":"Warnings Number","default":0},"system_messages":{"items":{"type":"string"},"type":"array","title":"System Messages"},"task_stats":{"$ref":"#/components/schemas/BuildMonitorTaskStats"},"agents":{"items":{"$ref":"#/components/schemas/BuildMonitorAgent"},"type":"array","title":"Agents"}},"type":"object","required":["caption","status","ib_version","compilation_system","duration_ms","start_time","agent_count","errors","warnings","system_messages","task_stats","agents"],"title":"BuildMonitorData"},"BuildMonitorErrorItem":{"properties":{"task_id":{"type":"integer","title":"Task Id"},"task_name":{"type":"string","title":"Task Name"},"machine_name":{"type":"string","title":"Machine Name"},"start_ms":{"type":"integer","title":"Start Ms"},"end_ms":{"type":"integer","title":"End Ms"},"working_dir":{"type":"string","title":"Working Dir"},"exit_code":{"type":"integer","title":"Exit Code"},"error_lines":{"type":"string","title":"Error Lines","default":""},"warning_lines":{"type":"string","title":"Warning Lines","default":""},"arguments":{"type":"string","title":"Arguments","default":""}},"type":"object","required":["task_id","task_name","machine_name","start_ms","end_ms","working_dir","exit_code"],"title":"BuildMonitorErrorItem"},"BuildMonitorFileAvailability":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"$ref":"#/components/schemas/BuildMonitorFileUnavailableReason"},{"type":"null"}]},"minimum_manager_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Minimum Manager Version"},"manager_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Version"}},"type":"object","required":["available"],"title":"BuildMonitorFileAvailability"},"BuildMonitorFileRequestResponse":{"properties":{"command_id":{"type":"string","title":"Command Id"},"status":{"$ref":"#/components/schemas/BrokerCommandV2Status"},"reused":{"type":"boolean","title":"Reused"}},"type":"object","required":["command_id","status","reused"],"title":"BuildMonitorFileRequestResponse"},"BuildMonitorFileStatusResponse":{"properties":{"command_id":{"type":"string","title":"Command Id"},"status":{"$ref":"#/components/schemas/BrokerCommandV2Status"},"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/FailureReason"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"}},"type":"object","required":["command_id","status"],"title":"BuildMonitorFileStatusResponse"},"BuildMonitorFileUnavailableReason":{"type":"string","enum":["build_in_progress","no_initiator","grid_unavailable","data_sharing_disabled","grid_offline","unsupported_manager","unsupported_platform"],"title":"BuildMonitorFileUnavailableReason","description":"Why the on-demand Build Monitor download cannot be offered for a build.\n\nEach value is a different sentence to the user, which is the whole point:\n\"this grid's manager is too old\" and \"nobody is listening on that grid\" both\nmean no download, but only one of them is worth waiting for."},"BuildMonitorSection":{"properties":{"allowEventTypes":{"items":{"type":"string"},"type":"array","title":"Alloweventtypes"},"blankFields":{"items":{"type":"string"},"type":"array","title":"Blankfields"}},"type":"object","required":["allowEventTypes"],"title":"BuildMonitorSection"},"BuildMonitorTask":{"properties":{"task_id":{"type":"integer","title":"Task Id"},"name":{"type":"string","title":"Name"},"task_type":{"type":"string","title":"Task Type"},"duration_ms":{"type":"integer","title":"Duration Ms"},"start_ms":{"type":"integer","title":"Start Ms"},"end_ms":{"type":"integer","title":"End Ms"},"working_dir":{"type":"string","title":"Working Dir"},"status":{"type":"string","title":"Status"},"is_local":{"type":"boolean","title":"Is Local"},"is_distributable":{"type":"boolean","title":"Is Distributable"},"error_count":{"type":"integer","title":"Error Count","default":0},"warning_count":{"type":"integer","title":"Warning Count","default":0}},"type":"object","required":["task_id","name","task_type","duration_ms","start_ms","end_ms","working_dir","status","is_local","is_distributable"],"title":"BuildMonitorTask"},"BuildMonitorTaskItem":{"properties":{"task_id":{"type":"integer","title":"Task Id"},"name":{"type":"string","title":"Name"},"task_type":{"type":"string","title":"Task Type"},"duration_ms":{"type":"integer","title":"Duration Ms"},"start_ms":{"type":"integer","title":"Start Ms"},"end_ms":{"type":"integer","title":"End Ms"},"working_dir":{"type":"string","title":"Working Dir"},"status":{"type":"string","title":"Status"},"is_local":{"type":"boolean","title":"Is Local"},"is_distributable":{"type":"boolean","title":"Is Distributable"},"error_count":{"type":"integer","title":"Error Count","default":0},"warning_count":{"type":"integer","title":"Warning Count","default":0},"machine_name":{"type":"string","title":"Machine Name"}},"type":"object","required":["task_id","name","task_type","duration_ms","start_ms","end_ms","working_dir","status","is_local","is_distributable","machine_name"],"title":"BuildMonitorTaskItem"},"BuildMonitorTaskStats":{"properties":{"total_tasks":{"type":"integer","title":"Total Tasks"},"remote_tasks":{"type":"integer","title":"Remote Tasks"},"local_tasks":{"type":"integer","title":"Local Tasks"},"remote_pct":{"type":"number","title":"Remote Pct"},"local_pct":{"type":"number","title":"Local Pct"},"cache_hits":{"type":"integer","title":"Cache Hits"},"cache_misses":{"type":"integer","title":"Cache Misses"},"cache_hit_rate":{"type":"number","title":"Cache Hit Rate"},"cache_miss_rate":{"type":"number","title":"Cache Miss Rate"}},"type":"object","required":["total_tasks","remote_tasks","local_tasks","remote_pct","local_pct","cache_hits","cache_misses","cache_hit_rate","cache_miss_rate"],"title":"BuildMonitorTaskStats"},"BuildResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"grid_name":{"type":"string","title":"Grid Name"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"grid_type":{"$ref":"#/components/schemas/GridType"},"status":{"type":"string","title":"Status"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration"},"title":{"type":"string","title":"Title"},"cmd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cmd"},"total_tasks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tasks"},"cacheable_tasks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cacheable Tasks"},"cache_task_hits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Task Hits"},"cache_task_misses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Task Misses"},"cache_time_saved":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Time Saved"},"cache_time_savable":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Time Savable"},"cache_used":{"type":"boolean","title":"Cache Used","default":false},"build_tasks":{"items":{"$ref":"#/components/schemas/BuildTaskResponse"},"type":"array","title":"Build Tasks","default":[]},"initiator_name":{"type":"string","title":"Initiator Name"},"build_monitor_file":{"anyOf":[{"$ref":"#/components/schemas/BuildMonitorFileAvailability"},{"type":"null"}]},"ready_over_active_ratio":{"type":"number","title":"Ready Over Active Ratio"},"logging_level":{"anyOf":[{"$ref":"#/components/schemas/LoggingLevel"},{"type":"null"}]},"ib_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ib Version"},"jobs":{"anyOf":[{"items":{"$ref":"#/components/schemas/JobSpanResponse"},"type":"array"},{"type":"null"}],"title":"Jobs"},"baseline_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Baseline Duration Ms"},"acceleration_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Acceleration Factor"}},"type":"object","required":["public_id","grid_id","grid_name","tenant_id","grid_type","status","start_time","title","cmd","initiator_name","ready_over_active_ratio"],"title":"BuildResponse"},"BuildSortBy":{"type":"string","enum":["duration","start_time"],"title":"BuildSortBy"},"BuildStatus":{"type":"string","enum":["Success","Failed","Canceled","InProgress"],"title":"BuildStatus"},"BuildStatusOverTime":{"properties":{"resolution":{"$ref":"#/components/schemas/TimeResolution"},"data_points":{"items":{"$ref":"#/components/schemas/BuildStatusOverTimeDataPoint"},"type":"array","title":"Data Points"}},"type":"object","required":["resolution","data_points"],"title":"BuildStatusOverTime"},"BuildStatusOverTimeDataPoint":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"status":{"$ref":"#/components/schemas/BuildStatus"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["timestamp","status","count"],"title":"BuildStatusOverTimeDataPoint"},"BuildTaskResponse":{"properties":{"build_id":{"type":"string","title":"Build Id"},"task_id":{"type":"integer","title":"Task Id"},"task_name":{"type":"string","title":"Task Name"},"task_duration":{"type":"integer","title":"Task Duration"},"machine_name":{"type":"string","title":"Machine Name"}},"type":"object","required":["build_id","task_id","task_name","task_duration","machine_name"],"title":"BuildTaskResponse"},"BulkAgentPendingChangeRequest":{"properties":{"agent_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":500,"minItems":1,"title":"Agent Ids"},"payload":{"oneOf":[{"$ref":"#/components/schemas/BulkAssignBuildGroupPayload"},{"$ref":"#/components/schemas/SetHostCommentPendingChangeRequest"},{"$ref":"#/components/schemas/SetAgentLicensePendingChangeRequest"},{"$ref":"#/components/schemas/SetLogLevelPendingChangeRequest"},{"$ref":"#/components/schemas/SetBuildPriorityPendingChangeRequest"},{"$ref":"#/components/schemas/SetBuildCachePendingChangeRequest"}],"title":"Payload","discriminator":{"propertyName":"action","mapping":{"AssignBuildGroup":"#/components/schemas/BulkAssignBuildGroupPayload","SetAgentLicense":"#/components/schemas/SetAgentLicensePendingChangeRequest","SetBuildCache":"#/components/schemas/SetBuildCachePendingChangeRequest","SetBuildPriority":"#/components/schemas/SetBuildPriorityPendingChangeRequest","SetHostComment":"#/components/schemas/SetHostCommentPendingChangeRequest","SetLogLevel":"#/components/schemas/SetLogLevelPendingChangeRequest"}}}},"type":"object","required":["agent_ids","payload"],"title":"BulkAgentPendingChangeRequest"},"BulkAssignBuildGroupPayload":{"properties":{"action":{"type":"string","const":"AssignBuildGroup","title":"Action"},"build_group":{"$ref":"#/components/schemas/BuildGroupRef"}},"type":"object","required":["action","build_group"],"title":"BulkAssignBuildGroupPayload","description":"AssignBuildGroup variant for bulk — no per-agent fields (service fetches from DB)."},"CIPlatform":{"type":"string","enum":["github","gitlab","circleci"],"title":"CIPlatform"},"CIRunnerBucket":{"properties":{"start":{"type":"string","format":"date","title":"Start"},"end":{"type":"string","format":"date","title":"End","description":"Exclusive."},"minutes":{"type":"integer","title":"Minutes"},"jobs":{"type":"integer","title":"Jobs"},"partial":{"type":"boolean","title":"Partial","description":"The bucket containing now; still filling."}},"type":"object","required":["start","end","minutes","jobs","partial"],"title":"CIRunnerBucket"},"CIRunnerCap":{"properties":{"monthly_minutes":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Monthly Minutes","description":"Whole minutes per UTC month; null means unlimited."},"enforced":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enforced","description":"Block new jobs at the cap. Omitted keeps the stored setting."}},"type":"object","required":["monthly_minutes"],"title":"CIRunnerCap"},"CIRunnerJob":{"properties":{"job_id":{"type":"string","title":"Job Id"},"run_attempt":{"type":"integer","title":"Run Attempt"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"workflow_run_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Url"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"ended_at":{"type":"string","format":"date-time","title":"Ended At"},"billable_minutes":{"type":"integer","title":"Billable Minutes"}},"type":"object","required":["job_id","run_attempt","job_name","workflow_run_url","status","started_at","ended_at","billable_minutes"],"title":"CIRunnerJob"},"CIRunnerMonthUsage":{"properties":{"month":{"type":"string","title":"Month"},"minutes":{"type":"integer","title":"Minutes"},"jobs":{"type":"integer","title":"Jobs"}},"type":"object","required":["month","minutes","jobs"],"title":"CIRunnerMonthUsage"},"CIRunnerRepoUsage":{"properties":{"ci_platform":{"type":"string","title":"Ci Platform"},"project_key":{"type":"string","title":"Project Key"},"kind":{"type":"string","enum":["runner","deleted","other"],"title":"Kind"},"hosted_grid_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Hosted Grid Public Id"},"runner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Runner Name"},"minutes":{"type":"integer","title":"Minutes"},"jobs":{"type":"integer","title":"Jobs"},"share_percent":{"type":"number","title":"Share Percent","description":"Share of the tenant's minutes for the month."}},"type":"object","required":["ci_platform","project_key","kind","hosted_grid_public_id","runner_name","minutes","jobs","share_percent"],"title":"CIRunnerRepoUsage"},"CIRunnerUsageDetail":{"properties":{"hosted_grid_public_id":{"type":"string","format":"uuid","title":"Hosted Grid Public Id"},"period":{"type":"string","enum":["daily","weekly","monthly","overall"],"title":"Period"},"buckets":{"items":{"$ref":"#/components/schemas/CIRunnerBucket"},"type":"array","title":"Buckets","description":"Ended jobs only, oldest first."},"this_month_minutes":{"type":"integer","title":"This Month Minutes"},"last_month_minutes":{"type":"integer","title":"Last Month Minutes"},"overall_minutes":{"type":"integer","title":"Overall Minutes"},"tenant_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tenant Cap"},"tenant_percent_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tenant Percent Used"},"tenant_cap_state":{"type":"string","enum":["none","warning","capped"],"title":"Tenant Cap State"},"resets_at":{"type":"string","format":"date-time","title":"Resets At"}},"type":"object","required":["hosted_grid_public_id","period","buckets","this_month_minutes","last_month_minutes","overall_minutes","tenant_cap","tenant_percent_used","tenant_cap_state","resets_at"],"title":"CIRunnerUsageDetail"},"CacheClusterInitiatorResponse":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["agent_id"],"title":"CacheClusterInitiatorResponse"},"CacheClusterNodeResponse":{"properties":{"node_id":{"type":"string","title":"Node Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"$ref":"#/components/schemas/CacheClusterNodeStatus"},"free_disk_space_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Free Disk Space Bytes"},"total_disk_space_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Disk Space Bytes"},"free_cache_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Free Cache Bytes"},"total_cache_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Cache Bytes"},"used_disk_space_bytes":{"type":"integer","title":"Used Disk Space Bytes","readOnly":true},"used_cache_bytes":{"type":"integer","title":"Used Cache Bytes","readOnly":true}},"type":"object","required":["node_id","status","used_disk_space_bytes","used_cache_bytes"],"title":"CacheClusterNodeResponse"},"CacheClusterNodeStatus":{"type":"string","enum":["online","warning","error","offline","stopped","downloading","installing"],"title":"CacheClusterNodeStatus"},"CacheClusterResponse":{"properties":{"cluster_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cluster Id"},"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/CacheClusterStatus"},"nodes":{"items":{"$ref":"#/components/schemas/CacheClusterNodeResponse"},"type":"array","title":"Nodes"},"registered_initiators":{"items":{"type":"string"},"type":"array","title":"Registered Initiators"},"registered_initiator_details":{"items":{"$ref":"#/components/schemas/CacheClusterInitiatorResponse"},"type":"array","title":"Registered Initiator Details"}},"type":"object","required":["cluster_id","grid_id","tenant_id","name","status","nodes","registered_initiators","registered_initiator_details"],"title":"CacheClusterResponse"},"CacheClusterStatus":{"type":"string","enum":["healthy","available","unavailable"],"title":"CacheClusterStatus"},"CacheHitRateOverTime":{"properties":{"resolution":{"$ref":"#/components/schemas/TimeResolution"},"data_points":{"items":{"$ref":"#/components/schemas/CacheHitRateOverTimeDataPoint"},"type":"array","title":"Data Points"}},"type":"object","required":["resolution","data_points"],"title":"CacheHitRateOverTime"},"CacheHitRateOverTimeDataPoint":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"hit_count":{"type":"integer","title":"Hit Count"},"miss_count":{"type":"integer","title":"Miss Count"},"cache_attempts":{"type":"integer","title":"Cache Attempts"},"hit_rate":{"type":"number","title":"Hit Rate"},"miss_rate":{"type":"number","title":"Miss Rate"}},"type":"object","required":["timestamp","hit_count","miss_count","cache_attempts","hit_rate","miss_rate"],"title":"CacheHitRateOverTimeDataPoint"},"CacheTimeSavedResponse":{"properties":{"total_cache_time_saved":{"type":"integer","title":"Total Cache Time Saved"},"build_count":{"type":"integer","title":"Build Count"},"total_remote_core_time":{"type":"number","title":"Total Remote Core Time"},"avg_initiator_cores":{"type":"number","title":"Avg Initiator Cores"},"total_absolute_acceleration_ms":{"type":"integer","title":"Total Absolute Acceleration Ms"}},"type":"object","required":["total_cache_time_saved","build_count","total_remote_core_time","avg_initiator_cores","total_absolute_acceleration_ms"],"title":"CacheTimeSavedResponse"},"CatalogueEntitlements":{"properties":{"initiators":{"type":"integer","title":"Initiators"},"helper_cores":{"type":"integer","title":"Helper Cores"},"cache_cores":{"type":"integer","title":"Cache Cores"}},"type":"object","required":["initiators","helper_cores","cache_cores"],"title":"CatalogueEntitlements","description":"Paddle's own neutral vocabulary — see catalogue_service.py's module\ndocstring for why LicenseSpring wire codes never appear here."},"CataloguePackage":{"properties":{"package_key":{"type":"string","enum":["starter","team","scale"],"title":"Package Key"},"display_name":{"type":"string","title":"Display Name"},"prices":{"items":{"$ref":"#/components/schemas/CataloguePriceOption"},"type":"array","title":"Prices"}},"type":"object","required":["package_key","display_name","prices"],"title":"CataloguePackage"},"CataloguePriceOption":{"properties":{"paddle_price_id":{"type":"string","title":"Paddle Price Id"},"cadence":{"type":"string","enum":["monthly","yearly"],"title":"Cadence"},"amount_minor_units":{"type":"integer","title":"Amount Minor Units"},"currency_code":{"type":"string","title":"Currency Code"},"entitlements":{"$ref":"#/components/schemas/CatalogueEntitlements"}},"type":"object","required":["paddle_price_id","cadence","amount_minor_units","currency_code","entitlements"],"title":"CataloguePriceOption"},"CatalogueResponse":{"properties":{"packages":{"items":{"$ref":"#/components/schemas/CataloguePackage"},"type":"array","title":"Packages"},"fetched_at":{"type":"string","format":"date-time","title":"Fetched At"}},"type":"object","required":["packages","fetched_at"],"title":"CatalogueResponse"},"ChangeMemberRoleRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/MemberRole"}},"type":"object","required":["email","role"],"title":"ChangeMemberRoleRequest"},"CheckoutSessionRequest":{"properties":{"paddle_price_id":{"type":"string","minLength":1,"title":"Paddle Price Id"},"cadence":{"type":"string","enum":["monthly","yearly"],"title":"Cadence"},"license_id":{"type":"string","minLength":1,"title":"License Id"}},"type":"object","required":["paddle_price_id","cadence","license_id"],"title":"CheckoutSessionRequest","description":"`license_id` is the license's public_id; ownership is verified\nserver-side against the authenticated tenant."},"CheckoutSessionResponse":{"properties":{"paddle_price_id":{"type":"string","title":"Paddle Price Id"},"cadence":{"type":"string","enum":["monthly","yearly"],"title":"Cadence"},"transaction_id":{"type":"string","title":"Transaction Id"}},"type":"object","required":["paddle_price_id","cadence","transaction_id"],"title":"CheckoutSessionResponse"},"ClusterActionRequest":{"properties":{"action":{"type":"string","const":"ClusterAction","title":"Action"},"cluster_id":{"type":"integer","title":"Cluster Id"},"endpoint_action":{"type":"string","enum":["Start","Stop","Restart","ClearCache"],"title":"Endpoint Action"}},"type":"object","required":["action","cluster_id","endpoint_action"],"title":"ClusterActionRequest","description":"Applied server-side to the cluster's nodes where the action qualifies."},"ConditionLogic":{"type":"string","enum":["all","any"],"title":"ConditionLogic","description":"How an alert rule combines its conditions."},"ConditionOperator":{"type":"string","enum":["is","is_not","is_exactly","contains","does_not_contain","starts_with","ends_with","is_longer_than","is_shorter_than","is_more_than","is_fewer_than","is_at_least","is_at_most","is_between"],"title":"ConditionOperator"},"ConditionTarget":{"type":"string","enum":["build_result","build_name","grid","duration","peak_cores","avg_cores"],"title":"ConditionTarget"},"ConditionTargetOption":{"properties":{"target":{"$ref":"#/components/schemas/ConditionTarget"},"operators":{"items":{"$ref":"#/components/schemas/ConditionOperator"},"type":"array","title":"Operators"}},"type":"object","required":["target","operators"],"title":"ConditionTargetOption"},"CreateAdminTenant":{"properties":{"name":{"type":"string","title":"Name"},"sso_subdomain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sso Subdomain"}},"type":"object","required":["name"],"title":"CreateAdminTenant"},"CreateBuildGroupPendingChangeRequest":{"properties":{"action":{"type":"string","const":"CreateBuildGroup","title":"Action"},"name":{"type":"string","title":"Name"},"cloud_enabled":{"type":"boolean","title":"Cloud Enabled"}},"type":"object","required":["action","name","cloud_enabled"],"title":"CreateBuildGroupPendingChangeRequest"},"CreateClusterRequest":{"properties":{"action":{"type":"string","const":"CreateCluster","title":"Action"},"name":{"type":"string","title":"Name"},"node_ids":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"title":"Node Ids"}},"type":"object","required":["action","name","node_ids"],"title":"CreateClusterRequest"},"CreateNotificationRequest":{"properties":{"user_public_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"User Public Ids"},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"object_type":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Object Type"},"object_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Object Id"}},"type":"object","required":["title"],"title":"CreateNotificationRequest"},"CreateReleaseNotificationRequest":{"properties":{"platform":{"type":"string","enum":["windows","linux"],"title":"Platform"},"release_version":{"type":"string","maxLength":100,"minLength":1,"title":"Release Version"}},"type":"object","required":["platform","release_version"],"title":"CreateReleaseNotificationRequest","description":"Back-office manual trigger for the new-release notification (IBS-970)."},"CreateReleaseNotificationResponse":{"properties":{"message_id":{"type":"string","title":"Message Id"}},"type":"object","required":["message_id"],"title":"CreateReleaseNotificationResponse"},"CreateSupportCaseCommentRequest":{"properties":{"body":{"type":"string","maxLength":32000,"title":"Body","default":""},"attachments":{"items":{"$ref":"#/components/schemas/SupportAttachmentUpload"},"type":"array","maxItems":5,"title":"Attachments"}},"type":"object","title":"CreateSupportCaseCommentRequest","description":"A customer reply: text, files, or both — but not empty."},"CreateSupportCaseRequest":{"properties":{"subject":{"type":"string","maxLength":255,"minLength":1,"title":"Subject"},"description":{"type":"string","maxLength":32000,"minLength":1,"title":"Description"},"severity":{"$ref":"#/components/schemas/SupportCaseSeverity"},"product":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Product"},"attachments":{"items":{"$ref":"#/components/schemas/SupportAttachmentUpload"},"type":"array","maxItems":5,"title":"Attachments"}},"type":"object","required":["subject","description","severity"],"title":"CreateSupportCaseRequest"},"CreateSupportCaseResponse":{"properties":{"id":{"type":"string","title":"Id"},"case_number":{"type":"string","title":"Case Number"},"subject":{"type":"string","title":"Subject"},"status":{"type":"string","title":"Status"},"is_closed":{"type":"boolean","title":"Is Closed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_activity_at":{"type":"string","format":"date-time","title":"Last Activity At"},"attachments_failed":{"type":"boolean","title":"Attachments Failed","default":false}},"type":"object","required":["id","case_number","subject","status","is_closed","created_at","last_activity_at"],"title":"CreateSupportCaseResponse","description":"A freshly opened case, plus whether its files made it onto the case.\n\nThe Case has to exist before files can be linked to it, so an upload that\nfails leaves a real case behind — reporting that as a failure would invite\nthe reporter to submit the form again and open a duplicate. The case is\nreturned as created and this flag lets the UI say the files didn't make it."},"DataSharingLevel":{"type":"string","enum":["basic","build","full"],"title":"DataSharingLevel"},"DataSharingOnboardingSettings":{"properties":{"level":{"$ref":"#/components/schemas/DataSharingLevel"},"remote_update_enabled":{"type":"boolean","title":"Remote Update Enabled"},"debug_build_monitor_enabled":{"type":"boolean","title":"Debug Build Monitor Enabled"}},"type":"object","required":["level","remote_update_enabled","debug_build_monitor_enabled"],"title":"DataSharingOnboardingSettings","description":"The Admin's data-sharing choice at token-generation time — all three fields required, the grid's complete initial state."},"DataSharingPolicyDocument":{"properties":{"version":{"type":"integer","title":"Version"},"level":{"$ref":"#/components/schemas/DataSharingLevel"},"events":{"$ref":"#/components/schemas/EventsSection"},"buildMonitor":{"$ref":"#/components/schemas/BuildMonitorSection"},"debugBuildMonitor":{"$ref":"#/components/schemas/FlagSection"},"remoteUpdate":{"$ref":"#/components/schemas/FlagSection"}},"type":"object","required":["version","level","events","buildMonitor","debugBuildMonitor","remoteUpdate"],"title":"DataSharingPolicyDocument"},"DataSharingSettingsResponse":{"properties":{"data_sharing_level":{"$ref":"#/components/schemas/DataSharingLevel"},"remote_update_enabled":{"type":"boolean","title":"Remote Update Enabled"},"debug_build_monitor_enabled":{"type":"boolean","title":"Debug Build Monitor Enabled"},"enforced":{"type":"boolean","title":"Enforced"},"min_manager_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Manager Version"},"manager_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Version"},"pending_change":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Change"}},"type":"object","required":["data_sharing_level","remote_update_enabled","debug_build_monitor_enabled","enforced"],"title":"DataSharingSettingsResponse"},"DataSharingSettingsUpdate":{"properties":{"data_sharing_level":{"anyOf":[{"$ref":"#/components/schemas/DataSharingLevel"},{"type":"null"}]},"remote_update_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Remote Update Enabled"},"debug_build_monitor_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Debug Build Monitor Enabled"}},"type":"object","title":"DataSharingSettingsUpdate"},"DeleteBuildGroupPendingChangeRequest":{"properties":{"action":{"type":"string","const":"DeleteBuildGroup","title":"Action"},"group_id":{"type":"string","title":"Group Id"}},"type":"object","required":["action","group_id"],"title":"DeleteBuildGroupPendingChangeRequest"},"DeleteClusterRequest":{"properties":{"action":{"type":"string","const":"DeleteCluster","title":"Action"},"cluster_id":{"type":"integer","title":"Cluster Id"}},"type":"object","required":["action","cluster_id"],"title":"DeleteClusterRequest"},"DeleteNotificationsRequest":{"properties":{"public_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Public Ids"},"all":{"type":"boolean","title":"All","default":false},"unseen_only":{"type":"boolean","title":"Unseen Only","default":false}},"type":"object","title":"DeleteNotificationsRequest","description":"Body for POST /notifications/delete."},"DurationRange":{"properties":{"min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max"}},"type":"object","title":"DurationRange"},"EditBuildGroupPendingChangeRequest":{"properties":{"action":{"type":"string","const":"EditBuildGroup","title":"Action"},"group_id":{"type":"string","title":"Group Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"cloud_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cloud Enabled"}},"type":"object","required":["action","group_id"],"title":"EditBuildGroupPendingChangeRequest"},"EditClusterRequest":{"properties":{"action":{"type":"string","const":"EditCluster","title":"Action"},"cluster_id":{"type":"integer","title":"Cluster Id"},"name":{"type":"string","title":"Name"},"node_ids":{"items":{"type":"string"},"type":"array","maxItems":500,"title":"Node Ids"},"base_node_ids":{"items":{"type":"string"},"type":"array","maxItems":500,"title":"Base Node Ids"},"confirm_delete":{"type":"boolean","title":"Confirm Delete","default":false}},"type":"object","required":["action","cluster_id","name","node_ids","base_node_ids"],"title":"EditClusterRequest","description":"``base_node_ids`` is the node set the edit was built from, to catch concurrent edits; empty ``node_ids`` deletes."},"EmailOptOutResponse":{"properties":{"email":{"type":"string","title":"Email"},"email_hash":{"type":"string","title":"Email Hash"},"alert_trigger":{"anyOf":[{"$ref":"#/components/schemas/AlertTrigger"},{"type":"null"}]},"tenant_wide":{"type":"boolean","title":"Tenant Wide"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["email","email_hash","alert_trigger","tenant_wide","created_at"],"title":"EmailOptOutResponse","description":"One AlertEmailOptOut row (IBS-1591/1612) — an address can have more\nthan one entry (e.g. opted out of one alert rule *and* opted out of\neverything), so this is a flat list, not deduped per address; the caller\ngroups by ``email`` if it wants to."},"EndpointActionRequest":{"properties":{"action":{"type":"string","const":"EndpointAction","title":"Action"},"endpoint_id":{"type":"string","maxLength":255,"minLength":1,"title":"Endpoint Id"},"endpoint_action":{"type":"string","enum":["Start","Stop","Restart","ClearCache"],"title":"Endpoint Action"}},"type":"object","required":["action","endpoint_id","endpoint_action"],"title":"EndpointActionRequest"},"EventsSection":{"properties":{"allow":{"items":{"type":"string"},"type":"array","title":"Allow"},"blankFields":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Blankfields"}},"type":"object","required":["allow"],"title":"EventsSection"},"Evidence":{"properties":{"label":{"type":"string","title":"Label","description":"Short label describing the role of this evidence, e.g. 'Compiler error', 'Related change detected', 'Include path mismatch'."},"excerpt":{"type":"string","title":"Excerpt","description":"VERBATIM excerpt from the logs or build context supporting the diagnosis. May be trimmed with '…' but never paraphrased or altered."}},"type":"object","required":["label","excerpt"],"title":"Evidence"},"ExchangeAccessKeyRequest":{"properties":{"access_key":{"type":"string","title":"Access Key"},"grid_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Grid Id"}},"type":"object","required":["access_key"],"title":"ExchangeAccessKeyRequest"},"ExchangeAccessKeyResponse":{"properties":{"session_token":{"type":"string","title":"Session Token"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["session_token","expires_in"],"title":"ExchangeAccessKeyResponse"},"FailureReason":{"type":"string","enum":["superseded","coordinator_error","timeout"],"title":"FailureReason"},"FlagSection":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"FlagSection"},"GenerateSSOLinkRequest":{"properties":{"expire_in_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Expire In Days","default":30}},"type":"object","title":"GenerateSSOLinkRequest"},"GridAccelerationType":{"type":"string","enum":["windows","linux"],"title":"GridAccelerationType"},"GridAccessStatus":{"type":"string","enum":["awaiting_connection","connected"],"title":"GridAccessStatus"},"GridConnectionToken":{"properties":{"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"token":{"type":"string","title":"Token"}},"type":"object","required":["grid_id","token"],"title":"GridConnectionToken"},"GridConnectionTokenRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"data_sharing":{"anyOf":[{"$ref":"#/components/schemas/DataSharingOnboardingSettings"},{"type":"null"}]}},"type":"object","required":["name"],"title":"GridConnectionTokenRequest"},"GridEventRequest":{"properties":{"event_name":{"type":"string","title":"Event Name"},"event_data":{"additionalProperties":true,"type":"object","title":"Event Data"},"source":{"type":"string","title":"Source"},"version":{"type":"string","title":"Version"},"acceleration_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceleration Type"}},"type":"object","required":["event_name","event_data","source","version"],"title":"GridEventRequest"},"GridFilter":{"properties":{"grid_id":{"type":"string","format":"uuid","title":"Grid Id"}},"type":"object","required":["grid_id"],"title":"GridFilter"},"GridMetrics":{"properties":{"online_agents":{"type":"integer","title":"Online Agents"},"total_agents":{"type":"integer","title":"Total Agents"},"ci_initiators":{"type":"integer","title":"Ci Initiators"},"initiators":{"type":"integer","title":"Initiators"},"build_cache_clusters":{"type":"integer","title":"Build Cache Clusters"},"build_count":{"type":"integer","title":"Build Count"}},"type":"object","required":["online_agents","total_agents","ci_initiators","initiators","build_cache_clusters","build_count"],"title":"GridMetrics"},"GridMetricsResponse":{"properties":{"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"metrics":{"$ref":"#/components/schemas/GridMetrics"}},"type":"object","required":["grid_id","metrics"],"title":"GridMetricsResponse"},"GridResponse":{"properties":{"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"is_active":{"type":"boolean","title":"Is Active"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"$ref":"#/components/schemas/GridAccessStatus"},"last_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen"},"acceleration_type":{"anyOf":[{"$ref":"#/components/schemas/GridAccelerationType"},{"type":"null"}]},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"last_notified_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Notified Version"},"latest_available_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Available Version"},"is_trial":{"type":"boolean","title":"Is Trial","default":false},"trial_download_started":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trial Download Started"},"trial_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Expires At"},"license_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Key"},"coordinator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coordinator Name"},"data_sharing_level":{"$ref":"#/components/schemas/DataSharingLevel","default":"full"},"remote_update_enabled":{"type":"boolean","title":"Remote Update Enabled","default":true},"debug_build_monitor_enabled":{"type":"boolean","title":"Debug Build Monitor Enabled","default":true}},"type":"object","required":["grid_id","is_active","name","status"],"title":"GridResponse"},"GridType":{"type":"string","enum":["self_hosted","hosted"],"title":"GridType","description":"Type of grid (self-hosted or hosted)"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HostedGridCreate":{"properties":{"ci_platform":{"$ref":"#/components/schemas/CIPlatform"},"project_key":{"type":"string","title":"Project Key"},"runner_type":{"$ref":"#/components/schemas/HostedGridRunnerType"},"status":{"$ref":"#/components/schemas/HostedGridStatus","default":"Initiating"}},"type":"object","required":["ci_platform","project_key","runner_type"],"title":"HostedGridCreate"},"HostedGridMetricsResponse":{"properties":{"hosted_grid_id":{"type":"string","format":"uuid","title":"Hosted Grid Id"},"build_count":{"type":"integer","title":"Build Count"},"average_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Duration Ms"}},"type":"object","required":["hosted_grid_id","build_count","average_duration_ms"],"title":"HostedGridMetricsResponse","description":"Metrics for a hosted grid based on builds (root spans) from the last week."},"HostedGridResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"ci_platform":{"$ref":"#/components/schemas/CIPlatform"},"project_key":{"type":"string","title":"Project Key"},"runner_type":{"$ref":"#/components/schemas/HostedGridRunnerType"},"status":{"$ref":"#/components/schemas/HostedGridStatus"},"profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile"},"use_incredibuild":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Incredibuild"},"ib_console_flags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ib Console Flags"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["public_id","tenant_id","name","ci_platform","project_key","runner_type","status","profile","created_at","updated_at"],"title":"HostedGridResponse"},"HostedGridRunnerType":{"type":"string","enum":["Rust (Linux) - Free trial"],"title":"HostedGridRunnerType"},"HostedGridStatus":{"type":"string","enum":["Initiating","Ready","Failed"],"title":"HostedGridStatus"},"HostedGridUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"ci_platform":{"anyOf":[{"$ref":"#/components/schemas/CIPlatform"},{"type":"null"}]},"project_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Key"},"runner_type":{"anyOf":[{"$ref":"#/components/schemas/HostedGridRunnerType"},{"type":"null"}]},"status":{"anyOf":[{"$ref":"#/components/schemas/HostedGridStatus"},{"type":"null"}]},"profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile"},"use_incredibuild":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Incredibuild"},"ib_console_flags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ib Console Flags"}},"type":"object","title":"HostedGridUpdate"},"ImpersonationLoginIdResponse":{"properties":{"login_id":{"type":"string","title":"Login Id"},"tenants":{"items":{"$ref":"#/components/schemas/ImpersonationTenant"},"type":"array","title":"Tenants"}},"type":"object","required":["login_id"],"title":"ImpersonationLoginIdResponse"},"ImpersonationTenant":{"properties":{"descope_tenant_id":{"type":"string","title":"Descope Tenant Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["descope_tenant_id","name"],"title":"ImpersonationTenant","description":"One tenant an impersonation target belongs to (IBS-2055)."},"Insight":{"properties":{"type":{"$ref":"#/components/schemas/InsightType"},"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"grid_name":{"type":"string","title":"Grid Name"},"affected_builds":{"type":"integer","title":"Affected Builds"},"total_builds":{"type":"integer","title":"Total Builds"},"percentage":{"type":"number","title":"Percentage"},"max_build_cores":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Build Cores"}},"type":"object","required":["type","grid_id","grid_name","affected_builds","total_builds","percentage"],"title":"Insight"},"InsightType":{"type":"string","enum":["waiting_for_cpu"],"title":"InsightType"},"InsightsResponse":{"properties":{"insights":{"items":{"$ref":"#/components/schemas/Insight"},"type":"array","title":"Insights"}},"type":"object","required":["insights"],"title":"InsightsResponse"},"IntegrationResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provider":{"$ref":"#/components/schemas/WebhookProvider"},"webhook_url":{"type":"string","title":"Webhook Url"},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers"},"auth":{"$ref":"#/components/schemas/WebhookAuthResponse"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["public_id","name","description","provider","webhook_url","auth","created_at","updated_at"],"title":"IntegrationResponse"},"InvitationStatus":{"type":"string","enum":["invited","enabled","expired"],"title":"InvitationStatus"},"InviteUserRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/MemberRole","default":"member"}},"type":"object","required":["email"],"title":"InviteUserRequest"},"InviteUserResponse":{"properties":{"email":{"type":"string","title":"Email"},"message":{"type":"string","title":"Message"}},"type":"object","required":["email","message"],"title":"InviteUserResponse"},"JobDisposition":{"type":"string","enum":["migratable","already_migrated","manual","not_applicable"],"title":"JobDisposition"},"JobPlan":{"properties":{"job_id":{"type":"string","title":"Job Id"},"target_id":{"type":"string","title":"Target Id"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"variant_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Label"},"kind":{"$ref":"#/components/schemas/RunsOnKind"},"disposition":{"$ref":"#/components/schemas/JobDisposition"},"manual_reason":{"anyOf":[{"$ref":"#/components/schemas/ManualReason"},{"type":"null"}]},"current_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Label"},"proposed_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposed Label"},"snippet":{"type":"string","title":"Snippet"},"line":{"type":"integer","title":"Line"}},"type":"object","required":["job_id","target_id","job_name","variant_label","kind","disposition","manual_reason","current_label","proposed_label","snippet","line"],"title":"JobPlan","description":"One migration target: a plain job, or one element of a matrix axis.\n\nA matrix job yields several of these -- one per axis element -- because its\nelements are independently migratable and must be independently selectable. The\nUI's row unit is unchanged; there are simply more rows."},"JobRunner":{"type":"string","enum":["All","Incredibuild","Not incredibuild"],"title":"JobRunner"},"JobSpanResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"span_id":{"type":"string","title":"Span Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"conclusion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conclusion"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"},"duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Ms"},"labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Labels"},"steps":{"items":{"$ref":"#/components/schemas/StepSpanResponse"},"type":"array","title":"Steps","default":[]}},"type":"object","required":["public_id","span_id","name","status","conclusion","start_time","end_time","duration_ms"],"title":"JobSpanResponse","description":"Response schema for a job span (child of a workflow)"},"LeaveBlockReason":{"type":"string","enum":["last_admin","only_member"],"title":"LeaveBlockReason"},"LeaveTenantResponse":{"properties":{"account_deleted":{"type":"boolean","title":"Account Deleted"}},"type":"object","required":["account_deleted"],"title":"LeaveTenantResponse","description":"`account_deleted` is true when the tenant left was the caller's last\none: Descope then deletes the whole account, and the client must sign\nout rather than try to continue in it."},"LicenseResponse":{"properties":{"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"license_key":{"type":"string","title":"License Key"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Name"},"addon_features":{"items":{"type":"string"},"type":"array","title":"Addon Features"},"fixed_initiators":{"type":"integer","title":"Fixed Initiators"},"floating_initiators":{"type":"integer","title":"Floating Initiators"},"fixed_ci_initiators":{"type":"integer","title":"Fixed Ci Initiators"},"floating_ci_initiators":{"type":"integer","title":"Floating Ci Initiators"},"fixed_helper_cores":{"type":"integer","title":"Fixed Helper Cores"},"floating_helper_cores":{"type":"integer","title":"Floating Helper Cores"},"cache_cores":{"type":"integer","title":"Cache Cores"},"available_fixed_helper_cores":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Fixed Helper Cores"},"available_floating_helper_cores":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Floating Helper Cores"},"available_fixed_initiators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Fixed Initiators"},"available_floating_initiators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Floating Initiators"},"available_fixed_ci_initiators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Fixed Ci Initiators"},"available_floating_ci_initiators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Floating Ci Initiators"},"cooldown_fixed_initiators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cooldown Fixed Initiators"},"cooldown_fixed_ci_initiators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cooldown Fixed Ci Initiators"},"initiator_cooldown_release":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initiator Cooldown Release"},"ci_initiator_cooldown_release":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ci Initiator Cooldown Release"},"remaining_build_cache_cores":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Remaining Build Cache Cores"},"build_cache_next_reset_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Build Cache Next Reset Time"},"build_cache_reset_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Build Cache Reset Minutes"},"unlimited_helper_cores":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unlimited Helper Cores"},"unlimited_cache_cores":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unlimited Cache Cores"},"registered_floating_cores":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Registered Floating Cores"},"cloud_license_enabled":{"type":"boolean","title":"Cloud License Enabled","default":false}},"type":"object","required":["grid_id","tenant_id","license_key","expires_at","tier_name","addon_features","fixed_initiators","floating_initiators","fixed_ci_initiators","floating_ci_initiators","fixed_helper_cores","floating_helper_cores","cache_cores"],"title":"LicenseResponse"},"LicenseSpringCustomerResponse":{"properties":{"customer_id":{"type":"string","title":"Customer Id"},"public_id":{"type":"string","format":"uuid","title":"Public Id"},"customer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Name"}},"type":"object","required":["customer_id","public_id"],"title":"LicenseSpringCustomerResponse"},"LicenseSpringCustomerSearchResult":{"properties":{"id":{"type":"string","title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"}},"type":"object","required":["id"],"title":"LicenseSpringCustomerSearchResult","description":"A LicenseSpring customer surfaced by the back-office search combo box."},"LicenseSpringSyncResult":{"properties":{"total":{"type":"integer","title":"Total"},"new_count":{"type":"integer","title":"New Count"}},"type":"object","required":["total","new_count"],"title":"LicenseSpringSyncResult","description":"Summary of a customer license sync (IBS-1476): how many licenses the\ncustomer now has linked, and how many were newly added by this sync."},"LinkLicenseRequest":{"properties":{"license_key":{"type":"string","maxLength":50,"minLength":1,"title":"License Key"},"platform":{"$ref":"#/components/schemas/GridAccelerationType","default":"windows"}},"type":"object","required":["license_key"],"title":"LinkLicenseRequest","description":"Back-office request to manually link a license key to a tenant."},"LinkSalesforceAccountRequest":{"properties":{"account_id":{"type":"string","maxLength":320,"minLength":1,"title":"Account Id"},"account_name":{"type":"string","maxLength":320,"minLength":1,"title":"Account Name"}},"type":"object","required":["account_id","account_name"],"title":"LinkSalesforceAccountRequest"},"LoggingLevel":{"type":"string","enum":["minimal","basic","intermediate","extended","detailed"],"title":"LoggingLevel"},"LongBuild":{"properties":{"build_id":{"type":"string","format":"uuid","title":"Build Id"},"build_title":{"type":"string","title":"Build Title"},"build_cmd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Cmd"},"build_duration":{"type":"integer","title":"Build Duration"},"build_status":{"$ref":"#/components/schemas/BuildStatus"},"build_initiator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Initiator"},"build_start_time":{"type":"string","format":"date-time","title":"Build Start Time"}},"type":"object","required":["build_id","build_title","build_cmd","build_duration","build_status","build_initiator","build_start_time"],"title":"LongBuild"},"LongBuildTask":{"properties":{"build_id":{"type":"string","format":"uuid","title":"Build Id"},"build_title":{"type":"string","title":"Build Title"},"build_cmd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Cmd"},"build_duration":{"type":"integer","title":"Build Duration"},"task_id":{"type":"integer","title":"Task Id"},"task_name":{"type":"string","title":"Task Name"},"task_duration":{"type":"integer","title":"Task Duration"},"machine_name":{"type":"string","title":"Machine Name"},"build_start_time":{"type":"string","format":"date-time","title":"Build Start Time"}},"type":"object","required":["build_id","build_title","build_cmd","build_duration","task_id","task_name","task_duration","machine_name","build_start_time"],"title":"LongBuildTask"},"LongestBuildsResponse":{"properties":{"builds":{"items":{"$ref":"#/components/schemas/LongBuild"},"type":"array","title":"Builds"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["builds","total_count"],"title":"LongestBuildsResponse"},"LongestTasksResponse":{"properties":{"tasks":{"items":{"$ref":"#/components/schemas/LongBuildTask"},"type":"array","title":"Tasks"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["tasks","total_count"],"title":"LongestTasksResponse"},"ManagerTrialLicenseRequest":{"properties":{"device_key":{"type":"string","maxLength":8192,"minLength":1,"title":"Device Key"}},"type":"object","required":["device_key"],"title":"ManagerTrialLicenseRequest"},"ManagerTrialLicenseResponse":{"properties":{"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"}},"type":"object","title":"ManagerTrialLicenseResponse"},"ManagerVersionUpdateRequest":{"properties":{"target_version":{"type":"string","title":"Target Version"}},"type":"object","required":["target_version"],"title":"ManagerVersionUpdateRequest"},"ManagerVersionUpdateResponse":{"properties":{"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"pending_changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Changes"}},"type":"object","required":["grid_id"],"title":"ManagerVersionUpdateResponse","description":"Response for POST /grids/{grid_id}/version-update (IBS-2386).\n\nDeliberately narrow rather than the full GridResponse: this endpoint's\nonly job is to dispatch a command and report the resulting pending\nstate, not to re-serve every grid-listing field. `pending_changes` is\nthe caller's one signal that the dispatch happened, mirroring\nreset_license's own `pending_changes.actions.ResetLicense` contract."},"ManualReason":{"type":"string","enum":["multi_element_array","object_group_labels","matrix_expression","other_expression","not_ubuntu","self_hosted","unparseable_file","anchor_or_alias","unknown_label"],"title":"ManualReason"},"MarkSeenRequest":{"properties":{"public_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Public Ids"},"all":{"type":"boolean","title":"All","default":false}},"type":"object","title":"MarkSeenRequest"},"MemberEmailRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"MemberEmailRequest"},"MemberRole":{"type":"string","enum":["admin","member"],"title":"MemberRole","description":"Tenant permission tier (IBS-1136). The public API uses the lowercase\nvalues; while the Descope mirror writes continue they map to its role\nnames (\"Admin\"/\"Viewer\", member being Viewer)."},"MigrationPlanResponse":{"properties":{"state":{"type":"string","enum":["ready","permissions_pending","no_workflows","existing_pr","service_unavailable","service_not_configured","rate_limited","app_not_installed","app_credentials_rejected","repository_not_accessible","repository_moved","no_runner","archived","error"],"title":"State"},"repo_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Full Name"},"default_branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Branch"},"target_label":{"type":"string","title":"Target Label"},"workflows":{"items":{"$ref":"#/components/schemas/WorkflowPlan"},"type":"array","title":"Workflows"},"existing_pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Existing Pr Url"},"missing_permissions":{"items":{"type":"string"},"type":"array","title":"Missing Permissions"}},"type":"object","required":["state","target_label"],"title":"MigrationPlanResponse"},"MigrationSelection":{"properties":{"path":{"type":"string","title":"Path"},"blob_sha":{"type":"string","minLength":1,"title":"Blob Sha"},"target_ids":{"items":{"type":"string"},"type":"array","title":"Target Ids"}},"type":"object","required":["path","blob_sha","target_ids"],"title":"MigrationSelection"},"MostFailingWorkload":{"properties":{"name":{"type":"string","title":"Name"},"grid_type":{"$ref":"#/components/schemas/GridType"},"failed_count":{"type":"integer","title":"Failed Count"},"last_failed":{"type":"string","format":"date-time","title":"Last Failed"},"initiator_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initiator Count"},"initiators":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Initiators"},"repository":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository"}},"type":"object","required":["name","grid_type","failed_count","last_failed"],"title":"MostFailingWorkload","description":"One failing-workload row, discriminated by grid_type like BuildResponse\nabove: SELF_HOSTED rows carry the initiator fields, HOSTED rows carry\n`repository`. A workload name present on both sides yields two separate\nrows — see get_most_failing_workloads for why. Not a per-entity row, so\nthere's no public_id."},"MostFailingWorkloadsResponse":{"properties":{"workloads":{"items":{"$ref":"#/components/schemas/MostFailingWorkload"},"type":"array","title":"Workloads"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["workloads","total_count"],"title":"MostFailingWorkloadsResponse"},"MoveNodeRequest":{"properties":{"action":{"type":"string","const":"MoveNode","title":"Action"},"source_cluster_id":{"type":"integer","title":"Source Cluster Id"},"target_cluster_id":{"type":"integer","title":"Target Cluster Id"},"node_id":{"type":"string","maxLength":255,"minLength":1,"title":"Node Id"},"confirm_delete":{"type":"boolean","title":"Confirm Delete","default":false}},"type":"object","required":["action","source_cluster_id","target_cluster_id","node_id"],"title":"MoveNodeRequest"},"NotificationListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/NotificationResponse"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Next Cursor"},"unseen_count":{"type":"integer","title":"Unseen Count"}},"type":"object","required":["data","next_cursor","unseen_count"],"title":"NotificationListResponse"},"NotificationResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"title":{"type":"string","title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"object_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type"},"object_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Id"},"seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Seen At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["public_id","title","content","link","object_type","object_id","seen_at","created_at"],"title":"NotificationResponse"},"OfflineActivationRequest":{"properties":{"rec_file_base64":{"type":"string","minLength":1,"title":"Rec File Base64"}},"type":"object","required":["rec_file_base64"],"title":"OfflineActivationRequest","description":"Offline .req file for a license reset, base64-encoded so it can be sent as a\nJSON POST instead of a multipart file upload (IBS-1694): some customer networks\nblock multipart uploads outright, so the file never reached the backend. The\nbackend base64-decodes this field to rebuild the original .req bytes."},"OnboardGridResponse":{"properties":{"access_key":{"type":"string","title":"Access Key"},"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"dataSharingPolicy":{"$ref":"#/components/schemas/DataSharingPolicyDocument"}},"type":"object","required":["access_key","grid_id","dataSharingPolicy"],"title":"OnboardGridResponse"},"OpenPullRequestRequest":{"properties":{"repository":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository"},"grid_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Grid Public Id"},"selections":{"items":{"$ref":"#/components/schemas/MigrationSelection"},"type":"array","title":"Selections"}},"type":"object","required":["selections"],"title":"OpenPullRequestRequest"},"OpenPullRequestResponse":{"properties":{"state":{"type":"string","enum":["opened","existing_pr","failed"],"title":"State"},"pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pr Url"},"failure_reason":{"anyOf":[{"type":"string","enum":["permissions_missing","ruleset_blocked","branch_creation_restricted","archived","stale_content","protected_branch","no_changes","rewrite_unsafe","rate_limited","service_unavailable","service_not_configured","app_not_installed","app_credentials_rejected","repository_moved","repository_not_accessible","unknown"]},{"type":"null"}],"title":"Failure Reason"},"jobs_migrated":{"type":"integer","title":"Jobs Migrated","default":0},"jobs_manual":{"type":"integer","title":"Jobs Manual","default":0}},"type":"object","required":["state"],"title":"OpenPullRequestResponse"},"OptOutContextResponse":{"properties":{"source_name":{"type":"string","title":"Source Name"},"alert_trigger":{"$ref":"#/components/schemas/AlertTrigger"},"masked_email":{"type":"string","title":"Masked Email"}},"type":"object","required":["source_name","alert_trigger","masked_email"],"title":"OptOutContextResponse"},"OptOutRequest":{"properties":{"token":{"type":"string","title":"Token"},"scope":{"$ref":"#/components/schemas/OptOutScope"}},"type":"object","required":["token","scope"],"title":"OptOutRequest"},"OptOutResponse":{"properties":{"scope":{"$ref":"#/components/schemas/OptOutScope"}},"type":"object","required":["scope"],"title":"OptOutResponse"},"OptOutScope":{"type":"string","enum":["this_alert","all"],"title":"OptOutScope","description":"What a recipient chooses on the opt-out page: stop just the alert rule\ntheir link was about, or every alert email at their address\n(tenant-wide)."},"PaddleSubscriptionState":{"properties":{"status":{"type":"string","title":"Status"},"scheduled_change_effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled Change Effective At"},"current_period_end":{"type":"string","format":"date-time","title":"Current Period End"},"cadence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cadence"},"billing_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Billing Amount"},"currency_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency Code"},"payment_recovery_deadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Payment Recovery Deadline"}},"type":"object","required":["status","current_period_end"],"title":"PaddleSubscriptionState","description":"Whether a license has a Paddle subscription, and its lifecycle state\n(IBS-2121). `None` on `TenantLicenseWithGridResponse.paddle_subscription`\nmeans the license has no `paddle_subscriptions` row at all -- trial,\nsales-led, pre-Paddle-import, manual, or the grid-move orphan edge case\ndocumented on the `PaddleSubscription` model -- distinguishable from \"has\none, active, no scheduled change\" (`scheduled_change_effective_at=None`).\nThis distinction is the frontend's render-gate condition for the cancel\nbutton (D-2121-COORD-13).\n\nNo `scheduled_change_action` field (schema collapsed post-review): Paddle's\n`action` (cancel/pause/resume) is used only as a write-time filter on the\n`paddle_subscriptions` row, never stored -- `scheduled_change_effective_at`\nis populated only for a scheduled cancellation, so its mere presence here\nalready means \"will not renew,\" with no separate action to check.\n\n`current_period_end`/`cadence`/`billing_amount`/`currency_code` (IBS-2358)\nare straight passthroughs of the same-named `PaddleSubscription` columns --\nsee that model's docstring for provenance. `cadence`/`billing_amount`/\n`currency_code` are nullable because a pre-IBS-2358 row has no backfill and\nstays NULL until its next `transaction.completed` delivery.\n\n`payment_recovery_deadline` (IBS-2407) is `past_due_since + 30 days`,\ncomputed in `_paddle_subscription_state` rather than stored -- present\nonly when `status == \"past_due\"` and the subscription actually has a\n`past_due_since` (a pre-existing `past_due` row with no `past_due_since`,\nor any other status, exposes no deadline rather than a wrong one). 30\ndays is Paddle's confirmed fixed dunning-recovery-window default for this\naccount (no Retain add-on enabled, so no dashboard override exists) --\nsee spec.md Q2, not a guess."},"Page_list_AdminTenant__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/AdminTenant"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[AdminTenant]]"},"Page_list_AgentResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/AgentResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[AgentResponse]]"},"Page_list_AuditEventAdminResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/AuditEventAdminResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[AuditEventAdminResponse]]"},"Page_list_AuditEventResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/AuditEventResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[AuditEventResponse]]"},"Page_list_BuildCacheCandidateResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/BuildCacheCandidateResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[BuildCacheCandidateResponse]]"},"Page_list_BuildMonitorTaskItem__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/BuildMonitorTaskItem"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[BuildMonitorTaskItem]]"},"Page_list_BuildResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/BuildResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[BuildResponse]]"},"Page_list_CIRunnerJob__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/CIRunnerJob"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[CIRunnerJob]]"},"Page_list_CacheClusterResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/CacheClusterResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[CacheClusterResponse]]"},"Page_list_HostedGridResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/HostedGridResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[HostedGridResponse]]"},"Page_list_RunnerInstanceResponse__":{"properties":{"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_count":{"type":"integer","title":"Total Count"},"total_pages":{"type":"integer","title":"Total Pages"},"data":{"items":{"$ref":"#/components/schemas/RunnerInstanceResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","page_size","total_count","total_pages","data"],"title":"Page[list[RunnerInstanceResponse]]"},"PartialUpdateUser":{"properties":{"name":{"type":"string","title":"Name"},"tenant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Name"}},"type":"object","required":["name"],"title":"PartialUpdateUser"},"RcaPromptResponse":{"properties":{"active_content":{"type":"string","title":"Active Content"},"active_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Version"},"has_override":{"type":"boolean","title":"Has Override"}},"type":"object","required":["active_content","has_override"],"title":"RcaPromptResponse","description":"The currently-effective root-cause-analysis prompt.\n\n`active_version` is null and `has_override` is false when no version has been\nsaved yet — `active_content` is then the in-code default from builds_rca."},"RcaResponse":{"properties":{"headline":{"type":"string","title":"Headline"},"summary":{"type":"string","title":"Summary"},"confidence":{"type":"string","enum":["High","Medium","Low"],"title":"Confidence"},"failure_type":{"type":"string","enum":["missing-dependency","type-error","syntax-error","linker-error","config-error","env-error","test-failure","runtime-crash","build-system-configuration","other"],"title":"Failure Type"},"failure_type_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Type Note"},"first_failing_task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Failing Task"},"proximate_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proximate Error"},"cause_owner":{"type":"string","enum":["user-code","ib-product","environment","undetermined"],"title":"Cause Owner","default":"undetermined"},"explanation":{"type":"string","title":"Explanation"},"evidence":{"items":{"$ref":"#/components/schemas/Evidence"},"type":"array","title":"Evidence","default":[]},"recommended_fix":{"anyOf":[{"$ref":"#/components/schemas/RecommendedFix"},{"type":"null"}]},"alternative_fixes":{"items":{"$ref":"#/components/schemas/AlternativeFix"},"type":"array","title":"Alternative Fixes","default":[]},"red_herrings":{"items":{"type":"string"},"type":"array","title":"Red Herrings","default":[]}},"additionalProperties":true,"type":"object","required":["headline","summary","confidence","failure_type","explanation"],"title":"RcaResponse","description":"Pass-through of RcaReport.\n\nKept open (extra='allow') so the BFF doesn't break when the agent schema\ngains fields; the frontend TS mirror is the strict view."},"RecommendedFix":{"properties":{"title":{"type":"string","title":"Title","description":"One-line title describing the single best fix (the change to make)."},"diff":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Diff","description":"Unified diff with '-' removed and '+' added lines when the fix can be localized to a concrete edit. Null when the fix is not a code edit."},"steps":{"items":{"type":"string"},"type":"array","title":"Steps","description":"Minimal, actionable numbered steps when the fix cannot be expressed as a diff (e.g. an environment/config/process change). Empty when a diff is provided."},"confidence":{"type":"string","enum":["High","Medium","Low"],"title":"Confidence"}},"type":"object","required":["title","confidence"],"title":"RecommendedFix"},"RedeemInvitationResponse":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"tenant_name":{"type":"string","title":"Tenant Name"},"descope_tenant_id":{"type":"string","title":"Descope Tenant Id"},"role":{"type":"string","enum":["admin","viewer"]},"newly_attached":{"type":"boolean","title":"Newly Attached"},"is_first_tenant":{"type":"boolean","title":"Is First Tenant"},"invited_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited By Name"}},"type":"object","required":["tenant_id","tenant_name","descope_tenant_id","role","newly_attached","is_first_tenant"],"title":"RedeemInvitationResponse"},"ReleaseNotificationPreviewResponse":{"properties":{"grid_count":{"type":"integer","title":"Grid Count"},"tenant_count":{"type":"integer","title":"Tenant Count"},"skipped_count":{"type":"integer","title":"Skipped Count"},"unparseable_version_count":{"type":"integer","title":"Unparseable Version Count"}},"type":"object","required":["grid_count","tenant_count","skipped_count","unparseable_version_count"],"title":"ReleaseNotificationPreviewResponse","description":"Dry-run counts for a prospective release announcement.\n\nResolved by the same query the consumer fans out with, so the numbers here\nare what would actually be created — a typo shows up as a surprising count\n(usually 0, or every grid when an older version is entered by mistake)."},"ReleaseNotificationTarget":{"properties":{"platform":{"type":"string","enum":["windows","linux"],"title":"Platform"},"release_version":{"type":"string","maxLength":100,"minLength":1,"title":"Release Version"}},"type":"object","required":["platform","release_version"],"title":"ReleaseNotificationTarget","description":"What a release announcement would do, per the platform+version asked for.\n\nNotifications cannot be deleted and a mistyped version produces a different\ndedupe_key (so re-firing correctly adds a second batch rather than replacing\nthe bad one). The back office therefore previews this before firing."},"RemoveNodeRequest":{"properties":{"action":{"type":"string","const":"RemoveNode","title":"Action"},"cluster_id":{"type":"integer","title":"Cluster Id"},"node_id":{"type":"string","maxLength":255,"minLength":1,"title":"Node Id"},"confirm_delete":{"type":"boolean","title":"Confirm Delete","default":false}},"type":"object","required":["action","cluster_id","node_id"],"title":"RemoveNodeRequest"},"RenameTenantRequest":{"properties":{"name":{"type":"string","maxLength":320,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"RenameTenantRequest","description":"Back-office tenant rename (IBS-2150).\n\nOnly our own display name (`Tenant.name`) changes. The Descope tenant name is\ndeliberately left alone: it is the SSO routing handle (the subdomain label,\nor a generated slug), matched exactly by resolve_descope_id_by_subdomain, so\nrenaming it would break tenant-subdomain SSO login."},"RunRequest":{"properties":{"builds":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Builds","description":"Build names; capped at 20. Empty -> server defaults."}},"additionalProperties":false,"type":"object","title":"RunRequest"},"RunResponse":{"properties":{"builds":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Builds"}},"additionalProperties":true,"type":"object","title":"RunResponse","description":"Pass-through of ibguard-cloud's PipelineResult.\n\nKept open (`extra='allow'`) so this BFF doesn't break when the\nengine's ExecutiveReport schema gains fields; the frontend's\nhand-maintained TS mirror in vnext-frontend is the strict view."},"RunnerInstanceResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"repo":{"type":"string","title":"Repo"},"github_job_id":{"type":"string","title":"Github Job Id"},"workflow_run_id":{"type":"string","title":"Workflow Run Id"},"run_attempt":{"type":"integer","title":"Run Attempt"},"cache_key":{"type":"string","title":"Cache Key"},"status":{"$ref":"#/components/schemas/RunnerInstanceStatus"},"instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance Id"},"provider":{"anyOf":[{"$ref":"#/components/schemas/RunnerProvider"},{"type":"null"}]},"namespace_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Namespace Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"last_notified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Notified At"},"replaced_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Replaced By Id"},"recreate_attempts":{"type":"integer","title":"Recreate Attempts"},"jit_runner_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Jit Runner Id"},"creation_params":{"additionalProperties":true,"type":"object","title":"Creation Params"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["public_id","tenant_id","repo","github_job_id","workflow_run_id","run_attempt","cache_key","status","instance_id","provider","namespace_status","error","started_at","completed_at","last_notified_at","replaced_by_id","recreate_attempts","jit_runner_id","creation_params","created_at","updated_at"],"title":"RunnerInstanceResponse"},"RunnerInstanceStatus":{"type":"string","enum":["starting","in_progress","capacity_waiting","completed","failed","cancelled","replaced","lost","force_failed"],"title":"RunnerInstanceStatus"},"RunnerInstanceUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/RunnerInstanceStatus"},{"type":"null"}]},"instance_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Instance Id"},"provider":{"anyOf":[{"$ref":"#/components/schemas/RunnerProvider"},{"type":"null"}]},"namespace_status":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Namespace Status"},"error":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"last_notified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Notified At"},"replaced_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Replaced By Id"},"recreate_attempts":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Recreate Attempts"},"jit_runner_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Jit Runner Id"},"creation_params":{"additionalProperties":true,"type":"object","title":"Creation Params"}},"type":"object","title":"RunnerInstanceUpdate"},"RunnerProvider":{"type":"string","enum":["namespace","bear_agent"],"title":"RunnerProvider"},"RunsOnKind":{"type":"string","enum":["scalar","single_element_array","multi_element_array","object_group_labels","expression","matrix_element","reusable_workflow","absent"],"title":"RunsOnKind"},"SSOLinkResponse":{"properties":{"sso_configuration_link":{"type":"string","title":"Sso Configuration Link"}},"type":"object","required":["sso_configuration_link"],"title":"SSOLinkResponse"},"SSOStatusResponse":{"properties":{"is_configured":{"type":"boolean","title":"Is Configured"},"auth_type":{"anyOf":[{"type":"string","enum":["saml","oidc"]},{"type":"null"}],"title":"Auth Type"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"}},"type":"object","required":["is_configured"],"title":"SSOStatusResponse","description":"A tenant's live SSO configuration state in Descope (IBS-1360)."},"SalesforceAccountSearchResult":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"SalesforceAccountSearchResult","description":"A Salesforce Account surfaced by the back-office search combo box."},"SalesforceLicenseSyncResult":{"properties":{"total":{"type":"integer","title":"Total"},"synced":{"type":"integer","title":"Synced"},"new_count":{"type":"integer","title":"New Count"},"skipped_no_licensespring":{"type":"integer","title":"Skipped No Licensespring"},"skipped_no_platform":{"type":"integer","title":"Skipped No Platform"}},"type":"object","required":["total","synced","new_count","skipped_no_licensespring","skipped_no_platform"],"title":"SalesforceLicenseSyncResult","description":"Summary of a Salesforce → licenses sync for one tenant (IBS-1782)."},"SaveEndpointSettingsRequest":{"properties":{"action":{"type":"string","const":"SaveSettings","title":"Action"},"endpoint_id":{"type":"string","maxLength":255,"minLength":1,"title":"Endpoint Id"},"cache_size_gb":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Cache Size Gb"},"cache_and_db_location":{"type":"string","title":"Cache And Db Location"},"custom_host_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Custom Host Name"}},"type":"object","required":["action","endpoint_id","cache_size_gb","cache_and_db_location"],"title":"SaveEndpointSettingsRequest","description":"``custom_host_name`` is sent only when the host was edited; an empty string clears it."},"SearchBuildsCountResponse":{"properties":{"total_count":{"type":"integer","title":"Total Count"},"total_count_capped":{"type":"boolean","title":"Total Count Capped","default":false}},"type":"object","required":["total_count"],"title":"SearchBuildsCountResponse","description":"Just the total for a set of build filters -- see `count_search_builds`."},"SearchBuildsFilters":{"properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/BuildFilters"},{"type":"null"}]},"search_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Query"}},"type":"object","title":"SearchBuildsFilters"},"SetAgentLicensePendingChangeRequest":{"properties":{"action":{"type":"string","const":"SetAgentLicense","title":"Action"},"license_action":{"$ref":"#/components/schemas/AgentLicenseAction"},"InitiatorLicense":{"$ref":"#/components/schemas/AgentLicenseType"},"CIInitiatorLicense":{"$ref":"#/components/schemas/AgentLicenseType"},"HelperLicense":{"$ref":"#/components/schemas/AgentLicenseType"},"RequestedCores":{"type":"integer","title":"Requestedcores"},"RequestedCoresPercentage":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Requestedcorespercentage"}},"type":"object","required":["action","license_action","InitiatorLicense","CIInitiatorLicense","HelperLicense","RequestedCores"],"title":"SetAgentLicensePendingChangeRequest"},"SetBuildCachePendingChangeRequest":{"properties":{"action":{"type":"string","const":"SetBuildCache","title":"Action"},"use_local_cache":{"type":"boolean","title":"Use Local Cache"},"use_build_cache_cluster":{"type":"boolean","title":"Use Build Cache Cluster"},"remote_cache_server":{"type":"string","maxLength":255,"title":"Remote Cache Server","default":""},"use_build_cache_read_only":{"type":"boolean","title":"Use Build Cache Read Only","default":false}},"type":"object","required":["action","use_local_cache","use_build_cache_cluster"],"title":"SetBuildCachePendingChangeRequest","description":"The four cache fields; ``enable`` is derived server-side and a client value is ignored."},"SetBuildPriorityPendingChangeRequest":{"properties":{"action":{"type":"string","const":"SetBuildPriority","title":"Action"},"build_priority":{"type":"string","enum":["HighBuildPriority","AboveNormalBuildPriority","NormalBuildPriority","BelowNormalBuildPriority","LowBuildPriority"],"title":"Build Priority"}},"type":"object","required":["action","build_priority"],"title":"SetBuildPriorityPendingChangeRequest"},"SetDefaultTenantRequest":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"}},"type":"object","required":["tenant_id"],"title":"SetDefaultTenantRequest","description":"The tenant the caller wants to land in at login (IBS-2469)."},"SetDefaultTenantResponse":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"tenant_name":{"type":"string","title":"Tenant Name"}},"type":"object","required":["tenant_id","tenant_name"],"title":"SetDefaultTenantResponse"},"SetHostCommentPendingChangeRequest":{"properties":{"action":{"type":"string","const":"SetHostComment","title":"Action"},"host_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Comment"}},"type":"object","required":["action"],"title":"SetHostCommentPendingChangeRequest"},"SetLogLevelPendingChangeRequest":{"properties":{"action":{"type":"string","const":"SetLogLevel","title":"Action"},"log_level":{"type":"string","enum":["Minimal","Basic","Intermediate","Extended","Detailed"],"title":"Log Level"}},"type":"object","required":["action","log_level"],"title":"SetLogLevelPendingChangeRequest"},"SetTenantCreatorRequest":{"properties":{"user_public_id":{"type":"string","format":"uuid","title":"User Public Id"}},"type":"object","required":["user_public_id"],"title":"SetTenantCreatorRequest"},"SettingKeyValue":{"properties":{"key":{"type":"string","title":"Key"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"title":"Value"}},"type":"object","required":["key","value"],"title":"SettingKeyValue"},"SettingsResponse":{"properties":{"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"settings_data":{"additionalProperties":true,"type":"object","title":"Settings Data"},"pending_changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Changes"}},"type":"object","required":["grid_id","tenant_id"],"title":"SettingsResponse"},"SlowestWorkload":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"duration":{"type":"integer","title":"Duration"},"status":{"type":"string","title":"Status"},"initiator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initiator"},"grid_type":{"$ref":"#/components/schemas/GridType"}},"type":"object","required":["public_id","name","duration","status","initiator","grid_type"],"title":"SlowestWorkload","description":"A single slowest-workload row — a build (self-hosted) or a workflow\nspan (hosted CI), unioned and ranked per-run by duration (IBS-1881)."},"SlowestWorkloadsResponse":{"properties":{"workloads":{"items":{"$ref":"#/components/schemas/SlowestWorkload"},"type":"array","title":"Workloads"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["workloads","total_count"],"title":"SlowestWorkloadsResponse"},"SortDirection":{"type":"string","enum":["asc","desc"],"title":"SortDirection"},"StepSpanResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"span_id":{"type":"string","title":"Span Id"},"name":{"type":"string","title":"Name"},"number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Number"},"status":{"type":"string","title":"Status"},"conclusion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conclusion"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"},"duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Ms"}},"type":"object","required":["public_id","span_id","name","status","conclusion","start_time","end_time","duration_ms"],"title":"StepSpanResponse","description":"Response schema for a step span (child of a job)"},"SupportAttachment":{"properties":{"id":{"type":"string","title":"Id"},"filename":{"type":"string","title":"Filename"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"}},"type":"object","required":["id","filename","created_at"],"title":"SupportAttachment","description":"A file attached to a case/message, downloadable via the attachment route."},"SupportAttachmentUpload":{"properties":{"filename":{"type":"string","maxLength":255,"minLength":1,"title":"Filename"},"content_base64":{"type":"string","minLength":1,"title":"Content Base64"}},"type":"object","required":["filename","content_base64"],"title":"SupportAttachmentUpload"},"SupportCaseDetail":{"properties":{"id":{"type":"string","title":"Id"},"case_number":{"type":"string","title":"Case Number"},"subject":{"type":"string","title":"Subject"},"status":{"type":"string","title":"Status"},"is_closed":{"type":"boolean","title":"Is Closed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_activity_at":{"type":"string","format":"date-time","title":"Last Activity At"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"timeline":{"items":{"$ref":"#/components/schemas/SupportTimelineEvent"},"type":"array","title":"Timeline"},"attachments":{"items":{"$ref":"#/components/schemas/SupportAttachment"},"type":"array","title":"Attachments"}},"type":"object","required":["id","case_number","subject","status","is_closed","created_at","last_activity_at","description","timeline"],"title":"SupportCaseDetail"},"SupportCasePicklists":{"properties":{"severity":{"items":{"$ref":"#/components/schemas/SupportPicklistOption"},"type":"array","title":"Severity"},"product":{"items":{"$ref":"#/components/schemas/SupportPicklistOption"},"type":"array","title":"Product"}},"type":"object","required":["severity","product"],"title":"SupportCasePicklists","description":"Options for the create-case form. ``severity`` is app-defined; ``product``\nis sourced live from the Salesforce Case describe."},"SupportCaseSeverity":{"type":"string","enum":["S1","S2","S3","S4"],"title":"SupportCaseSeverity","description":"Customer-facing severity levels. Mapped to a Salesforce Case Priority on\ncreate (see ``service.SEVERITY_TO_PRIORITY``)."},"SupportCaseSummary":{"properties":{"id":{"type":"string","title":"Id"},"case_number":{"type":"string","title":"Case Number"},"subject":{"type":"string","title":"Subject"},"status":{"type":"string","title":"Status"},"is_closed":{"type":"boolean","title":"Is Closed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_activity_at":{"type":"string","format":"date-time","title":"Last Activity At"}},"type":"object","required":["id","case_number","subject","status","is_closed","created_at","last_activity_at"],"title":"SupportCaseSummary"},"SupportPicklistOption":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["value","label"],"title":"SupportPicklistOption"},"SupportTimelineEvent":{"properties":{"id":{"type":"string","title":"Id"},"type":{"$ref":"#/components/schemas/SupportTimelineEventType"},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author"},"body":{"type":"string","title":"Body"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"attachments":{"items":{"$ref":"#/components/schemas/SupportAttachment"},"type":"array","title":"Attachments"}},"type":"object","required":["id","type","author","body","created_at"],"title":"SupportTimelineEvent"},"SupportTimelineEventType":{"type":"string","enum":["customer_message","support_reply","files_added"],"title":"SupportTimelineEventType"},"TenantBySubdomain":{"properties":{"descope_id":{"type":"string","title":"Descope Id"}},"type":"object","required":["descope_id"],"title":"TenantBySubdomain"},"TenantCIRunnerUsage":{"properties":{"month":{"type":"string","title":"Month"},"minutes":{"type":"integer","title":"Minutes","description":"Minutes of jobs that ended in the month (UTC)."},"in_flight_minutes":{"type":"integer","title":"In Flight Minutes","description":"Running jobs so far; current month only."},"running_jobs":{"type":"integer","title":"Running Jobs"},"cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cap"},"cap_enforced":{"type":"boolean","title":"Cap Enforced","description":"New jobs are blocked at the cap; off means the cap only notifies."},"percent_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percent Used","description":"(minutes + in_flight_minutes) / cap."},"resets_at":{"type":"string","format":"date-time","title":"Resets At"},"cap_state":{"type":"string","enum":["none","warning","capped"],"title":"Cap State","description":"warning at 80% of the cap, capped at 100%."},"blocked_jobs":{"type":"integer","title":"Blocked Jobs","description":"Jobs not started in the month because of the cap."},"other_repositories_minutes":{"type":"integer","title":"Other Repositories Minutes","description":"Repos that never had a CI runner."},"repos":{"items":{"$ref":"#/components/schemas/CIRunnerRepoUsage"},"type":"array","title":"Repos"},"last_12_months":{"items":{"$ref":"#/components/schemas/CIRunnerMonthUsage"},"type":"array","title":"Last 12 Months"}},"type":"object","required":["month","minutes","in_flight_minutes","running_jobs","cap","cap_enforced","percent_used","resets_at","cap_state","blocked_jobs","other_repositories_minutes","repos","last_12_months"],"title":"TenantCIRunnerUsage"},"TenantCIRunnerUsageSummary":{"properties":{"tenant_public_id":{"type":"string","format":"uuid","title":"Tenant Public Id"},"tenant_name":{"type":"string","title":"Tenant Name"},"minutes":{"type":"integer","title":"Minutes"},"in_flight_minutes":{"type":"integer","title":"In Flight Minutes"},"jobs":{"type":"integer","title":"Jobs"},"cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cap"},"percent_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percent Used"}},"type":"object","required":["tenant_public_id","tenant_name","minutes","in_flight_minutes","jobs","cap","percent_used"],"title":"TenantCIRunnerUsageSummary"},"TenantCreator":{"properties":{"user_public_id":{"type":"string","format":"uuid","title":"User Public Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["user_public_id","email"],"title":"TenantCreator"},"TenantLeaveEligibility":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"can_leave":{"type":"boolean","title":"Can Leave"},"blocked_reason":{"anyOf":[{"$ref":"#/components/schemas/LeaveBlockReason"},{"type":"null"}]}},"type":"object","required":["tenant_id","can_leave"],"title":"TenantLeaveEligibility"},"TenantLicenseWithGridResponse":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id"},"license_key":{"type":"string","title":"License Key"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Name"},"addon_features":{"items":{"type":"string"},"type":"array","title":"Addon Features"},"fixed_initiators":{"type":"integer","title":"Fixed Initiators"},"floating_initiators":{"type":"integer","title":"Floating Initiators"},"fixed_ci_initiators":{"type":"integer","title":"Fixed Ci Initiators"},"floating_ci_initiators":{"type":"integer","title":"Floating Ci Initiators"},"fixed_helper_cores":{"type":"integer","title":"Fixed Helper Cores"},"floating_helper_cores":{"type":"integer","title":"Floating Helper Cores"},"cache_cores":{"type":"integer","title":"Cache Cores"},"platform":{"$ref":"#/components/schemas/GridAccelerationType"},"grid_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Grid Public Id"},"grid_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grid Name"},"allow_offline":{"type":"boolean","title":"Allow Offline","default":false},"offline_reset_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Offline Reset At"},"offline_reset_count":{"type":"integer","title":"Offline Reset Count","default":0},"is_active":{"type":"boolean","title":"Is Active","default":true},"licensespring_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Licensespring Customer Id"},"licensespring_customer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Licensespring Customer Name"},"source":{"type":"string","enum":["salesforce","licensespring","manual"],"title":"Source","default":"manual"},"is_trial":{"type":"boolean","title":"Is Trial","default":false},"has_license_row":{"type":"boolean","title":"Has License Row","default":true},"pending_changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Changes"},"paddle_subscription":{"anyOf":[{"$ref":"#/components/schemas/PaddleSubscriptionState"},{"type":"null"}]},"attention_state":{"anyOf":[{"type":"string","enum":["expired_paid","payment_issue_active","payment_issue_access_ended"]},{"type":"null"}],"title":"Attention State"}},"type":"object","required":["public_id","license_key","expires_at","tier_name","addon_features","fixed_initiators","floating_initiators","fixed_ci_initiators","floating_ci_initiators","fixed_helper_cores","floating_helper_cores","cache_cores","platform","grid_public_id","grid_name"],"title":"TenantLicenseWithGridResponse","description":"License response for tenant-facing list, enriched with connected grid info."},"TenantMember":{"properties":{"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/InvitationStatus"},"role":{"type":"string","enum":["admin","viewer"]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_login_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login Time"}},"type":"object","required":["email","name","status","role","created_at","last_login_time"],"title":"TenantMember"},"TenantMemberWithLoginId":{"properties":{"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/InvitationStatus"},"role":{"type":"string","enum":["admin","viewer"]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_login_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login Time"},"login_id":{"type":"string","title":"Login Id"},"user_public_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Public Id"},"is_creator":{"type":"boolean","title":"Is Creator","default":false}},"type":"object","required":["email","name","status","role","created_at","last_login_time","login_id"],"title":"TenantMemberWithLoginId","description":"Back-office view of a member, carrying the Descope login id used for\nimpersonation (see `users_service.resolve_impersonation_target` for why it\ncan differ from the email).\n\nOnly the back-office route declares this model; the tenant-facing members\nroute keeps returning bare `TenantMember`, so FastAPI drops the field there."},"TimeResolution":{"type":"string","enum":["hour","day","week"],"title":"TimeResolution"},"TrialLicenseResponse":{"properties":{"license_key":{"type":"string","title":"License Key"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"tier_name":{"type":"string","title":"Tier Name"},"grid_id":{"type":"string","format":"uuid","title":"Grid Id"},"connection_token":{"type":"string","title":"Connection Token"},"license_id":{"type":"integer","title":"License Id"},"order_id":{"type":"string","title":"Order Id"},"linux_grid_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Linux Grid Id"},"windows_download_started":{"type":"boolean","title":"Windows Download Started","default":false},"linux_download_started":{"type":"boolean","title":"Linux Download Started","default":false}},"type":"object","required":["license_key","expires_at","tier_name","grid_id","connection_token","license_id","order_id"],"title":"TrialLicenseResponse"},"TrialLicenseStatusResponse":{"properties":{"windows_download_started":{"type":"boolean","title":"Windows Download Started","default":false},"linux_download_started":{"type":"boolean","title":"Linux Download Started","default":false},"grid_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Grid Id"},"linux_grid_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Linux Grid Id"},"trial_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Expires At"},"trial_days_left":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Days Left"}},"type":"object","title":"TrialLicenseStatusResponse","description":"Side-effect-free view of the tenant's trial download state for the\ngetting-started screen. Unlike POST /licenses/trial this mints nothing and\nmarks nothing — it only reports what the trial tables already hold, so the\nscreen can restore \"Download again\" / drop \"Not started\" on load (IBS-1479)."},"UpdateAdminTenant":{"properties":{"is_free_trial":{"type":"boolean","title":"Is Free Trial"}},"type":"object","required":["is_free_trial"],"title":"UpdateAdminTenant"},"UpdateGridSettings":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"last_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen"},"acceleration_type":{"anyOf":[{"$ref":"#/components/schemas/GridAccelerationType"},{"type":"null"}]},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"coordinator_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coordinator Id"}},"type":"object","title":"UpdateGridSettings"},"UpdateGridSettingsPendingChangeRequest":{"properties":{"action":{"type":"string","const":"UpdateGridSettings","title":"Action"},"settings":{"items":{"$ref":"#/components/schemas/SettingKeyValue"},"type":"array","title":"Settings"}},"type":"object","required":["action","settings"],"title":"UpdateGridSettingsPendingChangeRequest"},"UpdatePaymentTransactionResponse":{"properties":{"transaction_id":{"type":"string","title":"Transaction Id"}},"type":"object","required":["transaction_id"],"title":"UpdatePaymentTransactionResponse","description":"A Paddle transaction id for the \"Update payment\" overlay (IBS-2407) --\ntargets the subscription's real outstanding past-due transaction, or a\n$0 transaction if it's already active (Paddle's own response, passed\nthrough unchanged). The frontend opens it via `Paddle.Checkout.open()`;\nreactivation on a completed payment is already automatic via the\nexisting webhook path, no further response data is needed here."},"UpdatePromptRequest":{"properties":{"content":{"type":"string","maxLength":50000,"minLength":1,"title":"Content"}},"type":"object","required":["content"],"title":"UpdatePromptRequest"},"UpdateTrialExpirationRequest":{"properties":{"trial_expiration_date":{"type":"string","format":"date","title":"Trial Expiration Date"}},"type":"object","required":["trial_expiration_date"],"title":"UpdateTrialExpirationRequest","description":"Back-office extend-trial request (IBS-1702). Date-only — the server\napplies end-of-day and keeps LicenseSpring's trial license in sync."},"UserErasureResult":{"properties":{"log":{"items":{"type":"string"},"type":"array","title":"Log"}},"type":"object","required":["log"],"title":"UserErasureResult","description":"What a single-user erasure did, one line per step (IBS-2056).\n\nReturned to the back office so the admin sees the part that isn't knowable\nup front — most importantly whether the Descope account was deleted or only\ndetached from this tenant because the user belongs to others. Carries no\nemail addresses, for the same reason `AdminTenant.deletion_log` doesn't."},"VNextDataPipelineDestination":{"type":"string","enum":["build-monitor","sbom","build-monitor-file"],"title":"VNextDataPipelineDestination","description":"Folder segment an upload lands in: <tenant>/<grid>/<destination>/...\n\nThe value is a real S3 path segment, so this is a closed set - an\nunvalidated destination would let a caller choose where in the bucket its\nobjects land. The data-pipeline consumer is folder-scoped and ingests only\n`build-monitor`, so every other member here is deliberately invisible to it."},"VNextDataPipelinePresignedUrlFields":{"properties":{"key":{"type":"string","title":"Key"},"policy":{"type":"string","title":"Policy"},"AWSAccessKeyId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Awsaccesskeyid"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"},"x-amz-algorithm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Amz-Algorithm"},"x-amz-credential":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Amz-Credential"},"x-amz-date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Amz-Date"},"x-amz-signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Amz-Signature"},"x-amz-security-token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Amz-Security-Token"}},"additionalProperties":true,"type":"object","required":["key","policy"],"title":"VNextDataPipelinePresignedUrlFields"},"VNextDataPipelinePresignedUrlResponse":{"properties":{"url":{"type":"string","title":"Url"},"expiration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiration"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"grid_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Grid Id"},"fields":{"anyOf":[{"$ref":"#/components/schemas/VNextDataPipelinePresignedUrlFields"},{"type":"null"}]},"denied_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denied Reason"},"data_sharing_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Data Sharing Version"}},"type":"object","required":["url"],"title":"VNextDataPipelinePresignedUrlResponse"},"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"},"WebhookAuthInput":{"properties":{"type":{"$ref":"#/components/schemas/WebhookAuthType","default":"none"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Header Name"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}},"type":"object","title":"WebhookAuthInput","description":"Authentication for a Custom webhook.\n\nDeliberately flat rather than a discriminated union: on update a secret\nmay be omitted to keep the stored one (the client can never read it back\n— see `db_model.notifications.webhook_auth`), so every field has to be\noptional anyway. Which fields are actually required for a given `type` is\nenforced by `webhook_auth.validate_auth`, the same check\nprocessing-engine will use, instead of being restated here."},"WebhookAuthResponse":{"properties":{"type":{"$ref":"#/components/schemas/WebhookAuthType"},"header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Header Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}},"type":"object","required":["type"],"title":"WebhookAuthResponse","description":"Auth as returned: type and non-secret fields verbatim, every secret\nreplaced by `webhook_auth.SECRET_MASK`."},"WebhookAuthType":{"type":"string","enum":["none","bearer","api_key","basic"],"title":"WebhookAuthType"},"WebhookDeleteImpactResponse":{"properties":{"alert_count":{"type":"integer","title":"Alert Count"},"alerts":{"items":{"$ref":"#/components/schemas/AffectedAlertResponse"},"type":"array","title":"Alerts"}},"type":"object","required":["alert_count","alerts"],"title":"WebhookDeleteImpactResponse","description":"What deleting a webhook would do to the alerts using it — the\nconfirmation dialog needs the count and the names before the fact."},"WebhookIntegrationCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"webhook_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Webhook Url"},"platform":{"anyOf":[{"$ref":"#/components/schemas/WebhookProvider"},{"type":"null"}]},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers"},"auth":{"anyOf":[{"$ref":"#/components/schemas/WebhookAuthInput"},{"type":"null"}]}},"type":"object","required":["name","webhook_url"],"title":"WebhookIntegrationCreate"},"WebhookIntegrationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"webhook_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Webhook Url"},"platform":{"anyOf":[{"$ref":"#/components/schemas/WebhookProvider"},{"type":"null"}]},"headers":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},{"type":"null"}],"title":"Headers"},"auth":{"anyOf":[{"$ref":"#/components/schemas/WebhookAuthInput"},{"type":"null"}]}},"type":"object","title":"WebhookIntegrationUpdate"},"WebhookProvider":{"type":"string","enum":["slack","ms_teams","generic"],"title":"WebhookProvider"},"WebhookTestResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["ok"],"title":"WebhookTestResponse","description":"Result of a \"Send test\" (IBS-1932). A failure never blocks saving —\nthe epic treats testing as optional — so this is a result, not an error."},"WorkflowPlan":{"properties":{"path":{"type":"string","title":"Path"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"blob_sha":{"type":"string","title":"Blob Sha"},"previewable":{"type":"boolean","title":"Previewable"},"parse_failed":{"type":"boolean","title":"Parse Failed"},"jobs":{"items":{"$ref":"#/components/schemas/JobPlan"},"type":"array","title":"Jobs"}},"type":"object","required":["path","name","blob_sha","previewable","parse_failed","jobs"],"title":"WorkflowPlan"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}