{"openapi":"3.1.0","info":{"title":"JustMonitorIt API","description":"The JustMonitorIt API: the web app's, and customers' with API tokens (operations listing the `api_token` security scheme). Documentation: https://dash.justmonitorit.com/docs/api","license":{"name":"LicenseRef-Proprietary","identifier":"LicenseRef-Proprietary"},"version":"1"},"servers":[{"url":"/api/v1"}],"paths":{"/auth/email/change":{"post":{"tags":["auth"],"summary":"Ask to change the account email (reauth). Always `202`: the new address\ngets a confirmation link, or a notice if it already has an account.","operationId":"change_email","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailChangeRequest"}}},"required":true},"responses":{"202":{"description":"Accepted"},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/email/change/confirm":{"post":{"tags":["auth"],"summary":"Confirm an email change with the link sent to the new address.","operationId":"confirm_email_change","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"New session cookie"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"400":{"description":"bad_request | token_invalid","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (address taken meanwhile)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/login":{"post":{"tags":["auth"],"summary":"Sign in with email and password (api-and-auth.md §10.4 steps 1-7).","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"`ok` with the user, or `mfa_required` (pending session)","headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"Session cookie"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResult"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"invalid_credentials","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | account_suspended | email_not_verified","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (also the per-email backoff)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/auth/login/passkey":{"post":{"tags":["auth"],"summary":"Sign in with a passkey: the browser's answer to the request options.\nThe passkey verified its user (PIN or biometric), so this is a full\nsign-in without the TOTP step.","operationId":"login_passkey","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyLoginRequest"}}},"required":true},"responses":{"200":{"description":"`ok` with the user","headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"Session cookie"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResult"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"invalid_credentials (unknown passkey, expired options, bad signature)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | account_suspended | email_not_verified","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/auth/login/passkey/options":{"post":{"tags":["auth"],"summary":"Start a passkey sign-in: the request options.","operationId":"login_options","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyRequestOptions"}}}},"403":{"description":"csrf_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/auth/login/totp":{"post":{"tags":["auth"],"summary":"Complete a sign-in with a TOTP or recovery code.","operationId":"login_totp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginTotpRequest"}}},"required":true},"responses":{"200":{"headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"New session cookie"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResult"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated | invalid_credentials (with `attempts_left`) | mfa_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/logout":{"post":{"tags":["auth"],"summary":"Sign out (full or pending session).","operationId":"logout","responses":{"204":{"description":"Signed out; cookie cleared","headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"Cleared cookie"}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/passkeys":{"get":{"tags":["auth"],"summary":"The signed-in user's passkeys, oldest first.","operationId":"list_passkeys","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_Passkey"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]},"post":{"tags":["auth"],"summary":"Finish registering a passkey (reauth) with the browser's answer to the\noptions of this session.","operationId":"add_passkey","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPasskeyRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Passkey"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (10 passkeys already, or the passkey is registered)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (`/name`; `/credential` when the passkey does not verify or its options expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/passkeys/options":{"post":{"tags":["auth"],"summary":"Start registering a passkey (reauth): the creation options.","operationId":"registration_options","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyCreationOptions"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (10 passkeys already)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/passkeys/{pky}":{"delete":{"tags":["auth"],"summary":"Remove one of the user's passkeys (reauth).","operationId":"delete_passkey","parameters":[{"name":"pky","in":"path","description":"Passkey id","required":true,"schema":{"$ref":"#/components/schemas/PasskeyId"}}],"responses":{"204":{"description":"Removed"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/password/change":{"post":{"tags":["auth"],"summary":"Change the password: other sessions are deleted and this one rotated.","operationId":"change_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"204":{"description":"Changed","headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"New session cookie"}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated | invalid_credentials","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/password/forgot":{"post":{"tags":["auth"],"summary":"Ask for a password reset link. Always `202`.","operationId":"forgot_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"202":{"description":"Accepted (whether or not the address has an account)"},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/auth/password/reset":{"post":{"tags":["auth"],"summary":"Set a new password with a reset token. Signs out everywhere; does not\nsign in.","operationId":"reset_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetRequest"}}},"required":true},"responses":{"204":{"description":"Password set; all sessions deleted"},"400":{"description":"bad_request | token_invalid","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/auth/reauth":{"post":{"tags":["auth"],"summary":"Re-enter the password (and TOTP code) before a sensitive action.","operationId":"reauth","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReauthRequest"}}},"required":true},"responses":{"204":{"description":"Re-authenticated for 10 minutes"},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated | invalid_credentials","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (`/totp_code` required)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/register":{"post":{"tags":["auth"],"summary":"Create an account. Always `202` without an invite, whether or not the\naddress already has an account (that account gets an email instead).\nJustMonitorIt is in private beta: without an org `invite_token` the\nbody must carry the beta `invite_code` (`422 invalid_invite_code` at\n`/invite_code` otherwise, before any other work).","operationId":"register","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"201":{"description":"Registered through an invite; session cookie set","headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"Session cookie"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResult"}}}},"202":{"description":"`verification_sent`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResult"}}}},"400":{"description":"bad_request | token_invalid","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | plan_limit | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (sign in to accept)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (`invalid_invite_code` at `/invite_code`: beta invite code missing or wrong)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/auth/sessions":{"get":{"tags":["auth"],"summary":"The signed-in user's sessions, most recently seen first.","operationId":"list_sessions","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_Session"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]},"delete":{"tags":["auth"],"summary":"Revoke every session except the current one.","operationId":"revoke_other_sessions","responses":{"204":{"description":"Other sessions revoked"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/sessions/{ses}":{"delete":{"tags":["auth"],"summary":"Revoke one of the user's own sessions (revoking the current one also\nclears the cookie).","operationId":"revoke_session","parameters":[{"name":"ses","in":"path","description":"Session id","required":true,"schema":{"$ref":"#/components/schemas/SessionId"}}],"responses":{"204":{"description":"Revoked"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/totp/confirm":{"post":{"tags":["auth"],"summary":"Confirm enrolment with a first code; returns the recovery codes once.","operationId":"confirm","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeRequest"}}},"required":true},"responses":{"200":{"headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"New session cookie"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecoveryCodes"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (no enrolment in progress)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (wrong code at `/code`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/totp/disable":{"post":{"tags":["auth"],"summary":"Turn TOTP off (reauth; a current TOTP code or a recovery code).\nPlatform admins cannot.","operationId":"disable","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeRequest"}}},"required":true},"responses":{"204":{"description":"Disabled","headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"New session cookie"}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | totp_required_for_admin | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (not enabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (wrong code at `/code`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/totp/enrol":{"post":{"tags":["auth"],"summary":"Start (or restart) TOTP enrolment (reauth).","operationId":"enrol","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TotpEnrolment"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (already enabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/totp/recovery-codes":{"post":{"tags":["auth"],"summary":"Replace the recovery codes (reauth).","operationId":"regenerate_recovery_codes","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecoveryCodes"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (not enabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/auth/verify-email":{"post":{"tags":["auth"],"summary":"Verify the email address, start the trial if due, and sign in.","operationId":"verify_email","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"Session cookie"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"400":{"description":"bad_request | token_invalid","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | account_suspended | mfa_required (verified; TOTP is on, so a pending session cookie is set for the TOTP step)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/auth/verify-email/resend":{"post":{"tags":["auth"],"summary":"Re-send the verification email (silently limited to 3/hour per\naddress). Always `202`.","operationId":"resend_verification","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"202":{"description":"Accepted (whether or not an email was sent)"},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/billing/plans":{"get":{"tags":["billing"],"summary":"The paid plans with their prices (from Stripe) and entitlements.","operationId":"list_plans","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_PlanOffer"}}}},"404":{"description":"billing_disabled (`[billing] mode = \"disabled\"`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable: Stripe not configured, unreachable, or a catalogue price is missing","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/contact-unsubscribe/{token}":{"post":{"tags":["webhooks"],"summary":"One-click unsubscribe (RFC 8058): disables the contact (`unsubscribed`)\nand tells the org's owners and admins.","operationId":"contact_unsubscribe","parameters":[{"name":"token","in":"path","description":"HMAC unsubscribe token","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`List-Unsubscribe=One-Click`","content":{"application/x-www-form-urlencoded":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Unsubscribed"},"404":{"description":"`not_found`: invalid token, unknown contact, a link sent to an address the contact no longer has, or a link from before links were bound to the address"},"429":{"description":"`rate_limited`: valid requests over 100/s, or a source that keeps failing authentication"}},"security":[{}]}},"/events/stream":{"get":{"tags":["live"],"summary":"Live updates for one org.","operationId":"stream","parameters":[{"name":"org_id","in":"query","description":"The org to follow (`org_…`).","required":true,"schema":{"type":"string"}},{"name":"monitor","in":"query","description":"Also send ephemeral `check.result` frames for this monitor.","required":false,"schema":{"type":"string"}},{"name":"Last-Event-ID","in":"header","description":"Resume after this event id","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Frames `id:`/`event:`/`data:`; types hello, reset, monitor.*, incident.*, check.result, notification.updated, contact.*, trace.updated, org.updated, billing.updated","content":{"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (not a member, unknown org or monitor)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (bad monitor id)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (5 streams per user, 50 per org)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/graphql":{"post":{"tags":["graphql"],"summary":"Run a GraphQL query or mutation. Authenticated by an API token (whose\norganisation is the default `id`/`orgId`) or by the session cookie\n(with the CSRF headers). Errors from REST operations come back in\n`errors[]` with `extensions {code, status, requestId, errors}`.","operationId":"execute","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphqlRequest"}}},"required":true},"responses":{"200":{"description":"GraphQL response `{data, errors}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | account_suspended | mfa_required | email_not_verified","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (not a single GraphQL request)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/graphql/schema.graphql":{"get":{"tags":["graphql"],"summary":"The GraphQL schema (SDL). Public.","operationId":"schema_sdl","responses":{"200":{"description":"The schema in SDL","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/invites/accept":{"post":{"tags":["orgs"],"summary":"Accept an invite as the signed-in user (whose email must match).","operationId":"accept_invite","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}}},"400":{"description":"bad_request | token_invalid","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden (other address) | reauth_required (owner invites) | plan_limit | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (already a member)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/invites/lookup":{"post":{"tags":["orgs"],"summary":"Look an invite up by its token (public).","operationId":"lookup_invite","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteLookup"}}}},"400":{"description":"bad_request | token_invalid","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/locations":{"get":{"tags":["monitors"],"summary":"Active locations, ordered by `sort_order, code`.","operationId":"list_locations","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationsResponse"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{}]}},"/mcp":{"post":{"tags":["mcp"],"summary":"The MCP endpoint (Streamable HTTP, stateless; api-and-auth.md §10.12):\none JSON-RPC request or notification per POST, answered with\n`application/json` (a notification with `202`). Authenticate with an API\ntoken. `GET` and `DELETE` answer `405`.","operationId":"mcp","requestBody":{"description":"A JSON-RPC 2.0 request or notification (MCP 2026-07-28, or 2025-11-25/2025-06-18/2025-03-26 after `initialize`)","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"JSON-RPC response","content":{"application/json":{}}},"202":{"description":"Notification accepted"},"400":{"description":"JSON-RPC error: parse error, invalid request, header mismatch (-32020), missing `_meta` (-32602) or unsupported protocol version (-32022)","content":{"application/json":{}}},"401":{"description":"unauthenticated (no, or an invalid, API token)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden (an `Origin` other than the app's) | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"JSON-RPC error -32601: unknown method (modern requests)","content":{"application/json":{}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"api_token":["viewer"]}]}},"/me":{"get":{"tags":["auth"],"summary":"The signed-in user and their memberships.","operationId":"get_me","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]},"delete":{"tags":["auth"],"summary":"Delete the account (reauth, security.md §12.10): `409 sole_owner` while\nthe user is the only owner of an org with other members; orgs where the\nuser is the only member are purged at once.","operationId":"delete_me","responses":{"202":{"description":"Deleted; cookie cleared","headers":{"Set-Cookie":{"schema":{"type":"string"},"description":"Cleared cookie"}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | reauth_required | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"sole_owner (extension member `orgs`: [{id, name}])","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]},"patch":{"tags":["auth"],"summary":"Update the profile.","operationId":"patch_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MePatch"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/me/export":{"get":{"tags":["auth"],"summary":"Download the user's own data (security.md §12.10).","operationId":"export_me","responses":{"200":{"description":"JSON attachment (`schema_version` 1)","headers":{"Content-Disposition":{"schema":{"type":"string"},"description":"attachment; filename=\"jmi-export-<id>-<yyyymmdd>.json\""}},"content":{"application/json":{}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (5 per day)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/openapi.json":{"get":{"tags":["meta"],"summary":"The OpenAPI 3.1 document of this API.","operationId":"openapi_json","responses":{"200":{"description":"OpenAPI document","content":{"application/json":{}}}},"security":[{}]}},"/orgs":{"get":{"tags":["orgs"],"summary":"The signed-in user's orgs.","operationId":"list_orgs","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_Org"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]},"post":{"tags":["orgs"],"summary":"Create an org owned by the caller: a 14-day trial if the user never had\none, else `canceled` (`never_subscribed`) until checkout.","description":"Refused with `403 plan_limit` (`limit = \"owned_orgs\"`) once the caller owns\n`[api] max_owned_orgs` orgs (platform admins are exempt).","operationId":"create_org","parameters":[{"name":"Idempotency-Key","in":"header","description":"8-64 characters [A-Za-z0-9_-]","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrgRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | mfa_required | email_not_verified | account_suspended | plan_limit (owned_orgs)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"idempotency_in_progress","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation | idempotency_mismatch","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (3 per day)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/orgs/{org}":{"get":{"tags":["orgs"],"summary":"One org (served in every org state).","operationId":"get_org","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"delete":{"tags":["orgs"],"summary":"Schedule the org for deletion in 7 days (owner, reauth).","operationId":"delete_org","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteOrgRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletionScheduled"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | reauth_required | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (`/confirm_name` does not match)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]},"patch":{"tags":["orgs"],"summary":"Rename or change the org's timezone (admin+).","operationId":"patch_org","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgPatch"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended | org_deleting | billing_inactive","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]}},"/orgs/{org}/api-tokens":{"get":{"tags":["tokens"],"summary":"The org's API tokens: every token for owners and admins, the caller's\nown otherwise. Session only.","operationId":"list_tokens","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_ApiToken"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]},"post":{"tags":["tokens"],"summary":"Create an API token for yourself in this org, with a role up to your\nown (session, reauth). The secret is in this response only.","operationId":"create_token","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTokenRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedToken"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | reauth_required | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (50 tokens)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/orgs/{org}/api-tokens/{tok}":{"delete":{"tags":["tokens"],"summary":"Revoke an API token: your own, or any of the org's as owner or admin\n(session only).","operationId":"revoke_token","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"tok","in":"path","description":"Token id (`tok_…`)","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Revoked"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/orgs/{org}/audit-log":{"get":{"tags":["orgs"],"summary":"The org's audit log, newest first (admin+).","operationId":"audit_log","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"action","in":"query","description":"Exact action, e.g. `monitor.updated` (at most 64 characters).","required":false,"schema":{"type":"string"}},{"name":"actor","in":"query","description":"Actor user id (`usr_…`).","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque cursor from `next_cursor`.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-200, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_AuditEntry"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (`/query/...`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]}},"/orgs/{org}/billing":{"get":{"tags":["billing"],"summary":"The org's plan, subscription state, entitlements and usage.","operationId":"get_billing","parameters":[{"name":"org","in":"path","description":"Org id (`org_...`)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (unknown org or not a member) | billing_disabled (`[billing] mode = \"disabled\"`; use `GET /orgs/{org}/entitlements`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/billing/checkout":{"post":{"tags":["billing"],"summary":"Start a Stripe Checkout for a paid plan. The redirect grants nothing:\nonly the webhook-driven sync does (billing.md §11.1).","operationId":"checkout","parameters":[{"name":"org","in":"path","description":"Org id (`org_...`)","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"8-64 chars `[A-Za-z0-9_-]`; also scopes the Stripe idempotency key","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Checkout session URL (replays carry `Idempotent-Replayed: true`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectUrl"}}}},"400":{"description":"bad_request (malformed JSON)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden (not an owner) | csrf_failed | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found | billing_disabled (`[billing] mode = \"disabled\"`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"subscription_exists (active or past_due; use the portal) | idempotency_in_progress","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (`plan` must be a paid plan) | idempotency_mismatch","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (10/hour per org)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable: Stripe not configured or unreachable, or the price is missing","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/orgs/{org}/billing/portal":{"post":{"tags":["billing"],"summary":"Open the Stripe Customer Portal (payment methods, invoices, plan\nchanges, cancellation at period end).","operationId":"portal","parameters":[{"name":"org","in":"path","description":"Org id (`org_...`)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Portal session URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectUrl"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden (not an owner) | csrf_failed | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found | billing_disabled (`[billing] mode = \"disabled\"`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict: the org has no Stripe customer yet (start a checkout)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (10/hour per org)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable: Stripe not configured or unreachable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/orgs/{org}/cancel-deletion":{"post":{"tags":["orgs"],"summary":"Cancel a scheduled deletion (owner). Billing stays canceled; a new\ncheckout is needed to run monitors.","operationId":"cancel_deletion","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (not being deleted)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/orgs/{org}/contacts":{"get":{"tags":["contacts"],"summary":"Contacts of the org, oldest first.","operationId":"list_contacts","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"kind","in":"query","description":"`email | sms | voice | pushover | discord | pagerduty | slack | webhook | teams`.","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"`unverified | active | disabled`.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-200, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Contact"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"post":{"tags":["contacts"],"summary":"Create a contact. Email, SMS, voice and Teams contacts start `unverified`\nand get a code (Teams: posted into the channel) (an email equal to a verified member's account email is `active`\nat once); Pushover, Discord and Slack are validated with the provider\nand start `active`; a webhook starts `active` when its host has the\norg's TXT record, else `unverified`.","operationId":"create_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"Idempotency-Key","in":"header","description":"8-64 characters [A-Za-z0-9_-]","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactInput"}}},"required":true},"responses":{"201":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | plan_limit | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"sms_allowance_exhausted | idempotency_in_progress","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation | idempotency_mismatch","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/contacts/{con}":{"get":{"tags":["contacts"],"summary":"One contact (`ETag: \"<version>\"`).","operationId":"get_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}}],"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"delete":{"tags":["contacts"],"summary":"Delete a contact; its monitor links and pending jobs cascade away.","operationId":"delete_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}},{"name":"If-Match","in":"header","description":"\"<version>\"","required":false,"schema":{"type":["string","null"]}}],"responses":{"204":{"description":"Deleted"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"precondition_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]},"patch":{"tags":["contacts"],"summary":"Update a contact (JSON merge patch; `kind` is immutable). Changing an\nemail address or phone number resets it to `unverified` and sends a new\ncode; changing a Pushover key or device or a Discord webhook re-runs the\nprovider validation. A `PATCH` without `secret` keeps the stored one.","operationId":"update_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}},{"name":"If-Match","in":"header","description":"\"<version>\"","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPatch"}}},"required":true},"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict | sms_allowance_exhausted","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"precondition_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/contacts/{con}/disable":{"post":{"tags":["contacts"],"summary":"Disable a contact (`disabled_reason = 'user'`). A contact that is\nalready disabled is returned unchanged (its reason is kept).","operationId":"disable_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}}],"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/contacts/{con}/enable":{"post":{"tags":["contacts"],"summary":"Re-enable a contact disabled by the user, for failing, or for a bounce\n(`409 conflict` for any other state). A contact that was never verified\nreturns to `unverified`. A bounced address takes an owner or admin with\na recent reauth, and only one verified before it bounced; SES keeps an\naddress it lists for a complaint suppressed (`409`).","operationId":"enable_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}}],"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden (also: a bounced address and the caller is not an owner or admin) | reauth_required (a bounced address) | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (also: the address bounced before it was verified, or the email provider lists it for a complaint)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (also: a bounced address was reactivated less than 24 h ago)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable (the email provider could not reactivate the address)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/contacts/{con}/monitors":{"put":{"tags":["contacts"],"summary":"Replace the monitors this contact is attached to.","operationId":"set_contact_monitors","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}},{"name":"If-Match","in":"header","description":"\"<version>\" of the contact","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactMonitors"}}},"required":true},"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\" of the contact"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactMonitors"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"precondition_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/contacts/{con}/test":{"post":{"tags":["contacts"],"summary":"Queue a test notification (notifications.md §8.14 steps 1-4).","operationId":"test_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}},{"name":"Idempotency-Key","in":"header","description":"8-64 characters [A-Za-z0-9_-]","required":false,"schema":{"type":["string","null"]}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSent"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"contact_unverified | contact_disabled | sms_allowance_exhausted | idempotency_in_progress | conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation | idempotency_mismatch","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/contacts/{con}/verify":{"post":{"tags":["contacts"],"summary":"Verify an email, SMS or voice contact with its 6-digit code. A wrong code is\n`422 validation` with `errors[0].code = \"invalid_code\"` and an\n`attempts_left` member; 5 wrong attempts void the code.","operationId":"verify_contact","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyInput"}}},"required":true},"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (invalid_code, with attempts_left)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/contacts/{con}/verify/send":{"post":{"tags":["contacts"],"summary":"Send a new verification code (email, SMS) or re-run the provider\nvalidation (Pushover, Discord; `active` on success).","operationId":"send_code","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"con","in":"path","description":"Contact id","required":true,"schema":{"$ref":"#/components/schemas/ContactId"}}],"responses":{"202":{"description":"Code sent, or validation passed"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict | sms_allowance_exhausted","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (pushover_invalid | discord_webhook_invalid)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/entitlements":{"get":{"tags":["orgs"],"summary":"The org's effective entitlements and usage, in either billing mode\n(with billing disabled: the configured plan's limits, billing.md\n§11.9). Forms and limit messages read this, not `Billing`.","operationId":"get_entitlements","parameters":[{"name":"org","in":"path","description":"Org id (`org_...`)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgEntitlements"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"mfa_required | email_not_verified | account_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (unknown org or not a member)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/export":{"get":{"tags":["orgs"],"summary":"Download the org's data (owner; also while suspended).","operationId":"export_org","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"responses":{"200":{"description":"JSON attachment (`schema_version` 1)","headers":{"Content-Disposition":{"schema":{"type":"string"},"description":"attachment; filename=\"jmi-export-<id>-<yyyymmdd>.json\""}},"content":{"application/json":{}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (5 per day)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable (two exports already running; `Retry-After: 30`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]}]}},"/orgs/{org}/incidents":{"get":{"tags":["incidents"],"summary":"The org's incidents, newest first.","operationId":"list_incidents","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"status","in":"query","description":"`open` | `resolved`.","required":false,"schema":{"type":"string"}},{"name":"monitor_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"severity","in":"query","description":"`down` | `degraded`.","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Opened at or after (clamped to plan history; open incidents are\nalways listed).","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"Opened before.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-200, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Incident"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/incidents/{inc}":{"get":{"tags":["incidents"],"summary":"One incident with its timeline and notifications.","operationId":"get_incident","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"inc","in":"path","required":true,"schema":{"$ref":"#/components/schemas/IncidentId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentDetail"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/incidents/{inc}/acknowledge":{"post":{"tags":["incidents"],"summary":"Acknowledge an open incident (idempotent; stops reminders,\nevaluation.md §7.10). Applied by the monitor's evaluator.","operationId":"acknowledge_incident","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"inc","in":"path","required":true,"schema":{"$ref":"#/components/schemas/IncidentId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"incident_resolved","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/incidents/{inc}/notes":{"post":{"tags":["incidents"],"summary":"Add a note to an incident's timeline.","operationId":"add_note","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"inc","in":"path","required":true,"schema":{"$ref":"#/components/schemas/IncidentId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentNoteInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentEvent"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/invites":{"get":{"tags":["orgs"],"summary":"Open invitations, newest first (admin+).","operationId":"list_invites","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"cursor","in":"query","description":"Opaque cursor from `next_cursor`.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-200, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Invite"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (`/query/cursor`, `/query/limit`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]},"post":{"tags":["orgs"],"summary":"Invite someone by email (admin+; only owners invite owners).","operationId":"create_invite","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"Idempotency-Key","in":"header","description":"8-64 characters [A-Za-z0-9_-]","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invite"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | reauth_required (owner invites) | plan_limit (seats) | org_suspended | org_deleting | billing_inactive","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (already a member or invited) | idempotency_in_progress","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation | idempotency_mismatch","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (20 per day)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]}},"/orgs/{org}/invites/{inv}":{"delete":{"tags":["orgs"],"summary":"Revoke an open invitation (admin+).","operationId":"revoke_invite","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"inv","in":"path","description":"Invite id","required":true,"schema":{"$ref":"#/components/schemas/InviteId"}}],"responses":{"204":{"description":"Revoked"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended | org_deleting | billing_inactive","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]}},"/orgs/{org}/invites/{inv}/resend":{"post":{"tags":["orgs"],"summary":"Send the invitation again with a new token (the old link stops\nworking) and a fresh 7-day expiry (admin+).","operationId":"resend_invite","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"inv","in":"path","description":"Invite id","required":true,"schema":{"$ref":"#/components/schemas/InviteId"}}],"responses":{"202":{"description":"Sent"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | reauth_required (owner invites) | plan_limit | org_suspended | org_deleting | billing_inactive","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]}},"/orgs/{org}/maintenance":{"get":{"tags":["maintenance"],"summary":"The org's maintenance windows: active and upcoming ones, and those that\nended in the last 30 days, by start.","operationId":"list_maintenance_windows","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_MaintenanceWindow"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"post":{"tags":["maintenance"],"summary":"Schedule a maintenance window, or start one now (no `starts_at`).","operationId":"create_maintenance_window","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMaintenanceRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (50 windows that have not ended)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/maintenance/{mnt}":{"get":{"tags":["maintenance"],"summary":"One maintenance window.","operationId":"get_maintenance_window","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mnt","in":"path","description":"Window id (`mnt_…`)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"delete":{"tags":["maintenance"],"summary":"Delete a window that has not started.","operationId":"delete_maintenance_window","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mnt","in":"path","description":"Window id (`mnt_…`)","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (started: end it instead)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]},"patch":{"tags":["maintenance"],"summary":"Rename a window or move its end (or, before it starts, its start).","operationId":"update_maintenance_window","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mnt","in":"path","description":"Window id (`mnt_…`)","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMaintenanceRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (the window has ended)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/maintenance/{mnt}/end":{"post":{"tags":["maintenance"],"summary":"End an active window now. Its held alerts are released within seconds:\nincidents still open alert their contacts.","operationId":"end_maintenance_window","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mnt","in":"path","description":"Window id (`mnt_…`)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (not started: delete it; or already ended)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/members":{"get":{"tags":["orgs"],"summary":"Every member of the org.","operationId":"list_members","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_Member"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/members/{usr}":{"delete":{"tags":["orgs"],"summary":"Remove a member (admin+, or yourself to leave; owner and reauth to\nremove another owner).","operationId":"remove_member","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"usr","in":"path","description":"User id","required":true,"schema":{"$ref":"#/components/schemas/UserId"}}],"responses":{"204":{"description":"Removed"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | reauth_required | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"sole_owner","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]},"patch":{"tags":["orgs"],"summary":"Change a member's role (admin+; owner and reauth for owner changes).","operationId":"patch_member","parameters":[{"name":"org","in":"path","description":"Org id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"usr","in":"path","description":"User id","required":true,"schema":{"$ref":"#/components/schemas/UserId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Member"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"csrf_failed | forbidden | reauth_required | org_suspended | org_deleting | billing_inactive","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"sole_owner","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["admin"]}]}},"/orgs/{org}/monitors":{"get":{"tags":["monitors"],"summary":"The org's monitors, filtered and sorted, with stable cursors.","operationId":"list_monitors","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"status","in":"query","description":"Comma-separated statuses: `unknown,up,down,degraded,no_data,paused`.","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","description":"Comma-separated kinds.","required":false,"schema":{"type":"string"}},{"name":"label","in":"query","description":"One label.","required":false,"schema":{"type":"string"}},{"name":"run_state","in":"query","description":"Comma-separated run states: `active,paused,system_paused`.","required":false,"schema":{"type":"string"}},{"name":"contact_id","in":"query","description":"Monitors linked to this contact.","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Substring of the name or target (≤ 100 characters).","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"`created_at` (default) | `name` | `status` | `status_since`.","required":false,"schema":{"type":"string"}},{"name":"dir","in":"query","description":"`asc` (default) | `desc`.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-500, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Monitor"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"post":{"tags":["monitors"],"summary":"Create a monitor (Idem): validate, check entitlements under the org\nlock, insert monitor, locations, state, first period and contact links.","operationId":"create_monitor","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"Idempotency-Key","in":"header","description":"8-64 characters [A-Za-z0-9_-]","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorInput"}}},"required":true},"responses":{"201":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | plan_limit | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"idempotency_in_progress","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation | idempotency_mismatch","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/monitors/preview-check":{"post":{"tags":["monitors"],"summary":"Run a check once, now, from one location (not stored).","operationId":"preview_check","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewCheckInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResult"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/monitors/{mon}":{"get":{"tags":["monitors"],"summary":"One monitor.","operationId":"get_monitor","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}}],"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"delete":{"tags":["monitors"],"summary":"Delete a monitor (notifications.md §8.2): cancel pending jobs, enqueue\nPushover cancels for the open incident, delete with cascades and the\nrollups, in one transaction.","operationId":"delete_monitor","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"If-Match","in":"header","description":"\"<version>\"","required":false,"schema":{"type":["string","null"]}}],"responses":{"204":{"description":"Deleted"},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"precondition_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]},"patch":{"tags":["monitors"],"summary":"Edit a monitor (JSON merge patch). `If-Match` gives `412` if stale.","operationId":"update_monitor","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"If-Match","in":"header","description":"\"<version>\"","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorPatch"}}},"required":true},"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | plan_limit | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"precondition_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/monitors/{mon}/contacts":{"get":{"tags":["monitors"],"summary":"The contacts notified for a monitor.","operationId":"list_monitor_contacts","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_Contact"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"put":{"tags":["monitors"],"summary":"Replace the contacts notified for a monitor.","operationId":"put_monitor_contacts","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"If-Match","in":"header","description":"\"<version>\" of the monitor","required":false,"schema":{"type":["string","null"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorContactIds"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorContactIds"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"precondition_failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/monitors/{mon}/incidents":{"get":{"tags":["monitors"],"summary":"Incidents of one monitor, newest first, within plan history.","operationId":"list_monitor_incidents","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"limit","in":"query","description":"1-200, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Incident"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/monitors/{mon}/pause":{"post":{"tags":["monitors"],"summary":"Pause a monitor (user pause; idempotent).","operationId":"pause_monitor","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}}],"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/monitors/{mon}/pings":{"get":{"tags":["monitors"],"summary":"A heartbeat monitor's newest pings, newest first.","operationId":"list_pings","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"limit","in":"query","description":"1-100, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_HeartbeatPing"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/monitors/{mon}/results":{"get":{"tags":["monitors"],"summary":"Raw results of a monitor, newest first (never excluded rows).","operationId":"list_results","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"from","in":"query","description":"Default `to − 24 h`; at most 7 days before `to`; clamped to the\nplan's raw retention.","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"Default now.","required":false,"schema":{"type":"string"}},{"name":"location","in":"query","description":"Location code.","required":false,"schema":{"type":"string"}},{"name":"outcome","in":"query","description":"Comma-separated outcomes.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-1000, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_CheckResult"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/monitors/{mon}/resume":{"post":{"tags":["monitors"],"summary":"Resume a monitor. A `plan_limit` monitor runs `apply_entitlements` and\ngets `403 plan_limit` if still outside the plan.","operationId":"resume_monitor","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}}],"responses":{"200":{"headers":{"ETag":{"schema":{"type":"string"},"description":"\"<version>\""}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | plan_limit | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/monitors/{mon}/rollups":{"get":{"tags":["monitors"],"summary":"Hourly or daily rollups of a monitor, oldest first (not paginated).","operationId":"list_rollups","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"granularity","in":"query","description":"`hour` (default) or `day`.","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Default `to − 24 h` (hour) or `to − 30 days` (day); at most 31 /\n731 days before `to`; clamped to plan history.","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"location","in":"query","description":"Location code.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RollupsResponse"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/monitors/{mon}/series":{"get":{"tags":["monitors"],"summary":"Latency series per location and the non-up bands.","operationId":"get_series","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"range","in":"query","description":"`24h` (default) | `7d` | `30d` | `90d`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Series"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/monitors/{mon}/timeline":{"get":{"tags":["monitors"],"summary":"Status periods overlapping the window, oldest first.","operationId":"get_timeline","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"from","in":"query","description":"Default `to − 24 h`; clamped to plan history.","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"Default now.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_StatusPeriod"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/monitors/{mon}/traces":{"get":{"tags":["monitors"],"summary":"A monitor's path traces, newest first, within the plan's raw data\nretention.","operationId":"list_traces","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"incident_id","in":"query","description":"Only the traces run for this incident.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-50, default 10.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_PathTrace"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]},"post":{"tags":["monitors"],"summary":"Run a path trace towards the monitor's target from one location.","operationId":"create_trace","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathTraceInput"}}},"required":true},"responses":{"202":{"description":"Started; `trace.updated` follows when it finishes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathTrace"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | csrf_failed | billing_inactive | org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (a trace from this location is still running)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"unsupported_media_type","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"unavailable (no probe there can run it)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["member"]}]}},"/orgs/{org}/monitors/{mon}/uptime":{"get":{"tags":["monitors"],"summary":"Uptime from status periods, clipped to the window and plan history.","operationId":"get_uptime","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"mon","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MonitorId"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"windows","in":"query","description":"Comma-separated `24h,7d,30d,90d` (default all four).","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/List_Uptime"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/notifications":{"get":{"tags":["notifications"],"summary":"The org's notification log, newest first (the delivery log of a contact\nwith `?contact_id=`).","operationId":"list_notifications","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"contact_id","in":"query","description":"`con_…`: the delivery log of one contact.","required":false,"schema":{"type":"string"}},{"name":"incident_id","in":"query","description":"`inc_…`","required":false,"schema":{"type":"string"}},{"name":"monitor_id","in":"query","description":"`mon_…`","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"`pending | sending | sent | failed | cancelled | suppressed`","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","description":"A notification kind.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque cursor from `next_cursor`.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"1-200, default 50.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"A page of notifications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Notification"}}}},"400":{"description":"bad_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (not a member)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"validation (bad filter or cursor)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/notifications/{ntf}":{"get":{"tags":["notifications"],"summary":"One notification with its deliveries (the SPA follows a test send\nhere).","operationId":"get_notification","parameters":[{"name":"org","in":"path","description":"Organisation id","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"ntf","in":"path","description":"Notification id","required":true,"schema":{"$ref":"#/components/schemas/NotificationId"}}],"responses":{"200":{"description":"The notification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"org_suspended | org_deleting | mfa_required | email_not_verified | account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/overview":{"get":{"tags":["orgs"],"summary":"Dashboard data for the org.","operationId":"get_overview","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Overview"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/orgs/{org}/traces/{trc}":{"get":{"tags":["monitors"],"summary":"One path trace (`404` once outside the plan's raw retention).","operationId":"get_trace","parameters":[{"name":"org","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OrgId"}},{"name":"trc","in":"path","required":true,"schema":{"$ref":"#/components/schemas/TraceId"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathTrace"}}}},"401":{"description":"unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"forbidden | mfa_required | email_not_verified | account_suspended | org_suspended | org_deleting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"session":[]},{"api_token":["viewer"]}]}},"/token":{"get":{"tags":["tokens"],"summary":"The calling API token: its org and effective role (token only).","operationId":"token_info","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenInfo"}}}},"401":{"description":"unauthenticated (no, or an invalid, API token)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"account_suspended","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"api_token":["viewer"]}]}},"/webhooks/pushover/{token}":{"post":{"tags":["webhooks"],"summary":"Pushover emergency-receipt callback. `acknowledged=1` marks the\ndelivery `acknowledged` and acknowledges the incident(s) it carried\n(`Event::Acknowledged { incident_id, by: None, via_contact }`, one per\nincident).","operationId":"pushover_callback","parameters":[{"name":"token","in":"path","description":"HMAC callback token","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Pushover receipt callback fields","content":{"application/x-www-form-urlencoded":{"schema":{"type":"string"}}},"required":true},"responses":{"204":{"description":"Processed"},"404":{"description":"`not_found`: invalid token"},"429":{"description":"`rate_limited`: authenticated callbacks over 100/s, or a source that keeps failing authentication"}},"security":[{}]}},"/webhooks/ses":{"post":{"tags":["webhooks"],"summary":"Amazon SNS deliveries of SES events (bounces, complaints, deliveries)\nfor the topic `email.ses_sns_topic_arn`, and that topic's\nsubscription confirmation.","operationId":"ses","requestBody":{"description":"Amazon SNS HTTP(S) message (JSON). The signature (SignatureVersion 1 or 2) is verified against the SNS signing certificate and the topic must be the configured one.","content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Processed or confirmed (unknown messages and other SES events are ignored)"},"400":{"description":"`bad_request`: not an SNS message"},"401":{"description":"`unauthenticated`: unexpected topic, certificate URL, certificate or signature"},"404":{"description":"`not_found`: no SNS topic is configured"},"429":{"description":"`rate_limited`: authenticated messages over 100/s, or a source that keeps failing authentication"},"503":{"description":"`unavailable`: the signing certificate or the subscription confirmation could not be fetched (SNS retries)"}},"security":[{}]}},"/webhooks/stripe":{"post":{"tags":["webhooks"],"summary":"Receive a Stripe event: verify the signature, store it once, wake the\nprocessor (billing.md §11.2). No session, no CSRF.","operationId":"stripe_webhook","parameters":[{"name":"Stripe-Signature","in":"header","description":"`t=<unix>,v1=<hex>[,v1=<hex>...]`","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The raw Stripe event (at most 256 KiB)","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Received"}}}},"400":{"description":"bad_request: missing, malformed, wrong or stale signature; unreadable event; livemode mismatch","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"billing_disabled (`[billing] mode = \"disabled\"`; nothing is stored)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"payload_too_large","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited (100/s)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal: the event could not be stored (Stripe retries)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"stripe":[]}]}},"/webhooks/twilio/call-status":{"post":{"tags":["webhooks"],"summary":"Twilio call status callback (notifications.md §8.9a): `completed` is\ndelivered (answered, by a person or voicemail); `busy`, `no-answer`\nand `canceled` are undelivered; `failed` is failed.","operationId":"twilio_call_status","requestBody":{"description":"Twilio call status callback fields","content":{"application/x-www-form-urlencoded":{"schema":{"type":"string"}}},"required":true},"responses":{"204":{"description":"Processed"},"401":{"description":"`unauthenticated`: bad `X-Twilio-Signature`"},"429":{"description":"`rate_limited`: authenticated callbacks over 100/s, or a source that keeps failing authentication"}},"security":[{}]}},"/webhooks/twilio/inbound":{"post":{"tags":["webhooks"],"summary":"Twilio inbound messages: `OptOutType=STOP` disables every SMS contact\nwith that number; `START` re-activates opted-out, previously verified\ncontacts. Other texts are ignored.","operationId":"twilio_inbound","requestBody":{"description":"Twilio inbound message fields","content":{"application/x-www-form-urlencoded":{"schema":{"type":"string"}}},"required":true},"responses":{"204":{"description":"Processed"},"401":{"description":"`unauthenticated`: bad `X-Twilio-Signature`"},"429":{"description":"`rate_limited`: authenticated messages over 100/s, or a source that keeps failing authentication"}},"security":[{}]}},"/webhooks/twilio/status":{"post":{"tags":["webhooks"],"summary":"Twilio message status callback: `delivered`, `undelivered`, `failed`.","operationId":"twilio_status","requestBody":{"description":"Twilio status callback fields","content":{"application/x-www-form-urlencoded":{"schema":{"type":"string"}}},"required":true},"responses":{"204":{"description":"Processed"},"401":{"description":"`unauthenticated`: bad `X-Twilio-Signature`"},"429":{"description":"`rate_limited`: authenticated callbacks over 100/s, or a source that keeps failing authentication"}},"security":[{}]}}},"components":{"schemas":{"AddPasskeyRequest":{"type":"object","description":"`{name, credential}`.","required":["name","credential"],"properties":{"credential":{"$ref":"#/components/schemas/RegistrationCredential"},"name":{"type":"string","description":"A label for the user, e.g. \"MacBook\" (1-64 characters).","maxLength":64}},"additionalProperties":false},"ApiToken":{"type":"object","description":"An API token (never its secret).","required":["id","name","role","prefix","created_by","created_at"],"properties":{"created_at":{"$ref":"#/components/schemas/Ts"},"created_by":{"$ref":"#/components/schemas/UserRef","description":"The member the token acts for."},"expires_at":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"`null` = never expires."},{"type":"null"}]},"id":{"$ref":"#/components/schemas/ApiTokenId"},"last_used_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"last_used_ip":{"type":["string","null"]},"name":{"type":"string"},"prefix":{"type":"string","description":"The first 8 characters after `jmi_`, for recognising the token."},"role":{"$ref":"#/components/schemas/TokenRole"}}},"ApiTokenId":{"type":"string","pattern":"^tok_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"Assertion":{"oneOf":[{"type":"object","required":["value","type"],"properties":{"type":{"type":"string","enum":["body_contains"]},"value":{"type":"string"}}},{"type":"object","required":["value","type"],"properties":{"type":{"type":"string","enum":["body_not_contains"]},"value":{"type":"string"}}},{"type":"object","required":["pattern","type"],"properties":{"pattern":{"type":"string"},"type":{"type":"string","enum":["body_regex"]}}},{"type":"object","required":["path","op","type"],"properties":{"op":{"$ref":"#/components/schemas/JsonOp"},"path":{"type":"string"},"type":{"type":"string","enum":["json_path"]},"value":{"description":"Any JSON value; required except for `exists` and `not_exists`."}}},{"type":"object","required":["name","op","type"],"properties":{"name":{"type":"string"},"op":{"$ref":"#/components/schemas/HeaderOp"},"type":{"type":"string","enum":["header"]},"value":{"type":["string","null"]}}}],"description":"An `http_adv` assertion (probes-and-checks.md §5.4.2)."},"AssertionResponse":{"type":"object","description":"`AuthenticatorAssertionResponseJSON` (other members are ignored).","required":["clientDataJSON","authenticatorData","signature"],"properties":{"authenticatorData":{"type":"string","maxLength":4096},"clientDataJSON":{"type":"string","maxLength":4096},"signature":{"type":"string","maxLength":1400},"userHandle":{"type":["string","null"],"maxLength":128}}},"AttestationResponse":{"type":"object","description":"`AuthenticatorAttestationResponseJSON` (other members are ignored).","required":["clientDataJSON","attestationObject"],"properties":{"attestationObject":{"type":"string","maxLength":8192},"clientDataJSON":{"type":"string","maxLength":4096}}},"AuditActor":{"type":"object","description":"Who did it.","required":["kind"],"properties":{"id":{"oneOf":[{"$ref":"#/components/schemas/UserId","description":"`usr_…` for users and platform admins."},{"type":"null"}]},"kind":{"$ref":"#/components/schemas/AuditActorKind"},"label":{"type":["string","null"],"description":"The user's email, or the stored label (`cli:<user>`,\n`deleted-user-…`, `system`)."}}},"AuditActorKind":{"type":"string","description":"`audit_log.actor_kind`","enum":["user","platform_admin","system","stripe"]},"AuditId":{"type":"string","pattern":"^aud_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"AuditTarget":{"type":"object","description":"What it was done to.","required":["type"],"properties":{"id":{"type":["string","null"],"description":"A prefixed id where the type has one."},"type":{"type":"string"}}},"AuthResult":{"type":"object","description":"`{\"status\": \"ok\", \"user\": User}`, `{\"status\": \"mfa_required\", \"user\":\nnull}` or `{\"status\": \"verification_sent\", \"user\": null}`.","required":["status"],"properties":{"status":{"type":"string","description":"`ok` | `mfa_required` | `verification_sent`."},"user":{"oneOf":[{"$ref":"#/components/schemas/User"},{"type":"null"}]}}},"AuthenticationCredential":{"type":"object","description":"`AuthenticationResponseJSON`: what `navigator.credentials.get()`\nreturned, base64url-encoded (other members are ignored).","required":["id","rawId","type","response"],"properties":{"id":{"type":"string","maxLength":1400},"rawId":{"type":"string","maxLength":1400},"response":{"$ref":"#/components/schemas/AssertionResponse"},"type":{"type":"string","description":"`public-key`."}}},"AuthenticatorSelection":{"type":"object","description":"`AuthenticatorSelectionCriteria`.","required":["residentKey","requireResidentKey","userVerification"],"properties":{"requireResidentKey":{"type":"boolean"},"residentKey":{"type":"string","description":"Always `required` (a discoverable credential: a passkey)."},"userVerification":{"type":"string","description":"Always `required`."}}},"Billing":{"type":"object","description":"An org's subscription, entitlements and usage.","required":["plan","status","cancel_at_period_end","entitlements","usage"],"properties":{"billing_interval":{"oneOf":[{"$ref":"#/components/schemas/BillingInterval"},{"type":"null"}]},"cancel_at_period_end":{"type":"boolean"},"current_period_end":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"entitlements":{"$ref":"#/components/schemas/Entitlements"},"grace_ends_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"past_due_since":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"plan":{"$ref":"#/components/schemas/Plan"},"status":{"$ref":"#/components/schemas/BillingStatus","description":"Effective status: a lapsed trial or grace period is `canceled`."},"trial_ends_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"usage":{"$ref":"#/components/schemas/BillingUsage"}}},"BillingInterval":{"type":"string","description":"`subscriptions.billing_interval`","enum":["month","year"]},"BillingStatus":{"type":"string","description":"`subscriptions.status`","enum":["trialing","active","past_due","canceled"]},"BillingUsage":{"type":"object","description":"Current usage of an org (`Billing.usage`).","required":["monitors","checks_per_minute","seats","contacts","sms_credits_used","sms_credits_limit","sms_state","sms_period_end"],"properties":{"checks_per_minute":{"type":"integer","format":"int32","minimum":0},"contacts":{"type":"integer","format":"int32","minimum":0},"monitors":{"type":"integer","format":"int32","minimum":0},"seats":{"type":"integer","format":"int32","minimum":0},"sms_credits_limit":{"type":"integer","format":"int32","minimum":0},"sms_credits_used":{"type":"integer","format":"int32","minimum":0},"sms_period_end":{"$ref":"#/components/schemas/Ts","description":"Start of the next UTC month, when the credits reset."},"sms_state":{"$ref":"#/components/schemas/SmsState"}}},"ChangePasswordRequest":{"type":"object","description":"`{current_password, new_password}`.","required":["current_password","new_password"],"properties":{"current_password":{"type":"string","maxLength":128},"new_password":{"type":"string","maxLength":128}},"additionalProperties":false},"ChannelKind":{"type":"string","description":"`contacts.kind`, `notification_jobs.channel`, `notification_deliveries.channel`.","enum":["email","sms","pushover","discord","pagerduty","slack","webhook","voice","teams"]},"CheckResult":{"type":"object","description":"One check result (schema `CheckResult`; excluded rows are never returned).","required":["ts","location","work_kind","outcome","timings"],"properties":{"error_detail":{"type":["string","null"]},"error_kind":{"oneOf":[{"$ref":"#/components/schemas/ErrorKind"},{"type":"null"}]},"latency_ms":{"type":["integer","null"],"format":"int32"},"location":{"type":"string","description":"Code of the location that ran the check."},"metrics":{"type":["object","null"]},"outcome":{"$ref":"#/components/schemas/Outcome"},"resolved_ip":{"type":["string","null"]},"slot_location":{"type":["string","null"],"description":"Code of the configured location it stood in for, if substituted."},"status_code":{"type":["integer","null"],"format":"int32"},"timings":{"$ref":"#/components/schemas/CheckTimings"},"tls_not_after":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"ts":{"$ref":"#/components/schemas/Ts"},"work_kind":{"$ref":"#/components/schemas/WorkKind"}}},"CheckTimings":{"type":"object","description":"Phase timings of a result.","properties":{"connect_ms":{"type":["integer","null"],"format":"int32"},"dns_ms":{"type":["integer","null"],"format":"int32"},"tls_ms":{"type":["integer","null"],"format":"int32"},"total_ms":{"type":["integer","null"],"format":"int32"},"ttfb_ms":{"type":["integer","null"],"format":"int32"}}},"CheckoutRequest":{"type":"object","description":"`POST /orgs/{org}/billing/checkout` body.","required":["plan","interval"],"properties":{"interval":{"$ref":"#/components/schemas/BillingInterval"},"plan":{"$ref":"#/components/schemas/Plan","description":"`starter`, `pro` or `business`."}},"additionalProperties":false},"CodeRequest":{"type":"object","description":"`{code}`.","required":["code"],"properties":{"code":{"type":"string","description":"A 6-digit TOTP code (or, where accepted, a recovery code).","maxLength":32}},"additionalProperties":false},"Contact":{"type":"object","description":"A contact (secrets are never returned; `secret_set` says whether one\nis stored).","required":["id","name","kind","config","secret_set","notify_on","auto_attach","status","consecutive_failures","monitor_count","version","created_at","updated_at"],"properties":{"auto_attach":{"type":"boolean"},"config":{"type":"object","description":"Stored config: email `{\"address\"}`, sms and voice `{\"phone_e164\",\n\"country_code\"}`, pushover `{\"device\", \"priority_down\",\n\"priority_up\", \"sound\", \"devices\"}`, discord `{\"webhook_id\",\n\"webhook_name\", \"channel_id\", \"guild_id\"}`, pagerduty `{\"region\",\n\"key_hint\"}`, slack `{\"team_id\", \"webhook_id\"}`, webhook `{\"host\",\n\"txt_name\", \"txt_value\"}` (the TXT record that verifies the host),\nteams `{\"host\", \"workflow_id\"}`."},"consecutive_failures":{"type":"integer","format":"int32"},"created_at":{"$ref":"#/components/schemas/Ts"},"credits_per_call":{"type":["integer","null"],"format":"int32","description":"Voice only: the SMS credits each call to this number uses, from\nwhat the number costs to call (notifications.md §8.9a). `null` for\nother kinds.","minimum":0},"disabled_reason":{"oneOf":[{"$ref":"#/components/schemas/ContactDisabledReason"},{"type":"null"}]},"id":{"$ref":"#/components/schemas/ContactId"},"kind":{"$ref":"#/components/schemas/ChannelKind"},"last_delivery_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"last_error":{"type":["string","null"]},"monitor_count":{"type":"integer","format":"int64"},"name":{"type":"string"},"notify_on":{"type":"array","items":{"$ref":"#/components/schemas/NotifyOn"}},"secret_set":{"type":"boolean"},"status":{"$ref":"#/components/schemas/ContactStatus"},"updated_at":{"$ref":"#/components/schemas/Ts"},"verified_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"version":{"type":"integer","format":"int32","description":"Optimistic-concurrency version (also the `ETag`)."}}},"ContactDisabledReason":{"type":"string","description":"`contacts.disabled_reason`","enum":["user","bounced","complaint","opted_out","invalid","unsubscribed","failing","abuse"]},"ContactId":{"type":"string","pattern":"^con_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"ContactInput":{"type":"object","description":"`POST /orgs/{org}/contacts` body.","required":["kind"],"properties":{"auto_attach":{"type":["boolean","null"],"description":"Attach to monitors created without `contact_ids`. Default `false`."},"config":{"type":"object","description":"Per kind: email `{\"address\"}`, sms and voice `{\"phone\"}` (E.164; a\nvoice contact may be a landline), pushover\n`{\"device\", \"priority_down\", \"priority_up\", \"sound\"}`, discord `{}`,\npagerduty `{\"region\"}` (`us` or `eu`, default `us`), slack `{}`,\nwebhook `{}`, teams `{}`."},"kind":{"$ref":"#/components/schemas/ChannelKind"},"name":{"type":"string","description":"1-100 characters.","maxLength":100},"notify_on":{"type":["array","null"],"items":{"$ref":"#/components/schemas/NotifyOn"},"description":"Non-empty subset of `down`, `recovered`, `degraded`; default\n`[\"down\", \"recovered\"]`."},"secret":{"type":["object","null"],"description":"Write-only: pushover `{\"user_key\"}`, discord `{\"webhook_url\"}`,\npagerduty `{\"routing_key\"}` (an Events API v2 integration key),\nslack `{\"webhook_url\"}` (an incoming webhook), webhook `{\"url\"}`\n(`https://` on a hostname whose `_justmonitorit.<host>` TXT record\nis the org's `txt_value`), teams `{\"webhook_url\"}` (a Workflows\nwebhook on `*.logic.azure.com` or\n`*.environment.api.powerplatform.com`); none for email, sms and\nvoice."}},"additionalProperties":false},"ContactMonitors":{"type":"object","description":"`PUT .../monitors` body and response.","required":["monitor_ids"],"properties":{"monitor_ids":{"type":"array","items":{"$ref":"#/components/schemas/MonitorId"},"description":"At most 1,000; replaces the contact's monitor links."}},"additionalProperties":false},"ContactPatch":{"type":"object","description":"`PATCH /orgs/{org}/contacts/{con}` body (JSON merge patch; `kind` is\nimmutable, `config` is merged, `secret` replaces the stored one).","properties":{"auto_attach":{"type":["boolean","null"]},"config":{"type":["object","null"]},"kind":{"oneOf":[{"$ref":"#/components/schemas/ChannelKind","description":"Not allowed (`422 not_allowed`)."},{"type":"null"}]},"name":{"type":["string","null"],"maxLength":100},"notify_on":{"type":["array","null"],"items":{"$ref":"#/components/schemas/NotifyOn"}},"secret":{"type":["object","null"]}},"additionalProperties":false},"ContactRef":{"type":"object","description":"`{ \"id\": \"con_…\", \"name\": \"…\", \"kind\": \"sms\" }`.","required":["id","name","kind"],"properties":{"id":{"$ref":"#/components/schemas/ContactId"},"kind":{"$ref":"#/components/schemas/ChannelKind"},"name":{"type":"string"}}},"ContactStatus":{"type":"string","description":"`contacts.status`","enum":["unverified","active","disabled"]},"CreateInviteRequest":{"type":"object","description":"`{email, role}`.","required":["email","role"],"properties":{"email":{"type":"string","maxLength":254},"role":{"$ref":"#/components/schemas/Role"}},"additionalProperties":false},"CreateMaintenanceRequest":{"type":"object","description":"`POST /orgs/{org}/maintenance` body. Give `ends_at` or\n`duration_minutes`, and `all_monitors: true` or `monitor_ids`.","required":["name"],"properties":{"all_monitors":{"type":"boolean","description":"Cover every monitor, including ones added later."},"duration_minutes":{"type":["integer","null"],"format":"int32","description":"1-10080, instead of `ends_at`.","minimum":0},"ends_at":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"After `starts_at`, at most 7 days later."},{"type":"null"}]},"monitor_ids":{"type":"array","items":{"type":"string"},"description":"The monitors to cover when `all_monitors` is false (at least one)."},"name":{"type":"string","description":"1-100 characters, e.g. \"Postgres upgrade\"."},"starts_at":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"Absent = now. At most a year ahead."},{"type":"null"}]}},"additionalProperties":false},"CreateOrgRequest":{"type":"object","description":"`{name}`.","required":["name"],"properties":{"name":{"type":"string","description":"1-100 characters.","maxLength":100}},"additionalProperties":false},"CreateTokenRequest":{"type":"object","description":"`POST /orgs/{org}/api-tokens` body.","required":["name","role"],"properties":{"expires_in_days":{"type":["integer","null"],"format":"int32","description":"1-365; absent or `null` = never expires.","minimum":0},"name":{"type":"string","description":"1-64 characters, e.g. \"Terraform\" or \"Claude\"."},"role":{"$ref":"#/components/schemas/TokenRole","description":"At most the caller's own role."}},"additionalProperties":false},"CreatedToken":{"type":"object","description":"A new token and its secret (shown once).","required":["token","secret"],"properties":{"secret":{"type":"string","description":"`jmi_…`: send as `Authorization: Bearer <secret>`. Not shown again."},"token":{"$ref":"#/components/schemas/ApiToken"}}},"CredentialDescriptor":{"type":"object","description":"`PublicKeyCredentialDescriptorJSON`.","required":["type","id"],"properties":{"id":{"type":"string","description":"The credential id, base64url."},"type":{"type":"string","description":"Always `public-key`."}}},"CredentialParameters":{"type":"object","description":"`PublicKeyCredentialParameters`.","required":["type","alg"],"properties":{"alg":{"type":"integer","format":"int64","description":"COSE algorithm: -7 (ES256), -8 (EdDSA), -257 (RS256)."},"type":{"type":"string","description":"Always `public-key`."}}},"DeleteOrgRequest":{"type":"object","description":"`{confirm_name}`.","required":["confirm_name"],"properties":{"confirm_name":{"type":"string","description":"Must equal the org's name.","maxLength":100}},"additionalProperties":false},"DeletionScheduled":{"type":"object","description":"`{purge_after}`.","required":["purge_after"],"properties":{"purge_after":{"$ref":"#/components/schemas/Ts"}}},"DeliveryId":{"type":"string","pattern":"^dlv_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"DeliveryStatus":{"type":"string","description":"`notification_deliveries.status`","enum":["sent","failed_retryable","failed_permanent","ambiguous"]},"DeliveryView":{"type":"object","description":"One delivery attempt of a notification.","required":["id","attempt","status","started_at","latency_ms"],"properties":{"attempt":{"type":"integer","format":"int32"},"error":{"type":["string","null"]},"error_code":{"type":["string","null"]},"http_status":{"type":["integer","null"],"format":"int32"},"id":{"$ref":"#/components/schemas/DeliveryId"},"latency_ms":{"type":"integer","format":"int32"},"provider_status":{"oneOf":[{"$ref":"#/components/schemas/ProviderStatus"},{"type":"null"}]},"provider_status_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"started_at":{"$ref":"#/components/schemas/Ts"},"status":{"$ref":"#/components/schemas/DeliveryStatus"}}},"DomainExpirySpec":{"type":"object","description":"`domain_expiry` (probes-and-checks.md §5.4.5).","required":["domain"],"properties":{"domain":{"type":"string","description":"The registered domain, IDNA A-label, lower case."},"expiry_warn_days":{"type":"integer","format":"int32","description":"Degraded this many days before expiry, 1-365 (default 30).","minimum":0},"timeout_ms":{"type":"integer","format":"int32","description":"1000-30000 (default 10000).","minimum":0}}},"EmailChangeRequest":{"type":"object","description":"`{new_email}`.","required":["new_email"],"properties":{"new_email":{"type":"string","maxLength":254}},"additionalProperties":false},"EmailRequest":{"type":"object","description":"`{email}`.","required":["email"],"properties":{"email":{"type":"string","maxLength":254}},"additionalProperties":false},"Entitlements":{"type":"object","description":"The single answer to \"what may this org do now\".","required":["plan","status","monitors_may_run","writes_allowed","max_monitors","min_interval_s","min_locations_per_monitor","max_locations_per_monitor","max_checks_per_minute","max_contacts","max_seats","sms_credits_per_month","raw_retention_days","history_retention_days"],"properties":{"history_retention_days":{"type":"integer","format":"int32","minimum":0},"max_checks_per_minute":{"type":"integer","format":"int32","minimum":0},"max_contacts":{"type":"integer","format":"int32","minimum":0},"max_locations_per_monitor":{"type":"integer","format":"int32","minimum":0},"max_monitors":{"type":"integer","format":"int32","minimum":0},"max_seats":{"type":"integer","format":"int32","minimum":0},"min_interval_s":{"type":"integer","format":"int32","minimum":0},"min_locations_per_monitor":{"type":"integer","format":"int32","minimum":0},"monitors_may_run":{"type":"boolean"},"plan":{"$ref":"#/components/schemas/Plan"},"raw_retention_days":{"type":"integer","format":"int32","minimum":0},"sms_credits_per_month":{"type":"integer","format":"int32","minimum":0},"status":{"$ref":"#/components/schemas/BillingStatus","description":"Effective: a lapsed trial or grace period counts as `canceled`."},"writes_allowed":{"type":"boolean"}}},"ErrorKind":{"type":"string","description":"`error_kind` taxonomy (probes-and-checks.md §5.6).","enum":["dns_failure","blocked_address","connect_timeout","connection_refused","connection_reset","host_unreachable","tls_error","cert_expired","timeout","protocol_error","status_mismatch","assertion_failed","too_many_redirects","redirect_blocked","packet_loss","slow_response","cert_expiring","domain_expiring","domain_expired","domain_not_found","rdap_unavailable","heartbeat_missed","heartbeat_failed","network_unreachable","icmp_unavailable","resource_exhausted","probe_overloaded","internal"]},"Granularity":{"type":"string","description":"`check_rollups.granularity`","enum":["hour","day"]},"GraphqlRequest":{"type":"object","description":"A GraphQL request (one operation; no batching).","required":["query"],"properties":{"extensions":{"type":["object","null"],"description":"Accepted and ignored."},"operationName":{"type":["string","null"]},"query":{"type":"string"},"variables":{"type":["object","null"]}},"additionalProperties":false},"HeaderOp":{"type":"string","description":"`header` assertion operator.","enum":["exists","not_exists","equals","contains","regex"]},"HeaderSpec":{"type":"object","description":"One request header of an `http_adv` check.","required":["name"],"properties":{"name":{"type":"string"},"secret":{"type":"boolean"},"value":{"type":["string","null"],"description":"The header value. With `secret`, write-only: sent in requests,\n`null` in responses (the value lives in the secrets blob)."}}},"HeartbeatSpec":{"type":"object","description":"`heartbeat` (probes-and-checks.md §5.4.7). The period between pings is\nthe monitor's `interval_s`.","properties":{"grace_s":{"type":"integer","format":"int32","description":"How late a ping may be before the monitor is down, 60-604800 s\n(default 300).","maximum":604800,"minimum":60}}},"HopUnreachable":{"type":"string","description":"An ICMP destination unreachable a hop answered with instead of\nforwarding (the path ends there). A port unreachable from the target\nitself means it was reached and is not reported.","enum":["net","host","protocol","port","prohibited","other"]},"HttpAdvSpec":{"type":"object","description":"`http_adv` spec in responses (schema `HttpAdvSpec`). A secret header\nhas `\"secret\": true, \"value\": null`.","required":["url","method","headers","auth","expected_status","assertions","follow_redirects","max_redirects","verify_tls","ip_family","timeout_ms","body_max_bytes"],"properties":{"assertions":{"type":"array","items":{"$ref":"#/components/schemas/Assertion"}},"auth":{"$ref":"#/components/schemas/HttpAuthView"},"body":{"type":["string","null"]},"body_max_bytes":{"type":"integer","format":"int32","minimum":0},"cert_expiry_warn_days":{"type":["integer","null"],"format":"int32","minimum":0},"expected_status":{"type":"array","items":{"type":"string"}},"follow_redirects":{"type":"boolean"},"headers":{"type":"array","items":{"$ref":"#/components/schemas/HeaderSpec"}},"ip_family":{"$ref":"#/components/schemas/IpFamily"},"max_redirects":{"type":"integer","format":"int32","minimum":0},"method":{"$ref":"#/components/schemas/HttpMethod"},"timeout_ms":{"type":"integer","format":"int32","minimum":0},"url":{"type":"string"},"verify_tls":{"type":"boolean"}}},"HttpAdvSpecInput":{"type":"object","description":"`http_adv` spec in requests (probes-and-checks.md §5.4.2). A header\nwith `secret: true` carries its write-only value in `value`.","required":["url"],"properties":{"assertions":{"type":"array","items":{"$ref":"#/components/schemas/Assertion"},"description":"At most 20."},"auth":{"oneOf":[{"$ref":"#/components/schemas/HttpAuthInput","description":"Default `{\"type\": \"none\"}`."},{"type":"null"}]},"body":{"type":["string","null"],"description":"Not with `GET` or `HEAD`; at most 16 KiB."},"body_max_bytes":{"type":"integer","format":"int32","description":"Default 65536.","minimum":0},"cert_expiry_warn_days":{"type":["integer","null"],"format":"int32","description":"Default 14; `null` disables the warning.","minimum":0},"expected_status":{"type":"array","items":{"type":"string"},"description":"Codes (`\"200\"`) or ranges (`\"200-299\"`); default `[\"200-299\"]`."},"follow_redirects":{"type":"boolean","description":"Default `true`."},"headers":{"type":"array","items":{"$ref":"#/components/schemas/HeaderSpec"},"description":"At most 32; a secret header needs a unique name."},"ip_family":{"$ref":"#/components/schemas/IpFamily"},"max_redirects":{"type":"integer","format":"int32","description":"0-10, default 5.","minimum":0},"method":{"$ref":"#/components/schemas/HttpMethod","description":"Default `GET`."},"timeout_ms":{"type":"integer","format":"int32","description":"Default 10000.","minimum":0},"url":{"type":"string"},"verify_tls":{"type":"boolean","description":"Default `true`."}}},"HttpAuthInput":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["none"]}}},{"type":"object","required":["username","type"],"properties":{"password":{"type":["string","null"],"description":"Write-only."},"type":{"type":"string","enum":["basic"]},"username":{"type":"string"}}},{"type":"object","required":["type"],"properties":{"token":{"type":["string","null"],"description":"Write-only."},"type":{"type":"string","enum":["bearer"]}}}],"description":"`auth` of an `http_adv` spec in requests. A secret that is absent or\n`null` keeps the stored value; `\"\"` clears it (probes-and-checks.md\n§5.4.3)."},"HttpAuthView":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["none"]}}},{"type":"object","required":["username","password_set","type"],"properties":{"password_set":{"type":"boolean"},"type":{"type":"string","enum":["basic"]},"username":{"type":"string"}}},{"type":"object","required":["token_set","type"],"properties":{"token_set":{"type":"boolean"},"type":{"type":"string","enum":["bearer"]}}}],"description":"`auth` of an `http_adv` spec in responses: whether each secret is\nstored, never its value."},"HttpMethod":{"type":"string","description":"HTTP method of an `http_adv` check. Default `GET`.","enum":["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"]},"HttpSpec":{"type":"object","description":"`http` (probes-and-checks.md §5.4.1).","required":["url"],"properties":{"ip_family":{"$ref":"#/components/schemas/IpFamily"},"keyword":{"type":["string","null"],"description":"Text the body must contain, 1-128 bytes."},"timeout_ms":{"type":"integer","format":"int32","description":"1000-30000 (default 10000).","minimum":0},"url":{"type":"string","description":"`http` or `https` URL (normalised, fragment dropped)."}}},"IcmpSpec":{"type":"object","description":"`icmp` (probes-and-checks.md §5.2).","required":["host"],"properties":{"count":{"type":"integer","format":"int32","description":"Pings per check, 1-10 (default 3).","minimum":0},"host":{"type":"string","description":"Host name or public IP address."},"interval_ms":{"type":"integer","format":"int32","description":"Between pings, 200-1000 (default 500).","minimum":0},"ip_family":{"$ref":"#/components/schemas/IpFamily"},"loss_threshold_pct":{"type":"integer","format":"int32","description":"Packet loss that counts as down, 1-100 (default 100).","minimum":0},"payload_bytes":{"type":"integer","format":"int32","description":"16-1024 (default 56).","minimum":0},"timeout_ms":{"type":"integer","format":"int32","description":"Per ping, 500-10000 (default 2000).","minimum":0}}},"Incident":{"type":"object","description":"An incident (schema `Incident`).","required":["id","monitor","severity","status","current_status","flapping","first_failure_at","opened_at","duration_s","cause","cause_detail","reminders_sent","notification_count"],"properties":{"acknowledged_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"acknowledged_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"`null` with `acknowledged_at` set = acknowledged via Pushover."},{"type":"null"}]},"cause":{"type":"string"},"cause_detail":{"type":"object","description":"`RootCause` (evaluation.md §7.14) with location ids expanded to\n`{id, code, name}`."},"current_status":{"$ref":"#/components/schemas/IncidentCurrentStatus"},"duration_s":{"type":"integer","format":"int64","description":"From the first failure to resolution (or now)."},"first_failure_at":{"$ref":"#/components/schemas/Ts"},"flapping":{"type":"boolean"},"id":{"$ref":"#/components/schemas/IncidentId"},"monitor":{"$ref":"#/components/schemas/IncidentMonitor"},"notification_count":{"type":"integer","format":"int64","description":"Notification jobs of this incident with status `sent`."},"opened_at":{"$ref":"#/components/schemas/Ts"},"reminders_sent":{"type":"integer","format":"int32"},"resolution":{"oneOf":[{"$ref":"#/components/schemas/Resolution"},{"type":"null"}]},"resolved_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"severity":{"$ref":"#/components/schemas/IncidentSeverity","description":"Worst status reached."},"status":{"$ref":"#/components/schemas/IncidentStatus"}}},"IncidentCurrentStatus":{"type":"string","description":"`incidents.current_status`","enum":["up","down","degraded","no_data"]},"IncidentDetail":{"allOf":[{"$ref":"#/components/schemas/Incident"},{"type":"object","required":["events","notifications"],"properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/IncidentEvent"}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/Notification"}}}}],"description":"An incident with its timeline and notifications (schema `IncidentDetail`)."},"IncidentEvent":{"type":"object","description":"One timeline entry of an incident.","required":["id","ts","type","data"],"properties":{"actor":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"The user who acted, `null` for system events."},{"type":"null"}]},"data":{"type":"object","description":"Per type (evaluation.md §7.14)."},"id":{"$ref":"#/components/schemas/IncidentEventId"},"ts":{"$ref":"#/components/schemas/Ts"},"type":{"$ref":"#/components/schemas/IncidentEventType"}}},"IncidentEventId":{"type":"string","pattern":"^iev_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"IncidentEventType":{"type":"string","description":"`incident_events.type` (evaluation.md §7.14).","enum":["check_failed","opened","status_changed","location_failed","location_recovered","no_data","data_resumed","flapping_started","flapping_ended","acknowledged","reminder_sent","reminders_exhausted","note","resolved","no_contacts","notification_sent","notification_failed","notification_suppressed","notification_undelivered"]},"IncidentId":{"type":"string","pattern":"^inc_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"IncidentMonitor":{"type":"object","description":"`{ \"id\": \"mon_…\", \"name\": \"…\" }`.","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/MonitorId"},"name":{"type":"string"}}},"IncidentNoteInput":{"type":"object","description":"`POST .../notes` body.","required":["body"],"properties":{"body":{"type":"string","description":"1-2000 characters.","maxLength":2000}},"additionalProperties":false},"IncidentSeverity":{"type":"string","description":"`incidents.severity`; also the evaluator's `IncidentCause`.","enum":["down","degraded"]},"IncidentStatus":{"type":"string","description":"`incidents.status`","enum":["open","resolved"]},"Invite":{"type":"object","description":"An open invitation.","required":["id","email","role","created_at","expires_at"],"properties":{"created_at":{"$ref":"#/components/schemas/Ts"},"email":{"type":"string"},"expires_at":{"$ref":"#/components/schemas/Ts"},"id":{"$ref":"#/components/schemas/InviteId"},"invited_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"`null` if the inviter's account was deleted."},{"type":"null"}]},"role":{"$ref":"#/components/schemas/Role"}}},"InviteId":{"type":"string","pattern":"^inv_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"InviteLookup":{"type":"object","description":"What an invite link offers.","required":["org_name","email","role","expires_at","account_exists"],"properties":{"account_exists":{"type":"boolean","description":"Whether the address already has an account (\"sign in\" or \"create\naccount\"). Revealed only to the holder of the invite."},"email":{"type":"string"},"expires_at":{"$ref":"#/components/schemas/Ts"},"inviter_name":{"type":["string","null"]},"org_name":{"type":"string"},"role":{"$ref":"#/components/schemas/Role"}}},"IpFamily":{"type":"string","description":"`ip_family` of a spec. Default `auto`.","enum":["auto","ipv4","ipv6"]},"JsonOp":{"type":"string","description":"`json_path` assertion operator.","enum":["exists","not_exists","equals","not_equals","contains","lt","gt"]},"List_ApiToken":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"An API token (never its secret).","required":["id","name","role","prefix","created_by","created_at"],"properties":{"created_at":{"$ref":"#/components/schemas/Ts"},"created_by":{"$ref":"#/components/schemas/UserRef","description":"The member the token acts for."},"expires_at":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"`null` = never expires."},{"type":"null"}]},"id":{"$ref":"#/components/schemas/ApiTokenId"},"last_used_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"last_used_ip":{"type":["string","null"]},"name":{"type":"string"},"prefix":{"type":"string","description":"The first 8 characters after `jmi_`, for recognising the token."},"role":{"$ref":"#/components/schemas/TokenRole"}}}}}},"List_Contact":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"A contact (secrets are never returned; `secret_set` says whether one\nis stored).","required":["id","name","kind","config","secret_set","notify_on","auto_attach","status","consecutive_failures","monitor_count","version","created_at","updated_at"],"properties":{"auto_attach":{"type":"boolean"},"config":{"type":"object","description":"Stored config: email `{\"address\"}`, sms and voice `{\"phone_e164\",\n\"country_code\"}`, pushover `{\"device\", \"priority_down\",\n\"priority_up\", \"sound\", \"devices\"}`, discord `{\"webhook_id\",\n\"webhook_name\", \"channel_id\", \"guild_id\"}`, pagerduty `{\"region\",\n\"key_hint\"}`, slack `{\"team_id\", \"webhook_id\"}`, webhook `{\"host\",\n\"txt_name\", \"txt_value\"}` (the TXT record that verifies the host),\nteams `{\"host\", \"workflow_id\"}`."},"consecutive_failures":{"type":"integer","format":"int32"},"created_at":{"$ref":"#/components/schemas/Ts"},"credits_per_call":{"type":["integer","null"],"format":"int32","description":"Voice only: the SMS credits each call to this number uses, from\nwhat the number costs to call (notifications.md §8.9a). `null` for\nother kinds.","minimum":0},"disabled_reason":{"oneOf":[{"$ref":"#/components/schemas/ContactDisabledReason"},{"type":"null"}]},"id":{"$ref":"#/components/schemas/ContactId"},"kind":{"$ref":"#/components/schemas/ChannelKind"},"last_delivery_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"last_error":{"type":["string","null"]},"monitor_count":{"type":"integer","format":"int64"},"name":{"type":"string"},"notify_on":{"type":"array","items":{"$ref":"#/components/schemas/NotifyOn"}},"secret_set":{"type":"boolean"},"status":{"$ref":"#/components/schemas/ContactStatus"},"updated_at":{"$ref":"#/components/schemas/Ts"},"verified_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"version":{"type":"integer","format":"int32","description":"Optimistic-concurrency version (also the `ETag`)."}}}}}},"List_HeartbeatPing":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One ping a heartbeat monitor received (schema `HeartbeatPing`).","required":["ts","kind","method"],"properties":{"kind":{"$ref":"#/components/schemas/PingKind"},"method":{"type":"string","description":"`GET`, `HEAD` or `POST`."},"remote_ip":{"type":["string","null"],"description":"The client's address."},"ts":{"$ref":"#/components/schemas/Ts"},"user_agent":{"type":["string","null"],"description":"The request's `User-Agent`, at most 256 characters."}}}}}},"List_MaintenanceWindow":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"A maintenance window: while it is active, the monitors it covers keep\nchecking and record incidents, but their alerts are held. When it ends,\neach incident still open alerts its contacts once; incidents that ended\ninside the window send nothing.","required":["id","name","state","starts_at","ends_at","all_monitors","monitor_ids","created_at","ended_early","held_incidents"],"properties":{"all_monitors":{"type":"boolean","description":"Every monitor of the org, including ones added later."},"created_at":{"$ref":"#/components/schemas/Ts"},"created_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"`null` if the member left the org."},{"type":"null"}]},"ended_early":{"type":"boolean","description":"Ended before its scheduled end."},"ends_at":{"$ref":"#/components/schemas/Ts"},"held_incidents":{"type":"integer","format":"int64","description":"Incidents whose alerts the window is holding now."},"id":{"$ref":"#/components/schemas/MaintenanceId"},"monitor_ids":{"type":"array","items":{"$ref":"#/components/schemas/MonitorId"},"description":"The monitors covered when `all_monitors` is false."},"name":{"type":"string"},"starts_at":{"$ref":"#/components/schemas/Ts"},"state":{"$ref":"#/components/schemas/MaintenanceState"}}}}}},"List_Member":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One member of an org.","required":["user","role","joined_at"],"properties":{"joined_at":{"$ref":"#/components/schemas/Ts"},"last_active_at":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"Latest activity of any of the user's sessions."},{"type":"null"}]},"role":{"$ref":"#/components/schemas/Role"},"user":{"$ref":"#/components/schemas/MemberUser"}}}}}},"List_Org":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"An organisation as its member sees it.","required":["id","name","timezone","status","my_role","billing","created_at"],"properties":{"billing":{"$ref":"#/components/schemas/OrgBilling"},"created_at":{"$ref":"#/components/schemas/Ts"},"id":{"$ref":"#/components/schemas/OrgId"},"my_role":{"$ref":"#/components/schemas/Role"},"name":{"type":"string"},"purge_after":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"Set while deleting or canceled."},{"type":"null"}]},"status":{"$ref":"#/components/schemas/OrgStatus"},"timezone":{"type":"string","description":"IANA name."}}}}}},"List_Passkey":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One of the user's passkeys.","required":["id","name","created_at","backed_up"],"properties":{"backed_up":{"type":"boolean","description":"The passkey is synced to the provider's cloud (backup state)."},"created_at":{"$ref":"#/components/schemas/Ts"},"id":{"$ref":"#/components/schemas/PasskeyId"},"last_used_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"name":{"type":"string"}}}}}},"List_PathTrace":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"A path trace (schema `PathTrace`).","required":["id","monitor_id","location","trigger","mode","protocol","target","status","hops","created_at"],"properties":{"completed_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"created_at":{"$ref":"#/components/schemas/Ts"},"error_detail":{"type":["string","null"]},"error_kind":{"type":["string","null"],"description":"`failed` only: `no_probe`, `expired`, `lost`, `invalid`, or the\nprobe's error kind (`dns_failure`, `blocked_address`, ...)."},"hops":{"type":"array","items":{"$ref":"#/components/schemas/TraceHop"},"description":"By TTL from 1 (`done` only). Responders in private, shared and\nreserved ranges have no `ip`."},"id":{"$ref":"#/components/schemas/TraceId"},"incident_id":{"oneOf":[{"$ref":"#/components/schemas/IncidentId","description":"The incident it was run for (`trigger = incident`)."},{"type":"null"}]},"location":{"$ref":"#/components/schemas/TraceLocation","description":"Where it ran from."},"mode":{"$ref":"#/components/schemas/TraceMode","description":"`traceroute`: 3 probes per hop; `mtr`: 10."},"monitor_id":{"$ref":"#/components/schemas/MonitorId"},"port":{"type":["integer","null"],"format":"int32","description":"The TCP port, for `tcp`."},"protocol":{"$ref":"#/components/schemas/TraceProtocol"},"reached":{"type":["boolean","null"],"description":"Whether the target answered (`done` only)."},"requested_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"Who asked for it (`trigger = manual`; `null` once the user is gone)."},{"type":"null"}]},"status":{"$ref":"#/components/schemas/TraceStatus"},"target":{"type":"string","description":"The monitor's target host."},"target_ip":{"type":["string","null"],"description":"The address traced to."},"trigger":{"$ref":"#/components/schemas/TraceTrigger"}}}}}},"List_PlanOffer":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"A plan on sale.","required":["code","name","prices","entitlements"],"properties":{"code":{"$ref":"#/components/schemas/Plan","description":"`starter`, `pro` or `business`."},"entitlements":{"$ref":"#/components/schemas/Entitlements"},"name":{"type":"string"},"prices":{"type":"array","items":{"$ref":"#/components/schemas/PlanPrice"}}}}}}},"List_Session":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One of the user's sessions.","required":["id","created_at","last_seen_at","expires_at","current"],"properties":{"created_at":{"$ref":"#/components/schemas/Ts"},"current":{"type":"boolean","description":"The session making this request."},"expires_at":{"$ref":"#/components/schemas/Ts"},"id":{"$ref":"#/components/schemas/SessionId"},"ip":{"type":["string","null"]},"last_seen_at":{"$ref":"#/components/schemas/Ts"},"user_agent":{"type":["string","null"],"description":"Summarised, e.g. `Firefox 131 on macOS`."}}}}}},"List_StatusPeriod":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One status period (schema `StatusPeriod`).","required":["status","started_at"],"properties":{"ended_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"incident_id":{"oneOf":[{"$ref":"#/components/schemas/IncidentId"},{"type":"null"}]},"started_at":{"$ref":"#/components/schemas/Ts"},"status":{"$ref":"#/components/schemas/MonitorStatus"}}}}}},"List_Uptime":{"type":"object","description":"An unpaginated list.","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Uptime over one window (schema `Uptime`).","required":["from","to","observed_s","down_s","degraded_s","no_data_s","paused_s","unknown_s"],"properties":{"degraded_s":{"type":"integer","format":"int64"},"down_s":{"type":"integer","format":"int64"},"from":{"$ref":"#/components/schemas/Ts"},"no_data_s":{"type":"integer","format":"int64"},"observed_s":{"type":"integer","format":"int64"},"paused_s":{"type":"integer","format":"int64"},"to":{"$ref":"#/components/schemas/Ts"},"unknown_s":{"type":"integer","format":"int64"},"uptime_ratio":{"type":["number","null"],"format":"double","description":"`(observed − down) / observed`; `null` when nothing was observed."},"window":{"type":["string","null"],"description":"`24h` | `7d` | `30d` | `90d`, or `null` for `from`/`to`."}}}}}},"Location":{"type":"object","description":"A customer-selectable location.","required":["id","code","name","region","country_code","ipv6","available"],"properties":{"available":{"type":"boolean","description":"Status `active` and at least one eligible probe (probes-and-checks.md §6.2.3)."},"code":{"type":"string"},"country_code":{"type":"string"},"id":{"$ref":"#/components/schemas/LocationId"},"ipv6":{"type":"boolean"},"name":{"type":"string"},"region":{"$ref":"#/components/schemas/Region"}}},"LocationId":{"type":"string","pattern":"^loc_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"LocationMode":{"type":"string","description":"`monitors.location_mode`","enum":["regions","locations"]},"LocationsResponse":{"type":"object","description":"`GET /locations` response.","required":["regions","locations"],"properties":{"locations":{"type":"array","items":{"$ref":"#/components/schemas/Location"}},"regions":{"type":"array","items":{"$ref":"#/components/schemas/RegionView"}}}},"LoginRequest":{"type":"object","description":"`{email, password}`.","required":["email","password"],"properties":{"email":{"type":"string","maxLength":254},"password":{"type":"string","maxLength":128}},"additionalProperties":false},"LoginTotpRequest":{"type":"object","description":"`{code}` or `{recovery_code}`.","properties":{"code":{"type":["string","null"],"description":"The 6-digit code from the authenticator app.","maxLength":6},"recovery_code":{"type":["string","null"],"description":"One recovery code (`xxxxx-xxxxx`).","maxLength":32}},"additionalProperties":false},"MailSpec":{"type":"object","description":"`imap` and `smtp` (probes-and-checks.md §5.4.6).","required":["host","port","tls"],"properties":{"cert_expiry_warn_days":{"type":["integer","null"],"format":"int32","description":"Degraded this many days before the certificate expires, 1-90\n(default 14); `null` disables the warning; always `null` with\n`tls = none`.","minimum":0},"host":{"type":"string","description":"Host name or public IP address."},"ip_family":{"$ref":"#/components/schemas/IpFamily"},"port":{"type":"integer","format":"int32","description":"1-65535.","minimum":0},"timeout_ms":{"type":"integer","format":"int32","description":"1000-30000 (default 10000).","minimum":0},"tls":{"$ref":"#/components/schemas/MailTls"},"verify_tls":{"type":"boolean","description":"Default `true`; always `true` with `tls = none`."}}},"MailTls":{"type":"string","description":"TLS mode of an `imap` or `smtp` check (probes-and-checks.md §5.4.6).","enum":["implicit","starttls","none"]},"MaintenanceId":{"type":"string","pattern":"^mnt_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"MaintenanceState":{"type":"string","description":"Where a window is in its life.","enum":["upcoming","active","ended"]},"MaintenanceWindow":{"type":"object","description":"A maintenance window: while it is active, the monitors it covers keep\nchecking and record incidents, but their alerts are held. When it ends,\neach incident still open alerts its contacts once; incidents that ended\ninside the window send nothing.","required":["id","name","state","starts_at","ends_at","all_monitors","monitor_ids","created_at","ended_early","held_incidents"],"properties":{"all_monitors":{"type":"boolean","description":"Every monitor of the org, including ones added later."},"created_at":{"$ref":"#/components/schemas/Ts"},"created_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"`null` if the member left the org."},{"type":"null"}]},"ended_early":{"type":"boolean","description":"Ended before its scheduled end."},"ends_at":{"$ref":"#/components/schemas/Ts"},"held_incidents":{"type":"integer","format":"int64","description":"Incidents whose alerts the window is holding now."},"id":{"$ref":"#/components/schemas/MaintenanceId"},"monitor_ids":{"type":"array","items":{"$ref":"#/components/schemas/MonitorId"},"description":"The monitors covered when `all_monitors` is false."},"name":{"type":"string"},"starts_at":{"$ref":"#/components/schemas/Ts"},"state":{"$ref":"#/components/schemas/MaintenanceState"}}},"MePatch":{"type":"object","description":"`PATCH /me` (merge patch).","properties":{"name":{"type":["string","null"],"description":"1-100 characters.","maxLength":100},"timezone":{"type":["string","null"],"description":"IANA timezone; `null` clears it.","maxLength":64}},"additionalProperties":false},"MeResponse":{"type":"object","description":"`GET /me`.","required":["user","memberships","billing_enabled"],"properties":{"billing_enabled":{"type":"boolean","description":"False when the deployment runs without billing (`[billing] mode =\n\"disabled\"`, billing.md §11.9): the billing endpoints answer `404\nbilling_disabled`, there are no trials or plan purchases, and every\norg has the configured plan's limits (`GET /orgs/{org}/entitlements`)."},"memberships":{"type":"array","items":{"$ref":"#/components/schemas/MembershipView"}},"user":{"$ref":"#/components/schemas/User"}}},"Member":{"type":"object","description":"One member of an org.","required":["user","role","joined_at"],"properties":{"joined_at":{"$ref":"#/components/schemas/Ts"},"last_active_at":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"Latest activity of any of the user's sessions."},{"type":"null"}]},"role":{"$ref":"#/components/schemas/Role"},"user":{"$ref":"#/components/schemas/MemberUser"}}},"MemberUser":{"type":"object","description":"The user part of a member.","required":["id","name","email","totp_enabled"],"properties":{"email":{"type":"string"},"id":{"$ref":"#/components/schemas/UserId"},"name":{"type":"string"},"totp_enabled":{"type":"boolean"}}},"MembershipView":{"type":"object","description":"One membership of the signed-in user.","required":["org","role"],"properties":{"org":{"$ref":"#/components/schemas/OrgRef"},"role":{"$ref":"#/components/schemas/Role"}}},"Monitor":{"type":"object","description":"A monitor (schema `Monitor`). Secret values are never returned.","required":["id","name","kind","spec","interval_s","timeout_ms","failure_threshold","recovery_threshold","labels","contact_ids","run_state","state","warnings","version","created_at","updated_at"],"properties":{"contact_ids":{"type":"array","items":{"$ref":"#/components/schemas/ContactId"}},"created_at":{"$ref":"#/components/schemas/Ts"},"degraded_after_ms":{"type":["integer","null"],"format":"int32"},"failure_threshold":{"type":"integer","format":"int32"},"id":{"$ref":"#/components/schemas/MonitorId"},"interval_s":{"type":"integer","format":"int32"},"kind":{"$ref":"#/components/schemas/MonitorKind"},"labels":{"type":"array","items":{"type":"string"}},"locations":{"oneOf":[{"$ref":"#/components/schemas/MonitorLocations","description":"`null` for `domain_expiry`: each lookup runs from one location,\nchosen each day (probes-and-checks.md §6.2.3a); and for `heartbeat`,\nwhich runs no checks."},{"type":"null"}]},"name":{"type":"string"},"ping_url":{"type":["string","null"],"description":"`heartbeat` only: the URL its job requests (`GET`, `HEAD` or `POST`)\neach time it runs (probes-and-checks.md §5.4.7). `null` for every\nother kind, and for a viewer: the URL can keep the monitor UP."},"recovery_threshold":{"type":"integer","format":"int32"},"reminder_interval_s":{"type":["integer","null"],"format":"int32"},"run_state":{"$ref":"#/components/schemas/RunState"},"spec":{"$ref":"#/components/schemas/MonitorSpec","description":"The per-kind spec without the type tag (the `MonitorSpec` schema of\n`kind`); secrets show as `password_set` / `token_set` /\n`\"value\": null`."},"state":{"$ref":"#/components/schemas/MonitorState"},"system_pause_reason":{"oneOf":[{"$ref":"#/components/schemas/SystemPauseReason"},{"type":"null"}]},"timeout_ms":{"type":"integer","format":"int32","description":"Read-only execution budget derived from the spec."},"updated_at":{"$ref":"#/components/schemas/Ts"},"uptime_24h":{"type":["number","null"],"format":"double","description":"Uptime over the last 24 h; `null` when nothing was observed."},"version":{"type":"integer","format":"int32"},"warnings":{"type":"array","items":{"type":"string"},"description":"Create and update responses only, e.g. `does_not_resolve`."}}},"MonitorContactIds":{"type":"object","description":"`PUT .../contacts` body and response.","required":["contact_ids"],"properties":{"contact_ids":{"type":"array","items":{"$ref":"#/components/schemas/ContactId"},"description":"At most 100 contacts of the org; replaces the set."}},"additionalProperties":false},"MonitorId":{"type":"string","pattern":"^mon_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"MonitorInput":{"type":"object","description":"`POST /orgs/{org}/monitors` body (schema `MonitorInput`).","required":["name","kind","spec","interval_s"],"properties":{"contact_ids":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactId"},"description":"At most 100; omitted = every `auto_attach` contact."},"degraded_after_ms":{"type":["integer","null"],"format":"int64","description":"`http_adv` only; 100-30000 and below the time budget; `null` = off."},"failure_threshold":{"type":["integer","null"],"format":"int64","description":"1-10, default 2; for `domain_expiry` 1, the default (a second probe\nconfirms each change instead); for `heartbeat` 1."},"interval_s":{"type":"integer","format":"int64","description":"30, 60, 120, 300, 600, 900, 1800 or 3600, at least the plan minimum.\n`domain_expiry`: 86400 only. `heartbeat`: the period between pings,\n60-604800 (no plan minimum)."},"kind":{"$ref":"#/components/schemas/MonitorKind","description":"Immutable after create."},"labels":{"type":"array","items":{"type":"string"},"description":"At most 10, each 1-32 characters of `[a-z0-9-_.]`."},"locations":{"oneOf":[{"$ref":"#/components/schemas/MonitorLocationsInput","description":"Required, except for `domain_expiry`, which must omit it: each of its\nlookups runs from one location, a different one each day; and for\n`heartbeat`, which runs no checks."},{"type":"null"}]},"name":{"type":"string","description":"1-100 characters.","maxLength":100},"paused":{"type":"boolean"},"recovery_threshold":{"type":["integer","null"],"format":"int64","description":"1-10, default 2; for `domain_expiry` and `heartbeat` 1, the default."},"reminder_interval_s":{"type":["integer","null"],"format":"int64","description":"`null` = no reminders; 900-86400."},"spec":{"$ref":"#/components/schemas/MonitorSpecInput","description":"The per-kind spec without the type tag (probes-and-checks.md §5):\nthe `MonitorSpecInput` schema of `kind`; secret fields are\nwrite-only."}},"additionalProperties":false},"MonitorKind":{"type":"string","description":"`monitors.kind`","enum":["icmp","http","http_adv","tcp","ssl_expiry","domain_expiry","imap","smtp","heartbeat"]},"MonitorLocationState":{"type":"object","description":"One location of a monitor's live state.","required":["code","status"],"properties":{"code":{"type":"string"},"error_kind":{"oneOf":[{"$ref":"#/components/schemas/ErrorKind"},{"type":"null"}]},"last_result_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"latency_ms":{"type":["integer","null"],"format":"int32","minimum":0},"status":{"$ref":"#/components/schemas/SlotStatus"},"substitute":{"type":["string","null"],"description":"Code of the location currently standing in for this one: the\nlocation that ran the slot's newest fresh result when it was not the\nslot itself (probes-and-checks.md §6.2.3), or `null`."}}},"MonitorLocations":{"type":"object","description":"The location selection of a monitor.","required":["mode","resolved"],"properties":{"codes":{"type":["array","null"],"items":{"type":"string"},"description":"Set when `mode = locations`."},"mode":{"$ref":"#/components/schemas/LocationMode"},"regions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Region"},"description":"Set when `mode = regions`."},"resolved":{"type":"array","items":{"type":"string"},"description":"The materialised location codes, by `sort_order, code`."}}},"MonitorLocationsInput":{"type":"object","description":"Location selection of a monitor (`MonitorInput.locations`).","required":["mode"],"properties":{"codes":{"type":["array","null"],"items":{"type":"string"},"description":"With `mode = locations`: 2-12 location codes."},"mode":{"$ref":"#/components/schemas/LocationMode"},"regions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Region"},"description":"With `mode = regions`: 1-6 region codes."}},"additionalProperties":false},"MonitorPatch":{"type":"object","description":"`PATCH /orgs/{org}/monitors/{mon}` body: any subset of `MonitorInput`\nexcept `kind` (JSON merge patch; `spec` is merged per RFC 7396).","properties":{"contact_ids":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactId"}},"degraded_after_ms":{"type":["integer","null"],"format":"int64"},"failure_threshold":{"type":["integer","null"],"format":"int64"},"interval_s":{"type":["integer","null"],"format":"int64"},"kind":{"oneOf":[{"$ref":"#/components/schemas/MonitorKind","description":"Not allowed (`422 not_allowed`): the kind is immutable."},{"type":"null"}]},"labels":{"type":["array","null"],"items":{"type":"string"}},"locations":{"oneOf":[{"$ref":"#/components/schemas/MonitorLocationsInput"},{"type":"null"}]},"name":{"type":["string","null"],"maxLength":100},"paused":{"type":["boolean","null"],"description":"`false` runs the same checks as `POST .../resume`."},"recovery_threshold":{"type":["integer","null"],"format":"int64"},"reminder_interval_s":{"type":["integer","null"],"format":"int64"},"spec":{"type":["object","null"],"description":"Merged into the stored spec (RFC 7396): any subset of the\n`MonitorSpecInput` schema of the monitor's kind."}},"additionalProperties":false},"MonitorSpec":{"anyOf":[{"$ref":"#/components/schemas/IcmpSpec"},{"$ref":"#/components/schemas/TcpSpec"},{"$ref":"#/components/schemas/HttpSpec"},{"$ref":"#/components/schemas/HttpAdvSpec"},{"$ref":"#/components/schemas/SslExpirySpec"},{"$ref":"#/components/schemas/DomainExpirySpec"},{"$ref":"#/components/schemas/MailSpec"},{"$ref":"#/components/schemas/HeartbeatSpec"}],"description":"A monitor's `spec` in responses: the schema of its `kind`, with every\nfield present (defaults applied, hosts and URLs normalised). Secrets\nof `http_adv` show as flags (`HttpAdvSpec`).","x-jmi-spec-by-kind":{"domain_expiry":"DomainExpirySpec","heartbeat":"HeartbeatSpec","http":"HttpSpec","http_adv":"HttpAdvSpec","icmp":"IcmpSpec","imap":"MailSpec","smtp":"MailSpec","ssl_expiry":"SslExpirySpec","tcp":"TcpSpec"}},"MonitorSpecInput":{"anyOf":[{"$ref":"#/components/schemas/IcmpSpec"},{"$ref":"#/components/schemas/TcpSpec"},{"$ref":"#/components/schemas/HttpSpec"},{"$ref":"#/components/schemas/HttpAdvSpecInput"},{"$ref":"#/components/schemas/SslExpirySpec"},{"$ref":"#/components/schemas/DomainExpirySpec"},{"$ref":"#/components/schemas/MailSpec"},{"$ref":"#/components/schemas/HeartbeatSpec"}],"description":"A monitor's `spec` in requests: the schema of its `kind` (`imap` and\n`smtp` share `MailSpec`), without a type tag. Secret values of\n`http_adv` are sent inline (`HttpAdvSpecInput`).","x-jmi-spec-by-kind":{"domain_expiry":"DomainExpirySpec","heartbeat":"HeartbeatSpec","http":"HttpSpec","http_adv":"HttpAdvSpecInput","icmp":"IcmpSpec","imap":"MailSpec","smtp":"MailSpec","ssl_expiry":"SslExpirySpec","tcp":"TcpSpec"}},"MonitorState":{"type":"object","description":"A monitor's live state.","required":["status","status_since","locations"],"properties":{"last_ping_at":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"`heartbeat` only: when the newest ping arrived."},{"type":"null"}]},"last_result_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"locations":{"type":"array","items":{"$ref":"#/components/schemas/MonitorLocationState"},"description":"One per configured location; empty for `domain_expiry`, whose\nlookups run from a different location each day (the newest result\nsays where), and for `heartbeat`."},"open_incident_id":{"oneOf":[{"$ref":"#/components/schemas/IncidentId"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/MonitorStatus"},"status_since":{"$ref":"#/components/schemas/Ts"}}},"MonitorStatus":{"type":"string","description":"`monitor_state.status`, `monitor_status_periods.status`; the evaluator's\n`Status` (evaluation.md §7.2).","enum":["unknown","up","down","degraded","no_data","paused"]},"Notification":{"type":"object","description":"One `notification_jobs` row (schema `Notification`).","required":["id","kind","channel","status","attempts","created_at","deliveries"],"properties":{"attempts":{"type":"integer","format":"int32"},"channel":{"$ref":"#/components/schemas/ChannelKind"},"contact":{"oneOf":[{"$ref":"#/components/schemas/ContactRef","description":"`null` for account notices sent to a user."},{"type":"null"}]},"created_at":{"$ref":"#/components/schemas/Ts"},"deliveries":{"type":"array","items":{"$ref":"#/components/schemas/DeliveryView"}},"finished_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"id":{"$ref":"#/components/schemas/NotificationId"},"incident_id":{"oneOf":[{"$ref":"#/components/schemas/IncidentId"},{"type":"null"}]},"kind":{"$ref":"#/components/schemas/NotificationKind"},"last_error":{"type":["string","null"]},"monitor_id":{"oneOf":[{"$ref":"#/components/schemas/MonitorId"},{"type":"null"}]},"next_attempt_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/NotificationStatus"},"status_reason":{"oneOf":[{"$ref":"#/components/schemas/NotificationStatusReason"},{"type":"null"}]}}},"NotificationId":{"type":"string","pattern":"^ntf_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"NotificationKind":{"type":"string","description":"`notification_jobs.kind`","enum":["down","recovered","degraded","flapping","reminder","test","fallback","account_notice","pushover_cancel"]},"NotificationStatus":{"type":"string","description":"`notification_jobs.status`","enum":["pending","sending","sent","failed","cancelled","suppressed","held"]},"NotificationStatusReason":{"type":"string","description":"`notification_jobs.status_reason`","enum":["sms_cap","anomaly_brake","notify_hold","contact_disabled","monitor_deleted","monitor_paused","permanent_failure","gave_up","maintenance"]},"NotifyOn":{"type":"string","description":"Elements of `contacts.notify_on`.","enum":["down","recovered","degraded"]},"Org":{"type":"object","description":"An organisation as its member sees it.","required":["id","name","timezone","status","my_role","billing","created_at"],"properties":{"billing":{"$ref":"#/components/schemas/OrgBilling"},"created_at":{"$ref":"#/components/schemas/Ts"},"id":{"$ref":"#/components/schemas/OrgId"},"my_role":{"$ref":"#/components/schemas/Role"},"name":{"type":"string"},"purge_after":{"oneOf":[{"$ref":"#/components/schemas/Ts","description":"Set while deleting or canceled."},{"type":"null"}]},"status":{"$ref":"#/components/schemas/OrgStatus"},"timezone":{"type":"string","description":"IANA name."}}},"OrgBilling":{"type":"object","description":"`{plan, status}`; `status` is effective (a lapsed trial or grace period\ncounts as `canceled`).","required":["plan","status"],"properties":{"plan":{"$ref":"#/components/schemas/Plan"},"status":{"$ref":"#/components/schemas/BillingStatus"}}},"OrgEntitlements":{"type":"object","description":"The org's effective entitlements and current usage (`GET\n/orgs/{org}/entitlements`): what forms and limit messages need, in\neither billing mode.","required":["entitlements","usage"],"properties":{"entitlements":{"$ref":"#/components/schemas/Entitlements"},"usage":{"$ref":"#/components/schemas/BillingUsage"}}},"OrgId":{"type":"string","pattern":"^org_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"OrgPatch":{"type":"object","description":"`PATCH /orgs/{org}` (merge patch).","properties":{"name":{"type":["string","null"],"description":"1-100 characters.","maxLength":100},"timezone":{"type":["string","null"],"description":"IANA timezone.","maxLength":64}},"additionalProperties":false},"OrgRef":{"type":"object","description":"`{ \"id\": \"org_…\", \"name\": \"…\" }`.","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/OrgId"},"name":{"type":"string"}}},"OrgStatus":{"type":"string","description":"`orgs.status`","enum":["active","suspended","deleting"]},"Outcome":{"type":"string","description":"Result outcome (probes-and-checks.md §5.6). `check_results.outcome`.","enum":["up","degraded","down","error"]},"Overview":{"type":"object","description":"The org dashboard (schema `Overview`).","required":["monitors","open_incidents","recent_changes","usage"],"properties":{"monitors":{"$ref":"#/components/schemas/OverviewMonitors"},"open_incidents":{"type":"array","items":{"$ref":"#/components/schemas/Incident"},"description":"Newest first, at most 20."},"recent_changes":{"type":"array","items":{"$ref":"#/components/schemas/OverviewChange"},"description":"The last 20 status periods started."},"usage":{"$ref":"#/components/schemas/OverviewUsage"}}},"OverviewChange":{"type":"object","description":"One status change.","required":["monitor","to","at"],"properties":{"at":{"$ref":"#/components/schemas/Ts"},"from":{"oneOf":[{"$ref":"#/components/schemas/MonitorStatus","description":"`null` for a monitor's first status."},{"type":"null"}]},"incident_id":{"oneOf":[{"$ref":"#/components/schemas/IncidentId"},{"type":"null"}]},"monitor":{"$ref":"#/components/schemas/IncidentMonitor"},"to":{"$ref":"#/components/schemas/MonitorStatus"}}},"OverviewMonitors":{"type":"object","description":"Monitors per status; `paused` counts every monitor not running.","required":["total","up","down","degraded","no_data","unknown","paused"],"properties":{"degraded":{"type":"integer","format":"int64"},"down":{"type":"integer","format":"int64"},"no_data":{"type":"integer","format":"int64"},"paused":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"},"unknown":{"type":"integer","format":"int64"},"up":{"type":"integer","format":"int64"}}},"OverviewUsage":{"type":"object","description":"Plan usage.","required":["monitors_used","monitors_limit","sms_credits_used","sms_credits_limit","sms_period_end"],"properties":{"monitors_limit":{"type":"integer","format":"int32","minimum":0},"monitors_used":{"type":"integer","format":"int32","minimum":0},"sms_credits_limit":{"type":"integer","format":"int32","minimum":0},"sms_credits_used":{"type":"integer","format":"int32"},"sms_period_end":{"$ref":"#/components/schemas/Ts","description":"End of the current SMS period (next UTC month start)."}}},"Page_AuditEntry":{"type":"object","description":"A paginated list (api-and-auth.md §10.1, Pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One audit log entry.","required":["id","ts","actor","action","data"],"properties":{"action":{"type":"string"},"actor":{"$ref":"#/components/schemas/AuditActor"},"data":{"description":"Changed field names and non-secret values."},"id":{"$ref":"#/components/schemas/AuditId"},"ip":{"type":["string","null"]},"target":{"oneOf":[{"$ref":"#/components/schemas/AuditTarget"},{"type":"null"}]},"ts":{"$ref":"#/components/schemas/Ts"}}}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page, `null` on the last page."}}},"Page_CheckResult":{"type":"object","description":"A paginated list (api-and-auth.md §10.1, Pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One check result (schema `CheckResult`; excluded rows are never returned).","required":["ts","location","work_kind","outcome","timings"],"properties":{"error_detail":{"type":["string","null"]},"error_kind":{"oneOf":[{"$ref":"#/components/schemas/ErrorKind"},{"type":"null"}]},"latency_ms":{"type":["integer","null"],"format":"int32"},"location":{"type":"string","description":"Code of the location that ran the check."},"metrics":{"type":["object","null"]},"outcome":{"$ref":"#/components/schemas/Outcome"},"resolved_ip":{"type":["string","null"]},"slot_location":{"type":["string","null"],"description":"Code of the configured location it stood in for, if substituted."},"status_code":{"type":["integer","null"],"format":"int32"},"timings":{"$ref":"#/components/schemas/CheckTimings"},"tls_not_after":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"ts":{"$ref":"#/components/schemas/Ts"},"work_kind":{"$ref":"#/components/schemas/WorkKind"}}}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page, `null` on the last page."}}},"Page_Contact":{"type":"object","description":"A paginated list (api-and-auth.md §10.1, Pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"A contact (secrets are never returned; `secret_set` says whether one\nis stored).","required":["id","name","kind","config","secret_set","notify_on","auto_attach","status","consecutive_failures","monitor_count","version","created_at","updated_at"],"properties":{"auto_attach":{"type":"boolean"},"config":{"type":"object","description":"Stored config: email `{\"address\"}`, sms and voice `{\"phone_e164\",\n\"country_code\"}`, pushover `{\"device\", \"priority_down\",\n\"priority_up\", \"sound\", \"devices\"}`, discord `{\"webhook_id\",\n\"webhook_name\", \"channel_id\", \"guild_id\"}`, pagerduty `{\"region\",\n\"key_hint\"}`, slack `{\"team_id\", \"webhook_id\"}`, webhook `{\"host\",\n\"txt_name\", \"txt_value\"}` (the TXT record that verifies the host),\nteams `{\"host\", \"workflow_id\"}`."},"consecutive_failures":{"type":"integer","format":"int32"},"created_at":{"$ref":"#/components/schemas/Ts"},"credits_per_call":{"type":["integer","null"],"format":"int32","description":"Voice only: the SMS credits each call to this number uses, from\nwhat the number costs to call (notifications.md §8.9a). `null` for\nother kinds.","minimum":0},"disabled_reason":{"oneOf":[{"$ref":"#/components/schemas/ContactDisabledReason"},{"type":"null"}]},"id":{"$ref":"#/components/schemas/ContactId"},"kind":{"$ref":"#/components/schemas/ChannelKind"},"last_delivery_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"last_error":{"type":["string","null"]},"monitor_count":{"type":"integer","format":"int64"},"name":{"type":"string"},"notify_on":{"type":"array","items":{"$ref":"#/components/schemas/NotifyOn"}},"secret_set":{"type":"boolean"},"status":{"$ref":"#/components/schemas/ContactStatus"},"updated_at":{"$ref":"#/components/schemas/Ts"},"verified_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"version":{"type":"integer","format":"int32","description":"Optimistic-concurrency version (also the `ETag`)."}}}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page, `null` on the last page."}}},"Page_Incident":{"type":"object","description":"A paginated list (api-and-auth.md §10.1, Pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"An incident (schema `Incident`).","required":["id","monitor","severity","status","current_status","flapping","first_failure_at","opened_at","duration_s","cause","cause_detail","reminders_sent","notification_count"],"properties":{"acknowledged_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"acknowledged_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"`null` with `acknowledged_at` set = acknowledged via Pushover."},{"type":"null"}]},"cause":{"type":"string"},"cause_detail":{"type":"object","description":"`RootCause` (evaluation.md §7.14) with location ids expanded to\n`{id, code, name}`."},"current_status":{"$ref":"#/components/schemas/IncidentCurrentStatus"},"duration_s":{"type":"integer","format":"int64","description":"From the first failure to resolution (or now)."},"first_failure_at":{"$ref":"#/components/schemas/Ts"},"flapping":{"type":"boolean"},"id":{"$ref":"#/components/schemas/IncidentId"},"monitor":{"$ref":"#/components/schemas/IncidentMonitor"},"notification_count":{"type":"integer","format":"int64","description":"Notification jobs of this incident with status `sent`."},"opened_at":{"$ref":"#/components/schemas/Ts"},"reminders_sent":{"type":"integer","format":"int32"},"resolution":{"oneOf":[{"$ref":"#/components/schemas/Resolution"},{"type":"null"}]},"resolved_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"severity":{"$ref":"#/components/schemas/IncidentSeverity","description":"Worst status reached."},"status":{"$ref":"#/components/schemas/IncidentStatus"}}}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page, `null` on the last page."}}},"Page_Invite":{"type":"object","description":"A paginated list (api-and-auth.md §10.1, Pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"An open invitation.","required":["id","email","role","created_at","expires_at"],"properties":{"created_at":{"$ref":"#/components/schemas/Ts"},"email":{"type":"string"},"expires_at":{"$ref":"#/components/schemas/Ts"},"id":{"$ref":"#/components/schemas/InviteId"},"invited_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"`null` if the inviter's account was deleted."},{"type":"null"}]},"role":{"$ref":"#/components/schemas/Role"}}}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page, `null` on the last page."}}},"Page_Monitor":{"type":"object","description":"A paginated list (api-and-auth.md §10.1, Pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"A monitor (schema `Monitor`). Secret values are never returned.","required":["id","name","kind","spec","interval_s","timeout_ms","failure_threshold","recovery_threshold","labels","contact_ids","run_state","state","warnings","version","created_at","updated_at"],"properties":{"contact_ids":{"type":"array","items":{"$ref":"#/components/schemas/ContactId"}},"created_at":{"$ref":"#/components/schemas/Ts"},"degraded_after_ms":{"type":["integer","null"],"format":"int32"},"failure_threshold":{"type":"integer","format":"int32"},"id":{"$ref":"#/components/schemas/MonitorId"},"interval_s":{"type":"integer","format":"int32"},"kind":{"$ref":"#/components/schemas/MonitorKind"},"labels":{"type":"array","items":{"type":"string"}},"locations":{"oneOf":[{"$ref":"#/components/schemas/MonitorLocations","description":"`null` for `domain_expiry`: each lookup runs from one location,\nchosen each day (probes-and-checks.md §6.2.3a); and for `heartbeat`,\nwhich runs no checks."},{"type":"null"}]},"name":{"type":"string"},"ping_url":{"type":["string","null"],"description":"`heartbeat` only: the URL its job requests (`GET`, `HEAD` or `POST`)\neach time it runs (probes-and-checks.md §5.4.7). `null` for every\nother kind, and for a viewer: the URL can keep the monitor UP."},"recovery_threshold":{"type":"integer","format":"int32"},"reminder_interval_s":{"type":["integer","null"],"format":"int32"},"run_state":{"$ref":"#/components/schemas/RunState"},"spec":{"$ref":"#/components/schemas/MonitorSpec","description":"The per-kind spec without the type tag (the `MonitorSpec` schema of\n`kind`); secrets show as `password_set` / `token_set` /\n`\"value\": null`."},"state":{"$ref":"#/components/schemas/MonitorState"},"system_pause_reason":{"oneOf":[{"$ref":"#/components/schemas/SystemPauseReason"},{"type":"null"}]},"timeout_ms":{"type":"integer","format":"int32","description":"Read-only execution budget derived from the spec."},"updated_at":{"$ref":"#/components/schemas/Ts"},"uptime_24h":{"type":["number","null"],"format":"double","description":"Uptime over the last 24 h; `null` when nothing was observed."},"version":{"type":"integer","format":"int32"},"warnings":{"type":"array","items":{"type":"string"},"description":"Create and update responses only, e.g. `does_not_resolve`."}}}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page, `null` on the last page."}}},"Page_Notification":{"type":"object","description":"A paginated list (api-and-auth.md §10.1, Pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One `notification_jobs` row (schema `Notification`).","required":["id","kind","channel","status","attempts","created_at","deliveries"],"properties":{"attempts":{"type":"integer","format":"int32"},"channel":{"$ref":"#/components/schemas/ChannelKind"},"contact":{"oneOf":[{"$ref":"#/components/schemas/ContactRef","description":"`null` for account notices sent to a user."},{"type":"null"}]},"created_at":{"$ref":"#/components/schemas/Ts"},"deliveries":{"type":"array","items":{"$ref":"#/components/schemas/DeliveryView"}},"finished_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"id":{"$ref":"#/components/schemas/NotificationId"},"incident_id":{"oneOf":[{"$ref":"#/components/schemas/IncidentId"},{"type":"null"}]},"kind":{"$ref":"#/components/schemas/NotificationKind"},"last_error":{"type":["string","null"]},"monitor_id":{"oneOf":[{"$ref":"#/components/schemas/MonitorId"},{"type":"null"}]},"next_attempt_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/NotificationStatus"},"status_reason":{"oneOf":[{"$ref":"#/components/schemas/NotificationStatusReason"},{"type":"null"}]}}}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page, `null` on the last page."}}},"Passkey":{"type":"object","description":"One of the user's passkeys.","required":["id","name","created_at","backed_up"],"properties":{"backed_up":{"type":"boolean","description":"The passkey is synced to the provider's cloud (backup state)."},"created_at":{"$ref":"#/components/schemas/Ts"},"id":{"$ref":"#/components/schemas/PasskeyId"},"last_used_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"name":{"type":"string"}}},"PasskeyCreationOptions":{"type":"object","description":"`PublicKeyCredentialCreationOptionsJSON` of `POST /auth/passkeys/options`.","required":["rp","user","challenge","pubKeyCredParams","timeout","excludeCredentials","authenticatorSelection","attestation"],"properties":{"attestation":{"type":"string","description":"Always `none`."},"authenticatorSelection":{"$ref":"#/components/schemas/AuthenticatorSelection"},"challenge":{"type":"string","description":"32 random bytes, base64url; valid for one registration within\n`timeout` ms."},"excludeCredentials":{"type":"array","items":{"$ref":"#/components/schemas/CredentialDescriptor"},"description":"The user's existing passkeys (not registered twice)."},"pubKeyCredParams":{"type":"array","items":{"$ref":"#/components/schemas/CredentialParameters"}},"rp":{"$ref":"#/components/schemas/RpEntity"},"timeout":{"type":"integer","format":"int64"},"user":{"$ref":"#/components/schemas/UserEntity"}}},"PasskeyId":{"type":"string","pattern":"^pky_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"PasskeyLoginRequest":{"type":"object","description":"`{credential}`.","required":["credential"],"properties":{"credential":{"$ref":"#/components/schemas/AuthenticationCredential"}},"additionalProperties":false},"PasskeyRequestOptions":{"type":"object","description":"`PublicKeyCredentialRequestOptionsJSON` of `POST /auth/login/passkey/options`.","required":["challenge","timeout","rpId","allowCredentials","userVerification"],"properties":{"allowCredentials":{"type":"array","items":{"$ref":"#/components/schemas/CredentialDescriptor"},"description":"Always empty: the browser offers the passkeys it has for `rp_id`."},"challenge":{"type":"string","description":"32 random bytes, base64url; valid for one sign-in within `timeout` ms."},"rpId":{"type":"string"},"timeout":{"type":"integer","format":"int64"},"userVerification":{"type":"string","description":"Always `required`."}}},"PathTrace":{"type":"object","description":"A path trace (schema `PathTrace`).","required":["id","monitor_id","location","trigger","mode","protocol","target","status","hops","created_at"],"properties":{"completed_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"created_at":{"$ref":"#/components/schemas/Ts"},"error_detail":{"type":["string","null"]},"error_kind":{"type":["string","null"],"description":"`failed` only: `no_probe`, `expired`, `lost`, `invalid`, or the\nprobe's error kind (`dns_failure`, `blocked_address`, ...)."},"hops":{"type":"array","items":{"$ref":"#/components/schemas/TraceHop"},"description":"By TTL from 1 (`done` only). Responders in private, shared and\nreserved ranges have no `ip`."},"id":{"$ref":"#/components/schemas/TraceId"},"incident_id":{"oneOf":[{"$ref":"#/components/schemas/IncidentId","description":"The incident it was run for (`trigger = incident`)."},{"type":"null"}]},"location":{"$ref":"#/components/schemas/TraceLocation","description":"Where it ran from."},"mode":{"$ref":"#/components/schemas/TraceMode","description":"`traceroute`: 3 probes per hop; `mtr`: 10."},"monitor_id":{"$ref":"#/components/schemas/MonitorId"},"port":{"type":["integer","null"],"format":"int32","description":"The TCP port, for `tcp`."},"protocol":{"$ref":"#/components/schemas/TraceProtocol"},"reached":{"type":["boolean","null"],"description":"Whether the target answered (`done` only)."},"requested_by":{"oneOf":[{"$ref":"#/components/schemas/UserRef","description":"Who asked for it (`trigger = manual`; `null` once the user is gone)."},{"type":"null"}]},"status":{"$ref":"#/components/schemas/TraceStatus"},"target":{"type":"string","description":"The monitor's target host."},"target_ip":{"type":["string","null"],"description":"The address traced to."},"trigger":{"$ref":"#/components/schemas/TraceTrigger"}}},"PathTraceInput":{"type":"object","description":"`POST .../traces` body.","required":["location"],"properties":{"location":{"type":"string","description":"Location code to trace from (any active location).","maxLength":16},"mode":{"oneOf":[{"$ref":"#/components/schemas/TraceMode","description":"Default `mtr`."},{"type":"null"}]},"protocol":{"oneOf":[{"$ref":"#/components/schemas/TraceProtocol","description":"Default: `tcp` to the target's port when it has one (falling back\nto `icmp` when no probe there can trace over TCP), else `icmp`."},{"type":"null"}]}},"additionalProperties":false},"PingKind":{"type":"string","description":"Whether the job reported success or failure.","enum":["success","fail"]},"Plan":{"type":"string","description":"`subscriptions.plan` (billing.md §11.4).","enum":["trial","starter","pro","business"]},"PlanPrice":{"type":"object","description":"One price of a plan.","required":["interval","amount_minor","currency"],"properties":{"amount_minor":{"type":"integer","format":"int64","description":"In the currency's minor unit (pence, cents)."},"currency":{"type":"string","description":"ISO 4217 code as Stripe reports it (lower case)."},"interval":{"$ref":"#/components/schemas/BillingInterval"}}},"PreviewCheckInput":{"type":"object","description":"`POST .../preview-check` body.","required":["kind","spec","location"],"properties":{"kind":{"$ref":"#/components/schemas/MonitorKind"},"location":{"type":"string","description":"Location code.","maxLength":16},"spec":{"$ref":"#/components/schemas/MonitorSpecInput","description":"The spec as in `MonitorInput` (secrets inline)."}},"additionalProperties":false},"Problem":{"type":"object","description":"An RFC 7807 `application/problem+json` body (api-and-auth.md §10.1).\nExtension members (`limit`, `current`, `max`, `attempts_left`, ...) are\nadded per code.","required":["type","title","status","code"],"properties":{"code":{"type":"string"},"detail":{"type":["string","null"]},"errors":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ProblemFieldError"},"description":"Only for `422 validation`."},"request_id":{"type":["string","null"]},"status":{"type":"integer","format":"int32","minimum":0},"title":{"type":"string"},"type":{"type":"string","description":"`https://justmonitorit.com/problems/<code>`."}}},"ProblemFieldError":{"type":"object","description":"One field error of a `422 validation` problem.","required":["pointer","code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"pointer":{"type":"string","description":"RFC 6901 pointer into the request body, or `/query/<name>`."}}},"ProviderStatus":{"type":"string","description":"`notification_deliveries.provider_status`","enum":["delivered","undelivered","failed","bounced","complaint","acknowledged"]},"ReauthRequest":{"type":"object","description":"`{password, totp_code?}`.","required":["password"],"properties":{"password":{"type":"string","maxLength":128},"totp_code":{"type":["string","null"],"description":"Required when TOTP is enabled.","maxLength":6}},"additionalProperties":false},"Received":{"type":"object","description":"Webhook acknowledgement.","required":["received"],"properties":{"received":{"type":"boolean"}}},"RecoveryCodes":{"type":"object","description":"`{recovery_codes}`: 10 codes shown once, `xxxxx-xxxxx`.","required":["recovery_codes"],"properties":{"recovery_codes":{"type":"array","items":{"type":"string"}}}},"RedirectUrl":{"type":"object","description":"A Stripe-hosted page to redirect to (top-level navigation).","required":["url"],"properties":{"url":{"type":"string"}}},"Region":{"type":"string","description":"A fixed region code (probes-and-checks.md §4.1).","enum":["eu","na","sa","as","oc","af"]},"RegionView":{"type":"object","description":"A region with at least one active location.","required":["code","name"],"properties":{"code":{"$ref":"#/components/schemas/Region"},"name":{"type":"string"}}},"RegisterRequest":{"type":"object","description":"`POST /auth/register` body.","required":["email","password","name"],"properties":{"email":{"type":"string","description":"At most 254 characters.","maxLength":254},"invite_code":{"type":["string","null"],"description":"The private-beta invite code (case-sensitive; surrounding whitespace\nis ignored). Required unless `invite_token` is given, in which case\nit is ignored. Missing or wrong: `422` with `invalid_invite_code` at\n`/invite_code`.","maxLength":64},"invite_token":{"type":["string","null"],"description":"Token from an invite link (registers into that org instead).","maxLength":64},"name":{"type":"string","description":"1-100 characters.","maxLength":100},"org_name":{"type":["string","null"],"description":"1-100 characters; default `\"<name>'s organisation\"`.","maxLength":100},"password":{"type":"string","description":"10-128 characters after NFKC normalisation.","maxLength":128}},"additionalProperties":false},"RegistrationCredential":{"type":"object","description":"`RegistrationResponseJSON`: what `navigator.credentials.create()`\nreturned, base64url-encoded (other members are ignored).","required":["id","rawId","type","response"],"properties":{"id":{"type":"string","maxLength":1400},"rawId":{"type":"string","maxLength":1400},"response":{"$ref":"#/components/schemas/AttestationResponse"},"type":{"type":"string","description":"`public-key`."}}},"ResetRequest":{"type":"object","description":"`{token, password}`.","required":["token","password"],"properties":{"password":{"type":"string","maxLength":128},"token":{"type":"string","maxLength":64}},"additionalProperties":false},"Resolution":{"type":"string","description":"`incidents.resolution`","enum":["recovered","paused"]},"Role":{"type":"string","description":"`memberships.role`, `invites.role` (api-and-auth.md §10.7).","enum":["owner","admin","member","viewer"]},"RoleRequest":{"type":"object","description":"`{role}`.","required":["role"],"properties":{"role":{"$ref":"#/components/schemas/Role"}},"additionalProperties":false},"Rollup":{"type":"object","description":"One rollup bucket (schema `Rollup`).","required":["bucket_start","location","checks_total","checks_up","checks_degraded","checks_down"],"properties":{"bucket_start":{"$ref":"#/components/schemas/Ts"},"checks_degraded":{"type":"integer","format":"int32"},"checks_down":{"type":"integer","format":"int32"},"checks_total":{"type":"integer","format":"int32"},"checks_up":{"type":"integer","format":"int32"},"latency_avg_ms":{"type":["number","null"],"format":"float"},"latency_max_ms":{"type":["integer","null"],"format":"int32"},"latency_min_ms":{"type":["integer","null"],"format":"int32"},"latency_p50_ms":{"type":["integer","null"],"format":"int32"},"latency_p95_ms":{"type":["integer","null"],"format":"int32"},"latency_p99_ms":{"type":["integer","null"],"format":"int32"},"location":{"type":"string"}}},"RollupsResponse":{"type":"object","description":"`GET .../rollups` response.","required":["granularity","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Rollup"}},"granularity":{"$ref":"#/components/schemas/Granularity"}}},"RpEntity":{"type":"object","description":"`PublicKeyCredentialRpEntity`.","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"RunState":{"type":"string","description":"API `run_state` (data-model.md §9.5).","enum":["active","paused","system_paused"]},"Series":{"type":"object","description":"The response-time chart (schema `Series`).","required":["range","step_s","from","to","series","bands"],"properties":{"bands":{"type":"array","items":{"$ref":"#/components/schemas/SeriesBand"}},"from":{"$ref":"#/components/schemas/Ts"},"range":{"type":"string"},"series":{"type":"array","items":{"$ref":"#/components/schemas/SeriesLine"}},"step_s":{"type":"integer","format":"int64"},"to":{"$ref":"#/components/schemas/Ts"}}},"SeriesBand":{"type":"object","description":"A non-`up` status period inside the range.","required":["from","to","status"],"properties":{"from":{"$ref":"#/components/schemas/Ts"},"status":{"$ref":"#/components/schemas/MonitorStatus"},"to":{"$ref":"#/components/schemas/Ts"}}},"SeriesLine":{"type":"object","description":"One location's latency points.","required":["location","points"],"properties":{"location":{"type":"string"},"points":{"type":"array","items":{"type":"array","items":{"type":["integer","null"],"format":"int64"}},"description":"`[unix_s, latency_ms | null]` for every step."}}},"SessionId":{"type":"string","pattern":"^ses_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"SlotStatus":{"type":"string","description":"Status of one location slot (from the evaluator's per-location state).","enum":["up","down","degraded","no_data"]},"SmsState":{"type":"string","description":"SMS allowance state of the current month (api-and-auth.md §10.9,\n`Billing.usage.sms_state`).","enum":["ok","warning","exhausted"]},"SslExpirySpec":{"type":"object","description":"`ssl_expiry` (probes-and-checks.md §5.4.4).","required":["host"],"properties":{"cert_expiry_warn_days":{"type":"integer","format":"int32","description":"Degraded this many days before expiry, 1-90 (default 14).","minimum":0},"host":{"type":"string","description":"Host name or public IP address."},"ip_family":{"$ref":"#/components/schemas/IpFamily"},"port":{"type":"integer","format":"int32","description":"1-65535 (default 443).","minimum":0},"timeout_ms":{"type":"integer","format":"int32","description":"1000-30000 (default 10000).","minimum":0},"verify_tls":{"type":"boolean","description":"Default `true`."}}},"SystemPauseReason":{"type":"string","description":"`monitors.system_pause_reason`","enum":["billing","plan_limit","org_suspended","org_deleting","admin"]},"TcpSpec":{"type":"object","description":"`tcp` (probes-and-checks.md §5.3).","required":["host","port"],"properties":{"host":{"type":"string","description":"Host name or public IP address."},"ip_family":{"$ref":"#/components/schemas/IpFamily"},"port":{"type":"integer","format":"int32","description":"1-65535.","minimum":0},"timeout_ms":{"type":"integer","format":"int32","description":"500-30000 (default 5000).","minimum":0}}},"TestSent":{"type":"object","description":"`POST .../test` response.","required":["notification_id"],"properties":{"notification_id":{"$ref":"#/components/schemas/NotificationId"}}},"TokenInfo":{"type":"object","description":"`GET /token`: the calling token, its org and effective role.","required":["token","org","effective_role"],"properties":{"effective_role":{"$ref":"#/components/schemas/TokenRole","description":"`min(token role, creator's current role)`: what the token may do."},"org":{"$ref":"#/components/schemas/TokenOrg"},"token":{"$ref":"#/components/schemas/ApiToken"}}},"TokenOrg":{"type":"object","description":"`{ \"id\": \"org_…\", \"name\": \"…\" }`.","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/OrgId"},"name":{"type":"string"}}},"TokenRequest":{"type":"object","description":"`{token}`.","required":["token"],"properties":{"token":{"type":"string","description":"The token from the link's fragment.","maxLength":64}},"additionalProperties":false},"TokenRole":{"type":"string","description":"The role of an API token: an org role below `owner`.","enum":["admin","member","viewer"]},"TotpEnrolment":{"type":"object","description":"`{secret, otpauth_uri}` of `POST /auth/totp/enrol`.","required":["secret","otpauth_uri"],"properties":{"otpauth_uri":{"type":"string"},"secret":{"type":"string","description":"Base32 (RFC 4648, no padding); shown once."}}},"TraceHop":{"type":"object","description":"One TTL of a trace.","required":["ttl","sent","received"],"properties":{"addrs":{"type":"array","items":{"$ref":"#/components/schemas/TraceHopAddr"},"description":"Distinct responders, most replies first (at most 4); several mean\nload-balanced paths."},"received":{"type":"integer","format":"int32","minimum":0},"rtt_avg_us":{"type":["integer","null"],"format":"int32","minimum":0},"rtt_last_us":{"type":["integer","null"],"format":"int32","minimum":0},"rtt_max_us":{"type":["integer","null"],"format":"int32","minimum":0},"rtt_min_us":{"type":["integer","null"],"format":"int32","minimum":0},"rtt_stdev_us":{"type":["integer","null"],"format":"int32","minimum":0},"sent":{"type":"integer","format":"int32","minimum":0},"ttl":{"type":"integer","format":"int32","minimum":0},"unreachable":{"oneOf":[{"$ref":"#/components/schemas/HopUnreachable"},{"type":"null"}]}}},"TraceHopAddr":{"type":"object","description":"One responder of a hop.","required":["replies"],"properties":{"ip":{"type":["string","null"],"description":"`None` when the leader withheld it: private, shared and reserved\nranges (the probe host's own network) are never shown."},"name":{"type":["string","null"],"description":"Reverse DNS name, when there is one."},"replies":{"type":"integer","format":"int32","description":"Replies from this address.","minimum":0}}},"TraceId":{"type":"string","pattern":"^trc_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"TraceLocation":{"type":"object","description":"`{ \"code\": \"lon1\", \"name\": \"London\" }`.","required":["id","code","name"],"properties":{"code":{"type":"string"},"id":{"$ref":"#/components/schemas/LocationId"},"name":{"type":"string"}}},"TraceMode":{"type":"string","description":"`path_traces.mode`: how many samples each hop gets.","enum":["traceroute","mtr"]},"TraceProtocol":{"type":"string","description":"How a trace probes the path.","enum":["icmp","tcp"]},"TraceStatus":{"type":"string","description":"`path_traces.status`.","enum":["pending","done","failed"]},"TraceTrigger":{"type":"string","description":"`path_traces.trigger`.","enum":["incident","manual"]},"Ts":{"type":"string","format":"date-time"},"UpdateMaintenanceRequest":{"type":"object","description":"`PATCH /orgs/{org}/maintenance/{mnt}` body: rename, or move the end of\na window that has not ended (to end it now, use `…/end`). The start\ncan only change before the window starts.","properties":{"ends_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]},"name":{"type":["string","null"]},"starts_at":{"oneOf":[{"$ref":"#/components/schemas/Ts"},{"type":"null"}]}},"additionalProperties":false},"User":{"type":"object","description":"The signed-in user.","required":["id","email","name","email_verified","totp_enabled","is_platform_admin","created_at"],"properties":{"created_at":{"$ref":"#/components/schemas/Ts"},"email":{"type":"string"},"email_verified":{"type":"boolean"},"id":{"$ref":"#/components/schemas/UserId"},"is_platform_admin":{"type":"boolean"},"name":{"type":"string"},"timezone":{"type":["string","null"],"description":"IANA name; `null` = use the org's, then the browser's."},"totp_enabled":{"type":"boolean"}}},"UserEntity":{"type":"object","description":"`PublicKeyCredentialUserEntityJSON`.","required":["id","name","displayName"],"properties":{"displayName":{"type":"string"},"id":{"type":"string","description":"The user handle, base64url (32 random bytes, the same for all of\nthe user's passkeys)."},"name":{"type":"string","description":"The account email."}}},"UserId":{"type":"string","pattern":"^usr_[0-7][0-9a-hjkmnp-tv-z]{25}$"},"UserRef":{"type":"object","description":"`{ \"id\": \"usr_…\", \"name\": \"…\" }`.","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/UserId"},"name":{"type":"string"}}},"VerifyInput":{"type":"object","description":"`POST .../verify` body.","required":["code"],"properties":{"code":{"type":"string","description":"The 6-digit code.","pattern":"^[0-9]{6}$"}},"additionalProperties":false},"WorkKind":{"type":"string","description":"Kind of work item (probes-and-checks.md §6.2.1). `check_results.work_kind`\nstores `round`, `recheck`, `shadow` (and reserves `canary`); `preview`\nis never stored.","enum":["round","recheck","shadow","canary","preview","trace"]}},"securitySchemes":{"api_token":{"type":"http","scheme":"bearer","bearerFormat":"jmi_…","description":"API token: `Authorization: Bearer jmi_…`. The role listed with this scheme on an operation is the minimum token role it needs (viewer, member or admin)."},"session":{"type":"apiKey","in":"cookie","name":"__Host-jmi_session","description":"Session cookie; non-safe methods also need `Origin` and `X-JMI-CSRF: 1`."},"stripe":{"type":"apiKey","in":"header","name":"Stripe-Signature"}}},"tags":[{"name":"meta"},{"name":"auth"},{"name":"orgs"},{"name":"monitors"},{"name":"incidents"},{"name":"contacts"},{"name":"notifications"},{"name":"billing"},{"name":"webhooks"},{"name":"live"},{"name":"tokens"},{"name":"maintenance"},{"name":"graphql"},{"name":"mcp"}]}