openapi: 3.0.3 info: title: DIDI Agent V3 — Pipeline Orchestration & Execution API version: 3.0.0 description: 'API-ul motorului de analiză a dezinformării DIDI (Lot 2 — Modulele 1–3). Toate endpoint-urile de analiză sunt asincrone (dispatch pe RabbitMQ, răspuns 202 + poll). Pipeline = workflow cu dependențe explicite: intake → [media_preprocess] → {techniques ∥ ai_tampered ∥ claims ∥ domain} → verdict → persist. Include dry-run, cancel, resume din checkpoint, istoric și coada de moderare HIL. Autentificare: JWT Keycloak RS256 (verificat criptografic în backend, nu doar la gateway).' servers: - url: http://localhost:18000/agent-v3 description: Kong API Gateway (JWT enforced) — punctul unic de intrare public tags: - name: ai-tampered - name: claims - name: core - name: domain - name: health - name: media - name: moderation - name: pipeline - name: source-assessment - name: techniques security: - bearerAuth: [] # ============================================================================= # Integrare cu Lotul 1 (Platforma AI) — dependențe OUTBOUND ale agent-v3. # Nu sunt rute expuse de acest serviciu, ci servicii AI consumate prin HTTP pe # rețeaua Docker `didi-network` (adresare pe nume de container). Fiecare integrare # este fail-open (degradare grațioasă la indisponibilitate). Starea lor live este # expusă prin GET /api/v3/health/all. Testele de integrare: raport 04 (Lot1↔Lot2). # ============================================================================= x-integrations: network: didi-network contract: fail-open (timeout/indisponibil ⇒ degradare grațioasă, analiza nu eșuează) health_probe: /api/v3/health/all services: - key: llm env: LLM_ROUTER_URL target: http://llm-api:14011 role: Modele LLM text (Qwen 3.5 local, vLLM) — analiză + explicație verdict - key: vision env: VISION_LLM_URL target: http://llm-api:14011 role: OCR / analiză imagine (Qwen vision) - key: whisper env: M17_WHISPER_URL target: http://audio-api:54300 role: Transcriere audio (Whisper large-v3) - key: video env: VIDEO_ANALYSIS_URL target: http://video-api:54600 role: Detecție deepfake video (BusterX) - key: extractors env: EXTRACTORS_URL target: http://extractors:54400 role: EXIF/ELA/spectrogramă, NER, YOLO, OCR - key: forensic env: FORENSIC_API_URL target: http://forensic:8080 role: Trăsături forensice media (rPPG/lip-sync/forgery) - key: brain env: DIDI_BRAIN_URL target: http://brain-api:8090 role: Cache verificare + RAG (fact-checking) - key: web env: M17_WEB_API_URL target: http://web-api:51100 role: Căutare web pentru claims/surse (evidence) - key: domain_check env: DOMAIN_CHECK_API_URL target: http://domain-check-api:11000 role: WHOIS/DNS/SSL/blacklist domeniu — scor credibilitate sursă (T4) paths: /: get: summary: Citește root tags: - core security: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/ai-tampered/analyze: post: summary: Creează / execută analyze tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/ai-tampered/analyze-async: post: summary: Creează / execută analyze async tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/ai-tampered/analyze-image: post: summary: Creează / execută analyze image tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/ai-tampered/analyze-media: post: summary: Creează / execută analyze media tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/ai-tampered/categories: get: summary: Listează categories tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/ai-tampered/config: get: summary: Citește config tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/ai-tampered/health: get: summary: Citește health tags: - ai-tampered security: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/ai-tampered/models: get: summary: Listează models tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/ai-tampered/quick: post: summary: Creează / execută quick tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/ai-tampered/results/{sessionId}: get: summary: Citește results tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string /api/v3/ai-tampered/stage-assignments: get: summary: Listează stage assignments tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) put: summary: Actualizează stage assignments tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/ai-tampered/test-model: post: summary: Creează / execută test model tags: - ai-tampered security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/claims/analyze: post: summary: Creează / execută analyze tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/claims/analyze-async: post: summary: Creează / execută analyze async tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/claims/analyze-media: post: summary: Creează / execută analyze media tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/claims/config: get: summary: Citește config tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/claims/health: get: summary: Citește health tags: - claims security: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/claims/models: get: summary: Listează models tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/claims/results/{sessionId}: get: summary: Citește results tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string /api/v3/claims/stage-assignments: get: summary: Listează stage assignments tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) put: summary: Actualizează stage assignments tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/claims/statuses: get: summary: Listează statuses tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/claims/test-model: post: summary: Creează / execută test model tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/claims/types: get: summary: Listează types tags: - claims security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/domain/analyze: post: summary: Creează / execută analyze tags: - domain security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) deprecated: true description: Legacy — înlocuit de /api/v3/source-assessment/analyze requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/domain/analyze-async: post: summary: Creează / execută analyze async tags: - domain security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) deprecated: true description: Legacy — înlocuit de source-assessment requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/health: get: summary: Citește health tags: - health security: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/health/all: get: summary: Health profund — dependențe interne + integrare Lot 1 (AI) description: > Sondează toate dependențele agent-v3: infrastructura proprie (PostgreSQL, Redis, RabbitMQ, didiFramework) și **serviciile de inteligență artificială din Lotul 1** consumate prin `didi-network` (llm/vision, whisper, web, video/BusterX, extractors, forensic, brain, domain-check T4). Serviciile Lot 1 sunt verificate *fail-open*: o dependență AI indisponibilă produce `degraded` (HTTP 200), nu `unhealthy` — reflectând degradarea grațioasă a pipeline-ului. Endpoint-ul dublează rol de sondă de integrare Lot1↔Lot2 (vezi `x-integrations` la nivel de specificație). tags: - health security: - bearerAuth: [] responses: '200': description: Sistem healthy sau degraded (dependențe AI fail-open indisponibile) content: application/json: schema: $ref: '#/components/schemas/DeepHealthResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '503': description: Sistem unhealthy (o dependență critică internă e jos) content: application/json: schema: $ref: '#/components/schemas/DeepHealthResponse' x-tested: date: '2026-07-09' http_status: 200 note: Probat live pe didi11; acoperă toate 9 integrări Lot 1 (raport 04) /api/v3/media/download-url: post: summary: Creează / execută download url tags: - media security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/media/file/{bucket}/{objectKey}: get: summary: Citește {*objectKey} tags: - media security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: bucket in: path required: true schema: type: string - name: objectKey in: path required: true schema: type: string /api/v3/media/upload: post: summary: Creează / execută upload tags: - media security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/media/upload-url: post: summary: Creează / execută upload url tags: - media security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/moderation/flag: post: summary: Creează / execută flag tags: - moderation security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/moderation/queue: get: summary: 'Coada de review HIL (filtre: status CSV, priority CSV, assigned_to)' tags: - moderation security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean data: type: array items: $ref: '#/components/schemas/ModerationQueueEntry' total: type: integer limit: type: integer offset: type: integer '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/moderation/queue/{queueId}: get: summary: Citește queue tags: - moderation security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: queueId in: path required: true schema: type: string /api/v3/moderation/queue/{queueId}/claim: post: summary: Creează / execută claim tags: - moderation security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 403 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: queueId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/moderation/queue/{queueId}/resolve: put: summary: Rezolva o intrare HIL (approved/corrected/rejected); approved/corrected promoveaza atomii brain la gold tags: - moderation security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 403 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: queueId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ModerationResolveRequest' /api/v3/moderation/stats: get: summary: Listează stats tags: - moderation security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/pipeline/{sessionId}/cancel: post: summary: Anuleaza o sesiune in curs (ownership check; starea `canceled` propagata Redis+PG) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/pipeline/{sessionId}/component/{name}: get: summary: Citește component tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string - name: name in: path required: true schema: type: string /api/v3/pipeline/{sessionId}/queue-status: get: summary: Progres procesare async (procent + componente finalizate) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QueueStatus' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string /api/v3/pipeline/{sessionId}/result: get: summary: Rezultatul complet al sesiunii (cand status=completed) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AnalysisSession' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string /api/v3/pipeline/{sessionId}/resume: post: summary: 'Resume din checkpoint: re-dispatch DOAR componentele necompletate (409 daca completed/input expirat)' tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/pipeline/{sessionId}/status: get: summary: Status sesiune (polling) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QueueStatus' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string /api/v3/pipeline/analyze: post: summary: Analiza completa sincrona (toate componentele + verdict) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AnalysisSession' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AnalyzeRequest' /api/v3/pipeline/analyze-async: post: summary: Analiza completa asincrona — dispatch pe RabbitMQ, 202 + poll tags: - pipeline security: - bearerAuth: [] responses: '202': description: 202 Accepted content: application/json: schema: $ref: '#/components/schemas/AsyncAccepted' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AnalyzeRequest' /api/v3/pipeline/analyze-media: post: summary: Analiza media sincrona (media_url din MinIO) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AnalyzeRequest' /api/v3/pipeline/analyze-url: post: summary: Analiza URL inteligenta (detecteaza video/articol/imagine) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AnalyzeRequest' /api/v3/pipeline/dry-run: post: summary: 'Dry-run: rezolva planul complet (flow, dependente, cozi, lanturi modele, profil verdict) FARA dispatch si zero credite' tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DryRunPlan' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AnalyzeRequest' /api/v3/pipeline/extension/analyze: post: summary: Creează / execută analyze tags: - pipeline security: - apiKeyAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 401 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/pipeline/extension/analyze-async: post: summary: Creează / execută analyze async tags: - pipeline security: - apiKeyAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 401 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/pipeline/extension/keys: get: summary: Listează keys tags: - pipeline security: - apiKeyAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) post: summary: Creează / execută keys tags: - pipeline security: - apiKeyAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/pipeline/extension/keys/{id}: delete: summary: Șterge keys tags: - pipeline security: - apiKeyAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: id in: path required: true schema: type: string /api/v3/pipeline/extension/status/{sessionId}: get: summary: Citește status tags: - pipeline security: - apiKeyAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 401 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string /api/v3/pipeline/extension/upload: post: summary: Creează / execută upload tags: - pipeline security: - apiKeyAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 401 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/pipeline/history: get: summary: Istoric analize utilizator (paginat) tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/HistoryPage' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/pipeline/history/{id}: delete: summary: Șterge history tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: id in: path required: true schema: type: string get: summary: Citește history tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: id in: path required: true schema: type: string /api/v3/pipeline/history/admin: get: summary: 'Istoric admin, toti utilizatorii (filtre: search, risk_level, status, date) — necesita rol admin' tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/HistoryPage' '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/pipeline/history/admin/{id}: delete: summary: Șterge admin tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 404 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: id in: path required: true schema: type: string get: summary: Citește admin tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 500 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: id in: path required: true schema: type: string /api/v3/pipeline/queue-health: get: summary: Citește queue health tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/pipeline/verdict-config: get: summary: Citește verdict config tags: - pipeline security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/source-assessment/analyze: post: summary: Creează / execută analyze tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/source-assessment/analyze-async: post: summary: Creează / execută analyze async tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/source-assessment/analyze-media: post: summary: Creează / execută analyze media tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/source-assessment/config: get: summary: Citește config tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/source-assessment/health: get: summary: Citește health tags: - source-assessment security: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/source-assessment/models: get: summary: Listează models tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/source-assessment/stage-assignments: get: summary: Listează stage assignments tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) put: summary: Actualizează stage assignments tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/source-assessment/test-model: post: summary: Creează / execută test model tags: - source-assessment security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/techniques/analyze: post: summary: Creează / execută analyze tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/techniques/analyze-async: post: summary: Creează / execută analyze async tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/techniques/analyze-media: post: summary: Creează / execută analyze media tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/techniques/config: get: summary: Citește config tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/techniques/definitions: get: summary: Listează definitions tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/techniques/models: get: summary: Listează models tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) /api/v3/techniques/results/{sessionId}: get: summary: Citește results tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) parameters: - name: sessionId in: path required: true schema: type: string /api/v3/techniques/stage-assignments: get: summary: Listează stage assignments tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) put: summary: Actualizează stage assignments tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/techniques/test-model: post: summary: Creează / execută test model tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 400 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /api/v3/techniques/test-openrouter: post: summary: Creează / execută test openrouter tags: - techniques security: - bearerAuth: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) requestBody: required: true content: application/json: schema: type: object additionalProperties: true /metrics: get: summary: Listează metrics tags: - core security: [] responses: '200': description: OK content: application/json: schema: type: object properties: success: type: boolean example: true data: description: Payload-ul raspunsului '400': description: Cerere invalidă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Token lipsă/invalid (JWT RS256 verificat criptografic) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resursă inexistentă content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-tested: date: '2026-07-08' http_status: 200 note: Probat live pe didi11 (proba non-distructivă) components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: JWT Keycloak (realms didi-clients / didi-admins), semnat RS256, verificat criptografic contra JWKS atât la gateway (Kong) cât și în backend apiKeyAuth: type: apiKey in: header name: X-API-Key description: Cheie API extensie browser (format didi_ext_..., emisă via /api/extension-keys) schemas: ErrorResponse: type: object properties: success: type: boolean example: false error: type: string error_code: type: string correlation_id: type: string format: uuid HealthCheck: type: object description: Rezultatul sondării unei dependențe individuale. properties: status: type: string enum: [healthy, unhealthy, unknown] description: > healthy = răspunde OK; unhealthy = eroare/HTTP non-2xx pe dependență critică; unknown = dependență AL 1 fail-open indisponibilă (nu invalidează sistemul). latency_ms: type: integer example: 12 error: type: string DeepHealthResponse: type: object description: > Răspunsul GET /api/v3/health/all. `checks` conține infrastructura internă (postgres, redis, rabbitmq, framework) și integrările Lot 1 (llm, vision, whisper, video, extractors, forensic, brain, domain_check). properties: status: type: string enum: [healthy, degraded, unhealthy] description: degraded = o integrare Lot 1 fail-open (unknown) e indisponibilă example: healthy service: type: string example: agent-v3 version: type: string example: 3.0.0 timestamp: type: string format: date-time total_check_ms: type: integer example: 76 checks: type: object additionalProperties: $ref: '#/components/schemas/HealthCheck' properties: postgres: { $ref: '#/components/schemas/HealthCheck' } redis: { $ref: '#/components/schemas/HealthCheck' } rabbitmq: { $ref: '#/components/schemas/HealthCheck' } framework: { $ref: '#/components/schemas/HealthCheck' } llm: { $ref: '#/components/schemas/HealthCheck' } vision: { $ref: '#/components/schemas/HealthCheck' } whisper: { $ref: '#/components/schemas/HealthCheck' } video: { $ref: '#/components/schemas/HealthCheck' } buster: { $ref: '#/components/schemas/HealthCheck' } extractors: { $ref: '#/components/schemas/HealthCheck' } forensic: { $ref: '#/components/schemas/HealthCheck' } brain: { $ref: '#/components/schemas/HealthCheck' } domain_check: { $ref: '#/components/schemas/HealthCheck' } AnalyzeRequest: type: object properties: text: type: string description: Text de analizat (20–50000 caractere) minLength: 20 maxLength: 50000 media_type: type: string enum: - text - url - image - audio - video media_url: type: string description: URL media (MinIO sau extern) pentru image/audio/video url: type: string description: URL articol/video pentru analiza de tip url user_id: type: string description: keycloak_id; in productie derivat din JWT (fallback body doar in STAGING_MODE) plan_type: type: integer minimum: 1 maximum: 6 description: Plan abonament 1–6; decide tier free(1–3)/premium(4–6) si prioritatea in coada components: type: array items: type: string enum: - techniques - ai_tampered - claims - domain description: Subset de componente de rulat (implicit toate) skip_components: type: array items: type: string user_flagged: type: boolean description: true = enqueue fortat in coada de moderare HIL media_duration_sec: type: number description: 'Durata media (guard API: video max 180s, audio max 420s)' required: - media_type AsyncAccepted: type: object properties: success: type: boolean async_: type: boolean data: type: object properties: session_id: type: string format: uuid status: type: string example: processing queued_components: type: array items: type: string plan_type: type: integer poll_url: type: string result_url: type: string AnalysisSession: type: object properties: session_id: type: string format: uuid user_id: type: string user_email: type: string input_type: type: string enum: - text - url - image - audio - video input_text: type: string input_url: type: string input_media_url: type: string input_hash: type: string status: type: string enum: - pending - processing - running - completed - failed - canceled components_run: type: array items: type: string components_skipped: type: array items: type: string risk_score: type: number minimum: 0 maximum: 100 risk_category: type: string risk_level: type: string confidence: type: number confidence_level: type: string started_at: type: string format: date-time completed_at: type: string format: date-time total_duration_ms: type: integer scenario_applied: type: string topic_applied: type: string source_app: type: string api_version: type: string example: v3 created_at: type: string format: date-time techniques: $ref: '#/components/schemas/TechniquesResult' ai_tampered: $ref: '#/components/schemas/AiTamperedResult' claims: $ref: '#/components/schemas/ClaimsResult' domain: $ref: '#/components/schemas/DomainResult' verdict: $ref: '#/components/schemas/VerdictResult' description: 'Contractul central al platformei (Anexa B din propunerea tehnica): sesiunea de analiza cu rezultatele celor 4 componente + verdict' TechniquesResult: type: object properties: manipulation_score: type: number minimum: 0 maximum: 100 total_severity: type: number dimensions_affected: type: array items: type: string techniques_count: type: integer techniques_detected: type: array items: type: object coupling_context: type: object llm_screening: type: string llm_deep: type: string screening_duration_ms: type: integer deep_analysis_duration_ms: type: integer total_duration_ms: type: integer fallbacks_screening: type: integer fallbacks_deep: type: integer AiTamperedResult: type: object properties: ai_probability: type: number minimum: 0 maximum: 100 verdict: type: string risk_score: type: number categories_affected: type: array items: type: string indicators_count: type: integer disclosure_detected: type: boolean disclosure_explicit: type: boolean disclosure_text: type: string indicators_detected: type: array items: type: object content_type: type: string image_analysis: type: object llm_screening: type: string llm_deep: type: string total_duration_ms: type: integer ClaimsResult: type: object properties: total_claims: type: integer verified_true: type: integer verified_false: type: integer unverified: type: integer opinions: type: integer credibility_score: type: number minimum: 0 maximum: 100 interpretation: type: string claims_by_status: type: object claims_by_type: type: object claims_verified: type: array items: type: object llm_extraction: type: string llm_verification: type: string web_searches_made: type: integer total_duration_ms: type: integer DomainResult: type: object properties: domain: type: string trust_score: type: number minimum: 0 maximum: 100 verdict: type: string risk_level: type: string age_days: type: integer is_blacklisted: type: boolean has_ssl: type: boolean ssl_valid: type: boolean red_flags: type: array items: type: string warnings: type: array items: type: string duration_ms: type: integer VerdictResult: type: object properties: risk_score: type: number minimum: 0 maximum: 100 risk_category: type: string risk_category_color: type: string risk_level: type: string risk_level_color: type: string severity: type: string recommended_action: type: string confidence: type: number confidence_level: type: string score_manipulation: type: number score_claims: type: number score_ai: type: number score_source: type: number score_context: type: number applied_weights: type: object override_applied: type: boolean override_type: type: string override_reason: type: string override_adjustment: type: number context_summary: type: object components_used: type: array items: type: string weights_source: type: string duration_ms: type: integer explanation_ro: type: string explanation_en: type: string virality_score: type: number virality_level: type: string virality_factors: type: array items: type: object DryRunPlan: type: object properties: success: type: boolean dry_run: type: boolean example: true data: type: object properties: media_type: type: string plan_type: type: integer flow: type: string example: intake → [techniques ∥ ai_tampered ∥ claims] → verdict_aggregator → persist description: Reprezentarea workflow-ului cu dependente explicite (DAG-sau-workflow, caiet r.982) results_queue: type: string nodes: type: array items: type: object properties: component: type: string queue: type: string priority: type: integer timeout_ms: type: integer depends_on: type: array items: type: string stages: type: object description: Lanturile de modele LLM per etapa si tier (primary + fallbacks) prompt_config_keys: type: array items: type: string skipped: type: array items: type: object properties: component: type: string reason: type: string verdict_profile: type: object properties: profile_code: type: string profile_name: type: string is_active: type: boolean weights: type: object min_components: type: integer override_cap: type: integer note: type: string QueueStatus: type: object properties: session_id: type: string format: uuid status: type: string progress: type: number completed_components: type: array items: type: string total_components: type: integer HistoryPage: type: object properties: success: type: boolean data: type: object properties: items: type: array items: type: object description: Sumar sesiune (fara JSONB-uri grele) pagination: type: object properties: page: type: integer limit: type: integer total: type: integer pages: type: integer ModerationQueueEntry: type: object properties: queue_id: type: integer session_id: type: string format: uuid priority: type: integer minimum: 1 maximum: 5 enqueue_reason: type: string enum: - flagged - low_confidence - sensitive_topic - mixed enqueue_meta: type: object status: type: string enum: - pending - in_review - resolved - declined - auto_closed assigned_to: type: string assigned_at: type: string format: date-time resolved_at: type: string format: date-time resolved_by: type: string resolution_action: type: string enum: - approved - corrected - rejected time_in_queue_ms: type: integer time_in_review_ms: type: integer created_at: type: string format: date-time ModerationResolveRequest: type: object properties: action: type: string enum: - approved - corrected - rejected corrections: type: object description: 'Diff JSONB: {verdict?, techniques?, ai_tampered?, claims?}' notes: type: string required: - action