openapi: '3.0.3' info: title: 'ATT&CK Workbench REST API' version: '1.0.0' servers: - url: '{protocol}://{hostname}:{port}/' variables: protocol: default: 'http' hostname: default: 'localhost' port: default: '3000' tags: - name: 'ATT&CK Objects' description: 'Operations on all ATT&CK objects' - name: 'Techniques' description: 'Operations on techniques' - name: 'Tactics' description: 'Operations on tactics' - name: 'Groups' description: 'Operations on groups' - name: 'Campaigns' description: 'Operations on campaigns' - name: 'Software' description: 'Operations on software (tools and malware)' - name: 'Mitigations' description: 'Operations on mitigations' - name: 'Matrices' description: 'Operations on matrices' - name: 'Identities' description: 'Operations on identities' - name: 'Marking Definitions' description: 'Operations on marking definitions' - name: 'Data Sources' description: 'Operations on data sources' - name: 'Analytics' description: 'Operations on analytics' - name: 'Detection Strategies' description: 'Operations on detection strategies' - name: 'Data Components' description: 'Operations on data components' - name: 'Assets' description: 'Operations on assets' - name: 'Relationships' description: 'Operations on relationships' - name: 'Notes' description: 'Operations on notes' - name: 'References' description: 'Operations on references' - name: 'Collection Indexes' description: 'Operations on collection indexes' - name: 'Collections' description: 'Operations on collections' - name: 'Collection Bundles' description: 'Operations on collection bundles' - name: 'STIX Bundles' description: 'Operations on STIX bundles' - name: 'System Configuration' description: 'Operations on the system configuration' - name: 'Session Management' description: 'Operations on the current session' - name: 'Authentication' description: 'Operations for authenticating with the REST API' - name: 'User Accounts' description: 'Operations on user accounts' - name: 'Health Check' description: 'Operations on system status' paths: # ATT&CK Objects /api/attack-objects: $ref: 'paths/attack-objects-paths.yml#/paths/~1api~1attack-objects' # Find objects with missing LinkById tags /api/attack-objects/missing-linkbyid: $ref: 'paths/attack-objects-paths.yml#/paths/~1api~1attack-objects~1missing-linkbyid' # Generate next available ATT&CK ID /api/attack-objects/attack-id/next: $ref: 'paths/attack-objects-paths.yml#/paths/~1api~1attack-objects~1attack-id~1next' # Techniques /api/techniques: $ref: 'paths/techniques-paths.yml#/paths/~1api~1techniques' /api/techniques/{stixId}: $ref: 'paths/techniques-paths.yml#/paths/~1api~1techniques~1{stixId}' /api/techniques/{stixId}/modified/{modified}: $ref: 'paths/techniques-paths.yml#/paths/~1api~1techniques~1{stixId}~1modified~1{modified}' /api/techniques/{stixId}/modified/{modified}/tactics: $ref: 'paths/techniques-paths.yml#/paths/~1api~1techniques~1{stixId}~1modified~1{modified}~1tactics' # Tactics /api/tactics: $ref: 'paths/tactics-paths.yml#/paths/~1api~1tactics' /api/tactics/{stixId}: $ref: 'paths/tactics-paths.yml#/paths/~1api~1tactics~1{stixId}' /api/tactics/{stixId}/modified/{modified}: $ref: 'paths/tactics-paths.yml#/paths/~1api~1tactics~1{stixId}~1modified~1{modified}' /api/tactics/{stixId}/modified/{modified}/techniques: $ref: 'paths/tactics-paths.yml#/paths/~1api~1tactics~1{stixId}~1modified~1{modified}~1techniques' # Groups /api/groups: $ref: 'paths/groups-paths.yml#/paths/~1api~1groups' /api/groups/{stixId}: $ref: 'paths/groups-paths.yml#/paths/~1api~1groups~1{stixId}' /api/groups/{stixId}/modified/{modified}: $ref: 'paths/groups-paths.yml#/paths/~1api~1groups~1{stixId}~1modified~1{modified}' # Campaigns /api/campaigns: $ref: 'paths/campaigns-paths.yml#/paths/~1api~1campaigns' /api/campaigns/{stixId}: $ref: 'paths/campaigns-paths.yml#/paths/~1api~1campaigns~1{stixId}' /api/campaigns/{stixId}/modified/{modified}: $ref: 'paths/campaigns-paths.yml#/paths/~1api~1campaigns~1{stixId}~1modified~1{modified}' # Matrices /api/matrices: $ref: 'paths/matrices-paths.yml#/paths/~1api~1matrices' /api/matrices/{stixId}: $ref: 'paths/matrices-paths.yml#/paths/~1api~1matrices~1{stixId}' /api/matrices/{stixId}/modified/{modified}: $ref: 'paths/matrices-paths.yml#/paths/~1api~1matrices~1{stixId}~1modified~1{modified}' /api/matrices/{stixId}/modified/{modified}/techniques: $ref: 'paths/matrices-paths.yml#/paths/~1api~1matrices~1{stixId}~1modified~1{modified}~1techniques' # Identities /api/identities: $ref: 'paths/identities-paths.yml#/paths/~1api~1identities' /api/identities/{stixId}: $ref: 'paths/identities-paths.yml#/paths/~1api~1identities~1{stixId}' /api/identities/{stixId}/modified/{modified}: $ref: 'paths/identities-paths.yml#/paths/~1api~1identities~1{stixId}~1modified~1{modified}' # Marking Definitions /api/marking-definitions: $ref: 'paths/marking-definitions-paths.yml#/paths/~1api~1marking-definitions' /api/marking-definitions/{stixId}: $ref: 'paths/marking-definitions-paths.yml#/paths/~1api~1marking-definitions~1{stixId}' # Software /api/software: $ref: 'paths/software-paths.yml#/paths/~1api~1software' /api/software/{stixId}: $ref: 'paths/software-paths.yml#/paths/~1api~1software~1{stixId}' /api/software/{stixId}/modified/{modified}: $ref: 'paths/software-paths.yml#/paths/~1api~1software~1{stixId}~1modified~1{modified}' # Mitigations /api/mitigations: $ref: 'paths/mitigations-paths.yml#/paths/~1api~1mitigations' /api/mitigations/{stixId}: $ref: 'paths/mitigations-paths.yml#/paths/~1api~1mitigations~1{stixId}' /api/mitigations/{stixId}/modified/{modified}: $ref: 'paths/mitigations-paths.yml#/paths/~1api~1mitigations~1{stixId}~1modified~1{modified}' # Data Sources /api/data-sources: $ref: 'paths/data-sources-paths.yml#/paths/~1api~1data-sources' /api/data-sources/{stixId}: $ref: 'paths/data-sources-paths.yml#/paths/~1api~1data-sources~1{stixId}' /api/data-sources/{stixId}/modified/{modified}: $ref: 'paths/data-sources-paths.yml#/paths/~1api~1data-sources~1{stixId}~1modified~1{modified}' # Analytics /api/analytics: $ref: 'paths/analytics-paths.yml#/paths/~1api~1analytics' /api/analytics/{stixId}: $ref: 'paths/analytics-paths.yml#/paths/~1api~1analytics~1{stixId}' /api/analytics/{stixId}/modified/{modified}: $ref: 'paths/analytics-paths.yml#/paths/~1api~1analytics~1{stixId}~1modified~1{modified}' # Detection Strategies /api/detection-strategies: $ref: 'paths/detection-strategies-paths.yml#/paths/~1api~1detection-strategies' /api/detection-strategies/{stixId}: $ref: 'paths/detection-strategies-paths.yml#/paths/~1api~1detection-strategies~1{stixId}' /api/detection-strategies/{stixId}/modified/{modified}: $ref: 'paths/detection-strategies-paths.yml#/paths/~1api~1detection-strategies~1{stixId}~1modified~1{modified}' # Data Components /api/data-components: $ref: 'paths/data-components-paths.yml#/paths/~1api~1data-components' /api/data-components/{stixId}: $ref: 'paths/data-components-paths.yml#/paths/~1api~1data-components~1{stixId}' /api/data-components/{stixId}/channels: $ref: 'paths/data-components-paths.yml#/paths/~1api~1data-components~1{stixId}~1channels' /api/data-components/{stixId}/log-sources: $ref: 'paths/data-components-paths.yml#/paths/~1api~1data-components~1{stixId}~1log-sources' /api/data-components/{stixId}/modified/{modified}: $ref: 'paths/data-components-paths.yml#/paths/~1api~1data-components~1{stixId}~1modified~1{modified}' # Assets /api/assets: $ref: 'paths/assets-paths.yml#/paths/~1api~1assets' /api/assets/{stixId}: $ref: 'paths/assets-paths.yml#/paths/~1api~1assets~1{stixId}' /api/assets/{stixId}/modified/{modified}: $ref: 'paths/assets-paths.yml#/paths/~1api~1assets~1{stixId}~1modified~1{modified}' # Relationships /api/relationships: $ref: 'paths/relationships-paths.yml#/paths/~1api~1relationships' /api/relationships/missing-linkbyid: $ref: 'paths/relationships-paths.yml#/paths/~1api~1relationships~1missing-linkbyid' /api/relationships/parallel: $ref: 'paths/relationships-paths.yml#/paths/~1api~1relationships~1parallel' /api/relationships/{stixId}: $ref: 'paths/relationships-paths.yml#/paths/~1api~1relationships~1{stixId}' /api/relationships/{stixId}/modified/{modified}: $ref: 'paths/relationships-paths.yml#/paths/~1api~1relationships~1{stixId}~1modified~1{modified}' # Notes /api/notes: $ref: 'paths/notes-paths.yml#/paths/~1api~1notes' /api/notes/{stixId}: $ref: 'paths/notes-paths.yml#/paths/~1api~1notes~1{stixId}' /api/notes/{stixId}/modified/{modified}: $ref: 'paths/notes-paths.yml#/paths/~1api~1notes~1{stixId}~1modified~1{modified}' # References /api/references: $ref: 'paths/references-paths.yml#/paths/~1api~1references' # Collection Indexes /api/collection-indexes: $ref: 'paths/collection-indexes-paths.yml#/paths/~1api~1collection-indexes' /api/collection-indexes/{id}: $ref: 'paths/collection-indexes-paths.yml#/paths/~1api~1collection-indexes~1{id}' /api/collection-indexes/{id}/refresh: $ref: 'paths/collection-indexes-paths.yml#/paths/~1api~1collection-indexes~1{id}~1refresh' # Collections /api/collections: $ref: 'paths/collections-paths.yml#/paths/~1api~1collections' /api/collections/{stixId}: $ref: 'paths/collections-paths.yml#/paths/~1api~1collections~1{stixId}' /api/collections/{stixId}/modified/{modified}: $ref: 'paths/collections-paths.yml#/paths/~1api~1collections~1{stixId}~1modified~1{modified}' # Collection Bundles /api/collection-bundles: $ref: 'paths/collection-bundles-paths.yml#/paths/~1api~1collection-bundles' # STIX Bundles /api/stix-bundles: $ref: 'paths/stix-bundles-paths.yml#/paths/~1api~1stix-bundles' # System Configuration /api/config/system-version: $ref: 'paths/system-configuration-paths.yml#/paths/~1api~1config~1system-version' /api/config/allowed-values: $ref: 'paths/system-configuration-paths.yml#/paths/~1api~1config~1allowed-values' /api/config/organization-identity: $ref: 'paths/system-configuration-paths.yml#/paths/~1api~1config~1organization-identity' /api/config/authn: $ref: 'paths/system-configuration-paths.yml#/paths/~1api~1config~1authn' /api/config/default-marking-definitions: $ref: 'paths/system-configuration-paths.yml#/paths/~1api~1config~1default-marking-definitions' /api/config/organization-namespace: $ref: 'paths/system-configuration-paths.yml#/paths/~1api~1config~1organization-namespace' # Session Management /api/session: $ref: 'paths/session-paths.yml#/paths/~1api~1session' # Authentication /api/authn/anonymous/login: $ref: 'paths/authn-paths.yml#/paths/~1api~1authn~1anonymous~1login' /api/authn/anonymous/logout: $ref: 'paths/authn-paths.yml#/paths/~1api~1authn~1anonymous~1logout' /api/authn/oidc/login: $ref: 'paths/authn-paths.yml#/paths/~1api~1authn~1oidc~1login' /api/authn/oidc/callback: $ref: 'paths/authn-paths.yml#/paths/~1api~1authn~1oidc~1callback' /api/authn/oidc/logout: $ref: 'paths/authn-paths.yml#/paths/~1api~1authn~1oidc~1logout' /api/authn/service/apikey-challenge: $ref: 'paths/authn-paths.yml#/paths/~1api~1authn~1service~1apikey-challenge' /api/authn/service/apikey-token: $ref: 'paths/authn-paths.yml#/paths/~1api~1authn~1service~1apikey-token' # User Accounts /api/user-accounts: $ref: 'paths/user-accounts-paths.yml#/paths/~1api~1user-accounts' /api/user-accounts/{id}: $ref: 'paths/user-accounts-paths.yml#/paths/~1api~1user-accounts~1{id}' /api/user-accounts/{id}/teams: $ref: 'paths/user-accounts-paths.yml#/paths/~1api~1user-accounts~1{id}~1teams' /api/user-accounts/register: $ref: 'paths/user-accounts-paths.yml#/paths/~1api~1user-accounts~1register' # Teams /api/teams: $ref: 'paths/teams-paths.yml#/paths/~1api~1teams' /api/teams/{id}: $ref: 'paths/teams-paths.yml#/paths/~1api~1teams~1{id}' /api/teams/{id}/users: $ref: 'paths/teams-paths.yml#/paths/~1api~1teams~1{id}~1users' # Recent Activity /api/recent-activity: $ref: 'paths/recent-activity-paths.yml#/paths/~1api~1recent-activity' # Health Checks /api/health/ping: $ref: 'paths/health-paths.yml#/paths/~1api~1health~1ping' /api/health/status: $ref: 'paths/health-paths.yml#/paths/~1api~1health~1status'