> ## Documentation Index
> Fetch the complete documentation index at: https://bloodhound.specterops.io/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenGraph FAQ

> The following are common questions about OpenGraph

<img noZoom src="https://mintcdn.com/specterops/tTIczgde9H07oLXf/assets/enterprise-AND-community-edition-pill-tag.svg?fit=max&auto=format&n=tTIczgde9H07oLXf&q=85&s=ad49a576589f4d2a8081df77d07fdf56" alt="Applies to BloodHound Enterprise and CE" width="482" height="45" data-path="assets/enterprise-AND-community-edition-pill-tag.svg" />

<AccordionGroup>
  <Accordion title="Can I define my own icons in OpenGraph?">
    Yes you can!
    You can find all the details [here](/opengraph/custom-icons)
  </Accordion>

  <Accordion title="Can I delete data ingested via OpenGraph?">
    Yes you can!

    You can remove generic data by using one of the following three options:

    1. Cypher commands in the Explore UI

       Requires `enable_cypher_mutations: true` in config. For more info [click here](/manage-bloodhound/bh-config#enable-cypher-mutations)

    2. Admin UI → Database Management page

       The following checkboxes will be displayed:

       * All Data

       * Active Directory Data
         * HasSession edges

           Use the **HasSession edges** option when you need to refresh time-sensitive session data without deleting the rest of the collected graph.

           <Note>Manual **HasSession** edge deletion is generally only necessary in BloodHound Community. In BloodHound Enterprise, **HasSession** edges reconcile automatically by [retention](/collect-data/enterprise-collection/data-retention#data-retention) and only need manual deletion when you want an immediate session data refresh.</Note>

       * Azure Data

       * … X Data

         There will be 0 or more checkboxes here that allow you to delete any data that had been ingested with a `source_kind` provided.

       * Sourceless Data

         Checking this box will delete all entities that do not have a kind that can be found in the `source_kinds` table.  You can observe the `source_kinds` your BloodHound instance is currently aware of by calling `GET /api/v2/graphs/source_kinds`.

    3. API: [`/api/v2/clear-database`](/reference/database/delete-your-bloodhound-data)
  </Accordion>

  <Accordion title="Do custom nodes & edges work with Search and Pathfinding?">
    Yes! BloodHound supports **Search** and **Pathfinding** for [*structured*](/opengraph/extensions/manage#structured-graphs) graphs.

    For [*generic*](/opengraph/extensions/manage#generic-graphs) graphs, only **Search** is supported.

    <Note>
      All forms of OpenGraph data support Cypher querying in general.
    </Note>
  </Accordion>

  <Accordion title="How can I add my project to the OpenGraph library?">
    Have you built a cool project using OpenGraph and want it featured here? Already got your project in the list and need to update something? Open a ["Library Change" issue](https://github.com/SpecterOps/bloodhound-docs/issues) on the BloodHound Docs repo and we'll get it added for you!

    Submissions from the community will have a <Icon icon="people-group" color="#ffffff" /> icon next to them while those by SpecterOps employees will have a SpecterOps icon.
  </Accordion>

  <Accordion title="Why is it taking so long to ingest OpenGraph data?">
    Slow ingestion speeds are commonly seen when using a Neo4j graph database and are typically resolved by switching to a PostgreSQL backend. For full, officially supported OpenGraph functionality, use a PostgreSQL backend (see [Requirements](/opengraph/best-practices#requirements)).

    To switch to a PostgreSQL graph database, set `"graph_driver": "pg"` in your `bloodhound.config.json` file and restart the BloodHound services/containers. You will need to re-ingest any data into the new database.
  </Accordion>

  <Accordion title="Why do AD/AZ nodes disappear after I delete OpenGraph data?">
    The initial OpenGraph implementation introduced the `source_kind` metadata field to let you create a source and quickly apply it to all nodes in the payload. This preliminary process applies the `source_kind` to all nodes in the payload—whether you define or reference them—which can create unintended side-effects when building hybrid paths that connect OpenGraph nodes to Active Directory (AD) or Azure (AZ) nodes.

    If you reference AD/AZ nodes when defining an edge in an OpenGraph payload that uses this metadata field, the system inadvertently applies the `source_kind` to those non-OpenGraph nodes. If you delete this source and its OpenGraph data, then those AD/AZ nodes are also deleted.

    <Note>A more comprehensive solution is currently being designed to prevent this issue. The process described below is a workaround until the new design is implemented.</Note>

    **What this means:**

    When you delete OpenGraph data that references AD/AZ nodes with an OpenGraph `source_kind`, those AD/AZ nodes may also be deleted even though they are part of the core AD/AZ graph.

    **Recommended workaround:**

    Use a two-step upload process when building hybrid paths.

    * **First payload (isolated subgraph)**: Upload only your OpenGraph nodes and edges and set `source_kind` in `metadata`. Ensure that every node has at least one edge within this payload (for example, connect nodes to each other or to a root node and add a containment edge, such as `(:OGRoot)-[:OGContains]->(:YourNode)`). Do not link to AD/AZ objects in this payload.

    * **Second payload (linking AD/AZ nodes)**: Link the isolated subgraph's nodes to the AD/AZ nodes that connect your subgraph to existing AD/AZ entities. This avoids cross-source side effects when `source_kind` is present.
  </Accordion>
</AccordionGroup>
