curl --request PUT \
--url https://your-tenant.bloodhoundenterprise.io/api/v2/extensions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"schema": {
"name": "OpenGraph_Extension",
"display_name": "OpenGraph Extension",
"version": "v1.0.0",
"namespace": "OGE"
},
"node_kinds": [
{
"name": "OGE_Node_Kind_1",
"display_name": "Node Kind 1",
"description": "A generic node kind",
"is_display_kind": true,
"icon": "computer",
"color": "#FF0000"
},
{
"name": "OGE_Node_Kind_2",
"display_name": "Node Kind 2",
"description": "A secondary generic node kind",
"is_display_kind": false
},
{
"name": "OGE_Environment_Kind",
"display_name": "Environment",
"description": "A generic environment kind",
"icon": "sitemap",
"color": "#00FF00",
"is_display_kind": true
}
],
"relationship_kinds": [
{
"name": "OGE_ConnectedTo",
"description": "A generic relationship kind",
"is_traversable": true
}
],
"environments": [
{
"environment_kind": "OGE_Environment_Kind",
"source_kind": "OGExtension",
"principal_kinds": [
"OGE_Node_Kind_1",
"OGE_Node_Kind_2"
]
}
],
"relationship_findings": [
{
"name": "OGE_Finding_1",
"display_name": "Finding 1",
"relationship_kind": "OGE_ConnectedTo",
"environment_kind": "OGE_Environment_Kind",
"remediation": {
"short_description": "a remediation",
"long_description": "a remediation to fix Finding 1",
"short_remediation": "Do X",
"long_remediation": "Do X to fix Finding 1"
}
}
]
}
'{
"http_status": 400,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "The JSON payload could not be unmarshalled."
}
]
}Experimental - Upserts the OpenGraph extension
curl --request PUT \
--url https://your-tenant.bloodhoundenterprise.io/api/v2/extensions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"schema": {
"name": "OpenGraph_Extension",
"display_name": "OpenGraph Extension",
"version": "v1.0.0",
"namespace": "OGE"
},
"node_kinds": [
{
"name": "OGE_Node_Kind_1",
"display_name": "Node Kind 1",
"description": "A generic node kind",
"is_display_kind": true,
"icon": "computer",
"color": "#FF0000"
},
{
"name": "OGE_Node_Kind_2",
"display_name": "Node Kind 2",
"description": "A secondary generic node kind",
"is_display_kind": false
},
{
"name": "OGE_Environment_Kind",
"display_name": "Environment",
"description": "A generic environment kind",
"icon": "sitemap",
"color": "#00FF00",
"is_display_kind": true
}
],
"relationship_kinds": [
{
"name": "OGE_ConnectedTo",
"description": "A generic relationship kind",
"is_traversable": true
}
],
"environments": [
{
"environment_kind": "OGE_Environment_Kind",
"source_kind": "OGExtension",
"principal_kinds": [
"OGE_Node_Kind_1",
"OGE_Node_Kind_2"
]
}
],
"relationship_findings": [
{
"name": "OGE_Finding_1",
"display_name": "Finding 1",
"relationship_kind": "OGE_ConnectedTo",
"environment_kind": "OGE_Environment_Kind",
"remediation": {
"short_description": "a remediation",
"long_description": "a remediation to fix Finding 1",
"short_remediation": "Do X",
"long_remediation": "Do X to fix Finding 1"
}
}
]
}
'{
"http_status": 400,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "The JSON payload could not be unmarshalled."
}
]
}Authorization: Bearer $JWT_TOKEN
OK