{"id":854,"library":"datadog-api-client","title":"Datadog API Client for Python","description":"The `datadog-api-client` is the official Python client library for interacting with the Datadog API. It provides a structured, object-oriented interface to programmatically interact with all aspects of the Datadog platform, including metrics, monitors, events, and dashboards. The library is actively maintained with frequent minor releases, currently at version 2.52.0.","status":"active","version":"2.52.0","language":"python","source_language":"en","source_url":"https://github.com/DataDog/datadog-api-client-python","tags":["api client","datadog","observability","monitoring","metrics","alerts"],"install":[{"cmd":"pip install datadog-api-client","lang":"bash","label":"Standard Installation"},{"cmd":"pip install datadog-api-client[async]","lang":"bash","label":"Asynchronous Support"}],"dependencies":[{"reason":"Required for library execution.","package":"Python","version":">=3.8"},{"reason":"Optional extra for asynchronous operations via AsyncApiClient.","package":"async","optional":true},{"reason":"Underpins HTTP requests; custom retry policies can be based on it.","package":"urllib3","optional":false}],"imports":[{"note":"Core class for making API requests, typically used with a Configuration object.","symbol":"ApiClient","correct":"from datadog_api_client import ApiClient"},{"note":"Used to set up API keys, application keys, and other client settings.","symbol":"Configuration","correct":"from datadog_api_client import Configuration"},{"note":"Example of importing a specific API endpoint client from 'v1'. Note: Many 'v1' endpoints are deprecated.","symbol":"MonitorsApi","correct":"from datadog_api_client.v1.api.monitors_api import MonitorsApi"},{"note":"Example of importing a specific API endpoint client from 'v2'. The 'v2' endpoints are generally preferred.","symbol":"MetricsApi","correct":"from datadog_api_client.v2.api.metrics_api import MetricsApi"},{"note":"Example of importing a model schema for API request bodies. Specific models reside within versioned 'model' subpackages.","symbol":"Monitor","correct":"from datadog_api_client.v1.model.monitor import Monitor"},{"note":"This imports the *older* Datadog Python library, which is a separate package (pypi: `datadog`) and not `datadog-api-client`. Using this will result in different API methods and authentication.","wrong":"import datadog","symbol":"datadog"}],"quickstart":{"code":"import os\nfrom datadog_api_client import ApiClient, Configuration\nfrom datadog_api_client.v1.api.monitors_api import MonitorsApi\nfrom datadog_api_client.v1.model.monitor import Monitor\nfrom datadog_api_client.v1.model.monitor_type import MonitorType\n\n# Configure API keys, preferably via environment variables\nDD_API_KEY = os.environ.get('DD_API_KEY', '')\nDD_APP_KEY = os.environ.get('DD_APP_KEY', '')\n\nconfiguration = Configuration()\nconfiguration.api_key['apiKeyAuth'] = DD_API_KEY\nconfiguration.api_key['appKeyAuth'] = DD_APP_KEY\n\n# For non-US regions, set the site explicitly:\n# configuration.server_variables[\"site\"] = \"datadoghq.eu\" # Example for EU site\n\ntry:\n    with ApiClient(configuration) as api_client:\n        api_instance = MonitorsApi(api_client)\n\n        # Create a basic monitor example\n        body = Monitor(\n            name=\"Example Monitor - Python Client\",\n            type=MonitorType(\"metric alert\"),\n            query=\"avg(system.cpu.user{host:\"test-host\"}) by {host} > 80\",\n            message=\"CPU usage is high! @pagerduty\",\n            tags=[\"env:dev\", \"team:backend\"],\n            priority=3,\n        )\n\n        response = api_instance.create_monitor(body=body)\n        print(f\"Monitor created successfully: {response.name} (ID: {response.id})\")\n\nexcept Exception as e:\n    print(f\"Error creating monitor: {e}\")\n","lang":"python","description":"This quickstart demonstrates how to authenticate with Datadog using API and Application keys (preferably from environment variables) and then create a new monitor using the `MonitorsApi` client. It also includes a comment for configuring regional endpoints."},"warnings":[{"fix":"Store `DD_API_KEY` and `DD_APP_KEY` as environment variables. The client automatically picks them up, or you can explicitly set `configuration.api_key` from `os.environ.get()`.","message":"Always use `DD_API_KEY` and `DD_APP_KEY` environment variables for authentication to avoid exposing credentials in code. While in-code configuration is possible, it is less secure.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Consult the official Datadog API documentation to identify the V2 equivalent for your desired functionality and update your imports and API calls accordingly (e.g., `from datadog_api_client.v2.api.metrics_api import MetricsApi`).","message":"Many V1 API endpoints are deprecated and have V2 equivalents. While V1 might still work, it's recommended to use V2 endpoints for new development and migrate existing code where possible to ensure access to the latest features and avoid future breaking changes.","severity":"deprecated","affected_versions":"All versions, increasingly with new releases"},{"fix":"Set the `DD_SITE` environment variable (e.g., `DD_SITE=datadoghq.eu`) or configure it in code: `configuration.server_variables[\"site\"] = \"datadoghq.eu\"`.","message":"The default Datadog API site is `datadoghq.com` (US). If your Datadog account is hosted in a different region (e.g., EU, US1-FED), you must explicitly configure the client to use the correct regional endpoint. Otherwise, API calls will fail or target the wrong Datadog instance.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Enable unstable operations with `configuration.unstable_operations[\"<OperationName>\"] = True`. Be aware that code using these endpoints may break in future minor releases.","message":"The client includes access to 'unstable' API endpoints that are subject to breaking changes without major version bumps. These endpoints require an explicit opt-in configuration step.","severity":"breaking","affected_versions":"All versions supporting unstable endpoints"},{"fix":"Implement robust retry mechanisms with exponential backoff. The library can be configured with a custom retry policy using `urllib3.util.Retry`.","message":"Datadog APIs are subject to rate limits. Failing to implement retry and backoff logic can lead to API call failures (e.g., HTTP 429 Too Many Requests) and degraded application performance.","severity":"gotcha","affected_versions":"All versions"},{"fix":"For comprehensive API coverage and the latest features, use `datadog-api-client`. If you are migrating, be aware of the different import paths and API call patterns.","message":"There are two distinct Python libraries for Datadog: `datadog` (the older client, `pip install datadog`) and `datadog-api-client` (the newer, generated client, `pip install datadog-api-client`). Ensure you are importing and using the correct library for your needs, as they have different interfaces and capabilities. `datadog-api-client` supports all public Datadog API endpoints.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Ensure `ApiClient` is used as a context manager (`with ApiClient(...) as api_client:`), which handles connection closing. For persistent issues, consider explicitly calling garbage collection (`gc.collect()`) after intensive API operations or analyzing memory usage patterns.","message":"There have been reports of memory not being released after API calls, potentially leading to increased memory usage in long-running applications.","severity":"gotcha","affected_versions":"Potentially all 2.x versions"},{"fix":"Correct the string literal by using consistent outer quotes (single or double) and escaping any inner quotes that match the outer ones (e.g., `query='avg(system.cpu.user{host:\"test-host\"}) by {host} > 80'`). Alternatively, use triple quotes (single or double) to define strings that can contain both single and double quotes without explicit escaping (e.g., `query=\"\"\"avg(system.cpu.user{host:\"test-host\"}) by {host} > 80\"\"\"`).","message":"When constructing API parameters like Datadog query strings, which often contain special characters (e.g., quotes, curly braces), ensure proper Python string literal syntax. Unescaped quotes within a string literal can lead to `SyntaxError` before the API call is even made, preventing your script from running.","severity":"gotcha","affected_versions":"All versions (Python syntax issue)"},{"fix":"To resolve `SyntaxError` with nested quotes, use different quote types for the outer string and the inner content (e.g., `query='avg(system.cpu.user{host:\"test-host\"}) by {host} > 80'`), or escape the inner quotes (e.g., `query=\"avg(system.cpu.user{host:\\\"test-host\\\"}) by {host} > 80\"`). For Python 3.6+, f-strings can also be used with careful escaping of literal curly braces (e.g., `query=f\"avg(system.cpu.user{{host:\\\"test-host\\\"}}) by {{host}} > 80\"`).","message":"A `SyntaxError: invalid syntax` can occur when constructing query strings that contain nested quotes (e.g., `{host:\"test-host\"}`). Python's string literal rules interpret the inner quote prematurely as the end of the string, leading to unparsable code.","severity":"breaking","affected_versions":"All versions of `datadog-api-client` when constructing query strings with nested quotes."}],"env_vars":null,"last_verified":"2026-05-12T20:26:16.746Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Ensure you have set the `DD_API_KEY` and `DD_APP_KEY` environment variables with valid keys, or explicitly configure them in your `Configuration` object:\n\n```python\nfrom datadog_api_client import Configuration, ApiClient\n\nconfiguration = Configuration()\nconfiguration.api_key['apiKeyAuth'] = 'YOUR_DATADOG_API_KEY'\nconfiguration.api_key['appKeyAuth'] = 'YOUR_DATADOG_APP_KEY'\n\n# Or, relying on environment variables (default behavior)\n# configuration = Configuration()\n\nwith ApiClient(configuration) as api_client:\n    # Your API calls here\n    pass\n```","cause":"This error occurs when the Datadog API Key and/or Application Key are either missing, incorrect, or do not have the necessary permissions for the requested API operation.","error":"datadog_api_client.exceptions.UnauthorizedException"},{"fix":"Install the library using pip:\n\n```bash\npip install datadog-api-client\n```\n\nIf you need async support, install with the `async` extra:\n\n```bash\npip install datadog-api-client[async]\n```","cause":"The `datadog-api-client` library is not installed in your current Python environment, or the environment where your script is running does not have access to the installed package.","error":"ModuleNotFoundError: No module named 'datadog_api_client'"},{"fix":"Review the official `datadog-api-client` documentation for the specific API endpoint and model you are using. Ensure all required parameters are supplied and that their values adhere to the expected data types and formats (e.g., providing a string where an enum is expected, or missing a required field in a body object). For example:\n\n```python\nfrom datadog_api_client.v1.model.monitor import Monitor\nfrom datadog_api_client.v1.model.monitor_type import MonitorType\n\n# Ensure all required fields for Monitor are present and correctly typed\nbody = Monitor(\n    name=\"My Example Monitor\",\n    type=MonitorType(\"metric alert\"), # Correct enum usage\n    query='avg(system.cpu.user{host:my-host}) > 0.5',\n    message=\"Alert message @pagerduty\",\n    tags=[\"env:prod\", \"team:backend\"],\n    priority=3,\n    # Other optional but correctly typed fields\n)\n```","cause":"This exception is raised when the arguments provided to an API method do not match the expected data types or structure defined by the API specification, often due to missing required fields or incorrect parameter types for complex objects.","error":"datadog_api_client.exceptions.ApiTypeError"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"2.54.0","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","installed_version":"2.54.0","pypi_latest":"2.54.0","is_stale":false,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.34,"mem_mb":8.5,"disk_size":"82.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.34,"mem_mb":8.5,"disk_size":"77.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"async","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.5,"disk_size":"84.9M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.35,"mem_mb":8.5,"disk_size":"79.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.6,"import_time_s":0.23,"mem_mb":8.5,"disk_size":"83M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.23,"mem_mb":8.5,"disk_size":"78M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.2,"import_time_s":0.23,"mem_mb":8.5,"disk_size":"85M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.27,"mem_mb":8.5,"disk_size":"80M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.46,"mem_mb":9.7,"disk_size":"86.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":9.7,"disk_size":"80.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.44,"mem_mb":9.7,"disk_size":"88.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.6,"mem_mb":9.7,"disk_size":"83.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.6,"import_time_s":0.45,"mem_mb":9.7,"disk_size":"87M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":9.7,"disk_size":"81M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.1,"import_time_s":0.4,"mem_mb":9.7,"disk_size":"89M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":9.7,"disk_size":"84M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.42,"mem_mb":10.4,"disk_size":"77.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.42,"mem_mb":10.4,"disk_size":"72.2M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.41,"mem_mb":10.4,"disk_size":"79.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.42,"mem_mb":10.4,"disk_size":"74.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.7,"import_time_s":0.44,"mem_mb":10.4,"disk_size":"78M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":10.4,"disk_size":"73M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.2,"import_time_s":0.42,"mem_mb":10.4,"disk_size":"80M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":10.4,"disk_size":"75M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.4,"mem_mb":10.4,"disk_size":"76.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":10.4,"disk_size":"71.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.41,"mem_mb":10.4,"disk_size":"79.4M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":10.4,"disk_size":"74.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.1,"import_time_s":0.4,"mem_mb":10.4,"disk_size":"77M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":10.4,"disk_size":"72M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.1,"import_time_s":0.4,"mem_mb":10.4,"disk_size":"80M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.39,"mem_mb":10.4,"disk_size":"75M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.31,"mem_mb":8.3,"disk_size":"81.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"datadog-api-client","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.3,"disk_size":"76.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.29,"mem_mb":8.3,"disk_size":"84.4M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"async","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.3,"disk_size":"79.4M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.3,"import_time_s":0.3,"mem_mb":8.3,"disk_size":"82M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"datadog-api-client","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.26,"mem_mb":8.3,"disk_size":"77M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.1,"import_time_s":0.29,"mem_mb":8.3,"disk_size":"85M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"async","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.26,"mem_mb":8.3,"disk_size":"80M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}