Documentation Index
Fetch the complete documentation index at: https://specterops-feat-poc-api-playground.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Schema
In this section, you will find all the information to create a JSON file that BloodHound can ingest and use to display your Nodes and Edges. The most up-to-date JSON Schema can always be found in our CE repository. Currently, the location of the node and edge schema files in our source code can be found here.Ingesting Generic Formatted Data
File Requirements
Acceptable formats:.json, .zip
You can mix file types in a single upload (e.g. Sharphound + Generic).
Compressed ZIPs containing multiple file types are supported.
JSON Format
The standard BloodHound UI upload screen now accepts files in a generic format. You can continue using it as before. At minimum, your JSON file should have these elements:nodes and edges must conform to our JSON Schema, see details below. The validation of the data occurs at upload time.
When ingest completes, the generic data will be available via Cypher search ONLY. Generic data is not searchable via the pathfinding feature (yet).
Entity Panels: clicking on a generic node or edge will only render the entity’s property bag. At this time there is no support for defining entity panels for generic entities.
Nodes
Property Rules
Properties must be primitive types or arrays of primitive types Nested objects and arrays of objects are not allowed Arrays must be homogeneous (e.g. all strings or all numbers) An array of kind labels for the node. The first element is treated as the node’s primary kind and is used to determine which icon to display in the graph UI. This primary kind is only used for visual representation and has no semantic significance for data processing.Node JSON
Edges
Edges names cannot contain dash-. It is highly recommended to use Pascal Case and no special characters.
From tuple.nl: Pascal Case is a naming convention used in programming where compound words are written without spaces, and each word starts with an uppercase letter. It is commonly used for naming variables, functions, classes, and other identifiers in code. Pascal Case helps create descriptive and easily distinguishable names, contributing to the clarity of your code.
See Neo4j Naming and Conventions for more details.
Edge JSON
Optional Metadata Field
You can optionally include a metadata object at the top level of your JSON payload. This metadata currently supports a single field:source_kind: a string that applies to all nodes in the file, used to attribute a source to ingested nodes (e.g. Github, Snowflake, MSSQL). This is useful for tracking where a node originated. We internally use this concept already for AD/Azure, using the labels “Base” and “AZBase” respectively.
source_kind will be added to the kinds list of all nodes in the file during ingest. This feature is optional.
Minimal Working JSON
The following is the most simple JSON file we could come up with. You can use it as a starting point to build your own Open Graph.Run:
