{"openapi":"3.1.0","info":{"title":"NIS2Europe Compliance API","description":"Avalik /v1 API — NIS2/KüTS vastavus-infrastruktuur. Powered by AIPOS OÜ (reg. 16966532).","version":"1.0.0"},"paths":{"/v1/health":{"get":{"tags":["meta"],"summary":"Health","description":"Avalik tervisekontroll (ilma autentimiseta, ei meteri).","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health V1 Health Get"}}}}}}},"/v1/scoping/questions":{"get":{"tags":["compliance-check"],"summary":"Questions","description":"Püsivad küsimusevõtmed (sama loend mis sisemisel wizardil).","operationId":"questions_v1_scoping_questions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Questions V1 Scoping Questions Get"}}}}}}},"/v1/scoping":{"post":{"tags":["compliance-check"],"summary":"Evaluate","description":"Deterministlik hindamine ilma salvestuseta (<200ms, null LLM).\nFAAS C5: + sources[] (EU-core + riigi ülevõtuseadus KB-st) ning\nES/FR/IE/NL puhul aus transposition_status='pending'.","operationId":"evaluate_v1_scoping_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScopingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Evaluate V1 Scoping Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/framework-mapping":{"get":{"tags":["framework-mapping"],"summary":"Koik","description":"Kõik 10 meedet + ISO27001-sertifitseeritud ettevõtte baseline.","operationId":"koik_v1_framework_mapping_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Koik V1 Framework Mapping Get"}}}}}}},"/v1/framework-mapping/{measure_key}":{"get":{"tags":["framework-mapping"],"summary":"Uks","description":"Üks meede (a-j, 'art 21(2)(x)' või nimetuse fragment).","operationId":"uks_v1_framework_mapping__measure_key__get","parameters":[{"name":"measure_key","in":"path","required":true,"schema":{"type":"string","title":"Measure Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Uks V1 Framework Mapping  Measure Key  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/incident-templates":{"post":{"tags":["incident-notification"],"summary":"Templates","description":"FAAS C5: iga faas kannab sources[] (art 23(4)(x) + riigi seadus KB-st);\nES/FR/IE/NL -> transposition_status='pending' + selgitus (mitte viga).","operationId":"templates_v1_incident_templates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentTemplatesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Templates V1 Incident Templates Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/services":{"get":{"tags":["orders"],"summary":"Services","operationId":"services_v1_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Services V1 Services Get"}}}}}}},"/v1/orders":{"post":{"tags":["orders"],"summary":"Create Order","operationId":"create_order_v1_orders_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Order V1 Orders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orders/{order_id}":{"get":{"tags":["orders"],"summary":"Get Order","operationId":"get_order_v1_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Order V1 Orders  Order Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/download/{token}":{"get":{"tags":["orders"],"summary":"Download","description":"FAAS C2: ajaliselt piiratud (72h) allkirjastatud allalaadimislink.\nAutentimist ei nõua — token ISE on volitus (HMAC + aegumine, fail-closed).\n(response_model=None: tagastab faili (FileResponse), mitte JSON-mudelit —\nväldib OpenAPI-skeemi genereerimise viga forward-ref annotatsioonilt.)","operationId":"download_v1_download__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/invoices/{invoice_number}/download":{"get":{"tags":["orders"],"summary":"Download Invoice","description":"FAAS E2: kliendi arve (.docx) allalaadimine — AINULT oma arve (client_id\nseotud võtmega). Fail-closed: võõras/puuduv arve -> 404.","operationId":"download_invoice_v1_invoices__invoice_number__download_get","parameters":[{"name":"invoice_number","in":"path","required":true,"schema":{"type":"string","title":"Invoice Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/revolut":{"post":{"tags":["orders"],"summary":"Revolut Webhook","description":"Revolut payment webhook (signature-verified). Not for client use.","operationId":"revolut_webhook_v1_webhooks_revolut_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/wizard/questions":{"get":{"tags":["wizard"],"summary":"Wizard Questions","description":"Lokaliseeritud küsimustik (tasuta). OLEMASOLEV questions_for, IMPORT.","operationId":"wizard_questions_v1_wizard_questions_get","parameters":[{"name":"keel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keel"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wizard Questions V1 Wizard Questions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wizard/evaluate":{"post":{"tags":["wizard"],"summary":"Wizard Evaluate","description":"Gap-hindamine (tasuta, ei salvesta). Vigased/puuduvad vastused ->\nValueError -> 422 (globaalne handler). sources[] + järgmine-samm (tasuline).","operationId":"wizard_evaluate_v1_wizard_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardEvaluateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Wizard Evaluate V1 Wizard Evaluate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/vat":{"post":{"tags":["account"],"summary":"Set Vat","description":"Määra oma arveldus-KM-rekvisiidid. Antud väljad uuendatakse (None jätab\nolemasoleva puutumata).","operationId":"set_vat_v1_account_vat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountVatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Set Vat V1 Account Vat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/summary":{"get":{"tags":["billing"],"summary":"Billing Summary","description":"Kliendi arveldus-kokkuvõte: tellimused, arved, subscription, kasutus.","operationId":"billing_summary_v1_billing_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Billing Summary V1 Billing Summary Get"}}}}}}},"/v1/status":{"get":{"tags":["meta"],"summary":"Api Status","description":"Avalik tervisekontroll: api + db + redis + worker. Ei nõua autentimist.","operationId":"api_status_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Status V1 Status Get"}}}}}}},"/v1/changelog":{"get":{"tags":["meta"],"summary":"Api Changelog","description":"KB-muudatuste logi (KB_CHANGELOG.md) JSON-ina. Ei nõua autentimist.","operationId":"api_changelog_v1_changelog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Changelog V1 Changelog Get"}}}}}}},"/v1/signup":{"post":{"tags":["signup"],"summary":"Public Signup","description":"Avalik (auth-vaba) iseteenindus: loob ApiClient 'ootel_makset' +\nsandbox-võtme (kohe, makseta) + litsentsi-tellimuse Revoluti makselingiga.\nPäris võti genereeritakse ja saadetakse e-postiga makse laekumisel.","operationId":"public_signup_v1_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Public Signup V1 Signup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountVatRequest":{"properties":{"kmkr":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Kmkr"},"arveldus_riik":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Arveldus Riik"},"arveldus_aadress":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Arveldus Aadress"},"reg_kood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Reg Kood"}},"type":"object","title":"AccountVatRequest","description":"FAAS E3: kliendi arveldus-/KM-rekvisiidid (self-service). Kõik valikulised\n— antakse mida on. kmkr valideeritakse VIES-ist arve loomisel."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IncidentTemplatesRequest":{"properties":{"detected_at":{"type":"string","format":"date-time","title":"Detected At"},"country":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Country"},"language":{"type":"string","title":"Language","default":"et"},"incident_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Incident Summary"}},"type":"object","required":["detected_at"],"title":"IncidentTemplatesRequest"},"OrderCreateRequest":{"properties":{"teenus":{"type":"string","title":"Teenus"},"riik":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Riik"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"},"idempotency_key":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["teenus"],"title":"OrderCreateRequest"},"ScopingRequest":{"properties":{"tootajad":{"type":"integer","minimum":0.0,"title":"Tootajad"},"sektor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sektor"},"erijuht":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Erijuht"},"avalik_sidevork":{"type":"boolean","title":"Avalik Sidevork","default":false},"kaive_meur":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Kaive Meur"},"bilanss_meur":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Bilanss Meur"},"keel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keel"},"riik":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Riik"}},"type":"object","required":["tootajad"],"title":"ScopingRequest","description":"Vastab sisemisele ScopingWizard.evaluate sisendile (sama loogika,\nEI muudeta)."},"SignupRequest":{"properties":{"nimi":{"type":"string","maxLength":200,"minLength":2,"title":"Nimi"},"email":{"type":"string","maxLength":200,"title":"Email"},"roll":{"type":"string","maxLength":30,"title":"Roll"},"riik":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Riik"},"kmkr":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Kmkr"},"litsents":{"type":"string","maxLength":20,"title":"Litsents","default":"professional"},"veebileht":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Veebileht"}},"type":"object","required":["nimi","email","roll"],"title":"SignupRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WizardEvaluateRequest":{"properties":{"vastused":{"additionalProperties":{"type":"string"},"type":"object","title":"Vastused"},"keel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keel"},"riik":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Riik"}},"type":"object","required":["vastused"],"title":"WizardEvaluateRequest","description":"FAAS D6: gap-analüüsi (lead magnet) sisend — sama loogika mis\nGapWizard.evaluate (EI muudeta, EI salvesta). 20 vastust jah/osaliselt/ei."}}}}