Repository navigation
10 API Reference
El backend de Blackwire es una aplicación FastAPI. La lógica REST está organizada por dominio: hay un router (APIRouter) por feature en backend/routes/, y main.py los registra a todos.
Esta API la consume la app de escritorio nativa (PySide6/Qt) sobre REST (
http://127.0.0.1:5000) + WebSocket (ws://127.0.0.1:5000/ws), y también el servidor MCP (blackwire-mcp) que la expone a agentes de IA. Ya no existe un frontend web.
La forma más fiable de explorar la API completa es la documentación interactiva Swagger, disponible mientras el backend corre:
http://localhost:5000/docs
Esta página documenta las rutas más usadas, agrupadas por router. Los nombres y prefijos coinciden con el código fuente en backend/routes/.
Router (backend/routes/) |
Prefijo de rutas | Dominio |
|---|---|---|
projects.py |
/api/projects |
Gestión de proyectos (CRUD, selección) |
export_import.py |
/api/projects/{name}/export…, /api/projects/import
|
Export/Import Blackwire y Burp |
proxy.py |
/api/proxy, /api/shutdown, /api/browser
|
Control del proxy y del servidor |
intercept.py |
/api/intercept, /api/intercept_response
|
Interceptación de requests/responses |
requests.py / search.py
|
/api/requests, /api/v2/requests, /api/filter-presets
|
Historial HTTP, búsqueda HTTPQL, presets |
scope.py |
/api/scope |
Reglas de scope |
repeater.py |
/api/repeater |
Repeater |
collections.py |
/api/collections |
Colecciones y ejecución por pasos |
intruder.py |
/api/intruder |
Ataques de Intruder |
session.py |
/api/session |
Macros y session rules |
chepy.py |
/api/chepy |
Operaciones del Cipher (Chepy) |
websocket.py |
/api/websocket |
Conexiones y frames WebSocket |
git.py |
/api/git |
Snapshots Git del proyecto |
extensions.py |
/api/extensions |
Sistema de extensiones |
webhook.py |
/api/webhooksite |
Integración con webhook.site |
bypass.py |
/api/bypass |
Reglas de bypass de scope |
rendering.py |
/api/requests/{id}/render… |
Render/replay de respuestas |
internal.py |
/api/internal |
Endpoints internos (los llama el addon mitmproxy) |
Listar todos los proyectos.
Response:
{
"projects": [
{
"name": "my-project",
"description": "Test project",
"created_at": "2024-01-01T00:00:00"
}
]
}Crear nuevo proyecto.
Request:
{
"name": "my-project",
"description": "Test project"
}Obtener el proyecto activo.
Cambiar el proyecto activo.
Actualizar metadatos del proyecto.
Eliminar proyecto (borra su carpeta y base de datos).
Cada proyecto vive en
projects/{name}/con suconfig.jsony su base de datos SQLiteblackwire.db.
Exportar el proyecto en formato Blackwire (JSON). La respuesta es streaming: el JSON se serializa fila por fila, por lo que la memoria se mantiene plana sin importar el tamaño del historial.
Exportar como Burp Suite XML.
Importar datos en formato Blackwire dentro de un proyecto existente.
Importar desde Burp Suite XML.
Crear un proyecto nuevo a partir de un archivo de export Blackwire.
Obtener el estado del proxy.
Response:
{
"running": true,
"port": 8080,
"mode": "regular"
}Iniciar el proxy.
Parámetros (query):
-
port- Puerto de escucha (default: 8080) -
mode-regular,upstream,socks5,reverse,transparent -
extra- Flags adicionales para mitmproxy (los flags peligrosos se filtran)
Detener el proxy.
Lanzar un navegador preconfigurado contra el proxy.
Apagar el backend.
Estado de la interceptación.
Activar/desactivar la interceptación de requests.
Listar requests pausados a la espera de decisión.
Reenviar (con posibles modificaciones) un request pausado.
Descartar un request pausado.
Reenviar todos los requests pendientes.
Descartar todos los requests pendientes.
Activar/desactivar la interceptación de responses.
Listar responses pausadas.
Reenviar una response pausada.
Descartar una response pausada.
También existen
/api/intercept_response/forward-ally/drop-all.
No existe
/api/history. El historial vive en/api/requestsy la búsqueda HTTPQL enPOST /api/requests/search.
Obtener el historial HTTP.
Parámetros (query):
-
limit- Máximo de resultados (default: 10000) -
saved_only- Solo requests marcados como guardados -
in_scope_only- Solo requests dentro de scope -
search- Filtro simple por substring de URL
Response: lista de items resumidos del historial.
Detalle completo de un request (headers, body, response).
Búsqueda con HTTPQL. La app de escritorio envía el AST de la query ya parseado.
Request:
{
"ast": { "...": "AST de HTTPQL" },
"saved_only": false,
"in_scope_only": false,
"page": 1,
"page_size": 500
}Response:
{
"requests": [ "..." ],
"total": 1234,
"page": 1,
"page_size": 500,
"total_pages": 3
}Marcar/desmarcar un request como guardado.
Eliminar un request.
Vaciar el historial.
GET /api/v2/requests/{rid}/detailGET /api/v2/requests/{rid}/bodyGET /api/v2/requests/{rid}/response-bodyGET /api/v2/requests/{rid}/sizes
GET /api/filter-presetsPOST /api/filter-presetsDELETE /api/filter-presets/{preset_id}
Obtener configuración y reglas de scope.
Crear una regla de scope.
Actualizar una regla.
Eliminar una regla.
Obtener todos los requests guardados del repeater (incluye su history, el timeline de respuestas, que persiste entre reinicios).
Guardar un request del repeater.
Actualizar un request guardado (nombre, datos del request, timeline).
Eliminar un request del repeater.
Enviar un request en crudo y obtener la response (con manejo opcional de redirects).
Listar colecciones.
Crear colección.
Actualizar colección.
Eliminar colección.
Obtener los pasos de una colección.
Agregar un paso.
Actualizar un paso.
Eliminar un paso.
Ejecutar un paso, extrayendo variables (JSONPath) de la response.
-
GET /api/intruder/attacks- Listar ataques guardados. -
POST /api/intruder/attacks- Crear un ataque. -
GET /api/intruder/attacks/{aid}- Detalle de un ataque. -
PUT /api/intruder/attacks/{aid}- Actualizar. -
DELETE /api/intruder/attacks/{aid}- Eliminar.
Macros:
GET /api/session/macrosPOST /api/session/macrosPUT /api/session/macros/{macro_id}DELETE /api/session/macros/{macro_id}POST /api/session/macros/{macro_id}/execute
Session Rules:
GET /api/session/rulesPOST /api/session/rulesPUT /api/session/rules/{rule_id}DELETE /api/session/rules/{rule_id}
Listar las operaciones disponibles del encoder/decoder.
Ejecutar una receta (lista encadenable de operaciones) sobre un input.
Listar las conexiones WebSocket capturadas.
Listar frames (filtrables por conexión).
Reenviar un frame (posiblemente editado).
Crear un snapshot Git del estado del proyecto.
Listar el historial de commits.
Obtener la metadata de todas las extensiones.
Actualizar la configuración de una extensión.
El endpoint legacy
GET /api/extensions/{name}/ui.js(UI dinámica.ui.jsxcompilada) fue retirado en v2.0.0 junto con el frontend web. Las extensiones ahora son solo Schema-Driven: la app de escritorio renderiza su formulario desdeEXTENSION_META["ui_schema"].
-
POST /api/webhooksite/apikey- Configurar API key. -
POST /api/webhooksite/token- Crear/registrar token. -
POST /api/webhooksite/refresh- Refrescar requests recibidos. -
GET /api/webhooksite/requests- Listar requests capturados. -
DELETE /api/webhooksite/requests- Limpiar requests.
Uso interno. Los invoca el addon de mitmproxy (
mitm_addon.py), no la app de escritorio.
-
POST /api/internal/request- El addon registra un request/response capturado. -
POST /api/internal/intercept- El addon consulta/aplica decisiones de interceptación.