info: description: Public REST API for OpenCRE (Open Common Requirement Enumeration). Documents read-only endpoints implemented by the OpenCRE backend. title: OpenCRE REST API version: 1.0.0 paths: /rest/v1/all_cres: get: tags: - CRE summary: List all CREs (paginated) parameters: - name: page in: query required: false schema: type: integer - name: per_page in: query required: false schema: type: integer responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AllCREsResponseSchema' '404': description: Not found /rest/v1/config: get: tags: - Operations summary: Public configuration flags responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ConfigResponseSchema' /rest/v1/cre_csv: get: tags: - CRE summary: Download CRE catalogue CSV description: Returns a CSV attachment of the CRE mapping template. responses: '200': description: CSV file download content: text/csv: schema: type: string format: binary '404': description: Not found /rest/v1/deeplink/{name}: get: tags: - Deeplink summary: Resolve REST deeplink by name description: Redirects to an external hyperlink when found. parameters: - name: name in: path required: true schema: type: string responses: '200': description: Success '404': description: Not found /rest/v1/deeplink/{ntype}/{name}: get: tags: - Deeplink summary: Resolve REST deeplink by type and name parameters: - name: ntype in: path required: true schema: type: string - name: name in: path required: true schema: type: string responses: '200': description: Success '404': description: Not found /rest/v1/ga_standards: get: tags: - Gap analysis summary: Standards eligible for gap analysis responses: '200': description: Eligible standards retrieved content: application/json: schema: type: array items: type: string /rest/v1/health: get: tags: - Operations summary: Health check description: Feature-flagged via CRE_ENABLE_HEALTH=1. responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/HealthResponseSchema' '404': description: Not found '503': description: Unhealthy /rest/v1/id/{creid}: get: tags: - CRE summary: Get a CRE by ID description: Retrieve a Common Requirement Enumeration (CRE) by its external ID. parameters: - name: creid in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: source in: query required: false schema: type: string description: Integration source identifier for metrics, e.g. wstg - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true description: Filter returned fields responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/CREResponseSchema' '404': description: Not found /rest/v1/ma_job_results: get: tags: - Gap analysis summary: Gap analysis background job status/result parameters: - name: id in: query required: true schema: type: string description: Background job id responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/JobStatusResponseSchema' '404': description: Not found '500': description: Job failed /rest/v1/map_analysis: get: tags: - Gap analysis summary: Map analysis between two standards description: Returns cached gap analysis or enqueues a background job. parameters: - name: standard in: query required: true schema: type: array items: type: string minItems: 2 maxItems: 2 style: form explode: true description: Exactly two standard names responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/MapAnalysisResponseSchema' '404': description: Not found '400': description: Fewer than two standards provided '503': description: Gap analysis unavailable /rest/v1/map_analysis_weak_links: get: tags: - Gap analysis summary: Weak links for a map analysis result parameters: - name: standard in: query required: true schema: type: array items: type: string minItems: 2 maxItems: 2 style: form explode: true - name: key in: query required: true schema: type: string description: Gap-analysis cache key responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/MapAnalysisResponseSchema' '404': description: Not found /rest/v1/name/{crename}: get: tags: - CRE summary: Get a CRE by name parameters: - name: crename in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: source in: query required: false schema: type: string description: Integration source identifier for metrics, e.g. wstg - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true description: Filter returned fields responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/CREResponseSchema' '404': description: Not found /rest/v1/root_cres: get: tags: - CRE summary: Get root CREs parameters: - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/DataListResponseSchema' '404': description: Not found /rest/v1/standard/{name}: get: tags: - Nodes summary: Get standard nodes by name parameters: - name: name in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: section in: query required: false schema: type: string - name: subsection in: query required: false schema: type: string - name: sectionID in: query required: false schema: type: string - name: page in: query required: false schema: type: integer - name: items_per_page in: query required: false schema: type: integer - name: version in: query required: false schema: type: string - name: hyperlink in: query required: false schema: type: string - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/NodeListResponseSchema' '404': description: Not found /rest/v1/standards: get: tags: - Standards summary: List standards description: For a logged-in user with a saved resource selection (and the MyOpenCRE feature enabled), the list is restricted to that selection (OpenCRE is always included). Pass all=true to bypass the filter and return every standard. parameters: - name: all in: query required: false schema: type: boolean description: When true, return all standards even if the user has a saved selection. responses: '200': description: Standards retrieved content: application/json: schema: type: array items: type: string /rest/v1/tags: get: tags: - Tags summary: Get documents by tag parameters: - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: tag in: query required: true schema: type: array items: type: string style: form explode: true description: Tag name(s) responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/DataListResponseSchema' '404': description: Not found /rest/v1/text_search: get: tags: - Search summary: Text search parameters: - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: text in: query required: true schema: type: string description: Search query responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/DataListResponseSchema' '404': description: Not found '400': description: Missing text parameter /rest/v1/user/resources: get: tags: - User summary: Get the current user's selected standards description: Requires login (CRE_ENABLE_LOGIN) and the MyOpenCRE feature (CRE_ENABLE_MYOPENCRE). When either flag is disabled the endpoint does not authenticate and returns an empty selection. When both are enabled, anonymous requests receive 401. responses: '200': description: The user's selected standards content: application/json: schema: type: object required: - selected properties: selected: type: array items: type: string '401': description: Not authenticated (both feature flags enabled and no active session) put: tags: - User summary: Replace the current user's selected standards description: Requires login (CRE_ENABLE_LOGIN) and the MyOpenCRE feature (CRE_ENABLE_MYOPENCRE). When either flag is disabled the request is a no-op and returns an empty selection. When both are enabled, anonymous requests receive 401. requestBody: required: true content: application/json: schema: type: object required: - selected properties: selected: type: array items: type: string minLength: 1 description: Standard names to select. Non-empty strings; values are trimmed and deduplicated. responses: '200': description: The stored selection content: application/json: schema: type: object required: - selected properties: selected: type: array items: type: string '400': description: Invalid selection body '401': description: Not authenticated (both feature flags enabled and no active session) /rest/v1/{ntype}/{name}: get: tags: - Nodes summary: Get nodes by type and name description: Retrieve standards, tools, or other node types by name. parameters: - name: ntype in: path required: true schema: type: string - name: name in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: section in: query required: false schema: type: string - name: subsection in: query required: false schema: type: string - name: sectionID in: query required: false schema: type: string - name: page in: query required: false schema: type: integer - name: items_per_page in: query required: false schema: type: integer - name: version in: query required: false schema: type: string - name: hyperlink in: query required: false schema: type: string - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/NodeListResponseSchema' '404': description: Not found /rest/v1/{ntype}/{name}/section/{section}: get: tags: - Nodes summary: Get nodes by section parameters: - name: ntype in: path required: true schema: type: string - name: name in: path required: true schema: type: string - name: section in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: subsection in: query required: false schema: type: string - name: sectionID in: query required: false schema: type: string - name: page in: query required: false schema: type: integer - name: items_per_page in: query required: false schema: type: integer - name: version in: query required: false schema: type: string - name: hyperlink in: query required: false schema: type: string - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/NodeListResponseSchema' '404': description: Not found /rest/v1/{ntype}/{name}/section/{section}/subsection/{subsection}: get: tags: - Nodes summary: Get nodes by section and subsection parameters: - name: ntype in: path required: true schema: type: string - name: name in: path required: true schema: type: string - name: section in: path required: true schema: type: string - name: subsection in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: sectionID in: query required: false schema: type: string - name: page in: query required: false schema: type: integer - name: items_per_page in: query required: false schema: type: integer - name: version in: query required: false schema: type: string - name: hyperlink in: query required: false schema: type: string - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/NodeListResponseSchema' '404': description: Not found /rest/v1/{ntype}/{name}/sectionid/{sectionID}: get: tags: - Nodes summary: Get nodes by section ID parameters: - name: ntype in: path required: true schema: type: string - name: name in: path required: true schema: type: string - name: sectionID in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: section in: query required: false schema: type: string - name: subsection in: query required: false schema: type: string - name: page in: query required: false schema: type: integer - name: items_per_page in: query required: false schema: type: integer - name: version in: query required: false schema: type: string - name: hyperlink in: query required: false schema: type: string - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/NodeListResponseSchema' '404': description: Not found /rest/v1/{ntype}/{name}/sectionid/{sectionID}/subsection/{subsection}: get: tags: - Nodes summary: Get nodes by section ID and subsection parameters: - name: ntype in: path required: true schema: type: string - name: name in: path required: true schema: type: string - name: sectionID in: path required: true schema: type: string - name: subsection in: path required: true schema: type: string - name: format in: query required: false schema: type: string enum: - json - md - csv - oscal description: 'Response format (default: json)' - name: section in: query required: false schema: type: string - name: page in: query required: false schema: type: integer - name: items_per_page in: query required: false schema: type: integer - name: version in: query required: false schema: type: string - name: hyperlink in: query required: false schema: type: string - name: include_only in: query required: false schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/NodeListResponseSchema' '404': description: Not found openapi: 3.0.3 components: schemas: CREResponseSchema: type: object properties: data: type: object description: CRE document additionalProperties: {} additionalProperties: false NodeListResponseSchema: type: object properties: total_pages: type: integer nullable: true page: type: integer nullable: true standards: type: array items: type: object additionalProperties: {} additionalProperties: false DataListResponseSchema: type: object properties: data: type: array items: type: object additionalProperties: {} additionalProperties: false MapAnalysisResponseSchema: type: object properties: result: description: Gap analysis result payload additionalProperties: false JobStatusResponseSchema: type: object properties: status: type: string result: {} additionalProperties: false HealthResponseSchema: type: object properties: ok: type: boolean cre_count: type: integer standards_count: type: integer message: type: string additionalProperties: false AllCREsResponseSchema: type: object properties: data: type: array items: type: object additionalProperties: {} page: type: integer total_pages: type: integer additionalProperties: false ConfigResponseSchema: type: object properties: CRE_ALLOW_IMPORT: type: boolean additionalProperties: false