This endpoint is in Preview and may introduce breaking changes.
If you have any feedback, contact Datadog support .
GET https://api.ap1.datadoghq.com/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions https://api.ap2.datadoghq.com/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions https://api.datadoghq.eu/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions https://api.ddog-gov.com/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions https://api.us2.ddog-gov.com/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions https://api.datadoghq.com/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions https://api.us3.datadoghq.com/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions https://api.us5.datadoghq.com/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions
Overview Get all revisions for a custom rule
Arguments Path Parameters Query Strings Response Successful response
Response containing a paginated list of custom rule revisions.
Expand All
List of custom rule revisions.
Attributes of a custom rule revision, including code, metadata, and test cases.
Base64-encoded argument description
Base64-encoded argument name
Rule category
Allowed enum values: SECURITY,BEST_PRACTICES,CODE_STYLE,ERROR_PRONE,PERFORMANCE
creation_message [required ]
Revision creation message
documentation_url [required ]
Whether the revision is published
Whether this is a testing revision
Programming language
Allowed enum values: PYTHON,JAVASCRIPT,TYPESCRIPT,JAVA,GO,YAML,RUBY,CSHARP,PHP,KOTLINShow 1 more ,SWIFT
Rule severity
Allowed enum values: ERROR,WARNING,NOTICE
short_description [required ]
should_use_ai_fix [required ]
Whether to use AI for fixes
annotation_count [required ]
tree_sitter_query [required ]
Resource type
Allowed enum values: custom_rule_revision
{
"data" : [
{
"attributes" : {
"arguments" : [
{
"description" : "YXJndW1lbnQgZGVzY3JpcHRpb24=" ,
"name" : "YXJndW1lbnRfbmFtZQ=="
}
],
"category" : "SECURITY" ,
"checksum" : "8a66c4e4e631099ad71be3c1ea3ea8fc2d57193e56db2c296e2dd8a508b26b99" ,
"code" : "Y29uZHVjdG9yOgogICAgLSBkZXBsb3lfb25seTogdHJ1ZQ==" ,
"created_at" : "2026-01-09T13:00:57.473141Z" ,
"created_by" : "foobarbaz" ,
"creation_message" : "Initial revision" ,
"cve" : "CVE-2024-1234" ,
"cwe" : "CWE-79" ,
"description" : "bG9uZyBkZXNjcmlwdGlvbg==" ,
"documentation_url" : "https://docs.example.com/rules/my-rule" ,
"is_published" : false ,
"is_testing" : false ,
"language" : "PYTHON" ,
"severity" : "ERROR" ,
"short_description" : "c2hvcnQgZGVzY3JpcHRpb24=" ,
"should_use_ai_fix" : false ,
"tags" : [
"security" ,
"custom"
],
"tests" : [
{
"annotation_count" : 1 ,
"code" : "Y29uZHVjdG9yOgogICAgLSBkZXBsb3lfb25seTogdHJ1ZQ==" ,
"filename" : "test.yaml"
}
],
"tree_sitter_query" : "Y29uZHVjdG9yOgogICAgLSBkZXBsb3lfb25seTogdHJ1ZQ=="
},
"id" : "revision-123" ,
"type" : "custom_rule_revision"
}
]
} Bad request
API error response.
Expand All
A human-readable explanation specific to this occurrence of the error.
Non-standard meta-information about the error
References to the source of the error.
A string indicating the name of a single request header which caused the error.
A string indicating which URI query parameter caused the error.
A JSON pointer to the value in the request document that caused the error.
Status code of the response.
Short human-readable summary of the error.
{
"errors" : [
{
"detail" : "Missing required attribute in body" ,
"meta" : {},
"source" : {
"header" : "Authorization" ,
"parameter" : "limit" ,
"pointer" : "/data/attributes/title"
},
"status" : "400" ,
"title" : "Bad Request"
}
]
} Unauthorized - custom rules not enabled
API error response.
Expand All
A human-readable explanation specific to this occurrence of the error.
Non-standard meta-information about the error
References to the source of the error.
A string indicating the name of a single request header which caused the error.
A string indicating which URI query parameter caused the error.
A JSON pointer to the value in the request document that caused the error.
Status code of the response.
Short human-readable summary of the error.
{
"errors" : [
{
"detail" : "Missing required attribute in body" ,
"meta" : {},
"source" : {
"header" : "Authorization" ,
"parameter" : "limit" ,
"pointer" : "/data/attributes/title"
},
"status" : "400" ,
"title" : "Bad Request"
}
]
} Rule not found
API error response.
Expand All
A human-readable explanation specific to this occurrence of the error.
Non-standard meta-information about the error
References to the source of the error.
A string indicating the name of a single request header which caused the error.
A string indicating which URI query parameter caused the error.
A JSON pointer to the value in the request document that caused the error.
Status code of the response.
Short human-readable summary of the error.
{
"errors" : [
{
"detail" : "Missing required attribute in body" ,
"meta" : {},
"source" : {
"header" : "Authorization" ,
"parameter" : "limit" ,
"pointer" : "/data/attributes/title"
},
"status" : "400" ,
"title" : "Bad Request"
}
]
} Too many requests
API error response.
Expand All
A human-readable explanation specific to this occurrence of the error.
Non-standard meta-information about the error
References to the source of the error.
A string indicating the name of a single request header which caused the error.
A string indicating which URI query parameter caused the error.
A JSON pointer to the value in the request document that caused the error.
Status code of the response.
Short human-readable summary of the error.
{
"errors" : [
{
"detail" : "Missing required attribute in body" ,
"meta" : {},
"source" : {
"header" : "Authorization" ,
"parameter" : "limit" ,
"pointer" : "/data/attributes/title"
},
"status" : "400" ,
"title" : "Bad Request"
}
]
} Code Example Copy
# Path parameters export ruleset_name = "CHANGE_ME" export rule_name = "CHANGE_ME" # Curl command curl -X GET "https://api.ap1.datadoghq.com "https://api.ap2.datadoghq.com "https://api.datadoghq.eu "https://api.ddog-gov.com "https://api.us2.ddog-gov.com "https://api.datadoghq.com "https://api.us3.datadoghq.com "https://api.us5.datadoghq.com /api/v2/static-analysis/custom/rulesets/${ruleset_name}/rules/${rule_name}/revisions " \
-H "Accept: application/json" \
-H "DD-API-KEY: ${DD_API_KEY} " \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY} "
"""
List Custom Rule Revisions returns "Successful response" response
"""
from datadog_api_client import ApiClient , Configuration
from datadog_api_client.v2.api.static_analysis_api import StaticAnalysisApi
configuration = Configuration ()
configuration . unstable_operations [ "list_custom_rule_revisions" ] = True
with ApiClient ( configuration ) as api_client :
api_instance = StaticAnalysisApi ( api_client )
response = api_instance . list_custom_rule_revisions (
ruleset_name = "ruleset_name" ,
rule_name = "rule_name" ,
)
print ( response )
Instructions First install the library and its dependencies and then save the example to example.py and run following commands:
DD_SITE = "datadoghq.com us3.datadoghq.com us5.datadoghq.com datadoghq.eu ap1.datadoghq.com ap2.datadoghq.com ddog-gov.com us2.ddog-gov.com " DD_API_KEY = "<API-KEY>" DD_APP_KEY = "<APP-KEY>" python3 "example.py"
# List Custom Rule Revisions returns "Successful response" response
require "datadog_api_client"
DatadogAPIClient . configure do | config |
config . unstable_operations [ "v2.list_custom_rule_revisions" . to_sym ] = true
end
api_instance = DatadogAPIClient :: V2 :: StaticAnalysisAPI . new
p api_instance . list_custom_rule_revisions ( "ruleset_name" , "rule_name" )
Instructions First install the library and its dependencies and then save the example to example.rb and run following commands:
DD_SITE = "datadoghq.com us3.datadoghq.com us5.datadoghq.com datadoghq.eu ap1.datadoghq.com ap2.datadoghq.com ddog-gov.com us2.ddog-gov.com " DD_API_KEY = "<API-KEY>" DD_APP_KEY = "<APP-KEY>" rb "example.rb"
// List Custom Rule Revisions returns "Successful response" response
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
)
func main () {
ctx := datadog . NewDefaultContext ( context . Background ())
configuration := datadog . NewConfiguration ()
configuration . SetUnstableOperationEnabled ( "v2.ListCustomRuleRevisions" , true )
apiClient := datadog . NewAPIClient ( configuration )
api := datadogV2 . NewStaticAnalysisApi ( apiClient )
resp , r , err := api . ListCustomRuleRevisions ( ctx , "ruleset_name" , "rule_name" , * datadogV2 . NewListCustomRuleRevisionsOptionalParameters ())
if err != nil {
fmt . Fprintf ( os . Stderr , "Error when calling `StaticAnalysisApi.ListCustomRuleRevisions`: %v\n" , err )
fmt . Fprintf ( os . Stderr , "Full HTTP response: %v\n" , r )
}
responseContent , _ := json . MarshalIndent ( resp , "" , " " )
fmt . Fprintf ( os . Stdout , "Response from `StaticAnalysisApi.ListCustomRuleRevisions`:\n%s\n" , responseContent )
}
Instructions First install the library and its dependencies and then save the example to main.go and run following commands:
DD_SITE = "datadoghq.com us3.datadoghq.com us5.datadoghq.com datadoghq.eu ap1.datadoghq.com ap2.datadoghq.com ddog-gov.com us2.ddog-gov.com " DD_API_KEY = "<API-KEY>" DD_APP_KEY = "<APP-KEY>" go run "main.go"
// List Custom Rule Revisions returns "Successful response" response
import com.datadog.api.client.ApiClient ;
import com.datadog.api.client.ApiException ;
import com.datadog.api.client.v2.api.StaticAnalysisApi ;
import com.datadog.api.client.v2.model.CustomRuleRevisionsResponse ;
public class Example {
public static void main ( String [] args ) {
ApiClient defaultClient = ApiClient . getDefaultApiClient ();
defaultClient . setUnstableOperationEnabled ( "v2.listCustomRuleRevisions" , true );
StaticAnalysisApi apiInstance = new StaticAnalysisApi ( defaultClient );
try {
CustomRuleRevisionsResponse result =
apiInstance . listCustomRuleRevisions ( "ruleset_name" , "rule_name" );
System . out . println ( result );
} catch ( ApiException e ) {
System . err . println ( "Exception when calling StaticAnalysisApi#listCustomRuleRevisions" );
System . err . println ( "Status code: " + e . getCode ());
System . err . println ( "Reason: " + e . getResponseBody ());
System . err . println ( "Response headers: " + e . getResponseHeaders ());
e . printStackTrace ();
}
}
}
Instructions First install the library and its dependencies and then save the example to Example.java and run following commands:
DD_SITE = "datadoghq.com us3.datadoghq.com us5.datadoghq.com datadoghq.eu ap1.datadoghq.com ap2.datadoghq.com ddog-gov.com us2.ddog-gov.com " DD_API_KEY = "<API-KEY>" DD_APP_KEY = "<APP-KEY>" java "Example.java"
// List Custom Rule Revisions returns "Successful response" response
use datadog_api_client ::datadog ;
use datadog_api_client ::datadogV2 ::api_static_analysis ::ListCustomRuleRevisionsOptionalParams ;
use datadog_api_client ::datadogV2 ::api_static_analysis ::StaticAnalysisAPI ;
#[tokio::main]
async fn main () {
let mut configuration = datadog ::Configuration ::new ();
configuration . set_unstable_operation_enabled ( "v2.ListCustomRuleRevisions" , true );
let api = StaticAnalysisAPI ::with_config ( configuration );
let resp = api
. list_custom_rule_revisions (
"ruleset_name" . to_string (),
"rule_name" . to_string (),
ListCustomRuleRevisionsOptionalParams ::default (),
)
. await ;
if let Ok ( value ) = resp {
println! ( " {:#?} " , value );
} else {
println! ( " {:#?} " , resp . unwrap_err ());
}
}
Instructions First install the library and its dependencies and then save the example to src/main.rs and run following commands:
DD_SITE = "datadoghq.com us3.datadoghq.com us5.datadoghq.com datadoghq.eu ap1.datadoghq.com ap2.datadoghq.com ddog-gov.com us2.ddog-gov.com " DD_API_KEY = "<API-KEY>" DD_APP_KEY = "<APP-KEY>" cargo run
/**
* List Custom Rule Revisions returns "Successful response" response
*/
import { client , v2 } from "@datadog/datadog-api-client" ;
const configuration = client . createConfiguration ();
configuration . unstableOperations [ "v2.listCustomRuleRevisions" ] = true ;
const apiInstance = new v2 . StaticAnalysisApi ( configuration );
const params : v2.StaticAnalysisApiListCustomRuleRevisionsRequest = {
rulesetName : "ruleset_name" ,
ruleName : "rule_name" ,
};
apiInstance
. listCustomRuleRevisions ( params )
. then (( data : v2.CustomRuleRevisionsResponse ) => {
console . log (
"API called successfully. Returned data: " + JSON . stringify ( data )
);
})
. catch (( error : any ) => console . error ( error ));
Instructions First install the library and its dependencies and then save the example to example.ts and run following commands:
DD_SITE = "datadoghq.com us3.datadoghq.com us5.datadoghq.com datadoghq.eu ap1.datadoghq.com ap2.datadoghq.com ddog-gov.com us2.ddog-gov.com " DD_API_KEY = "<API-KEY>" DD_APP_KEY = "<APP-KEY>" tsc "example.ts"