{
    "openapi": "3.0.3",
    "info": {
        "title": "trust.webrt.eu API",
        "version": "1.0.0",
        "description": "Raportul de încredere al unui domeniu deja verificat: scor, categorie de risc, criterii și semnale de risc.\n\n- **Doar citire.** API-ul nu pornește verificări noi; un domeniu neverificat întoarce `404`.\n- **Fără date de contact.** Emailul, telefonul și persoanele de contact nu apar în răspuns.\n- **Scorul nu este o probabilitate de fraudă**, iar un semnal de risc nu este o dovadă.\n- **Autentificare:** antetul `Authorization: Bearer <cheie>`. Cheile se emit la cerere.\n\n| Plan | Cereri / minut | Cereri / zi |\n|---|---|---|\n| Gratuit | 10 | 100 |\n| Pro | 60 | 5000 |\n| Business | 300 | 50000 |",
        "contact": {
            "name": "trust.webrt.eu",
            "url": "https://www.trust.webrt.eu/contact"
        }
    },
    "servers": [
        {
            "url": "https://www.trust.webrt.eu/api/v1",
            "description": "Producție (API-ul nu este încă deschis public)"
        }
    ],
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Domenii",
            "description": "Rapoartele domeniilor verificate"
        }
    ],
    "paths": {
        "/domenii/{domeniu}": {
            "get": {
                "tags": [
                    "Domenii"
                ],
                "operationId": "getDomainReport",
                "summary": "Ultimul raport public al unui domeniu",
                "description": "Întoarce cea mai recentă verificare completă și publică a domeniului. Nu pornește o verificare nouă.",
                "parameters": [
                    {
                        "name": "domeniu",
                        "in": "path",
                        "required": true,
                        "description": "Numele de domeniu, fără protocol și fără „www” (ex. `exemplu.ro`).",
                        "schema": {
                            "type": "string",
                            "example": "exemplu.ro"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Raportul domeniului",
                        "headers": [],
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Report"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Cheie lipsă, greșită sau revocată",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Domeniu invalid, neverificat sau raport privat (și orice rută, cât timp API-ul este oprit)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Limita planului a fost depășită",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        },
                        "headers": {
                            "Retry-After": {
                                "description": "Secunde până la următoarea cerere permisă",
                                "schema": {
                                    "type": "integer"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "description": "Cheia API (începe cu `wt_`)."
            }
        },
        "schemas": {
            "Report": {
                "type": "object",
                "required": [
                    "domain",
                    "report_id",
                    "report_url",
                    "score",
                    "risk",
                    "site_type",
                    "criteria",
                    "signals"
                ],
                "properties": {
                    "domain": {
                        "type": "string",
                        "example": "exemplu.ro"
                    },
                    "report_id": {
                        "type": "string",
                        "description": "Identificatorul unic al verificării",
                        "example": "WT-8F41K2M9QX"
                    },
                    "report_url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Linkul permanent al raportului",
                        "example": "https://www.trust.webrt.eu/raport/WT-8F41K2M9QX"
                    },
                    "checked_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    },
                    "score": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 100,
                        "example": 86
                    },
                    "risk": {
                        "type": "string",
                        "example": "redus",
                        "enum": [
                            "redus",
                            "moderat",
                            "ridicat",
                            "critic"
                        ],
                        "description": "Categoria de risc: din scor (≥80 redus, 60–79 moderat, 40–59 ridicat, sub 40 critic), ridicată de semnalele importante."
                    },
                    "site_type": {
                        "type": "string",
                        "enum": [
                            "Magazin online",
                            "Site de firmă",
                            "Site personal / informativ"
                        ],
                        "description": "Criteriile aplicabile depind de tipul site-ului."
                    },
                    "scorer_version": {
                        "type": "string",
                        "nullable": true,
                        "description": "Versiunea regulilor de scor",
                        "example": "2026.12"
                    },
                    "criteria": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Criterion"
                        }
                    },
                    "signals": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Signal"
                        }
                    },
                    "certificate": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Certificate"
                            }
                        ],
                        "nullable": true
                    },
                    "safe_browsing": {
                        "type": "string",
                        "enum": [
                            "clean",
                            "listed"
                        ],
                        "nullable": true,
                        "example": "clean",
                        "description": "Google Safe Browsing: clean = domeniul nu apare în listele de phishing / malware; listed = apare (vezi semnalul `known_threat`); null = verificarea nu a rulat."
                    }
                }
            },
            "Criterion": {
                "type": "object",
                "required": [
                    "key",
                    "label",
                    "points",
                    "max",
                    "applicable",
                    "certainty"
                ],
                "properties": {
                    "key": {
                        "type": "string",
                        "example": "anaf_active"
                    },
                    "label": {
                        "type": "string",
                        "example": "CUI confirmat de ANAF, firmă activă"
                    },
                    "points": {
                        "type": "integer",
                        "description": "Puncte obținute",
                        "example": 10
                    },
                    "max": {
                        "type": "integer",
                        "description": "Puncte maxime",
                        "example": 10
                    },
                    "applicable": {
                        "type": "boolean",
                        "description": "`false` = criteriul nu se aplică acestui site și nu scade nimic din scor"
                    },
                    "certainty": {
                        "type": "string",
                        "enum": [
                            "confirmed",
                            "detected",
                            "inferred"
                        ],
                        "description": "confirmed = registru oficial; detected = găsit pe site; inferred = estimat din surse indirecte"
                    },
                    "note": {
                        "type": "string",
                        "nullable": true
                    }
                }
            },
            "Signal": {
                "type": "object",
                "required": [
                    "key",
                    "severity",
                    "title",
                    "detail"
                ],
                "description": "Un indiciu care merită verificat. Nu intră în scor și nu este o dovadă de fraudă.",
                "properties": {
                    "key": {
                        "type": "string",
                        "example": "new_domain"
                    },
                    "severity": {
                        "type": "string",
                        "enum": [
                            "high",
                            "medium"
                        ]
                    },
                    "title": {
                        "type": "string",
                        "example": "Domeniu înregistrat recent"
                    },
                    "detail": {
                        "type": "string"
                    }
                }
            },
            "Certificate": {
                "type": "object",
                "description": "Certificatul SSL prezentat de site la momentul verificării",
                "properties": {
                    "issuer": {
                        "type": "string",
                        "example": "Let's Encrypt"
                    },
                    "valid_from": {
                        "type": "string",
                        "format": "date"
                    },
                    "valid_to": {
                        "type": "string",
                        "format": "date"
                    },
                    "days_left": {
                        "type": "integer",
                        "example": 61
                    },
                    "matches_host": {
                        "type": "boolean"
                    }
                }
            },
            "Error": {
                "type": "object",
                "properties": {
                    "message": {
                        "type": "string",
                        "example": "Cheie API lipsă, greșită sau revocată."
                    }
                }
            }
        }
    }
}