{"library":"pagerduty","title":"PagerDuty Python Client","description":"The `pagerduty` library provides lightweight Python clients for PagerDuty's REST API v2 and Events API v2, built on top of the `httpx` HTTP client. It is the official and actively maintained successor to the `pdpyras` library, offering features like connection pooling, authentication, pagination, and configurable retry logic. The current version is 6.2.1, with a regular release cadence addressing bug fixes, new features, and API endpoint support.","language":"python","status":"active","last_verified":"Wed May 13","install":{"commands":["pip install pagerduty"],"cli":null},"imports":["from pagerduty import RestApiV2Client","from pagerduty import EventsApiV2Client"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom pagerduty import RestApiV2Client\n\n# PagerDuty API Key (recommended: user-scoped or service-specific key)\nPAGERDUTY_API_KEY = os.environ.get('PAGERDUTY_API_KEY', 'YOUR_PAGERDUTY_API_KEY')\n# 'From' email header is required for some actions (e.g., resolving incidents) \n# when using an account-level API key.\nPAGERDUTY_FROM_EMAIL = os.environ.get('PAGERDUTY_FROM_EMAIL', 'your_user@example.com')\n\nif not PAGERDUTY_API_KEY or PAGERDUTY_API_KEY == 'YOUR_PAGERDUTY_API_KEY':\n    print(\"Error: PAGERDUTY_API_KEY environment variable not set or placeholder used.\")\n    exit(1)\n\ntry:\n    # Initialize the REST API client\n    # For account-level API keys, pass default_from for actions requiring a 'From' header\n    client = RestApiV2Client(PAGERDUTY_API_KEY, default_from=PAGERDUTY_FROM_EMAIL)\n\n    # Example: List users\n    print(\"Fetching PagerDuty users...\")\n    users_response = client.get('/users')\n\n    if users_response.is_success:\n        users = users_response.json().get('users', [])\n        for user in users:\n            print(f\"User ID: {user['id']}, Name: {user['name']}, Email: {user['email']}\")\n        print(f\"Successfully fetched {len(users)} users.\")\n    else:\n        print(f\"Error fetching users: {users_response.status_code} - {users_response.text}\")\n        \n    # Example: Create an incident (requires a service API key, not account-level)\n    # This example requires a valid `service_id` and `from` email and a user with permissions\n    # incident_data = {\n    #     \"incident\": {\n    #         \"type\": \"incident\",\n    #         \"title\": \"Test Incident from Python Client\",\n    #         \"service\": {\"id\": \"PXXXXXX\", \"type\": \"service_reference\"},\n    #         \"priority\": {\"id\": \"PXXXXXX\", \"type\": \"priority_reference\"}, # Optional\n    #         \"body\": {\"type\": \"text\", \"details\": \"This is a test incident created via the Python client.\"}\n    #     }\n    # }\n    # create_incident_response = client.post('/incidents', json=incident_data, headers={'From': PAGERDUTY_FROM_EMAIL})\n    # if create_incident_response.is_success:\n    #     print(f\"Incident created: {create_incident_response.json()['incident']['id']}\")\n    # else:\n    #     print(f\"Error creating incident: {create_incident_response.status_code} - {create_incident_response.text}\")\n\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")","lang":"python","description":"This quickstart demonstrates how to initialize the PagerDuty `RestApiV2Client` and perform a basic API call, such as listing users. It highlights the importance of setting the `PAGERDUTY_API_KEY` and, for account-level API keys, the `PAGERDUTY_FROM_EMAIL` header for certain write operations.","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-13","installed_version":"6.2.1","pypi_latest":"6.2.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.3,"avg_import_s":0.27,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.24,"mem_mb":7.9,"disk_size":"22.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.27,"mem_mb":7.9,"disk_size":"22.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.3,"import_time_s":0.17,"mem_mb":7.9,"disk_size":"23M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":7.9,"disk_size":"23M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.33,"mem_mb":8.7,"disk_size":"24.5M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":8.7,"disk_size":"24.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.4,"import_time_s":0.29,"mem_mb":8.7,"disk_size":"25M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":8.7,"disk_size":"25M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.26,"mem_mb":8.5,"disk_size":"16.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.31,"mem_mb":8.5,"disk_size":"16.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.27,"mem_mb":8.5,"disk_size":"17M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.3,"mem_mb":8.5,"disk_size":"17M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.27,"mem_mb":8.8,"disk_size":"15.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.28,"mem_mb":8.7,"disk_size":"15.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.26,"mem_mb":8.8,"disk_size":"16M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.29,"mem_mb":8.7,"disk_size":"16M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":7.7,"disk_size":"21.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.24,"mem_mb":7.7,"disk_size":"21.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.6,"import_time_s":0.19,"mem_mb":7.7,"disk_size":"22M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pagerduty","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.25,"mem_mb":7.7,"disk_size":"22M"}]}}