Documentation
Docs Home › API › AI Preview API

AI Preview API

API: AI Preview

Status: PREVIEW (off by default; advisory only)

Admin authentication: administrator JWT/session. Role: admin.

Advisory only. recommendation_only is true on status. EnforcementApplied is not a live apply path. There is no apply-rule AI route. Human approval is required when AI is enabled.

Additional internal AI development endpoints exist in Enterprise source and are not part of AI Preview. Detailed credential custody procedures are provided separately to Enterprise customers (local envelope; no training export).


GET /api/v1/ai/status

Purpose. Preview readiness and bounds.

Authentication. Admin.

Parameters. None.

Request. Empty.

Example request.

curl -sS https://manager.example.com:8443/api/v1/ai/status \
  -H "Authorization: Bearer TOKEN"

Response (200).

{
  "success": true,
  "message": "AI status retrieved",
  "data": {
    "enabled": false,
    "configured": false,
    "provider": "openai_compatible",
    "model": "",
    "mode": "disabled",
    "offline_mode": true,
    "redaction_enabled": true,
    "require_human_approval": true,
    "recommendation_only": true,
    "model_calls_from_browser": false,
    "manager_readiness_depends_on_ai": false
  }
}

AIStatusResponse also includes last_success_at, last_error_code, last_error_class, last_error_at, redaction_version, prompt_template_versions, output_schema_versions, counters, latency, token_usage. Unknown providers are normalized to "unknown". Only openai_compatible is a supported provider class.

Errors. 200 even when disabled. Entitlement may force enabled/configured false.

Edition. ENTERPRISE_ONLY.

Security. Status does not return API keys. Manager readiness does not depend on AI.


GET /api/v1/ai/providers

GET /api/v1/ai/providers/:id

POST /api/v1/ai/providers

PATCH /api/v1/ai/providers/:id

POST /api/v1/ai/providers/:id/retire

POST /api/v1/ai/providers/:id/test-connection

POST /api/v1/ai/providers/:id/manual-eligibility

Purpose. Register OpenAI-compatible endpoints. Saving a provider does not start analysis and does not store a key in the browser.

Authentication. Admin.

Create/update request. Provider draft fields include display_name, provider_class, api_protocol, base_url, model_id, timeout/byte/token limits. API_SCHEMA_DOCUMENTATION_BLOCKED for every optional nested policy field not copied from aiProviderResponse — create bind is a large handler struct.

Documented response (aiProviderResponse): id, display_name, provider_class, api_protocol, base_url, model_id, model_artifact_id, endpoint_policy_class, registration/credential/manual/automatic/experiment/health/circuit states, capabilities, limits, retain_raw_request / retain_raw_response, IP policies, provider_training, last test fields.

Retire: {"expected_version": <int64>}. Manual eligibility: expected_version, enabled. Test-connection: confirmed, optional ephemeral_credential (secret; not logged).

Edition. ENTERPRISE_ONLY.

Security. provider_training must remain consistent with ai.training_export.enabled (must be false for customer Preview). Ephemeral test credentials are not persisted as browser storage.


POST /api/v1/ai/manual-analysis/preview

GET /api/v1/ai/manual-analysis/credential-options

GET /api/v1/ai/manual-analysis/:request_id

POST /api/v1/ai/manual-analysis/:request_id/execute

POST /api/v1/ai/manual-analysis/:request_id/cancel

Purpose. Operator-triggered analysis with explicit acknowledgements.

Authentication. Admin.

Preview request (manualPreviewRequest): client_request_id, selections[] (security_log_id and/or analysis_id), provider_id, model_id, privacy_policy, retention_mode, exact_ip_acknowledged, credential_source.

Execute request (manualExecuteRequest): confirmation_token, optional ephemeral_credential, reviewed_data_categories, provider_retention_acknowledged, advisory_only_acknowledged, cost_bound_acknowledged, exact_ip_acknowledged.

Transient result (manualTransientResult): run_id, group_id, source_security_log_id, status, retention_mode, classification/severity/confidence/summary, advisory_action, evidence, requires_human_review, usage tokens, advisory_only: true, enforcement_applied: false.

Edition. ENTERPRISE_ONLY.

Security. Acknowledgements are required. Do not send production event payloads to unapproved providers.


GET /api/v1/ai/comparisons

GET /api/v1/ai/comparisons/:group_id

GET /api/v1/ai/comparison-runs/:run_id

Purpose. Comparison groups for manual runs.

Authentication. Admin.

Response. API_SCHEMA_DOCUMENTATION_BLOCKED for nested comparison maps — list handlers return domain comparison objects inside V1-like envelopes.

Edition. ENTERPRISE_ONLY.


GET /api/v1/ai/recommendations

GET /api/v1/ai/recommendations/:id

GET /api/v1/ai/recommendations/:id/lineage

POST /api/v1/ai/recommendations/:id/approve

POST /api/v1/ai/recommendations/:id/reject

Purpose. Unpublished recommendations. Approve/reject is governance only.

Authentication. Admin.

Decision body (AIRecommendationDecisionRequest): {"reason":"..."}.

Response. Recommendation projection (AIRecommendationResponse family). Explain helper: AIExplainSecurityLogResponse (log_id, summary, explanation, severity, recommended_actions, false_positive_checks, recommendation_only, model, redaction_status).

Edition. ENTERPRISE_ONLY.


POST /api/v1/ai/recommendation-drafts/preview

POST /api/v1/ai/recommendation-drafts/confirm

Purpose. Draft preview/confirm (recommendationPreviewRequest.sources, recommendationConfirmRequest.confirmation_token + preview_hash).

Authentication. Admin.

Edition. ENTERPRISE_ONLY.


POST /api/v1/ai/security-logs/:id/explain

Purpose. Explain one stored security log. Advisory text only.

Authentication. Admin.

Parameters. :id integer log id.

Request. Empty or ignored extras.

Response. AIExplainSecurityLogResponse inside success envelope. 400 Invalid security log ID.

Edition. ENTERPRISE_ONLY.


POST /api/v1/ai/incidents/analyze

Purpose. Analyze selected log ids (AIAnalyzeIncidentRequest.log_ids).

Authentication. Admin.

Response. Advisory incident analysis. API_SCHEMA_DOCUMENTATION_BLOCKED for the full output object beyond advisory fields on explain/transient result.

Edition. ENTERPRISE_ONLY.


POST /api/v1/ai/rules/draft

POST /api/v1/ai/rule-drafts

GET /api/v1/ai/rule-drafts/:id

PUT /api/v1/ai/rule-drafts/:id

Purpose. Unpublished rule drafts (AIRuleDraftRequest: log_ids, intent, persist_recommendation). Saving a draft does not call POST /api/v1/rules.

Authentication. Admin.

Edition. ENTERPRISE_ONLY.


GET /api/v1/ai/operations/status

GET /api/v1/ai/operations/alerts

POST /api/v1/ai/operations/alerts/:id/acknowledge

POST /api/v1/ai/operations/alerts/:id/resolve

Purpose. Preview operations alerts (not internal AI development control-plane).

Authentication. Admin.

Alert action body: expected_record_version, reason.

Edition. ENTERPRISE_ONLY.


GET /api/v1/ai/source-events/security-logs/:id

Purpose. Source-event projection for an analysis (redacted categories).

Authentication. Admin.

Response. API_SCHEMA_DOCUMENTATION_BLOCKED — projection maps without a stable public DTO.

Edition. ENTERPRISE_ONLY.


Credential custody

Prefix /api/v1/ai/credential-custody/. Local envelope custody. Training export must stay disabled.

Documented bind structs: custodyProfileDraftRequest, custodyBindingDraftRequest, custodyTransitionRequest, credentialEnrollmentRequest (credential secret bytes), rotation/destroy (confirm_destroy).

List/get/approve/disable/retire/readiness/enroll/rotate/rewrap/revoke-material/destroy-material as in inventory.

Do not return raw key material in examples. API_SCHEMA_DOCUMENTATION_BLOCKED for backend-health maps.

Edition. ENTERPRISE_ONLY.

Security. Keys never in YAML for production; systemd/local envelope only. Custody details are provided separately to Enterprise customers.