Every API here is available over the APIs.io API and to AI agents over MCP.
{"openapi":"3.1.0","info":{"title":"fettle.sh","version":"1.3.1"},"paths":{"/v1/users/auth/oauth/{provider}/start":{"get":{"tags":["Users"],"summary":"Start Oauth","description":"Start signing in with Google or GitHub. Redirects to the provider's consent\nscreen; `next` is where to land afterwards, `invite_token` joins a workspace\non sign-up.","operationId":"start_oauth_v1_users_auth_oauth__provider__start_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"next","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"}},{"name":"invite_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Invite Token"}}],"responses":{"302":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/auth/register":{"post":{"tags":["Users"],"summary":"Signup User","description":"Create a new user account. Optionally name the workspace to create, or\npass an invite token to join the inviting organization instead.\n\nRequires a Cloudflare Turnstile token in the\n`X-Turnstile-Token` header when bot protection is enabled.","operationId":"signup_user_v1_users_auth_register_post","parameters":[{"name":"X-Turnstile-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Turnstile-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserModel"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileViewModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/auth/verification-email":{"post":{"tags":["Users"],"summary":"Send Verification Email","description":"Sends the verification link to the user's email.","operationId":"send_verification_email_v1_users_auth_verification_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/auth/verify":{"get":{"tags":["Users"],"summary":"Verify Email","description":"Verifies the user's email using the provided token.","operationId":"verify_email_v1_users_auth_verify_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/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/auth/login":{"post":{"tags":["Users"],"summary":"Login User","description":"Authenticate user and return the access token.\n\nThe refresh token is delivered as an httpOnly cookie\n(`refresh_token`, path `/v1/users/auth/login/refresh`, `SameSite=Lax`,\n`Secure` in production) so SPA frontends can keep the access token in\nmemory while letting the browser handle refresh transport.\n\nRequires a Cloudflare Turnstile token in the\n`X-Turnstile-Token` header when bot protection is enabled.","operationId":"login_user_v1_users_auth_login_post","parameters":[{"name":"X-Turnstile-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Turnstile-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginUserModel"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/auth/login/refresh":{"post":{"tags":["Users"],"summary":"Get Access By Refresh","description":"Refresh the access token using a valid refresh token.\n\nReads the refresh token from the httpOnly cookie (or, as a fallback,\nthe `Authorization` header), rotates the refresh token, and returns\nthe new access token. The rotated refresh token replaces the cookie.\nA suspended account gets 403 `account_suspended` and the cookie is cleared.","operationId":"get_access_by_refresh_v1_users_auth_login_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenResponseModel"}}}}},"security":[{"refresh-token":[]}]}},"/v1/users/auth/logout":{"post":{"tags":["Users"],"summary":"Logout User","description":"Invalidate the current session or all user sessions and clear the\nrefresh cookie.","operationId":"logout_user_v1_users_auth_logout_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LogoutRequestModel"},{"type":"null"}],"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"access-token":[]}]}},"/v1/users/auth/password/reset":{"post":{"tags":["Users"],"summary":"Send Reset Password Request","description":"Email a password-reset link to the address, if an account exists.\n\nRequires a Cloudflare Turnstile token in the\n`X-Turnstile-Token` header when bot protection is enabled.","operationId":"send_reset_password_request_v1_users_auth_password_reset_post","parameters":[{"name":"X-Turnstile-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Turnstile-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendResetPasswordRequestModel"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/auth/password/reset/confirm":{"put":{"tags":["Users"],"summary":"Confirm Reset Password Request","operationId":"confirm_reset_password_request_v1_users_auth_password_reset_confirm_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/me/identities":{"get":{"tags":["Users"],"summary":"List Identities","description":"Your sign-in methods: whether the account has a password and which Google /\nGitHub accounts are connected.","operationId":"list_identities_v1_users_me_identities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentitiesRead"}}}}},"security":[{"access-token":[]}]}},"/v1/users/me/identities/{provider}/link":{"post":{"tags":["Users"],"summary":"Start Link","description":"Connect a Google or GitHub account to yours. Send your current password when\nthe account has one; an account without a password first confirms it's you\nwith a provider it already has (`reauth` with purpose `link_identity`).\nNavigate to the returned URL to finish on the provider.","operationId":"start_link_v1_users_me_identities__provider__link_post","security":[{"access-token":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkIdentityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/me/identities/{provider}/reauth":{"post":{"tags":["Users"],"summary":"Start Reauth","description":"Confirm it's you with a connected Google or GitHub account, for an account\nthat has no password, before deleting it (`delete_account`, the default),\nsetting its first password (`set_password`), connecting another provider\n(`link_identity`), disconnecting one (`unlink_identity`), deleting a\nworkspace (`delete_organization`), or creating or rotating an API key\n(`create_api_key`, `rotate_api_key`), or approving an app's connection\nrequest (`authorize_oauth_client`, with that request's\n`authorization_request_id`). Navigate to the returned URL; you come back to\nthe page you started from with a few minutes to finish.","operationId":"start_reauth_v1_users_me_identities__provider__reauth_post","security":[{"access-token":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ReauthStartRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/me/identities/{identity_id}/unlink":{"post":{"tags":["Users"],"summary":"Unlink Identity","description":"Disconnect a Google or GitHub account. Send your current password when the\naccount has one; an account without a password first confirms it's you with\na provider it already has (`reauth` with purpose `unlink_identity`). The only\nremaining sign-in method cannot be disconnected — set a password first.\nYou stay signed in on this device; other sessions are signed out.","operationId":"unlink_identity_v1_users_me_identities__identity_id__unlink_post","security":[{"access-token":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlinkIdentityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/me":{"get":{"tags":["Users"],"summary":"Get User Profile","description":"Returns the current user's information.","operationId":"get_user_profile_v1_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileViewModel"}}}}},"security":[{"access-token":[]}]},"delete":{"tags":["Users"],"summary":"Delete User Account","description":"Permanently close your account. Send your current password; an account\nwithout one confirms with Google or GitHub first. Your monitors stop running\nand you are signed out everywhere.","operationId":"delete_user_account_v1_users_me_delete","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PasswordConfirmationRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"access-token":[]}]},"patch":{"tags":["Users"],"summary":"Update User Profile","description":"Update your profile (name).","operationId":"update_user_profile_v1_users_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileViewModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"access-token":[]}]}},"/v1/users/me/subscription":{"get":{"tags":["Users"],"summary":"Get User Subscription","description":"Returns the active organization's subscription: the effective and paid\nplans, status, renewal dates, billing period, next-charge amount and\ncurrency, the active promo grant and a promo that ended recently.","operationId":"get_user_subscription_v1_users_me_subscription_get","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/me/password":{"patch":{"tags":["Users"],"summary":"Update User Password","description":"Change your password. Send `current_password` when you already have one;\naccounts created with Google or GitHub first confirm it's you with that\nprovider (`reauth` with purpose `set_password`), then set their first password.\nYou stay signed in on this device; other sessions are signed out.","operationId":"update_user_password_v1_users_me_password_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNewPassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"access-token":[]}]}},"/v1/orgs":{"post":{"tags":["Organizations"],"summary":"Create Organization","description":"Create a new organization. You become its owner.","operationId":"create_organization_v1_orgs_post","security":[{"access-token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrganizationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Organizations"],"summary":"List My Organizations","description":"List the organizations you belong to, with your role in each.","operationId":"list_my_organizations_v1_orgs_get","security":[{"access-token":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationMembershipRead"},"title":"Response List My Organizations V1 Orgs Get"}}}}}},"patch":{"tags":["Organizations"],"summary":"Update Organization","description":"Update the active organization's name and/or timezone.","operationId":"update_organization_v1_orgs_patch","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Organizations"],"summary":"Delete Organization","description":"Delete the active organization. Send your current password when your\naccount has one; an account without a password first confirms it's you\nwith Google or GitHub (`reauth` with purpose `delete_organization`).","operationId":"delete_organization_v1_orgs_delete","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PasswordConfirmationRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/current":{"get":{"tags":["Organizations"],"summary":"Get Current Organization","description":"Return the organization selected by the X-Organization-Id header.","operationId":"get_current_organization_v1_orgs_current_get","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/members":{"get":{"tags":["Organizations"],"summary":"List Members","description":"List the members of the active organization.","operationId":"list_members_v1_orgs_members_get","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationMemberRead"},"title":"Response List Members V1 Orgs Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/members/{user_id}":{"patch":{"tags":["Organizations"],"summary":"Change Member Role","description":"Change a member's role (ADMIN, MEMBER, or VIEWER).","operationId":"change_member_role_v1_orgs_members__user_id__patch","security":[{"access-token-optional":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Organizations"],"summary":"Remove Member","description":"Remove a member from the active organization.","operationId":"remove_member_v1_orgs_members__user_id__delete","security":[{"access-token-optional":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/leave":{"post":{"tags":["Organizations"],"summary":"Leave Organization","description":"Leave the active organization.","operationId":"leave_organization_v1_orgs_leave_post","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/transfer-ownership":{"post":{"tags":["Organizations"],"summary":"Transfer Ownership","description":"Transfer ownership of the active organization to another member.","operationId":"transfer_ownership_v1_orgs_transfer_ownership_post","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOwnershipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/invites":{"post":{"tags":["Organizations"],"summary":"Create Invitation","description":"Invite an email address to the active organization at a role.","operationId":"create_invitation_v1_orgs_invites_post","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/invitations":{"get":{"tags":["Organizations"],"summary":"List Invitation History","description":"List the active organization's invitations: pending, expired, declined\nand revoked, latest change first. Accepted invitations are not listed;\nthose people appear among the members.","operationId":"list_invitation_history_v1_orgs_invitations_get","security":[{"access-token-optional":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Size"}},{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_OrgInvitationRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orgs/invites/{invitation_id}":{"delete":{"tags":["Organizations"],"summary":"Revoke Invitation","description":"Revoke a pending invitation.","operationId":"revoke_invitation_v1_orgs_invites__invitation_id__delete","security":[{"access-token-optional":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}},{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/invites":{"get":{"tags":["Invitations"],"summary":"List Incoming Invitations","description":"List the pending invitations sent to your email address.","operationId":"list_incoming_invitations_v1_invites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IncomingInvitationRead"},"type":"array","title":"Response List Incoming Invitations V1 Invites Get"}}}}},"security":[{"access-token":[]}]}},"/v1/invites/accept":{"post":{"tags":["Invitations"],"summary":"Accept Invitation","description":"Accept an invitation addressed to your account's email.","operationId":"accept_invitation_v1_invites_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvitationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"access-token":[]}]}},"/v1/invites/{token}":{"get":{"tags":["Invitations"],"summary":"Preview Invitation","description":"Preview an invitation (organization, role) before accepting.","operationId":"preview_invitation_v1_invites__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationPreview"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/invites/{invitation_id}/accept":{"post":{"tags":["Invitations"],"summary":"Accept Invitation By Id","description":"Accept an invitation sent to your email address and join its organization.","operationId":"accept_invitation_by_id_v1_invites__invitation_id__accept_post","security":[{"access-token":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationMembershipRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/invites/{invitation_id}/decline":{"post":{"tags":["Invitations"],"summary":"Decline Invitation","description":"Decline an invitation sent to your email address.","operationId":"decline_invitation_v1_invites__invitation_id__decline_post","security":[{"access-token":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/monitors":{"post":{"tags":["Monitors"],"summary":"Create Monitor","description":"Create a new monitor for the active organization.\n\nPlan limits apply to the monitor count, the minimum interval, monitors\nchecked more often than every 60 seconds and the number of regions;\n`GET /v1/plans/usage` shows them and what is left. Send `is_active: false`\nto create it paused — no check runs until you resume it.","operationId":"create_monitor_v1_monitors_post","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fettle-public-api":"write"},"get":{"tags":["Monitors"],"summary":"List Monitors","description":"List monitors for the active organization.\n\nFilter by search text, by type and by status (repeat a parameter to allow\nseveral values), and by tags: with `tag_match=all` (default) a monitor must\ncarry every tag given, with `tag_match=any` at least one. Problems come\nfirst by default; `sort=ssl_expiry` puts the soonest-expiring certificates\nfirst. `view=compact` returns short rows without configuration or uptime\nhistory.","operationId":"list_monitors_v1_monitors_get","security":[{"access-token-optional":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Q"}},{"name":"sort","in":"query","required":false,"schema":{"$ref":"#/components/schemas/MonitorSortOption","default":"status"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":50},"maxItems":10},{"type":"null"}],"title":"Tag"}},{"name":"tag_match","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TagMatchMode","default":"all"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/CheckType"}},{"type":"null"}],"title":"Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/MonitorStatus"}},{"type":"null"}],"title":"Status"}},{"name":"view","in":"query","required":false,"schema":{"$ref":"#/components/schemas/MonitorListView","default":"full"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Size"}},{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"responses":{"200":{"description":"A page of monitors: full rows by default, compact rows for `view=compact`.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PaginatedResponse_MonitorListRead_"},{"$ref":"#/components/schemas/PaginatedResponse_MonitorCompactRead_"}],"title":"Response 200 List Monitors V1 Monitors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fettle-public-api":"read"}},"/v1/monitors/precheck":{"post":{"tags":["Monitors"],"summary":"Precheck Monitor Target","description":"Probe a target once before creating a monitor to flag if it looks down.","operationId":"precheck_monitor_target_v1_monitors_precheck_post","security":[{"access-token-optional":[]}],"parameters":[{"name":"X-Organization-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"X-Organization-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorPrecheckRequest"}}}
# --- truncated at 32 KB (237 KB total) ---
# Full source: https://artifacts.apis.io/fettle-sh/openapi/_original/fettle-sh-api-openapi.json