- Create a properly structured OpenGraph JSON file and upload it to BloodHound
- Define custom icons and colors for your node types to enhance visualization
- Validate the data using search and Cypher queries in the Explore page
- Remove the example data in the Administration > Database Management page when finished
Create example data
This example defines twoPerson connected by a Knows to demonstrate the structure of an OpenGraph payload.
You can expand on this example to create more complex graphs with additional nodes, edges, and properties as needed.
1
Create a new JSON file
First, you need to define your OpenGraph payload in a JSON file.
-
Create a new file called
opengraph-example.jsonusing a plain text editor (UTF-8 encoding). -
Copy and paste the following example, which includes two nodes (
bobandalice) connected by an edge (Knows).The following table describes the structure and properties of the example JSON file:DELETE ME:Section Property Description metadata source_kindOptional property that identifies the type of data (e.g., “Person”) in the Database Management page for easy clean up later graph.nodes idUnique identifier for the node kindsArray of node types (first is your custom type, “Base” is required) propertiesObject containing node properties (e.g., name,displayname,objectid, and custom properties)graph.edges kindThe edge type name (e.g., “Knows”) startSource node reference that must match a node ID in the nodes section endTarget node reference that must match a node ID in the nodes section Basekind is required for simple search to work; is that expected?
2
Save the file
Save the
opengraph-example.json file to a location you can easily access for uploading in the next step.3
Upload the JSON file
Use the BloodHound web interface to upload the
opengraph-example.json file directly through the browser.- Log in to your BloodHound instance.
- In the left menu, click Quick Upload.
-
Click the Upload Files screen to open a file system dialog or drag and drop the
opengraph-example.jsonfile. - Click Upload and wait for the upload to complete. You should see a confirmation message indicating the file was successfully ingested.
Customize nodes
To enhance the visualization of the node types on the graph and in the Entity panel, you can define custom icons and colors.This is done separately from the OpenGraph data payload and must be uploaded through the BloodHound API.
1
Prepare your custom type definition
This example creates a custom definition for the The following table describes the properties in the custom type definition:
Person node type defined in the example JSON file. It specifies that the Person node type should display with a user icon and red color.The custom type definition is a JSON object with the following structure:| Property | Description |
|---|---|
custom_types | Object containing custom type definitions, where each key is a node type and the value defines the visualization properties for that type |
icon.type | Font Awesome is the icon library used for custom icons |
icon.name | Font Awesome icon name (without “fa-” prefix) |
icon.color | Hex color code (#RGB or #RRGGBB format) |
2
Run a POST request
Use a After running this request, any nodes of type
POST request to the BloodHound API to upload your custom type definition.Here’s an example request body for a Person node type with a user icon and red color:Person in your graph display with the specified icon and color.Validate example data
After uploading the OpenGraph example data and custom node icons/colors, it’s important to validate that BloodHound ingested everything correctly and displays it as expected.1
Open the Explore page
Log in to your BloodHound instance and navigate to the Explore page.
2
Search for nodes and edges
Use the Search features to find the example nodes and edges, and verify that properties and custom icons/colors are displayed correctly.
- Search
- Cypher
To find nodes by display name or object ID:
- Click the Search tab.
-
In the search field, enter
boboralice. - Select the node from the suggested search results.
-
Click the node on the graph to view its properties in the Entity panel.
Expected results:
-
Suggested search results include the Bob and Alice
Personnodes - Node properties and custom icons/colors display in the Entity panel
-
Custom node icons and colors do not display on the graph for Bob and Alice nodes
Custom icons/colors render on the graph for Cypher search only.

-
Suggested search results include the Bob and Alice
Delete example data
After you’ve finished testing, you should clean up your example data by deleting the example OpenGraph payload.1
Delete example data
Use the BloodHound web interface to delete nodes by
source_kind.- Log in to your BloodHound instance.
- In the left menu, click Administration > Database Management.
-
Under All graph data, check the Person data checkbox.
The name of the checkbox is based on the value of the
source_kindproperty in the metadata section of the example JSON file. - Click Delete and confirm the deletion.
2
Verify deletion
Run the following Cypher query to confirm the example OpenGraph data is gone:You should see a
No results match your criteria message confirming that the nodes have been deleted.Troubleshooting
This section provides solutions to common issues you may encounter when testing your OpenGraph data.Upload fails
Upload fails
- Validate your JSON using JSONLint
- Ensure all required sections are present
- Verify all node IDs are unique
- Check that node IDs referenced in edges match the node IDs in the nodes section exactly
Nodes don't appear in search
Nodes don't appear in search
- Ensure you correctly used the node ID values in search
- Verify the upload completed successfully without errors
- Check the BloodHound logs for any ingest errors
Custom icons not displaying
Custom icons not displaying
- Verify the icon name is correct and does not include a prefix, such as
fa-(see FontAwesome to confirm available icons) - Ensure the color is in valid HEX format (#RGB or #RRGGBB)
- Run a
GETrequest toapi/v2/graphs/custom_nodesto confirm your BloodHound instance contains the custom type definition you want to use
Edge not found in Cypher query
Edge not found in Cypher query
- Verify the edge
kindname is spelled correctly and matches your JSON file - Ensure the node IDs in the
startandendreferences match your node IDs exactly - Check that both referenced nodes were created successfully
Next steps
After you’re comfortable with this process, consider:- Creating more complex node types with additional properties
- Testing multiple edge types between different node kinds
- Reading the OpenGraph Schema documentation for advanced configurations
- Reviewing OpenGraph Best Practices before deploying production data

