{
  "openapi": "3.1.0",
  "info": {
    "title": "facilita.tools REST API",
    "summary": "Brazilian validation, lookup and productivity APIs for developers.",
    "version": "1.0.0",
    "description": "Use the facilita.tools REST API to validate and generate Brazilian documents, query CEP and CNPJ data, convert currencies, validate PIX keys, parse NFe access keys, calculate business values and generate utility data. Requests and responses use JSON. Most public API endpoints accept an optional X-Api-Key header to raise limits and identify usage; /api/v1/me/limits requires it. Platform endpoints under /api/v1/ai and /api/v1/premium require an authenticated web session and are documented separately from API-key integrations. Do not send unnecessary personal data. Keep CPF, CNPJ, CEP and PIX inputs limited to the operation being requested.",
    "contact": {
      "name": "facilita.tools",
      "url": "https://facilita.tools/pt/contato"
    },
    "license": {
      "name": "Proprietary API - public documentation"
    }
  },
  "servers": [
    {
      "url": "https://facilita.tools",
      "description": "Production"
    },
    {
      "url": "http://localhost:5187",
      "description": "Local development"
    }
  ],
  "tags": [
    {
      "name": "Status",
      "description": "Health and availability."
    },
    {
      "name": "Account",
      "description": "API key and quota information."
    },
    {
      "name": "CPF",
      "description": "CPF validation and generation."
    },
    {
      "name": "CNPJ",
      "description": "CNPJ validation, generation and public lookup."
    },
    {
      "name": "CEP",
      "description": "Brazilian postal address lookup."
    },
    {
      "name": "Currency",
      "description": "Currency conversion and supported codes."
    },
    {
      "name": "PIX",
      "description": "PIX key validation, identification and EVP generation."
    },
    {
      "name": "NFe",
      "description": "NFe access key validation, parsing and generation."
    },
    {
      "name": "Calculators",
      "description": "BMI, percentages, working hours, salary and MEI DAS."
    },
    {
      "name": "Utilities",
      "description": "Passwords, text, number bases, roman numerals and IP helpers."
    },
    {
      "name": "QR Code",
      "description": "QR Code generation."
    },
    {
      "name": "US",
      "description": "United States utility validators: phone, ZIP, ABA routing number, EIN and business days."
    },
    {
      "name": "Website",
      "description": "Public website integrations."
    },
    {
      "name": "Chat",
      "description": "Public chat widget APIs used by facilita.tools pages."
    },
    {
      "name": "Platform AI",
      "description": "Authenticated web-session APIs for AI tools inside the platform."
    },
    {
      "name": "Premium",
      "description": "Authenticated web-session APIs for premium platform features."
    }
  ],
  "paths": {
    "/api/v1/status": {
      "get": {
        "tags": [
          "Status"
        ],
        "summary": "Check API health",
        "operationId": "getApiStatus",
        "security": [],
        "responses": {
          "200": {
            "description": "API is healthy.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusResponse"
                },
                "examples": {
                  "healthy": {
                    "value": {
                      "status": "healthy",
                      "timestamp": "2026-05-12T12:00:00Z",
                      "version": "1.0.0"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "API is degraded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/me/limits": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get limits and usage for the current API key",
        "operationId": "getMyApiLimits",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Current plan limits and usage.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitInfoResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cpf/validate": {
      "post": {
        "tags": [
          "CPF"
        ],
        "summary": "Validate a CPF",
        "operationId": "validateCpf",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CpfValidateRequest"
              },
              "examples": {
                "valid": {
                  "value": {
                    "cpf": "529.982.247-25"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "CPF validation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CpfValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cpf/generate": {
      "get": {
        "tags": [
          "CPF"
        ],
        "summary": "Generate valid CPFs",
        "operationId": "generateCpfs",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Quantity"
          },
          {
            "$ref": "#/components/parameters/Formatted"
          }
        ],
        "responses": {
          "200": {
            "description": "Generated CPFs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentListEnvelope"
                },
                "examples": {
                  "generated": {
                    "value": {
                      "success": true,
                      "data": {
                        "cpfs": [
                          "529.982.247-25"
                        ]
                      },
                      "message": null,
                      "correlationId": "00-00000000000000000000000000000000-0000000000000000-00",
                      "timestamp": "2026-05-12T12:00:00Z"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cnpj/validate": {
      "post": {
        "tags": [
          "CNPJ"
        ],
        "summary": "Validate a numeric CNPJ",
        "operationId": "validateCnpj",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CnpjValidateRequest"
              },
              "examples": {
                "valid": {
                  "value": {
                    "cnpj": "11.222.333/0001-81"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "CNPJ validation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cnpj/generate": {
      "get": {
        "tags": [
          "CNPJ"
        ],
        "summary": "Generate valid numeric CNPJs",
        "operationId": "generateCnpjs",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Quantity"
          },
          {
            "$ref": "#/components/parameters/Formatted"
          }
        ],
        "responses": {
          "200": {
            "description": "Generated CNPJs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentListEnvelope"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cnpj/lookup/{cnpj}": {
      "get": {
        "tags": [
          "CNPJ"
        ],
        "summary": "Lookup public CNPJ registration data",
        "operationId": "lookupCnpj",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CnpjPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Public company data for the CNPJ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CnpjLookupResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cnpj-alphanumeric/validate": {
      "post": {
        "tags": [
          "CNPJ"
        ],
        "summary": "Validate an alphanumeric CNPJ",
        "operationId": "validateAlphanumericCnpj",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CnpjValidateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Alphanumeric CNPJ validation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CnpjAlphanumericValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cnpj-alphanumeric/generate": {
      "get": {
        "tags": [
          "CNPJ"
        ],
        "summary": "Generate valid alphanumeric CNPJs",
        "operationId": "generateAlphanumericCnpjs",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Quantity"
          },
          {
            "$ref": "#/components/parameters/Formatted"
          }
        ],
        "responses": {
          "200": {
            "description": "Generated alphanumeric CNPJs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentListEnvelope"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/cep/{cep}": {
      "get": {
        "tags": [
          "CEP"
        ],
        "summary": "Lookup a Brazilian postal address",
        "operationId": "lookupCep",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "cep",
            "in": "path",
            "required": true,
            "description": "CEP with or without punctuation.",
            "schema": {
              "type": "string",
              "examples": [
                "01001000"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Address data for the CEP.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CepLookupResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/currency/convert": {
      "get": {
        "tags": [
          "Currency"
        ],
        "summary": "Convert an amount between currencies",
        "operationId": "convertCurrency",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3,
              "examples": [
                "USD"
              ]
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3,
              "examples": [
                "BRL"
              ]
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "format": "double",
              "minimum": 0.01,
              "examples": [
                100
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Converted amount and exchange rate.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CurrencyConvertResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/currency/currencies": {
      "get": {
        "tags": [
          "Currency"
        ],
        "summary": "List supported currencies",
        "operationId": "listCurrencies",
        "security": [],
        "responses": {
          "200": {
            "description": "Supported currency codes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CurrencyListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pix/key/validate": {
      "post": {
        "tags": [
          "PIX"
        ],
        "summary": "Validate a PIX key",
        "operationId": "validatePixKey",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PixKeyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "PIX key validation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PixValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/pix/key/identify": {
      "post": {
        "tags": [
          "PIX"
        ],
        "summary": "Identify the type of a PIX key",
        "operationId": "identifyPixKey",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PixKeyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Detected PIX key type.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PixIdentifyEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/pix/evp/generate": {
      "get": {
        "tags": [
          "PIX"
        ],
        "summary": "Generate random EVP PIX keys",
        "operationId": "generatePixEvpKeys",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Quantity"
          }
        ],
        "responses": {
          "200": {
            "description": "Generated EVP keys.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StringListEnvelope"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/nfe/key/validate": {
      "post": {
        "tags": [
          "NFe"
        ],
        "summary": "Validate an NFe access key",
        "operationId": "validateNfeKey",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NfeKeyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "NFe validation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NfeValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/nfe/key/parse": {
      "post": {
        "tags": [
          "NFe"
        ],
        "summary": "Parse an NFe access key",
        "operationId": "parseNfeKey",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NfeKeyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Parsed NFe access key details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NfeDetailsEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/nfe/key/generate": {
      "get": {
        "tags": [
          "NFe"
        ],
        "summary": "Generate valid NFe access keys",
        "operationId": "generateNfeKeys",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Quantity"
          },
          {
            "name": "ufCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "35",
              "examples": [
                "35"
              ]
            }
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "55",
              "enum": [
                "55",
                "65"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Generated NFe keys.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StringListEnvelope"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/nfe/uf-codes": {
      "get": {
        "tags": [
          "NFe"
        ],
        "summary": "List Brazilian UF codes used in NFe keys",
        "operationId": "listNfeUfCodes",
        "security": [],
        "responses": {
          "200": {
            "description": "UF code dictionary.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DictionaryEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/calc/bmi": {
      "post": {
        "tags": [
          "Calculators"
        ],
        "summary": "Calculate BMI",
        "operationId": "calculateBmi",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BmiRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "BMI result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BmiEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/calc/percentage": {
      "get": {
        "tags": [
          "Calculators"
        ],
        "summary": "Calculate percentage of a value",
        "operationId": "calculatePercentage",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "percentage",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "examples": [
                15
              ]
            }
          },
          {
            "name": "value",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "examples": [
                200
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/NumericResult"
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/calc/percentage/what-percent": {
      "get": {
        "tags": [
          "Calculators"
        ],
        "summary": "Calculate what percentage a part is of a whole",
        "operationId": "calculateWhatPercent",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "part",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "examples": [
                30
              ]
            }
          },
          {
            "name": "whole",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "examples": [
                200
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/NumericResult"
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/calc/percentage/change": {
      "get": {
        "tags": [
          "Calculators"
        ],
        "summary": "Calculate percentage change",
        "operationId": "calculatePercentageChange",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "initial",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "examples": [
                100
              ]
            }
          },
          {
            "name": "final",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "examples": [
                125
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/NumericResult"
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/calc/hours": {
      "post": {
        "tags": [
          "Calculators"
        ],
        "summary": "Calculate worked hours",
        "operationId": "calculateWorkedHours",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkHoursRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Worked hours result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkHoursEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/calc/net-salary": {
      "post": {
        "tags": [
          "Calculators"
        ],
        "summary": "Calculate Brazilian net salary",
        "operationId": "calculateNetSalary",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NetSalaryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Net salary calculation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetSalaryEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/calc/das-mei": {
      "post": {
        "tags": [
          "Calculators"
        ],
        "summary": "Calculate monthly DAS for MEI",
        "operationId": "calculateDasMei",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DasMeiRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "DAS MEI values.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DasMeiEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/utils/password/generate": {
      "get": {
        "tags": [
          "Utilities"
        ],
        "summary": "Generate secure passwords",
        "operationId": "generatePasswords",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "length",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 4,
              "maximum": 128,
              "default": 16
            }
          },
          {
            "name": "uppercase",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "lowercase",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "numbers",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "symbols",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "$ref": "#/components/parameters/Quantity"
          }
        ],
        "responses": {
          "200": {
            "description": "Generated passwords.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PasswordListEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/utils/text/count": {
      "post": {
        "tags": [
          "Utilities"
        ],
        "summary": "Count text metrics",
        "operationId": "countText",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Text metrics.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TextCountEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/utils/text/convert": {
      "post": {
        "tags": [
          "Utilities"
        ],
        "summary": "Convert text case and format",
        "operationId": "convertText",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Converted text variants.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TextConvertEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/utils/number-base/convert": {
      "post": {
        "tags": [
          "Utilities"
        ],
        "summary": "Convert a number between bases",
        "operationId": "convertNumberBase",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NumberBaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Number represented in common bases.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NumberBaseEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/utils/roman": {
      "get": {
        "tags": [
          "Utilities"
        ],
        "summary": "Convert between decimal and roman numerals",
        "operationId": "convertRomanNumeral",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3999,
              "examples": [
                2026
              ]
            }
          },
          {
            "name": "roman",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "examples": [
                "MMXXVI"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Roman or decimal conversion result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RomanEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/utils/network/my-ip": {
      "get": {
        "tags": [
          "Utilities"
        ],
        "summary": "Return the caller IP address",
        "operationId": "getMyIp",
        "security": [],
        "responses": {
          "200": {
            "description": "Caller IP address and version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyIpEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/qrcode/generate": {
      "post": {
        "tags": [
          "QR Code"
        ],
        "summary": "Generate a QR Code image",
        "operationId": "generateQrCode",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QrCodeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "QR Code as a data URI or encoded image payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QrCodeEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/feedback": {
      "post": {
        "tags": [
          "Website"
        ],
        "summary": "Submit a tool rating",
        "operationId": "submitFeedback",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rating accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/newsletter/subscribe": {
      "post": {
        "tags": [
          "Website"
        ],
        "summary": "Subscribe an email to the newsletter",
        "operationId": "subscribeNewsletter",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewsletterSubscribeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Subscription accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/ip": {
      "get": {
        "tags": [
          "Utilities"
        ],
        "summary": "Return the caller IP address (legacy alias)",
        "description": "Compatibility alias for /api/v1/utils/network/my-ip.",
        "operationId": "getMyIpLegacy",
        "security": [],
        "responses": {
          "200": {
            "description": "Caller IP address and version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyIpEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/chat/catalog": {
      "get": {
        "tags": [
          "Chat"
        ],
        "summary": "Get the public chat tool catalog",
        "operationId": "getChatCatalog",
        "security": [],
        "parameters": [
          {
            "name": "culture",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "pt",
                "en",
                "es"
              ],
              "default": "pt"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Serializable chat catalog.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatCatalogResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/chat/turn": {
      "post": {
        "tags": [
          "Chat"
        ],
        "summary": "Execute one public chat turn",
        "operationId": "createChatTurn",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatTurnRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Chat response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatTurnResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "description": "Chat rate limit response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatTurnResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/ai/summarize": {
      "post": {
        "tags": [
          "Platform AI"
        ],
        "summary": "Summarize text with platform AI",
        "description": "Requires an authenticated facilita.tools web session. This is not authenticated with X-Api-Key.",
        "operationId": "summarizeTextWithAi",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiTextRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "AI text response and quota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiTextEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/ai/rewrite": {
      "post": {
        "tags": [
          "Platform AI"
        ],
        "summary": "Rewrite text with platform AI",
        "description": "Requires an authenticated facilita.tools web session. This is not authenticated with X-Api-Key.",
        "operationId": "rewriteTextWithAi",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiTextRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "AI text response and quota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiTextEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/ai/grammar": {
      "post": {
        "tags": [
          "Platform AI"
        ],
        "summary": "Grammar text with platform AI",
        "description": "Requires an authenticated facilita.tools web session. This is not authenticated with X-Api-Key.",
        "operationId": "grammarTextWithAi",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiTextRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "AI text response and quota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiTextEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/ai/generate": {
      "post": {
        "tags": [
          "Platform AI"
        ],
        "summary": "Generate text with platform AI",
        "description": "Requires an authenticated facilita.tools web session. This is not authenticated with X-Api-Key.",
        "operationId": "generateTextWithAi",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiTextRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "AI text response and quota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiTextEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/ai/quota": {
      "get": {
        "tags": [
          "Platform AI"
        ],
        "summary": "Get remaining daily AI quota",
        "description": "Requires an authenticated facilita.tools web session.",
        "operationId": "getAiQuota",
        "security": [
          {
            "CookieAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Daily AI quota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiQuotaEnvelope"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/premium/history": {
      "post": {
        "tags": [
          "Premium"
        ],
        "summary": "Save a tool history entry",
        "operationId": "savePremiumHistory",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveHistoryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved entry id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessIdResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "get": {
        "tags": [
          "Premium"
        ],
        "summary": "List tool history entries",
        "operationId": "listPremiumHistory",
        "security": [
          {
            "CookieAuth": []
          }
        ],
        "parameters": [
          {
            "name": "toolSlug",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated history.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedHistoryResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/premium/history/cleanup": {
      "delete": {
        "tags": [
          "Premium"
        ],
        "summary": "Clean up expired tool history for the user",
        "operationId": "cleanupPremiumHistory",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "Cleanup result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessIdResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/premium/preferences": {
      "post": {
        "tags": [
          "Premium"
        ],
        "summary": "Save tool preferences",
        "operationId": "savePremiumPreferences",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SavePreferencesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved preference id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessIdResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "get": {
        "tags": [
          "Premium"
        ],
        "summary": "Get saved tool preferences",
        "operationId": "getPremiumPreferences",
        "security": [
          {
            "CookieAuth": []
          }
        ],
        "parameters": [
          {
            "name": "toolSlug",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Saved preferences.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreferencesResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/premium/cnpj-monitor": {
      "post": {
        "tags": [
          "Premium"
        ],
        "summary": "Add a CNPJ monitor",
        "operationId": "addPremiumCnpjMonitor",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCnpjMonitorRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Monitor id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessIdResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "get": {
        "tags": [
          "Premium"
        ],
        "summary": "List monitored CNPJs",
        "operationId": "listPremiumCnpjMonitors",
        "security": [
          {
            "CookieAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Monitor list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/premium/cnpj-monitor/{monitorId}": {
      "delete": {
        "tags": [
          "Premium"
        ],
        "summary": "Remove a CNPJ monitor",
        "operationId": "removePremiumCnpjMonitor",
        "security": [
          {
            "CookieAuth": [],
            "CsrfToken": []
          }
        ],
        "parameters": [
          {
            "name": "monitorId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Removal result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessIdResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/premium/cnpj-monitor/alerts": {
      "get": {
        "tags": [
          "Premium"
        ],
        "summary": "List CNPJ monitor alerts",
        "operationId": "listPremiumCnpjAlerts",
        "security": [
          {
            "CookieAuth": []
          }
        ],
        "parameters": [
          {
            "name": "unreadOnly",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Alert list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/premium/plan": {
      "get": {
        "tags": [
          "Premium"
        ],
        "summary": "Get active platform and API plan information",
        "operationId": "getPremiumPlanInfo",
        "security": [
          {
            "CookieAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Plan information.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PremiumPlanInfoResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/api/v1/newsletter-legacy/subscribe": {
      "post": {
        "tags": [
          "Website"
        ],
        "summary": "Subscribe an email to the newsletter (legacy endpoint)",
        "description": "Deprecated compatibility route. Prefer /api/v1/newsletter/subscribe.",
        "operationId": "subscribeNewsletterLegacy",
        "deprecated": true,
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewsletterSubscribeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Subscription accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          }
        }
      }
    },
    "/api/v1/us/phone/validate": {
      "post": {
        "tags": [
          "US"
        ],
        "summary": "Validate a US phone number",
        "operationId": "validateUsPhone",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UsPhoneValidateRequest"
              },
              "examples": {
                "sample": {
                  "value": {
                    "phone": "(415) 555-2671"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Validate a US phone number result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsPhoneValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/us/zip/validate": {
      "post": {
        "tags": [
          "US"
        ],
        "summary": "Validate a US ZIP code",
        "operationId": "validateUsZip",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UsZipValidateRequest"
              },
              "examples": {
                "sample": {
                  "value": {
                    "zip": "94105-1804"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Validate a US ZIP code result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsZipValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/us/routing/validate": {
      "post": {
        "tags": [
          "US"
        ],
        "summary": "Validate an ABA routing number",
        "operationId": "validateUsRouting",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UsRoutingValidateRequest"
              },
              "examples": {
                "sample": {
                  "value": {
                    "routingNumber": "021000021"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Validate an ABA routing number result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsRoutingValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/us/ein/validate": {
      "post": {
        "tags": [
          "US"
        ],
        "summary": "Validate an EIN format",
        "operationId": "validateUsEin",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UsEinValidateRequest"
              },
              "examples": {
                "sample": {
                  "value": {
                    "ein": "12-3456789"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Validate an EIN format result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsEinValidateEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api/v1/us/business-days": {
      "get": {
        "tags": [
          "US"
        ],
        "summary": "Count US business days between two dates",
        "operationId": "countUsBusinessDays",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "Start date (YYYY-MM-DD)."
          },
          {
            "name": "end",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "End date (YYYY-MM-DD). Range up to 10 years."
          }
        ],
        "responses": {
          "200": {
            "description": "Business day count excluding weekends and US federal holidays.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsBusinessDaysEnvelope"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ValidationProblem"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Key",
        "description": "API key generated in the facilita.tools dashboard."
      },
      "CookieAuth": {
        "type": "apiKey",
        "in": "cookie",
        "name": ".AspNetCore.Cookies",
        "description": "Authenticated facilita.tools web session cookie. Used by platform-only endpoints, not API-key integrations."
      },
      "CsrfToken": {
        "type": "apiKey",
        "in": "header",
        "name": "RequestVerificationToken",
        "description": "Anti-forgery token emitted in the csrf-token meta tag and required by authenticated mutating platform endpoints."
      }
    },
    "parameters": {
      "Quantity": {
        "name": "quantity",
        "in": "query",
        "required": false,
        "description": "Number of items to generate. The maximum is limited by the current plan.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "default": 1,
          "examples": [
            1
          ]
        }
      },
      "Formatted": {
        "name": "formatted",
        "in": "query",
        "required": false,
        "description": "Return documents with punctuation.",
        "schema": {
          "type": "boolean",
          "default": true
        }
      },
      "CnpjPath": {
        "name": "cnpj",
        "in": "path",
        "required": true,
        "description": "CNPJ with or without punctuation.",
        "schema": {
          "type": "string",
          "examples": [
            "11222333000181"
          ]
        }
      }
    },
    "responses": {
      "Problem": {
        "description": "Request failed.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
            }
          },
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
            }
          }
        }
      },
      "ValidationProblem": {
        "description": "Invalid request.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
            }
          },
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Rate limit exceeded.",
        "headers": {
          "Retry-After": {
            "schema": {
              "type": "integer"
            },
            "description": "Seconds to wait before retrying."
          },
          "X-RateLimit-Limit": {
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Remaining": {
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Reset": {
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
            }
          }
        }
      },
      "NumericResult": {
        "description": "Numeric calculation result.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/NumericResultEnvelope"
            }
          }
        }
      }
    },
    "schemas": {
      "ApiEnvelope": {
        "type": "object",
        "required": [
          "success",
          "correlationId",
          "timestamp"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "data": {
            "description": "Operation-specific payload."
          },
          "message": {
            "type": [
              "string",
              "null"
            ]
          },
          "correlationId": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ProblemDetails": {
        "type": "object",
        "required": [
          "title",
          "status",
          "correlationId"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": [
              "string",
              "null"
            ]
          },
          "instance": {
            "type": [
              "string",
              "null"
            ]
          },
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "correlationId": {
            "type": "string"
          },
          "errors": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      },
      "StatusResponse": {
        "type": "object",
        "required": [
          "status",
          "timestamp",
          "version"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "healthy",
              "degraded"
            ]
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "version": {
            "type": "string"
          },
          "checks": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "RateLimitInfoResponse": {
        "type": "object",
        "properties": {
          "plan": {
            "type": "string"
          },
          "limits": {
            "type": "object",
            "properties": {
              "requestsPerMinute": {
                "type": "integer"
              },
              "requestsPerMonth": {
                "type": "integer"
              }
            }
          },
          "usage": {
            "type": "object",
            "properties": {
              "requestsThisMonth": {
                "type": "integer"
              },
              "monthlyRemaining": {
                "type": "integer"
              },
              "monthlyResetDate": {
                "type": "string",
                "examples": [
                  "2026-06-01"
                ]
              }
            }
          },
          "key": {
            "type": "object",
            "properties": {
              "prefix": {
                "type": "string"
              },
              "createdDate": {
                "type": "string",
                "examples": [
                  "2026-05-12 19:00:00"
                ]
              },
              "lastUsedDate": {
                "type": [
                  "string",
                  "null"
                ],
                "examples": [
                  "2026-05-12 19:10:00"
                ]
              },
              "expiresDate": {
                "type": [
                  "string",
                  "null"
                ],
                "examples": [
                  "2027-05-12 19:00:00"
                ]
              }
            }
          }
        }
      },
      "CpfValidateRequest": {
        "type": "object",
        "required": [
          "cpf"
        ],
        "properties": {
          "cpf": {
            "type": "string",
            "examples": [
              "529.982.247-25"
            ]
          }
        }
      },
      "CnpjValidateRequest": {
        "type": "object",
        "required": [
          "cnpj"
        ],
        "properties": {
          "cnpj": {
            "type": "string",
            "examples": [
              "11.222.333/0001-81"
            ]
          }
        }
      },
      "DocumentValidateResult": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "formatted": {
            "type": "string"
          }
        }
      },
      "CpfValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/DocumentValidateResult"
              }
            }
          }
        ]
      },
      "DocumentValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/DocumentValidateResult"
              }
            }
          }
        ]
      },
      "DocumentListEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "cpfs": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "cnpjs": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        ]
      },
      "CnpjAlphanumericValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "valid": {
                    "type": "boolean"
                  },
                  "formatted": {
                    "type": "string"
                  },
                  "root": {
                    "type": "string"
                  },
                  "branch": {
                    "type": "string"
                  },
                  "checkDigits": {
                    "type": "string"
                  },
                  "isAlphanumeric": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        ]
      },
      "CnpjLookupResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "cnpj": {
            "type": "string"
          },
          "cnpjFormatted": {
            "type": "string"
          },
          "razaoSocial": {
            "type": "string"
          },
          "nomeFantasia": {
            "type": [
              "string",
              "null"
            ]
          },
          "naturezaJuridica": {
            "type": "string"
          },
          "capitalSocial": {
            "type": [
              "number",
              "null"
            ]
          },
          "porte": {
            "type": [
              "string",
              "null"
            ]
          },
          "dataAbertura": {
            "type": [
              "string",
              "null"
            ]
          },
          "situacaoCadastral": {
            "type": [
              "string",
              "null"
            ]
          },
          "logradouro": {
            "type": [
              "string",
              "null"
            ]
          },
          "numero": {
            "type": [
              "string",
              "null"
            ]
          },
          "bairro": {
            "type": [
              "string",
              "null"
            ]
          },
          "municipio": {
            "type": [
              "string",
              "null"
            ]
          },
          "uf": {
            "type": [
              "string",
              "null"
            ]
          },
          "cep": {
            "type": [
              "string",
              "null"
            ]
          },
          "partners": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "source": {
            "type": "string"
          },
          "lastUpdated": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "dataSituacao": {
            "type": [
              "string",
              "null"
            ]
          },
          "cnaePrincipal": {
            "type": [
              "string",
              "null"
            ]
          },
          "cnaeDescricao": {
            "type": [
              "string",
              "null"
            ]
          },
          "complemento": {
            "type": [
              "string",
              "null"
            ]
          },
          "telefone": {
            "type": [
              "string",
              "null"
            ]
          },
          "email": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "CepLookupResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "cep": {
            "type": "string"
          },
          "logradouro": {
            "type": "string"
          },
          "complemento": {
            "type": [
              "string",
              "null"
            ]
          },
          "bairro": {
            "type": "string"
          },
          "localidade": {
            "type": "string"
          },
          "uf": {
            "type": "string"
          },
          "ibge": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "CurrencyConvertResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "convertedAmount": {
            "type": "number"
          },
          "exchangeRate": {
            "type": "number"
          },
          "quotationDate": {
            "type": "string"
          },
          "source": {
            "type": "string"
          }
        }
      },
      "CurrencyListResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "currencies": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "symbol": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "PixKeyRequest": {
        "type": "object",
        "required": [
          "key"
        ],
        "properties": {
          "key": {
            "type": "string",
            "examples": [
              "contato@facilita.tools"
            ]
          }
        }
      },
      "PixValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "valid": {
                    "type": "boolean"
                  },
                  "keyType": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "formattedKey": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "error": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "PixIdentifyEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "StringListEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "keys": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": true
              }
            }
          }
        ]
      },
      "NfeKeyRequest": {
        "type": "object",
        "required": [
          "key"
        ],
        "properties": {
          "key": {
            "type": "string",
            "minLength": 44,
            "maxLength": 44
          }
        }
      },
      "NfeDetails": {
        "type": "object",
        "properties": {
          "ufCode": {
            "type": "integer"
          },
          "year": {
            "type": "integer"
          },
          "month": {
            "type": "integer"
          },
          "cnpj": {
            "type": "string"
          },
          "model": {
            "type": "integer"
          },
          "series": {
            "type": "integer"
          },
          "number": {
            "type": "integer"
          },
          "emissionType": {
            "type": "integer"
          },
          "numericCode": {
            "type": "string"
          },
          "checkDigit": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      },
      "NfeValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "valid": {
                    "type": "boolean"
                  },
                  "details": {
                    "$ref": "#/components/schemas/NfeDetails"
                  }
                }
              }
            }
          }
        ]
      },
      "NfeDetailsEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/NfeDetails"
              }
            }
          }
        ]
      },
      "DictionaryEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          }
        ]
      },
      "BmiRequest": {
        "type": "object",
        "required": [
          "weightKg",
          "heightM"
        ],
        "properties": {
          "weightKg": {
            "type": "number",
            "minimum": 1,
            "examples": [
              72.5
            ]
          },
          "heightM": {
            "type": "number",
            "minimum": 0.3,
            "examples": [
              1.75
            ]
          }
        }
      },
      "BmiEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "bmi": {
                    "type": "number"
                  },
                  "classification": {
                    "type": "string"
                  },
                  "idealWeightMin": {
                    "type": "number"
                  },
                  "idealWeightMax": {
                    "type": "number"
                  }
                }
              }
            }
          }
        ]
      },
      "NumericResultEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "result": {
                    "type": "number"
                  }
                }
              }
            }
          }
        ]
      },
      "WorkHoursRequest": {
        "type": "object",
        "required": [
          "entryMinutes",
          "lunchOutMinutes",
          "lunchInMinutes",
          "exitMinutes"
        ],
        "properties": {
          "entryMinutes": {
            "type": "integer",
            "examples": [
              480
            ]
          },
          "lunchOutMinutes": {
            "type": "integer",
            "examples": [
              720
            ]
          },
          "lunchInMinutes": {
            "type": "integer",
            "examples": [
              780
            ]
          },
          "exitMinutes": {
            "type": "integer",
            "examples": [
              1080
            ]
          }
        }
      },
      "WorkHoursEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "totalWorkedMinutes": {
                    "type": "integer"
                  },
                  "totalWorkedFormatted": {
                    "type": "string"
                  },
                  "overtimeMinutes": {
                    "type": "integer"
                  },
                  "overtimeFormatted": {
                    "type": "string"
                  },
                  "lunchMinutes": {
                    "type": "integer"
                  },
                  "normalMinutes": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        ]
      },
      "NetSalaryRequest": {
        "type": "object",
        "required": [
          "grossSalary"
        ],
        "properties": {
          "grossSalary": {
            "type": "number",
            "minimum": 0
          },
          "dependents": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "otherDeductions": {
            "type": "number",
            "minimum": 0,
            "default": 0
          }
        }
      },
      "NetSalaryEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "grossSalary": {
                    "type": "number"
                  },
                  "inssAmount": {
                    "type": "number"
                  },
                  "inssEffectiveRate": {
                    "type": "number"
                  },
                  "irrfAmount": {
                    "type": "number"
                  },
                  "irrfEffectiveRate": {
                    "type": "number"
                  },
                  "otherDeductions": {
                    "type": "number"
                  },
                  "netSalary": {
                    "type": "number"
                  }
                }
              }
            }
          }
        ]
      },
      "DasMeiRequest": {
        "type": "object",
        "properties": {
          "activity": {
            "type": "string",
            "enum": [
              "commerce",
              "services",
              "commerce_and_services"
            ],
            "default": "commerce"
          },
          "year": {
            "type": "integer",
            "default": 2026
          }
        }
      },
      "DasMeiEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "inss": {
                    "type": "number"
                  },
                  "icms": {
                    "type": "number"
                  },
                  "iss": {
                    "type": "number"
                  },
                  "total": {
                    "type": "number"
                  },
                  "minimumWage": {
                    "type": "number"
                  },
                  "annualLimit": {
                    "type": "number"
                  },
                  "monthlyLimit": {
                    "type": "number"
                  }
                }
              }
            }
          }
        ]
      },
      "PasswordListEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "passwords": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "password": {
                          "type": "string"
                        },
                        "strength": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 4,
                          "description": "Strength score from 0 to 4."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        ]
      },
      "TextRequest": {
        "type": "object",
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string"
          }
        }
      },
      "TextCountEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "characters": {
                    "type": "integer"
                  },
                  "charactersNoSpaces": {
                    "type": "integer"
                  },
                  "words": {
                    "type": "integer"
                  },
                  "sentences": {
                    "type": "integer"
                  },
                  "paragraphs": {
                    "type": "integer"
                  },
                  "lines": {
                    "type": "integer"
                  },
                  "readingTimeMinutes": {
                    "type": "number"
                  },
                  "speakingTimeMinutes": {
                    "type": "number"
                  }
                }
              }
            }
          }
        ]
      },
      "TextConvertEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "upper": {
                    "type": "string"
                  },
                  "lower": {
                    "type": "string"
                  },
                  "capitalized": {
                    "type": "string"
                  },
                  "sentence": {
                    "type": "string"
                  },
                  "alternating": {
                    "type": "string"
                  },
                  "inverted": {
                    "type": "string"
                  },
                  "slug": {
                    "type": "string"
                  },
                  "trimmed": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "NumberBaseRequest": {
        "type": "object",
        "required": [
          "value",
          "fromBase"
        ],
        "properties": {
          "value": {
            "type": "string",
            "examples": [
              "FF"
            ]
          },
          "fromBase": {
            "type": "integer",
            "enum": [
              2,
              8,
              10,
              16
            ],
            "examples": [
              16
            ]
          }
        }
      },
      "NumberBaseEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "binary": {
                    "type": "string"
                  },
                  "octal": {
                    "type": "string"
                  },
                  "decimal": {
                    "type": "string"
                  },
                  "hexadecimal": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "RomanEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "result": {
                    "type": "string"
                  },
                  "number": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "roman": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "MyIpEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "ip": {
                    "type": "string"
                  },
                  "version": {
                    "type": "string",
                    "enum": [
                      "IPv4",
                      "IPv6",
                      "Unknown"
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "QrCodeRequest": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "string",
            "maxLength": 4096
          },
          "size": {
            "type": "integer",
            "default": 256,
            "minimum": 100,
            "maximum": 1000
          },
          "errorCorrectionLevel": {
            "type": "integer",
            "default": 1,
            "minimum": 0,
            "maximum": 3
          }
        }
      },
      "QrCodeEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "qrCode": {
                    "type": "string"
                  },
                  "format": {
                    "type": "string"
                  },
                  "size": {
                    "type": "integer"
                  },
                  "contentLength": {
                    "type": "integer"
                  },
                  "errorCorrectionLevel": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "FeedbackRequest": {
        "type": "object",
        "required": [
          "toolSlug",
          "rating"
        ],
        "properties": {
          "toolSlug": {
            "type": "string"
          },
          "rating": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
          }
        }
      },
      "NewsletterSubscribeRequest": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          }
        }
      },
      "NfeKeyGenerateOptions": {
        "type": "object",
        "properties": {
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "default": 1
          },
          "ufCode": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "35"
            ]
          },
          "model": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "55"
            ]
          }
        }
      },
      "ChatTurnRequest": {
        "type": "object",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string",
            "examples": [
              "Gerar um CPF valido"
            ]
          },
          "culture": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "pt",
              "en",
              "es",
              null
            ]
          },
          "sessionId": {
            "type": [
              "string",
              "null"
            ]
          },
          "clientTimeZone": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "America/Sao_Paulo"
            ]
          },
          "allowExternalFallback": {
            "type": "boolean",
            "default": false
          },
          "pageContext": {
            "$ref": "#/components/schemas/ChatPageContext"
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatHistoryMessage"
            }
          }
        }
      },
      "ChatPageContext": {
        "type": "object",
        "properties": {
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ChatHistoryMessage": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "user",
              "assistant"
            ]
          },
          "content": {
            "type": "string"
          }
        }
      },
      "ChatTurnResponse": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "tool_result"
            ]
          },
          "message": {
            "type": "string"
          },
          "tool": {
            "type": [
              "string",
              "null"
            ]
          },
          "result": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": true
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatAction"
            }
          },
          "confidence": {
            "type": "number"
          },
          "latencyMs": {
            "type": "integer"
          },
          "source": {
            "type": "string"
          },
          "quota": {
            "$ref": "#/components/schemas/ChatQuota"
          },
          "suggestions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatSuggestion"
            }
          }
        }
      },
      "ChatCatalogResponse": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "hot": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatCatalogTool"
            }
          },
          "tools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatCatalogTool"
            }
          }
        }
      },
      "ChatCatalogTool": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "route": {
            "type": "string"
          },
          "action": {
            "type": "string"
          },
          "mode": {
            "type": "string"
          },
          "handler": {
            "type": "string"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "suggestions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatSuggestion"
            }
          },
          "hot": {
            "type": "boolean"
          }
        }
      },
      "ChatAction": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ChatSuggestion": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "route": {
            "type": "string"
          }
        }
      },
      "ChatQuota": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "authenticated": {
            "type": "boolean"
          },
          "used": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          },
          "window": {
            "type": "string"
          },
          "plan": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "AiTextRequest": {
        "type": "object",
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "AiTextEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  },
                  "provider": {
                    "type": "string"
                  },
                  "quota": {
                    "$ref": "#/components/schemas/AiQuota"
                  }
                }
              }
            }
          }
        ]
      },
      "AiQuota": {
        "type": "object",
        "properties": {
          "used": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          }
        }
      },
      "AiQuotaEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "used": {
                    "type": "integer"
                  },
                  "limit": {
                    "type": "integer"
                  },
                  "remaining": {
                    "type": "integer"
                  },
                  "plan": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "SaveHistoryRequest": {
        "type": "object",
        "properties": {
          "toolSlug": {
            "type": [
              "string",
              "null"
            ]
          },
          "inputData": {
            "type": [
              "string",
              "null"
            ],
            "description": "Serialized JSON string."
          },
          "resultData": {
            "type": [
              "string",
              "null"
            ],
            "description": "Serialized JSON string."
          }
        }
      },
      "SavePreferencesRequest": {
        "type": "object",
        "properties": {
          "toolSlug": {
            "type": "string"
          },
          "preferences": {
            "type": [
              "string",
              "null"
            ],
            "description": "Serialized JSON string."
          }
        }
      },
      "AddCnpjMonitorRequest": {
        "type": "object",
        "properties": {
          "cnpj": {
            "type": [
              "string",
              "null"
            ]
          },
          "companyName": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "SuccessIdResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "id": {
            "type": "integer"
          },
          "reactivated": {
            "type": "boolean"
          }
        }
      },
      "PaginatedHistoryResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "total": {
            "type": "integer"
          },
          "page": {
            "type": "integer"
          },
          "pageSize": {
            "type": "integer"
          },
          "totalPages": {
            "type": "integer"
          }
        }
      },
      "PreferencesResponse": {
        "type": "object",
        "properties": {
          "exists": {
            "type": "boolean"
          },
          "preferences": {
            "type": "string"
          }
        }
      },
      "ItemListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "PremiumPlanInfoResponse": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "object",
            "additionalProperties": true
          },
          "api": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "UsPhoneValidateRequest": {
        "type": "object",
        "required": [
          "phone"
        ],
        "properties": {
          "phone": {
            "type": "string",
            "examples": [
              "(415) 555-2671"
            ]
          }
        }
      },
      "UsPhoneValidateResult": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "e164": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "+14155552671"
            ]
          },
          "nationalFormatted": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "(415) 555-2671"
            ]
          },
          "nationalNumber": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "4155552671"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UsPhoneValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/UsPhoneValidateResult"
              }
            }
          }
        ]
      },
      "UsZipValidateRequest": {
        "type": "object",
        "required": [
          "zip"
        ],
        "properties": {
          "zip": {
            "type": "string",
            "examples": [
              "94105-1804"
            ]
          }
        }
      },
      "UsZipValidateResult": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "zip5": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "94105"
            ]
          },
          "zip4": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "1804"
            ]
          },
          "formatted": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "94105-1804"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UsZipValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/UsZipValidateResult"
              }
            }
          }
        ]
      },
      "UsRoutingValidateRequest": {
        "type": "object",
        "required": [
          "routingNumber"
        ],
        "properties": {
          "routingNumber": {
            "type": "string",
            "examples": [
              "021000021"
            ]
          }
        }
      },
      "UsRoutingValidateResult": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "routingNumber": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "021000021"
            ]
          },
          "federalReservePrefix": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "02"
            ]
          },
          "checkDigit": {
            "type": [
              "integer",
              "null"
            ],
            "examples": [
              1
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UsRoutingValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/UsRoutingValidateResult"
              }
            }
          }
        ]
      },
      "UsEinValidateRequest": {
        "type": "object",
        "required": [
          "ein"
        ],
        "properties": {
          "ein": {
            "type": "string",
            "examples": [
              "12-3456789"
            ]
          }
        }
      },
      "UsEinValidateResult": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "ein": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "123456789"
            ]
          },
          "formatted": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "12-3456789"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UsEinValidateEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/UsEinValidateResult"
              }
            }
          }
        ]
      },
      "UsBusinessDaysResult": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "format": "date",
            "examples": [
              "2026-01-02"
            ]
          },
          "end": {
            "type": "string",
            "format": "date",
            "examples": [
              "2026-01-30"
            ]
          },
          "businessDays": {
            "type": "integer",
            "examples": [
              19
            ]
          },
          "calendarDays": {
            "type": "integer",
            "examples": [
              29
            ]
          },
          "weekendDays": {
            "type": "integer",
            "examples": [
              8
            ]
          },
          "federalHolidayDays": {
            "type": "integer",
            "examples": [
              2
            ]
          }
        }
      },
      "UsBusinessDaysEnvelope": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApiEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/UsBusinessDaysResult"
              }
            }
          }
        ]
      }
    }
  }
}