Skip to content

Commit a10efd0

Browse files
author
ci.datadog-api-spec
committed
Regenerate client from commit 19a71ac of spec repo
1 parent 420cc90 commit a10efd0

13 files changed

Lines changed: 409 additions & 0 deletions

.generator/schemas/v2/openapi.yaml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1714,6 +1714,15 @@ components:
17141714
required: true
17151715
schema:
17161716
type: string
1717+
SecurityMonitoringRuleVersion:
1718+
description: The historical version number of the rule to restore.
1719+
in: path
1720+
name: version
1721+
required: true
1722+
schema:
1723+
example: 1
1724+
format: int64
1725+
type: integer
17171726
SecurityMonitoringSuppressionID:
17181727
description: The ID of the suppression rule
17191728
in: path
@@ -168955,6 +168964,60 @@ paths:
168955168964
operator: OR
168956168965
permissions:
168957168966
- security_monitoring_rules_read
168967+
/api/v2/security_monitoring/rules/{rule_id}/restore/{version}:
168968+
post:
168969+
description: |-
168970+
Restores a custom detection rule to a previously saved historical version.
168971+
Only custom rules can be restored. Default and partner rules return 400.
168972+
The restore creates a new version entry; it does not overwrite history.
168973+
operationId: RestoreSecurityMonitoringRule
168974+
parameters:
168975+
- $ref: "#/components/parameters/SecurityMonitoringRuleID"
168976+
- $ref: "#/components/parameters/SecurityMonitoringRuleVersion"
168977+
responses:
168978+
"200":
168979+
content:
168980+
"application/json":
168981+
examples:
168982+
default:
168983+
value:
168984+
cases:
168985+
- condition: "a > 0"
168986+
name: ""
168987+
notifications: []
168988+
status: info
168989+
id: abc-123
168990+
isEnabled: true
168991+
message: Test rule
168992+
name: My security monitoring rule.
168993+
tags: []
168994+
type: log_detection
168995+
schema:
168996+
$ref: "#/components/schemas/SecurityMonitoringRuleResponse"
168997+
description: OK
168998+
"400":
168999+
$ref: "#/components/responses/BadRequestResponse"
169000+
"403":
169001+
$ref: "#/components/responses/NotAuthorizedResponse"
169002+
"404":
169003+
$ref: "#/components/responses/NotFoundResponse"
169004+
"409":
169005+
$ref: "#/components/responses/ConflictResponse"
169006+
"429":
169007+
$ref: "#/components/responses/TooManyRequestsResponse"
169008+
security:
169009+
- apiKeyAuth: []
169010+
appKeyAuth: []
169011+
- AuthZ:
169012+
- security_monitoring_rules_write
169013+
summary: Restore a rule to a historical version
169014+
tags: ["Security Monitoring"]
169015+
"x-permission":
169016+
operator: OR
169017+
permissions:
169018+
- security_monitoring_rules_write
169019+
x-unstable: |-
169020+
**Note**: This endpoint is in beta and may be subject to changes.
168958169021
/api/v2/security_monitoring/rules/{rule_id}/test:
168959169022
post:
168960169023
description: |-
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""
2+
Restore a rule to a historical version returns "OK" response
3+
"""
4+
5+
from os import environ
6+
from datadog_api_client import ApiClient, Configuration
7+
from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi
8+
9+
# there is a valid "security_rule" in the system
10+
SECURITY_RULE_ID = environ["SECURITY_RULE_ID"]
11+
12+
configuration = Configuration()
13+
configuration.unstable_operations["restore_security_monitoring_rule"] = True
14+
with ApiClient(configuration) as api_client:
15+
api_instance = SecurityMonitoringApi(api_client)
16+
response = api_instance.restore_security_monitoring_rule(
17+
rule_id=SECURITY_RULE_ID,
18+
version=1,
19+
)
20+
21+
print(response)

src/datadog_api_client/configuration.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ def __init__(
436436
"v2.list_vulnerabilities": False,
437437
"v2.list_vulnerable_assets": False,
438438
"v2.mute_findings": False,
439+
"v2.restore_security_monitoring_rule": False,
439440
"v2.run_historical_job": False,
440441
"v2.search_security_monitoring_histsignals": False,
441442
"v2.update_findings_assignee": False,

src/datadog_api_client/v2/api/security_monitoring_api.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3510,6 +3510,35 @@ def __init__(self, api_client=None):
35103510
api_client=api_client,
35113511
)
35123512

3513+
self._restore_security_monitoring_rule_endpoint = _Endpoint(
3514+
settings={
3515+
"response_type": (SecurityMonitoringRuleResponse,),
3516+
"auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"],
3517+
"endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}/restore/{version}",
3518+
"operation_id": "restore_security_monitoring_rule",
3519+
"http_method": "POST",
3520+
"version": "v2",
3521+
},
3522+
params_map={
3523+
"rule_id": {
3524+
"required": True,
3525+
"openapi_types": (str,),
3526+
"attribute": "rule_id",
3527+
"location": "path",
3528+
},
3529+
"version": {
3530+
"required": True,
3531+
"openapi_types": (int,),
3532+
"attribute": "version",
3533+
"location": "path",
3534+
},
3535+
},
3536+
headers_map={
3537+
"accept": ["application/json"],
3538+
},
3539+
api_client=api_client,
3540+
)
3541+
35133542
self._run_historical_job_endpoint = _Endpoint(
35143543
settings={
35153544
"response_type": (JobCreateResponse,),
@@ -7370,6 +7399,30 @@ def patch_vulnerability_notification_rule(
73707399

73717400
return self._patch_vulnerability_notification_rule_endpoint.call_with_http_info(**kwargs)
73727401

7402+
def restore_security_monitoring_rule(
7403+
self,
7404+
rule_id: str,
7405+
version: int,
7406+
) -> SecurityMonitoringRuleResponse:
7407+
"""Restore a rule to a historical version.
7408+
7409+
Restores a custom detection rule to a previously saved historical version.
7410+
Only custom rules can be restored. Default and partner rules return 400.
7411+
The restore creates a new version entry; it does not overwrite history.
7412+
7413+
:param rule_id: The ID of the rule.
7414+
:type rule_id: str
7415+
:param version: The historical version number of the rule to restore.
7416+
:type version: int
7417+
:rtype: SecurityMonitoringRuleResponse
7418+
"""
7419+
kwargs: Dict[str, Any] = {}
7420+
kwargs["rule_id"] = rule_id
7421+
7422+
kwargs["version"] = version
7423+
7424+
return self._restore_security_monitoring_rule_endpoint.call_with_http_info(**kwargs)
7425+
73737426
def run_historical_job(
73747427
self,
73757428
body: RunHistoricalJobRequest,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2026-06-12T08:39:38.315Z
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
interactions:
2+
- request:
3+
body: '{"cases":[{"condition":"a > 0","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"Test
4+
rule","name":"Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781253578","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metrics":[],"query":"@test:true"}],"tags":[],"type":"log_detection"}'
5+
headers:
6+
accept:
7+
- application/json
8+
content-type:
9+
- application/json
10+
method: POST
11+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules
12+
response:
13+
body:
14+
string: '{"name":"Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781253578","createdAt":1781253580174,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a
15+
\u003e 0"}],"message":"Test rule","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"version":1,"id":"cri-xko-leg","blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":2320499,"creator":{"handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","name":"CI
16+
Account"},"updater":{"handle":"","name":""}}'
17+
headers:
18+
content-type:
19+
- application/json
20+
status:
21+
code: 200
22+
message: OK
23+
- request:
24+
body: '{"cases":[{"condition":"a > 0","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"Test
25+
rule updated","name":"Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781253578-updated","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metrics":[],"query":"@test:true"}],"tags":[],"type":"log_detection"}'
26+
headers:
27+
accept:
28+
- application/json
29+
content-type:
30+
- application/json
31+
method: PUT
32+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/cri-xko-leg
33+
response:
34+
body:
35+
string: '{"name":"Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781253578-updated","isEnabled":true,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a
36+
\u003e 0"}],"message":"Test rule updated","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"id":"cri-xko-leg","version":2,"createdAt":1781253580174,"creationAuthorId":2320499,"updateAuthorId":2320499,"updatedAt":1781253580540,"isDefault":false,"blocking":false,"isBeta":false,"isDeleted":false,"isDeprecated":false,"metadata":{"entities":null,"sources":null}}'
37+
headers:
38+
content-type:
39+
- application/json
40+
status:
41+
code: 200
42+
message: OK
43+
- request:
44+
body: null
45+
headers:
46+
accept:
47+
- application/json
48+
method: POST
49+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/cri-xko-leg/restore/2
50+
response:
51+
body:
52+
string: '{"error":{"code":"AlreadyExists","message":"Cannot restore: target
53+
version is the current version."}}'
54+
headers:
55+
content-type:
56+
- application/json
57+
status:
58+
code: 409
59+
message: Conflict
60+
- request:
61+
body: null
62+
headers:
63+
accept:
64+
- '*/*'
65+
method: DELETE
66+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/cri-xko-leg
67+
response:
68+
body:
69+
string: ''
70+
headers: {}
71+
status:
72+
code: 204
73+
message: No Content
74+
version: 1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2026-06-12T08:39:41.348Z
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
interactions:
2+
- request:
3+
body: '{"cases":[{"condition":"a > 0","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"Test
4+
rule","name":"Test-Restore_a_rule_to_a_historical_version_returns_Not_Found_response-1781253581","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metrics":[],"query":"@test:true"}],"tags":[],"type":"log_detection"}'
5+
headers:
6+
accept:
7+
- application/json
8+
content-type:
9+
- application/json
10+
method: POST
11+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules
12+
response:
13+
body:
14+
string: '{"name":"Test-Restore_a_rule_to_a_historical_version_returns_Not_Found_response-1781253581","createdAt":1781253581645,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a
15+
\u003e 0"}],"message":"Test rule","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"version":1,"id":"uig-ynq-xlh","blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":2320499,"creator":{"handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","name":"CI
16+
Account"},"updater":{"handle":"","name":""}}'
17+
headers:
18+
content-type:
19+
- application/json
20+
status:
21+
code: 200
22+
message: OK
23+
- request:
24+
body: null
25+
headers:
26+
accept:
27+
- application/json
28+
method: POST
29+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/uig-ynq-xlh/restore/9999
30+
response:
31+
body:
32+
string: '{"error":{"code":"NotFound","message":"Threat detection rule not found:
33+
uig-ynq-xlh, version=9999"}}'
34+
headers:
35+
content-type:
36+
- application/json
37+
status:
38+
code: 404
39+
message: Not Found
40+
- request:
41+
body: null
42+
headers:
43+
accept:
44+
- '*/*'
45+
method: DELETE
46+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/uig-ynq-xlh
47+
response:
48+
body:
49+
string: ''
50+
headers: {}
51+
status:
52+
code: 204
53+
message: No Content
54+
version: 1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2026-06-12T08:39:42.628Z
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
interactions:
2+
- request:
3+
body: '{"cases":[{"condition":"a > 0","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"Test
4+
rule","name":"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781253582","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metrics":[],"query":"@test:true"}],"tags":[],"type":"log_detection"}'
5+
headers:
6+
accept:
7+
- application/json
8+
content-type:
9+
- application/json
10+
method: POST
11+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules
12+
response:
13+
body:
14+
string: '{"name":"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781253582","createdAt":1781253582912,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a
15+
\u003e 0"}],"message":"Test rule","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"version":1,"id":"otp-wrb-usi","blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":2320499,"creator":{"handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","name":"CI
16+
Account"},"updater":{"handle":"","name":""}}'
17+
headers:
18+
content-type:
19+
- application/json
20+
status:
21+
code: 200
22+
message: OK
23+
- request:
24+
body: '{"cases":[{"condition":"a > 0","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"Test
25+
rule updated","name":"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781253582-updated","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metrics":[],"query":"@test:true"}],"tags":[],"type":"log_detection"}'
26+
headers:
27+
accept:
28+
- application/json
29+
content-type:
30+
- application/json
31+
method: PUT
32+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/otp-wrb-usi
33+
response:
34+
body:
35+
string: '{"name":"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781253582-updated","isEnabled":true,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a
36+
\u003e 0"}],"message":"Test rule updated","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"id":"otp-wrb-usi","version":2,"createdAt":1781253582912,"creationAuthorId":2320499,"updateAuthorId":2320499,"updatedAt":1781253583286,"isDefault":false,"blocking":false,"isBeta":false,"isDeleted":false,"isDeprecated":false,"metadata":{"entities":null,"sources":null}}'
37+
headers:
38+
content-type:
39+
- application/json
40+
status:
41+
code: 200
42+
message: OK
43+
- request:
44+
body: null
45+
headers:
46+
accept:
47+
- application/json
48+
method: POST
49+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/otp-wrb-usi/restore/1
50+
response:
51+
body:
52+
string: '{"name":"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781253582","createdAt":1781253582912,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a
53+
\u003e 0"}],"message":"Test rule","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"version":3,"id":"otp-wrb-usi","updatedAt":1781253583656,"blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":2320499,"updateAuthorId":2320499,"creator":{"handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","name":"CI
54+
Account"},"updater":{"handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","name":"CI
55+
Account"}}'
56+
headers:
57+
content-type:
58+
- application/json
59+
status:
60+
code: 200
61+
message: OK
62+
- request:
63+
body: null
64+
headers:
65+
accept:
66+
- '*/*'
67+
method: DELETE
68+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/otp-wrb-usi
69+
response:
70+
body:
71+
string: ''
72+
headers: {}
73+
status:
74+
code: 204
75+
message: No Content
76+
version: 1

0 commit comments

Comments
 (0)