{
  "openapi": "3.0.3",
  "info": {
    "title": "CredHub API",
    "version": "1.0.0",
    "description": "Consulta publica agregada + decisao de credito automatica"
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    },
    "schemas": {
      "Consulta": {
        "type": "object",
        "properties": {
          "termo": {
            "type": "string",
            "description": "CPF, CNPJ, CEP, nome, e-mail ou telefone - detectado automaticamente"
          },
          "cpf": {
            "type": "string"
          },
          "cnpj": {
            "type": "string"
          },
          "cep": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "renda": {
            "type": "number"
          },
          "faturamento": {
            "type": "number"
          },
          "valor_solicitado": {
            "type": "number"
          },
          "prazo_meses": {
            "type": "integer"
          },
          "politica": {
            "type": "string",
            "default": "default"
          },
          "fontes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "cache": {
            "type": "boolean",
            "default": true
          }
        }
      },
      "Decisao": {
        "type": "object",
        "properties": {
          "protocolo": {
            "type": "string"
          },
          "score": {
            "type": "integer"
          },
          "decisao": {
            "type": "string",
            "enum": [
              "APROVADO",
              "REVISAR",
              "RECUSADO"
            ]
          },
          "limite_sugerido": {
            "type": "number"
          },
          "motivos": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "vetos": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ],
  "paths": {
    "/v1/consulta": {
      "post": {
        "summary": "Consulta completa (fontes + decisao)",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Consulta"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      },
      "get": {
        "summary": "Consulta por querystring (para Excel, n8n, Make, Zapier)",
        "parameters": [
          {
            "name": "termo",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/decisao": {
      "post": {
        "summary": "So o veredito: score, decisao e limite",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Consulta"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Decisao"
                }
              }
            }
          }
        }
      }
    },
    "/v1/lote": {
      "post": {
        "summary": "Lote em JSON: { itens: [Consulta] }",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/lote.csv": {
      "post": {
        "summary": "Lote em CSV (envie text/csv, recebe text/csv)",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/fontes": {
      "get": {
        "summary": "Catalogo de fontes e status de cada uma",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/politicas": {
      "get": {
        "summary": "Politicas disponiveis",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/politicas/{id}": {
      "get": {
        "summary": "Le a politica",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      },
      "put": {
        "summary": "Grava a politica (regras em JSON)",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/consultas": {
      "get": {
        "summary": "Historico",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/consultas/{protocolo}": {
      "get": {
        "summary": "Consulta por protocolo",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/health": {
      "get": {
        "summary": "Status do servico",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    }
  }
}