# Enrichment API **Version:** 0.1.0 API for file enrichment services This documentation is automatically generated from the OpenAPI specification. --- ## Chatbot ### `POST /chatbot/stream` Stream chatbot responses Stream interactive chatbot responses for querying Nemesis data **Request Body:** `ChatbotRequest` (JSON) **Returns:** 200 on success --- ## Dpapi ### `POST /dpapi/credentials` Submit DPAPI credential for masterkey decryption Submit credential material to decrypt DPAPI master keys. Supports passwords, NTLM hashes, cred keys, domain backup keys, decrypted master keys, and Chromium app-bound-encryption keys. **Request Body:** `DpapiCredentialRequest` (JSON) **Returns:** 200 on success --- ## Enrichments ### `GET /enrichments` List enrichment modules Get a list of all available enrichment modules **Returns:** 200 on success --- ### `POST /enrichments/{enrichment_name}` Run enrichment module Run a specific enrichment module on a file **Parameters:** - `enrichment_name` (string, **required**): Name of the enrichment module to run **Request Body:** `EnrichmentRequest` (JSON) **Returns:** 200 on success --- ### `POST /enrichments/{enrichment_name}/bulk` Start bulk enrichment Start bulk enrichment for a specific module against all files in the system using distributed processing **Parameters:** - `enrichment_name` (string, **required**): Name of the enrichment module to run **Returns:** 200 on success --- ### `GET /enrichments/{enrichment_name}/bulk/status` Get bulk enrichment status Bulk enrichment status tracking has been simplified **Parameters:** - `enrichment_name` (string, **required**): Name of the enrichment module to check status for **Returns:** 200 on success --- ### `POST /enrichments/{enrichment_name}/bulk/stop` Stop bulk enrichment Bulk enrichment cannot be stopped once tasks are published **Parameters:** - `enrichment_name` (string, **required**): Name of the enrichment module to stop **Returns:** 200 on success --- ## Files ### `POST /containers` Submit large container file for processing with optional filtering ... **Request Body:** See OpenAPI spec for details **Returns:** 200 on success --- ### `GET /containers/{container_id}/status` Get container processing status Get the current processing status and progress of a submitted container **Parameters:** - `container_id` (string, **required**): Unique identifier of the container **Returns:** 200 on success --- ### `POST /files` Upload file with metadata Upload a file using multipart/form-data with metadata. Returns an object_id for the uploaded file and submission_id for the metadata submission. Example: ``` curl -k -u n:n -F "file=@example.txt" -F 'metadata={"agent_id":"agent123","project":"proj1","timestamp":"2024-01-29T12:00:00Z","expiration":"2024-02-29T12:00:00Z","path":"/tmp/example.txt"}' https://nemesis:7443/api/files ``` Example: ``` curl -k -u n:n -F "file=@example.txt" -F 'metadata={"agent_id":"agent123","project":"proj1","path":"/tmp/example.txt"}' https://nemesis:7443/api/files ``` **Request Body:** See OpenAPI spec for details **Returns:** 200 on success --- ### `GET /files/{object_id}` Download a file Download a file by its object ID with optional raw format and custom filename **Parameters:** - `object_id` (string, **required**): Unique identifier of the file to download - `raw` (boolean, optional): Whether to return the file in raw format - `name` (string, optional): Custom filename for the downloaded file - `offset` (integer, optional): Byte offset to start reading from - `length` (integer, optional): Number of bytes to read (0 = entire file) **Returns:** 200 on success --- ## Queues ### `GET /queues` Get queue statistics Get comprehensive queue metrics for all workflow topics **Returns:** 200 on success --- ### `GET /queues/{queue_name}` Get single queue statistics Get metrics for a specific queue topic **Parameters:** - `queue_name` (string, **required**): Name of the queue to get metrics for **Returns:** 200 on success --- ## Reports ### `GET /reports/source` Get source report Get detailed report for a specific source. Use query parameter to support sources with special characters (e.g., URLs) **Parameters:** - `source` (string, **required**): Source name (supports URLs and special characters, case-insensitive) - `start_date` (unknown, optional): Filter by start date - `end_date` (unknown, optional): Filter by end date **Returns:** 200 on success --- ### `POST /reports/source/pdf` Download source report as PDF Generate and download a PDF report for a specific source. POST allows including pre-generated AI synthesis. **Parameters:** - `source` (string, **required**): Source name (supports URLs and special characters, case-insensitive) - `start_date` (unknown, optional): Filter by start date - `end_date` (unknown, optional): Filter by end date **Request Body:** See OpenAPI spec for details **Returns:** 200 on success --- ### `POST /reports/source/synthesize` Generate LLM synthesis for source report Generate AI-based risk assessment synthesis for a specific source. NOT CACHED - regenerated each time. **Parameters:** - `source` (string, **required**): Source name (supports URLs and special characters, case-insensitive) - `include_findings_details` (boolean, optional): Include detailed findings in the analysis - `max_tokens` (integer, optional): Maximum tokens for LLM analysis **Returns:** 200 on success --- ### `GET /reports/sources` List all sources Get a list of all sources with summary statistics **Parameters:** - `project` (unknown, optional): Filter by project name - `start_date` (unknown, optional): Filter by start date - `end_date` (unknown, optional): Filter by end date **Returns:** 200 on success --- ### `GET /reports/system` Get system-wide report Get system-wide statistics and findings across all sources **Parameters:** - `start_date` (unknown, optional): Filter by start date - `end_date` (unknown, optional): Filter by end date - `project` (unknown, optional): Filter by project name **Returns:** 200 on success --- ### `GET /reports/system/pdf` Download system-wide report as PDF Generate and download a PDF report for the entire system **Parameters:** - `start_date` (unknown, optional): Filter by start date - `end_date` (unknown, optional): Filter by end date - `project` (unknown, optional): Filter by project name **Returns:** 200 on success --- ### `POST /reports/system/synthesize` Generate LLM synthesis for system report Generate AI-based risk assessment synthesis for the entire system. NOT CACHED - regenerated each time. **Parameters:** - `max_tokens` (integer, optional): Maximum tokens for LLM analysis - `start_date` (unknown, optional): Filter by start date - `end_date` (unknown, optional): Filter by end date - `project` (unknown, optional): Filter by project name **Returns:** 200 on success --- ## System ### `GET /agents` Get available agents Get a list of available AI agents with their metadata and capabilities **Returns:** 200 on success --- ### `POST /agents/dotnet_analysis` Run .NET assembly analysis Trigger .NET assembly analysis in background (non-blocking) **Request Body:** JSON object **Returns:** 200 on success --- ### `POST /agents/llm_credential_analysis` Run credential analysis Trigger credential analysis in background (non-blocking) **Request Body:** JSON object **Returns:** 200 on success --- ### `GET /agents/spend-data` Get LLM spend and usage data Get total spend and token usage statistics from LiteLLM logs **Returns:** 200 on success --- ### `POST /agents/text_summarizer` Run text summarization Trigger text summarization in background (non-blocking) **Request Body:** JSON object **Returns:** 200 on success --- ### `POST /agents/translate` Run text translation Trigger text translation in background (non-blocking) **Request Body:** JSON object **Returns:** 200 on success --- ### `GET /system/apprise-info` Get Apprise alert information Get information about configured alert channels (currently Slack only) **Returns:** 200 on success --- ### `GET /system/available-services` Get available services Query Traefik to determine which optional services are currently available **Returns:** 200 on success --- ### `POST /system/cleanup` Trigger database and datalake cleanup Trigger the housekeeping service to clean up expired files and database entries, and reset the workflow manager state. Optionally specify an expiration date or 'all' to remove all files. **Request Body:** `CleanupRequest` (JSON) **Returns:** 200 on success --- ### `GET /system/container-monitor/status` Container monitor status Get the status of the container file monitor **Returns:** 200 on success --- ### `GET /system/health` Health check Health check endpoint for Docker healthcheck **Returns:** 200 on success --- ### `GET /system/info` API information Root endpoint that shows API information **Returns:** 200 on success --- ### `POST /system/yara/reload` Reload Yara rules Trigger a reload of all Yara rules in the backend across all workers/replicas **Returns:** 200 on success --- ## Workflows ### `GET /workflows/failed` Get failed workflows Get the set of failed enrichment workflows **Returns:** 200 on success --- ### `GET /workflows/status` Get workflow enrichment workflow status Get the current status of the enrichment workflow system **Returns:** 200 on success ---