fettle.sh Api API

fettle.sh Api API: 136 operations.

Operations 136

GET /v1/users/auth/oauth/{provider}/start Start Oauth #
POST /v1/users/auth/register Signup User #
POST /v1/users/auth/verification-email Send Verification Email #
GET /v1/users/auth/verify Verify Email #
POST /v1/users/auth/login Login User #
POST /v1/users/auth/login/refresh Get Access By Refresh #
POST /v1/users/auth/logout Logout User #
POST /v1/users/auth/password/reset Send Reset Password Request #
PUT /v1/users/auth/password/reset/confirm Confirm Reset Password Request #
GET /v1/users/me/identities List Identities #
POST /v1/users/me/identities/{provider}/link Start Link #
POST /v1/users/me/identities/{provider}/reauth Start Reauth #
POST /v1/users/me/identities/{identity_id}/unlink Unlink Identity #
GET /v1/users/me Get User Profile #
DELETE /v1/users/me Delete User Account #
PATCH /v1/users/me Update User Profile #
GET /v1/users/me/subscription Get User Subscription #
PATCH /v1/users/me/password Update User Password #
POST /v1/orgs Create Organization #
GET /v1/orgs List My Organizations #
PATCH /v1/orgs Update Organization #
DELETE /v1/orgs Delete Organization #
GET /v1/orgs/current Get Current Organization #
GET /v1/orgs/members List Members #
PATCH /v1/orgs/members/{user_id} Change Member Role #
DELETE /v1/orgs/members/{user_id} Remove Member #
POST /v1/orgs/leave Leave Organization #
POST /v1/orgs/transfer-ownership Transfer Ownership #
POST /v1/orgs/invites Create Invitation #
GET /v1/orgs/invitations List Invitation History #
DELETE /v1/orgs/invites/{invitation_id} Revoke Invitation #
GET /v1/invites List Incoming Invitations #
POST /v1/invites/accept Accept Invitation #
GET /v1/invites/{token} Preview Invitation #
POST /v1/invites/{invitation_id}/accept Accept Invitation By Id #
POST /v1/invites/{invitation_id}/decline Decline Invitation #
POST /v1/monitors Create Monitor #
GET /v1/monitors List Monitors #
POST /v1/monitors/precheck Precheck Monitor Target #
GET /v1/monitors/minimal List Minimal Monitors #
GET /v1/monitors/presets/exposed-ports Get Exposed Ports Preset #
GET /v1/monitors/summary Get Monitors Summary #
POST /v1/monitors/uptime/batch Get Monitors Uptime Batch #
POST /v1/monitors/tags Bulk Update Monitor Tags #
POST /v1/monitors/bulk Bulk Create Monitors #
PATCH /v1/monitors/bulk Bulk Update Monitors #
POST /v1/monitors/bulk/pause Bulk Pause Monitors #
POST /v1/monitors/bulk/resume Bulk Resume Monitors #
GET /v1/monitors/{monitor_id} Get Monitor #
PATCH /v1/monitors/{monitor_id} Update Monitor #
DELETE /v1/monitors/{monitor_id} Delete Monitor #
POST /v1/monitors/{monitor_id}/pause Pause Monitor #
POST /v1/monitors/{monitor_id}/resume Resume Monitor #
POST /v1/monitors/{monitor_id}/check-now Check Now Monitor #
GET /v1/monitors/{monitor_id}/check-results List Check Results #
GET /v1/monitors/{monitor_id}/stats Get Monitor Stats #
GET /v1/monitors/{monitor_id}/uptime-daily Get Monitor Uptime Daily #
GET /v1/monitors/{monitor_id}/response-time-by-region Get Monitor Response Time By Region #
GET /v1/tags List Tags #
PATCH /v1/tags Rename Tag #
DELETE /v1/tags Delete Tag #
GET /v1/incidents List Incidents #
GET /v1/incidents/summary Get Incident Summary #
GET /v1/incidents/{incident_id} Get Incident #
POST /v1/incidents/{incident_id}/acknowledge Acknowledge Incident #
POST /v1/heartbeats Create Heartbeat #
GET /v1/heartbeats List Heartbeats #
GET /v1/heartbeats/minimal List Minimal Heartbeats #
GET /v1/heartbeats/{heartbeat_id} Get Heartbeat #
PATCH /v1/heartbeats/{heartbeat_id} Update Heartbeat #
DELETE /v1/heartbeats/{heartbeat_id} Delete Heartbeat #
POST /v1/heartbeats/{heartbeat_id}/pause Pause Heartbeat #
POST /v1/heartbeats/{heartbeat_id}/resume Resume Heartbeat #
POST /v1/heartbeat/{token} Ingest Success #
POST /v1/heartbeat/{token}/start Ingest Start #
POST /v1/heartbeat/{token}/fail Ingest Fail #
POST /v1/maintenance-windows Create Maintenance Window #
GET /v1/maintenance-windows List Maintenance Windows #
GET /v1/maintenance-windows/active List Active Maintenance Windows #
POST /v1/maintenance-windows/preview Preview Maintenance Window #
GET /v1/maintenance-windows/{window_id} Get Maintenance Window #
PATCH /v1/maintenance-windows/{window_id} Update Maintenance Window #
DELETE /v1/maintenance-windows/{window_id} Delete Maintenance Window #
GET /v1/maintenance-windows/{window_id}/effective Get Effective Maintenance Window #
POST /v1/status-pages Create Status Page #
GET /v1/status-pages List Status Pages #
GET /v1/status-pages/slug-available Check Slug Availability #
GET /v1/status-pages/{page_id} Get Status Page #
PATCH /v1/status-pages/{page_id} Update Status Page #
DELETE /v1/status-pages/{page_id} Delete Status Page #
GET /v1/status-pages/{page_id}/preview Preview Status Page #
PUT /v1/status-pages/{page_id}/layout Replace Status Page Layout #
POST /v1/status-pages/{page_id}/incidents Create Page Incident #
GET /v1/status-pages/{page_id}/incidents List Page Incidents #
POST /v1/status-pages/{page_id}/incidents/{incident_id}/updates Post Page Incident Update #
PATCH /v1/status-pages/{page_id}/incidents/{incident_id} Update Page Incident #
DELETE /v1/status-pages/{page_id}/incidents/{incident_id} Delete Page Incident #
GET /v1/status-pages/{page_id}/subscribers List Subscribers #
DELETE /v1/status-pages/{page_id}/subscribers/{subscriber_id} Delete Subscriber #
GET /v1/channels List Channels #
POST /v1/channels Create Channel #
GET /v1/channels/directory List Channel Directory #
PATCH /v1/channels/{channel_id} Update Channel #
DELETE /v1/channels/{channel_id} Delete Channel #
POST /v1/channels/{channel_id}/test Test Channel #
GET /v1/plans/limits Get Plans Limits #
GET /v1/plans/usage Get Plan Usage #
GET /v1/regions List Regions #
POST /v1/integrations/telegram/link Create Telegram Link #
POST /v1/checkout-session Create Checkout Session #
POST /v1/customer-portal Create Customer Portal Session #
POST /v1/integrations/polar/webhook Handle Polar Webhook #
POST /v1/api-keys Create Api Key #
GET /v1/api-keys List Api Keys #
GET /v1/api-keys/{api_key_id} Get Api Key #
PATCH /v1/api-keys/{api_key_id} Update Api Key #
POST /v1/api-keys/{api_key_id}/rotate Rotate Api Key #
POST /v1/api-keys/{api_key_id}/revoke Revoke Api Key #
GET /v1/oauth/authorization-requests/{request_id} Get Authorization Request #
POST /v1/oauth/authorization-requests/{request_id}/decision Decide Authorization #
GET /v1/oauth/grants List Grants #
DELETE /v1/oauth/grants/{grant_id} Revoke Grant #
POST /v1/promo-codes/redeem Redeem Promo Code #
GET /live/ Check Liveness #
GET /ready/ Check Readiness #
GET /health/ Check Health #
GET /time/ Get Utc Time #
POST /public/status-pages/subscriptions/confirm Confirm Subscription #
POST /public/status-pages/subscriptions/unsubscribe Unsubscribe #
POST /public/status-pages/{slug}/subscribe Subscribe To Status Page #
GET /public/status-pages/{slug} Get Public Status Page #
GET /public/badges/{monitor_id}/uptime.svg Uptime Badge #
GET /public/badges/{monitor_id}/status.svg Status Badge #
POST /public/tools/ssl-check Ssl Check #
POST /public/tools/multi-region-check Multi Region Check #
GET /public/pulse Get Pulse #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fettle-sh:fettle-sh-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fettle-sh-api-openapi.json Raw ↑
{"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