Skip to content

API Reference

import { Aside } from ‘@astrojs/starlight/components’;

The Bastion backend exposes a REST API on port 8080. All endpoints require a valid JWT Authorization: Bearer <token> header except /api/v1/auth/login.

POST /api/v1/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "your-password"
}

Response:

{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 3600
}

Use the access_token as a Bearer header on all subsequent requests.

GroupPrefixDescription
Auth/api/v1/authLogin, logout, register, refresh, change password
SAML SSO/api/v1/auth/samlMetadata, login, ACS, SLS
Users/api/v1/usersCurrent user, user list
Endpoints/api/v1/endpointsFleet management, isolation, quarantine
Threats/api/v1/threatsThreat list, details, resolve
Policies/api/v1/policiesSecurity policy CRUD
Incidents/api/v1/incidentsCorrelated incident management
IOCs/api/v1/iocsIOC management and threat intelligence feeds
Behavioral/api/v1/behavioralBehavioral profiles and anomalies
Compliance/api/v1/complianceHIPAA + FERPA dashboards, breach notification
Notifications/api/v1/notificationsAlert rule CRUD, test notifications
Audit/api/v1/auditAudit log query, export, integrity verify
Response/api/v1/responsePlaybooks, commands, retry queue
Integrations/api/v1/integrationsSIEM test, network events
MITRE/api/v1/mitreATT&CK navigator export, coverage report
Security Admin/api/v1/admin/securityUser roles, token revocation
Encryption/api/v1/security/encryptionPHI encryption status and audit
License/api/v1/licenseLicense status, activation, upgrade
Updates/api/v1/updatesAgent update campaign management
GET /api/v1/endpoints
Authorization: Bearer <token>
POST /api/v1/endpoints/{endpoint_id}/isolate
Authorization: Bearer <token>
GET /api/v1/threats?severity=high&status=open
Authorization: Bearer <token>
GET /api/v1/compliance/hipaa/dashboard
Authorization: Bearer <token>
GET /api/v1/compliance/ferpa/pii-timeline?from=2025-01-01&to=2025-03-31
Authorization: Bearer <token>
GET /api/v1/license/status
Authorization: Bearer <token>
POST /api/v1/license/activate
Authorization: Bearer <token>
Content-Type: application/json
{
"license_key": "eyJ..."
}

List endpoints support cursor-based pagination:

GET /api/v1/threats?limit=50&offset=0

Response includes total, limit, and offset fields.

All errors return a consistent JSON body:

{
"error": "Not found",
"message": "Endpoint with ID abc-123 does not exist",
"status": 404
}

Common status codes:

CodeMeaning
401Missing or invalid token
403Insufficient role/permissions
402License limit exceeded or expired
429Rate limit exceeded
500Internal server error (check backend logs)